如何使用 Plone 设置复制事件的语言
我正在为我的个人网站使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
自我回答:
LinguaPlone 重写 setLanguage 以移动父链中第一个翻译容器中的内容。
稍微修改一下代码以使用 getField 模式:
警告此代码不会对现有翻译进行任何检查(如果当前对象具有该语言的翻译,则会破坏内容)。但是从一种语言复制粘贴到另一种语言是一个不好的行为,也许我们应该尝试让它们完全失败并引发异常。
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:
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.