i18n: don't use default when updating

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2260 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-12-19 07:38:37 +00:00
parent c03bd7e8ac
commit 8c136ea16b
4 changed files with 15 additions and 5 deletions

View file

@ -329,7 +329,7 @@ class EditObject(FormController, I18NView):
@Lazy @Lazy
def adapted(self): def adapted(self):
return adapted(self.object, self.languageInfo) return adapted(self.object, self.languageInfoForUpdate)
@Lazy @Lazy
def typeInterface(self): def typeInterface(self):

View file

@ -309,6 +309,7 @@ class NodeView(BaseView):
obj = self.virtualTargetObject obj = self.virtualTargetObject
if obj is not None: if obj is not None:
basicView = zapi.getMultiAdapter((obj, self.request)) basicView = zapi.getMultiAdapter((obj, self.request))
if obj == self.targetObject:
basicView._viewName = self.context.viewName basicView._viewName = self.context.viewName
return basicView.view return basicView.view

View file

@ -39,9 +39,10 @@ i18n_macros = ViewPageTemplateFile('i18n_macros.pt')
class LanguageInfo(object): class LanguageInfo(object):
def __init__(self, context, request): def __init__(self, context, request, allowDefault=True):
self.context = context self.context = context
self.request = request self.request = request
self.allowDefault = allowDefault
@Lazy @Lazy
def loopsRoot(self): def loopsRoot(self):
@ -76,6 +77,10 @@ class I18NView(object):
def languageInfo(self): def languageInfo(self):
return LanguageInfo(self.context, self.request) return LanguageInfo(self.context, self.request)
@Lazy
def languageInfoForUpdate(self):
return LanguageInfo(self.context, self.request, False)
@Lazy @Lazy
def useI18NForEditing(self): def useI18NForEditing(self):
return (self.languageInfo.availableLanguages return (self.languageInfo.availableLanguages

View file

@ -68,20 +68,24 @@ def getI18nValue(obj, attr, langInfo=None):
if isinstance(value, I18NValue): if isinstance(value, I18NValue):
if langInfo: if langInfo:
result = value.get(langInfo.language, _not_found) result = value.get(langInfo.language, _not_found)
if result is _not_found: if result is _not_found and langInfo.allowDefault:
result = value.get(langInfo.defaultLanguage, _not_found) result = value.get(langInfo.defaultLanguage, _not_found)
if result is _not_found: if result is _not_found:
result = value.getDefault() result = value.getDefault()
return result return result
else: else:
return value.getDefault() return value.getDefault()
if langInfo is None or langInfo.allowDefault:
return value return value
return None
def setI18nValue(obj, attr, value, langInfo=None): def setI18nValue(obj, attr, value, langInfo=None):
obj = removeSecurityProxy(obj) obj = removeSecurityProxy(obj)
old = getattr(obj, attr, None) old = getattr(obj, attr, None)
if langInfo is None: if langInfo is None:
if isinstance(old, I18NValue): if isinstance(old, I18NValue):
# TODO (?): Just replace the value corresponding to
# that of the default language
raise ValueError('Attribute %s on object %s is an I18NValue (%s) ' raise ValueError('Attribute %s on object %s is an I18NValue (%s) '
'and no langInfo given.' % (attr, obj, value)) 'and no langInfo given.' % (attr, obj, value))
else: else: