Как установить язык для скопированного события с 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'])

Предупреждение, этот код не выполняет никакой проверки уже существующего перевода (если текущий объект имеет перевод на этот язык, он сломает вещи). но копирование с одного языка на другой - это плохое действие, может быть, мы должны попытаться заставить их вообще потерпеть неудачу с исключением повышения.

Другие вопросы по тегам