1

我正在使用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

4

1 回答 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'])

警告此代码不会对已经存在的翻译进行任何检查(如果当前对象有该语言的翻译,它将破坏事物)。但是从一种语言复制粘贴到另一种语言是一个不好的行为,也许我们应该尝试让它们完全失败并引发异常。

于 2011-09-21T08:30:11.530 回答