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

如何使用Plone设置复制事件的语言,plone,linguaplone,Plone,Linguaplone,我正在为我的个人网站使用LinguaPlone,我已经设置了使用语言文件夹 当我尝试将图像从en language文件夹复制并粘贴到'fr'文件夹时,该语言不会更改。所以我想修正这个行为 我正在尝试用我自己的代码修复这个问题,但我不知道为什么它不起作用 所以问题是:我如何做到这一点?我在做这件事的好方法上吗?这里少了什么 from zope import component from zope.globalrequest import getRequest def updatelang(ob,

我正在为我的个人网站使用
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\u catalog
上抛出一个属性错误

请注意,我正在编写Plone4.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'])
警告:此代码不检查已经存在的翻译(如果当前对象有该语言的翻译,它将破坏内容)。但是从一种语言复制粘贴到另一种语言是一种不好的行为,可能是我们应该尝试让它们失败,并引发一个异常。

自我回答:

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

警告:此代码不检查已经存在的翻译(如果当前对象有该语言的翻译,它将破坏内容)。但是从一种语言复制粘贴到另一种语言是一种不好的行为,可能是我们应该尝试使用raise异常使它们完全失败。

如果出现异常,提供回溯总是有帮助的-如果您遇到异常,PIt提供回溯总是很有帮助的:-P