如何使用Plone设置复制事件的语言

时间:2011-09-20 20:02:25

标签: plone linguaplone

我在我的个人网站上使用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 个答案:

答案 0 :(得分: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'])

警告此代码不对现有翻译进行任何检查(如果当前对象具有该语言的翻译,则会破坏事物)。但是从一种语言到另一种语言进行复制粘贴是一种不好的行为,可能我们应该尝试使它们在加注异常时失败。