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):
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):

View file

@ -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

View file

@ -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" />

View file

@ -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));

View file

@ -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"

View file

@ -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)

View file

@ -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])

View file

@ -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)

View file

@ -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')