Как установить язык для скопированного события с Plone - PullRequest
1 голос
/ 21 сентября 2011

Я использую LinguaPlone для своего личного веб-сайта и настроил его с помощью папки языков.

Когда я пытаюсь скопировать и вставить изображение из папки на языке en в папку '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 Ответ

1 голос
/ 21 сентября 2011

Самостоятельный ответ:

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'])

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

...