Как установить язык для скопированного события с Plone
Я использую LinguaPlone
для моего личного сайта, и я настроил его с помощью папки языков.
Когда я пытаюсь скопировать и вставить изображение из папки en language в папку 'fr', язык не меняется. Поэтому я хочу исправить это поведение.
Сейчас я пытаюсь исправить это в своем собственном коде, но я просто не знаю, почему это не работает.
Итак, вопрос: как мне этого добиться? я нахожусь на хорошем способе сделать это? чего здесь не хватает?
from zope import component
from zope.globalrequest import getRequest
def updatelang(ob, event):
current = event.object
tools = component.getMultiAdapter((ob, getRequest()), name=u'plone_portal_state')
current_lang = current.getLanguage()
lang = tools.language()
if current_lang != lang:
current_object.setLanguage(lang)
ob.reindexObject(idxs=['Language'])
setLanguage
вызов вызывает ошибку атрибута reference_catalog
,
Обратите внимание, я работаю над Plone4.1
1 ответ
Самостоятельный ответ:
LinguaPlone переопределяет setLanguage для перемещения содержимого в первом переведенном контейнере в родительской цепочке.
Немного измените код для использования шаблона getField:
from zope import component
from zope.globalrequest import getRequest
def updatelang(ob, event):
current = event.object
tools = component.getMultiAdapter((ob, getRequest()), name=u'plone_portal_state')
current_lang = current.getLanguage()
lang = tools.language()
if current_lang != lang:
current.getField('language').set(current, lang)
current.reindexObject(idxs=['Language'])
Предупреждение, этот код не выполняет никакой проверки уже существующего перевода (если текущий объект имеет перевод на этот язык, он сломает вещи). но копирование с одного языка на другой - это плохое действие, может быть, мы должны попытаться заставить их вообще потерпеть неудачу с исключением повышения.