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
def adapted(self):
return adapted(self.object, self.languageInfo)
return adapted(self.object, self.languageInfoForUpdate)
@Lazy
def typeInterface(self):

View file

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

View file

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

View file

@ -68,20 +68,24 @@ def getI18nValue(obj, attr, langInfo=None):
if isinstance(value, I18NValue):
if langInfo:
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)
if result is _not_found:
result = value.getDefault()
return result
else:
return value.getDefault()
return value
if langInfo is None or langInfo.allowDefault:
return value
return None
def setI18nValue(obj, attr, value, langInfo=None):
obj = removeSecurityProxy(obj)
old = getattr(obj, attr, None)
if langInfo is None:
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) '
'and no langInfo given.' % (attr, obj, value))
else: