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

发布于 2024-12-06 03:57:01 字数 733 浏览 1 评论 0原文

我正在为我的个人网站使用 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 上工作

I'm using LinguaPlone for my personal website and I have set it up using languages folder.

When I try to copy and paste an image from the en language folder into the 'fr' folder, the language is not changed. So I want to fix this behavior.

I'm trying to fix this at the moment in my own code but I just don't know why it doesn't work.

So the question is: how do I achieve this ? am I on the good way to do this ? what is missing here ?

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

The setLanguage call throws an attribute error on reference_catalog.

Note, I'm working on Plone4.1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

栀梦 2024-12-13 03:57:01

自我回答:

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

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

Self answer:

LinguaPlone override setLanguage to move the content in the first translated container in the parent chain.

Modify a bit the code to use getField pattern:

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

Warning this code doesn do any check on already existing translation (if the current object has a translation in that language it will break things). but doing copy paste from one language to the other is a bad action, may be we should try to make them fail at all with a raise exception.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文