在Plone中创建、关联和管理多语言内容!
项目描述
此插件提供了对多语言内容(多语言)的支持。它与Plone 4.2或更高版本兼容,仅限于Dexterity内容。
跳转到历史以了解其他提供类似功能的插件。
发现错误?请使用问题跟踪器。
用法
要将内容类型变为多语言感知,请使用控制面板启用“多语言”行为。
主要交互是通过一个新菜单“翻译”进行的,该菜单适用于已启用行为的任何内容项。
翻译菜单列出每个支持的语言,并提供到默认视图(如果已翻译)或添加表单的链接。
如果不存在所选语言的文件夹(见下文),用户将被提示首先使用“设置语言文件夹”表单创建一个。在大多数情况下,用户可以直接点击到添加表单:提供合理的表单默认值。
多语言Plone
出厂时,Plone支持一种语言设置,其中默认语言位于根目录
/ ⇐ 默认内容
这同样也是语言中立内容的根。对于其他语言,在这个设置中的内容位于
/<语言标识>/ ⇐ 其他语言的内容
语言标识是两字母的国家代码。例如,对于丹麦,这是"da"。
我们将这些称为语言文件夹。Plone可以被设置成在用户访问其下包含的页面时,自动将整个用户界面的语言切换到该语言文件夹的语言。
设置语言文件夹
您可以手动设置语言文件夹,或者使用“设置语言文件夹”表单,该表单在您尝试为不存在语言文件夹的语言内容添加翻译时显示。
在两种情况下,您都可以使用任何类型为“容器”(可以包含其他项)的内容类型。这通常是一个文件夹。最常用的容器类型将由“设置语言文件夹”表单建议。
请注意,语言文件夹是一个导航根。INavigationRoot接口自动添加为标记接口,以向Plone的用户界面发出信号。在实际情况中,这意味着例如导航小部件将使用语言文件夹作为“根”内容项。
默认页面的翻译
在Plone中,可以为容器选择一个默认页面,在这种情况下,页面将作为默认视图显示,而不是容器。
由于Plone的用户界面显示单个界面用于组合容器和默认页面,我们需要在翻译默认页面之前先翻译容器。
翻译关系
记录内容之间翻译关系的数结构是一个有向无环图
每个顶点都是一个内容项,边是从一种语言到另一种语言的翻译。例如,原始英文内容可能首先被翻译成德语,然后从这个翻译中翻译成法语。这将是一个有三个顶点和两个边的图。
在内容模型中,这被实现为translations集合关系,其中UUID(全球唯一标识符)用作内容项参考值。
Plone自带一个行为,为内容项添加语言设置,并且必须启用此行为才能翻译内容。
API
接口ITranslationGraph提供对提供IMultilingual接口(由“多语言”行为实现)的上下文翻译图的视图。
对于每个内容对象(以下将称为上下文),我们可以将图转换为语言标识到内容对象的映射,每个内容对象都是某种翻译中的上下文。
>>> graph = ITranslationGraph(context) >>> translations = graph.getTranslations()
返回的translations是一个包含(language_id, content)的列表,我们可以将其传递给dict构造函数,将其转换为映射对象。请注意,上下文被省略了。
>>> mapping = dict(translations)
对于某些应用程序,我们希望为支持的每种语言建立关系,以便用户或访客可以到达支持的语言中出现的最近的内容对象。在这种情况下,最近将定义为最近的祖先翻译。
>>> nearest = graph.getNearestTranslations()
nearest映射用于生成“翻译”菜单,允许贡献者或编辑器在不同翻译之间导航。
它还用于语言选择小部件,当启用基于cookie的语言选择时在Plone中显示(有关更多信息,请参阅语言工具)。
历史记录
2004年,Jarn(原名Plone Solutions)发布了LinguaPlone,尽管它与最新的Plone版本仍然兼容,但现在已处于遗产状态。如果您只有Archetypes内容,建议您使用此软件包。
2005年,Ramon Navarro Bosch r.navarro@iskra.cat在Girona组织了一次关于Plone多语言内容的sprint活动。想法是利用来自Zope Toolkit的组件架构(即zope.interface和zope.component)来构建一个能够真实支持多语言内容不同需求的架构。这个架构的实现是一个持续的过程,但截至本文撰写时,已可提供测试的beta版本。plone.app.multilingual(或PAM)引入了所需的依赖项。
请注意,PAM同时支持Archetypes和Dexterity内容。它还试图提供LinguaPlone的用户体验,以便熟悉Plone先前版本中此附加组件的用户能够快速使用它。
常见问题解答
collective.multilingual与plone.multilingual如何比较?
此附加组件是一个全新的实现。它是现有解决方案的替代品。
最重要的区别是collective.multilingual是为Plone 4构建的。它充分利用了此发布中包含的新功能。
较新的平台使实现变得简单,这不仅是一件好事,还使社区维护软件变得容易得多。
另一个关键的区别是较少的功能。没有比较视图,也没有与外部翻译工具的集成。我们并不是不想“功能完善”,但其中一些功能已经由网络浏览器提供,尝试在Plone中实现这些功能不一定是一件好事。
简而言之,如果您不使用Archetypes内容类型框架(如果您有选择,您真的不应该这样做),那么collective.multilingual可能会很好地工作。
什么是规范项目?
这是一个使用Plone的添加菜单创建的项目,并已翻译成一种或多种语言。
我必须为我的内容设置语言吗?
不。如果您不设置语言字段,则语言被认为是中性的。在任意时刻,这实际上意味着网站默认语言。
我可以有与语言无关的字段吗?
是的。您可以为标记值"plone.autoform.languageindependent"设置True值或使用包含的实用函数
from collective.multilingual.interfaces import setLanguageIndependent from plone.app.dexterity.behaviors.metadata import IDublinCore setLanguageIndependent( IDublinCore['contributors'], IDublinCore['creators'], IDublinCore['rights'], )这不是一个例子。这些字段实际上是设置为与语言无关的。
请注意,当字段与语言无关时,更改将复制到相应翻译图中的所有内容项。
新创建的内容的语言是什么?
Plone中有一个设置,用于决定这是未设置(中性)还是设置为当前默认语言。
如果使用翻译菜单创建内容,则将自动提供语言表默认值。
更改
2.0(未发布)
当Zope提供的本地化列表没有提供时,回退到英语语言名称。[malthe]
支持Plone 5.2和Python 3。[thet]
语言切换器:不要为当前语言渲染链接。[thet]
1.0.1 (2016-03-30)
修复了更新多次的控件会导致循环翻译引用的问题。[malthe]
修复了将内容翻译成默认语言时会忽略翻译父项并将新翻译放在网站根目录的问题。[tmog]
始终显示“清除…”和“这是…的翻译”菜单项,即使上下文是默认页面。[tmog]
检查以确保我们不会为一种语言添加多个翻译。即使一个是中性的而另一个不是。[tmog]
初始公开发布。
项目详情
collective.multilingual-2.0.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 109d98248e5f8f5954a806b90c181e4badc549afb6a0ebdbb0e4b9aa0d7f0f2d |
|
MD5 | cf000ccbbdd505c1f683b620481ae981 |
|
BLAKE2b-256 | 1cbfb6298f696e6c31cd7031f3feae6c877f2b60d2773454e419501480e9a711 |