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:
helmutm 2007-12-14 08:46:05 +00:00
parent 10bae7f32d
commit 0a691deed0
9 changed files with 35 additions and 12 deletions

View file

@ -166,17 +166,23 @@ class BaseView(GenericView, I18NView):
def token(self): def token(self):
return self.loopsRoot.getLoopsUri(self.context) return self.loopsRoot.getLoopsUri(self.context)
@Lazy
def adapted(self):
return adapted(self.context, self.languageInfo)
@Lazy @Lazy
def title(self): def title(self):
return self.context.title or getName(self.context) return self.adapted.title or getName(self.context)
@Lazy @Lazy
def description(self): def description(self):
return adapted(self.context).description return self.adapted.description
@Lazy @Lazy
def dcTitle(self): 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 @Lazy
def headTitle(self): def headTitle(self):

View file

@ -60,6 +60,10 @@ class ConceptEditForm(EditForm, I18NView):
def typeInterface(self): def typeInterface(self):
return IType(self.context).typeInterface return IType(self.context).typeInterface
@Lazy
def title(self):
return adapted(self.context, self.languageInfo).title
@property @property
def form_fields(self): def form_fields(self):
typeInterface = self.typeInterface typeInterface = self.typeInterface

View file

@ -6,7 +6,7 @@
tal:define="langInfo view/languageInfo; tal:define="langInfo view/languageInfo;
languages langInfo/availableLanguages; languages langInfo/availableLanguages;
language langInfo/language; language langInfo/language;
useI18N view/useI18N; useI18N view/useI18NForEditing;
innerForm request/inner_form | string:inner_concept_edit_form.html;"> innerForm request/inner_form | string:inner_concept_edit_form.html;">
<input type="hidden" name="form.action" value="edit" <input type="hidden" name="form.action" value="edit"
tal:attributes="value view/form_action" /> tal:attributes="value view/form_action" />

View file

@ -100,7 +100,7 @@ function inlineEdit(id, saveUrl) {
function setConceptTypeForComboBox(typeId, cbId) { function setConceptTypeForComboBox(typeId, cbId) {
var t = dojo.byId(typeId).value; 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 dp = cb.dataProvider;
var baseUrl = dp.searchUrl.split('&')[0]; var baseUrl = dp.searchUrl.split('&')[0];
var newUrl = baseUrl + '&searchType=' + t; var newUrl = baseUrl + '&searchType=' + t;
@ -117,7 +117,8 @@ function objectDialog(dlgName, url) {
if (!dlg) { if (!dlg) {
//dlg = dojo.widget.fromScript('Dialog', //dlg = dojo.widget.fromScript('Dialog',
dlg = dojo.widget.createWidget('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, executeScripts: true,
href: url href: url
}, dojo.byId('dialog.' + dlgName)); }, dojo.byId('dialog.' + dlgName));

View file

@ -45,7 +45,7 @@ function toggleFormFieldHelp(ob,state) {
i18n:translate="heading_editform" i18n:translate="heading_editform"
metal:define-slot="heading">Edit metal:define-slot="heading">Edit
<span i18n:name="title" <span i18n:name="title"
tal:content="context/title|context/zope:name">Concept</span> tal:content="view/title|context/zope:name">Concept</span>
</h1> </h1>
<h1 tal:condition="view/label" <h1 tal:condition="view/label"

View file

@ -108,12 +108,15 @@ class LoopsDCAdapter(ZDCAnnotatableAdapter):
implements(IZopeDublinCore) implements(IZopeDublinCore)
adapts(ILoopsObject) adapts(ILoopsObject)
languageInfo = None
def __init__(self, context): def __init__(self, context):
self.context = context self.context = context
super(LoopsDCAdapter, self).__init__(context) super(LoopsDCAdapter, self).__init__(context)
def Title(self): 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): def setTitle(self, value):
ScalarProperty(u'Title').__set__(self, value) ScalarProperty(u'Title').__set__(self, value)
title = property(Title, setTitle) title = property(Title, setTitle)

View file

@ -77,7 +77,7 @@ class I18NView(object):
return LanguageInfo(self.context, self.request) return LanguageInfo(self.context, self.request)
@Lazy @Lazy
def useI18N(self): def useI18NForEditing(self):
return (self.languageInfo.availableLanguages return (self.languageInfo.availableLanguages
and getattr(self.adapted, 'i18nAttributes', None)) and getattr(self.adapted, 'i18nAttributes', None))
@ -93,7 +93,7 @@ class I18NView(object):
def setLanguage(self, lang=None): def setLanguage(self, lang=None):
lang = lang or self.request.form.get('lang') lang = lang or self.request.form.get('lang')
if lang: if lang and lang in self.languageInfo.availableLanguages:
upl = IUserPreferredLanguages(self.request) upl = IUserPreferredLanguages(self.request)
upl.setPreferredLanguages([lang]) upl.setPreferredLanguages([lang])

View file

@ -55,6 +55,12 @@ class I18NValue(PersistentMapping):
def __str__(self): def __str__(self):
return str(self.getDefault()) return str(self.getDefault())
#def __unicode__(self):
# return unicode(self.getDefault())
#def __repr__(self):
# return repr(self.getDefault())
def getI18nValue(obj, attr, langInfo=None): def getI18nValue(obj, attr, langInfo=None):
obj = removeSecurityProxy(obj) obj = removeSecurityProxy(obj)

View file

@ -34,6 +34,7 @@ from cybertools.ajax import innerHtml
from cybertools.relation.interfaces import IRelationRegistry from cybertools.relation.interfaces import IRelationRegistry
from cybertools.typology.interfaces import ITypeManager from cybertools.typology.interfaces import ITypeManager
from loops.browser.common import BaseView from loops.browser.common import BaseView
from loops.common import adapted
from loops.query import ConceptQuery, FullQuery from loops.query import ConceptQuery, FullQuery
from loops import util from loops import util
from loops.util import _ from loops.util import _
@ -75,7 +76,8 @@ class Search(BaseView):
def conceptsForType(self, token): def conceptsForType(self, token):
noSelection = dict(token='none', title=u'not selected') noSelection = dict(token='none', title=u'not selected')
result = sorted(ConceptQuery(self).query(type=token), key=lambda x: x.title) 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] for o in result]
def initDojo(self): def initDojo(self):
@ -94,7 +96,8 @@ class Search(BaseView):
result = ConceptQuery(self).query(title=title, type=type, exclude=('system',)) result = ConceptQuery(self).query(title=title, type=type, exclude=('system',))
#registry = component.getUtility(IRelationRegistry) #registry = component.getUtility(IRelationRegistry)
# simple way to provide JSON format: # 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))`] `int(util.getUidForObject(o))`]
for o in result for o in result
if o.getLoopsRoot() == self.loopsRoot])).replace('\\\\x', '\\x') if o.getLoopsRoot() == self.loopsRoot])).replace('\\\\x', '\\x')