i18n improvements, esp make DC adapter i18n-aware
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2242 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
10bae7f32d
commit
0a691deed0
9 changed files with 35 additions and 12 deletions
|
@ -166,17 +166,23 @@ class BaseView(GenericView, I18NView):
|
|||
def token(self):
|
||||
return self.loopsRoot.getLoopsUri(self.context)
|
||||
|
||||
@Lazy
|
||||
def adapted(self):
|
||||
return adapted(self.context, self.languageInfo)
|
||||
|
||||
@Lazy
|
||||
def title(self):
|
||||
return self.context.title or getName(self.context)
|
||||
return self.adapted.title or getName(self.context)
|
||||
|
||||
@Lazy
|
||||
def description(self):
|
||||
return adapted(self.context).description
|
||||
return self.adapted.description
|
||||
|
||||
@Lazy
|
||||
def dcTitle(self):
|
||||
return IZopeDublinCore(self.context).title or self.title
|
||||
zdc = IZopeDublinCore(self.context)
|
||||
zdc.languageInfo = self.languageInfo
|
||||
return zdc.title or self.title
|
||||
|
||||
@Lazy
|
||||
def headTitle(self):
|
||||
|
|
|
@ -60,6 +60,10 @@ class ConceptEditForm(EditForm, I18NView):
|
|||
def typeInterface(self):
|
||||
return IType(self.context).typeInterface
|
||||
|
||||
@Lazy
|
||||
def title(self):
|
||||
return adapted(self.context, self.languageInfo).title
|
||||
|
||||
@property
|
||||
def form_fields(self):
|
||||
typeInterface = self.typeInterface
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
tal:define="langInfo view/languageInfo;
|
||||
languages langInfo/availableLanguages;
|
||||
language langInfo/language;
|
||||
useI18N view/useI18N;
|
||||
useI18N view/useI18NForEditing;
|
||||
innerForm request/inner_form | string:inner_concept_edit_form.html;">
|
||||
<input type="hidden" name="form.action" value="edit"
|
||||
tal:attributes="value view/form_action" />
|
||||
|
|
|
@ -100,7 +100,7 @@ function inlineEdit(id, saveUrl) {
|
|||
|
||||
function setConceptTypeForComboBox(typeId, cbId) {
|
||||
var t = dojo.byId(typeId).value;
|
||||
var cb = dojo.widget.manager.getWidgetById(cbId)
|
||||
var cb = dojo.widget.manager.getWidgetById(cbId);
|
||||
var dp = cb.dataProvider;
|
||||
var baseUrl = dp.searchUrl.split('&')[0];
|
||||
var newUrl = baseUrl + '&searchType=' + t;
|
||||
|
@ -117,7 +117,8 @@ function objectDialog(dlgName, url) {
|
|||
if (!dlg) {
|
||||
//dlg = dojo.widget.fromScript('Dialog',
|
||||
dlg = dojo.widget.createWidget('Dialog',
|
||||
{bgColor: 'white', bgOpacity: 0.5, toggle: 'fade', toggleDuration: 250,
|
||||
{bgColor: 'white', bgOpacity: 0.5, toggle: 'fade',
|
||||
toggleDuration: 250,
|
||||
executeScripts: true,
|
||||
href: url
|
||||
}, dojo.byId('dialog.' + dlgName));
|
||||
|
|
|
@ -45,7 +45,7 @@ function toggleFormFieldHelp(ob,state) {
|
|||
i18n:translate="heading_editform"
|
||||
metal:define-slot="heading">Edit
|
||||
<span i18n:name="title"
|
||||
tal:content="context/title|context/zope:name">Concept</span>
|
||||
tal:content="view/title|context/zope:name">Concept</span>
|
||||
</h1>
|
||||
|
||||
<h1 tal:condition="view/label"
|
||||
|
|
|
@ -108,12 +108,15 @@ class LoopsDCAdapter(ZDCAnnotatableAdapter):
|
|||
implements(IZopeDublinCore)
|
||||
adapts(ILoopsObject)
|
||||
|
||||
languageInfo = None
|
||||
|
||||
def __init__(self, context):
|
||||
self.context = context
|
||||
super(LoopsDCAdapter, self).__init__(context)
|
||||
|
||||
def Title(self):
|
||||
return super(LoopsDCAdapter, self).title or self.context.title
|
||||
return (super(LoopsDCAdapter, self).title
|
||||
or adapted(self.context, self.languageInfo).title)
|
||||
def setTitle(self, value):
|
||||
ScalarProperty(u'Title').__set__(self, value)
|
||||
title = property(Title, setTitle)
|
||||
|
|
|
@ -77,7 +77,7 @@ class I18NView(object):
|
|||
return LanguageInfo(self.context, self.request)
|
||||
|
||||
@Lazy
|
||||
def useI18N(self):
|
||||
def useI18NForEditing(self):
|
||||
return (self.languageInfo.availableLanguages
|
||||
and getattr(self.adapted, 'i18nAttributes', None))
|
||||
|
||||
|
@ -93,7 +93,7 @@ class I18NView(object):
|
|||
|
||||
def setLanguage(self, lang=None):
|
||||
lang = lang or self.request.form.get('lang')
|
||||
if lang:
|
||||
if lang and lang in self.languageInfo.availableLanguages:
|
||||
upl = IUserPreferredLanguages(self.request)
|
||||
upl.setPreferredLanguages([lang])
|
||||
|
||||
|
|
|
@ -55,6 +55,12 @@ class I18NValue(PersistentMapping):
|
|||
def __str__(self):
|
||||
return str(self.getDefault())
|
||||
|
||||
#def __unicode__(self):
|
||||
# return unicode(self.getDefault())
|
||||
|
||||
#def __repr__(self):
|
||||
# return repr(self.getDefault())
|
||||
|
||||
|
||||
def getI18nValue(obj, attr, langInfo=None):
|
||||
obj = removeSecurityProxy(obj)
|
||||
|
|
|
@ -34,6 +34,7 @@ from cybertools.ajax import innerHtml
|
|||
from cybertools.relation.interfaces import IRelationRegistry
|
||||
from cybertools.typology.interfaces import ITypeManager
|
||||
from loops.browser.common import BaseView
|
||||
from loops.common import adapted
|
||||
from loops.query import ConceptQuery, FullQuery
|
||||
from loops import util
|
||||
from loops.util import _
|
||||
|
@ -75,7 +76,8 @@ class Search(BaseView):
|
|||
def conceptsForType(self, token):
|
||||
noSelection = dict(token='none', title=u'not selected')
|
||||
result = sorted(ConceptQuery(self).query(type=token), key=lambda x: x.title)
|
||||
return [noSelection] + [dict(title=o.title, token=util.getUidForObject(o))
|
||||
return [noSelection] + [dict(title=adapted(o, self.languageInfo).title,
|
||||
token=util.getUidForObject(o))
|
||||
for o in result]
|
||||
|
||||
def initDojo(self):
|
||||
|
@ -94,7 +96,8 @@ class Search(BaseView):
|
|||
result = ConceptQuery(self).query(title=title, type=type, exclude=('system',))
|
||||
#registry = component.getUtility(IRelationRegistry)
|
||||
# simple way to provide JSON format:
|
||||
return str(sorted([[`o.title`[2:-1] + ' (%s)' % `o.conceptType.title`[2:-1],
|
||||
return str(sorted([[`adapted(o, self.languageInfo).title`[2:-1]
|
||||
+ ' (%s)' % `o.conceptType.title`[2:-1],
|
||||
`int(util.getUidForObject(o))`]
|
||||
for o in result
|
||||
if o.getLoopsRoot() == self.loopsRoot])).replace('\\\\x', '\\x')
|
||||
|
|
Loading…
Add table
Reference in a new issue