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):
|
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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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" />
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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])
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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')
|
||||||
|
|
Loading…
Add table
Reference in a new issue