管理和维护与Plone无缝集成的多语言内容。
项目描述
简介
LinguaPlone是Plone的多语言/翻译解决方案,通过尽可能透明和最小化对现有应用程序和Plone自身的影响来实现这一点。
它利用Archetypes引用引擎进行翻译,安装和卸载时所有内容都保持完好无损,因此不会以任何方式破坏您的内容结构。
LinguaPlone不需要特定的内容层次结构,理论上可以与您内容空间中的任何布局一起工作,尽管安装说明中宣传的默认布局会使网站更容易使用。
LinguaPlone的一些好处
完全透明,安装即可使用。
每个翻译都是一个独立的对象,可以单独进行工作流处理。
使用AT引用跟踪翻译。
您可以在不影响LinguaPlone外操作的情况下,为您的类型启用多语言。
即使在添加多语言内容后卸载LinguaPlone,您的内容也将保持完好无损,并将作为独立对象工作!唯一不活动的是对象之间的引用。如果您重新安装它,它们将恢复。它非常不具侵入性。
支持多语言功能是您Archetypes类的4 (!) 行添加,并且在LinguaPlone外使用时不会改变类的功能。
完全集成ATContentTypes,因此基本内容类型是可翻译的。
支持语言无关字段(例如:日期,姓名),对于您希望在翻译中保持相同的字段,并在其中一个更改时更新所有语言。
使用规范版本的概念,因此您可以进行有趣的工作流操作,例如在主副本更改时使文档的所有翻译无效。
安装
通过将其添加到buildout或将它作为策略包的依赖项添加到您的Plone环境中安装LinguaPlone,并重新运行buildout。
接下来添加一个新的Plone网站,并选择LinguaPlone插件。请确保指定您网站的主语言。继续到语言控制面板并指定您想要支持的所有其他语言。
通过在您的Plone网站根目录上调用@@language-setup-folders来准备内容结构,例如
https://127.0.0.1:8080/Plone/@@language-setup-folders
您可能想要通过访问来清理默认内容或将其移动
https://127.0.0.1:8080/Plone/folder_contents
并删除事件、新闻和用户文件夹。
如果您正在将现有网站迁移到使用LinguaPlone,您可能需要在执行@@language-setup-folders之后使用特殊的URL技巧来揭示旧语言内容以便复制粘贴。
示例:如何访问多语言文件夹列表
https://127.0.0.1:8080/Plone/folder_contents?set_language=fi
使用 manage_translation_form 直接链接来构建顶级文件夹语言链接。例如:
https://127.0.0.1:8080/Plone//en/manage_translations_form
按照所有这些步骤,您就拥有了一个构建多语言网站的起点。每个语言文件夹是否具有相同的网站结构取决于您和您的需求。通过使用顶级语言文件夹,每个URL都对应于一种精确的语言,这对搜索引擎很有好处,并且使缓存变得更加容易。这也意味着您不需要包含混合语言的文件夹,这对编辑器的可用性有很大提升,因为他们不必在同一个文件夹中切换语言,只是为了查看是否有更多内容。
Plone 网站根目录是这里的唯一例外,并设置了一个默认视图的语言切换器,该视图执行语言协商并将用户重定向到正确的URL。
升级
如果您正在升级 LinguaPlone,可能需要进行升级步骤。请检查“插件”控制面板。
卸载
如果您不再想使用 LinguaPlone,您可以从您的网站上移除它。
首先,您需要在插件控制面板中停用 LinguaPlone。完成后,您可以从文件系统中移除 Plone 环境中的 LinguaPlone。如果您忘记执行停用步骤,请暂时将 LinguaPlone 添加回来并正确停用。否则,您可能无法使用带有与 SyncedLanguages 工具相关的错误的网站。
常见问题
我没有看到语言标志,切换语言也不起作用
如果未启用cookie语言协商方案,就会发生这种情况。查看ZMI中的 portal_languages 工具,并检查 Use cookie for manual override 是否启用。
如果语言选择链接指向包含 switchLanguage 的URL,则核心Plone的错误语言选择器是激活的。前往控制面板,并检查您是否可以在语言控制面板中选择多个语言。如果您不能,则说明 LinguaPlone 没有正确安装。
如果您只能选择多个语言,则语言选择器视图小部件是错误的。确保您没有自定义视图小部件并将其放入不同的视图小部件管理器。视图小部件仅注册为 plone.app.layout.viewlets.interfaces.IPortalHeader 管理器。您还需要将 LinguaPlone/browser/configure.zcml 中的 languageselector 视图小部件注册到您的新视图小部件管理器。
开发者使用
您可以通过启用现有AT内容类型的双语功能(请参阅下面说明)或通过测试简单内置类型来测试它。不要忘记在语言控制面板中选择应可用的语言。
实现细节
架构
LinguaPlone 仅可与基于Archetypes的内容类型一起使用。它提供了一个实现 ITranslatable 接口的 I18NBaseObject 类来处理翻译链接。LinguaPlone 提供从 I18NBaseObject 继承并具有常规 AT 基类的基础类。
语言无关字段
语言无关字段从规范(原始)翻译中查找。
该值还存储在每个翻译对象上,因此每个对象都有每个属性,以防它从翻译上下文中移出或某些属性(如事件的开始和结束)被直接引用。
语言独立性在 AT 架构定义中设置。只有基于 AT 的内容类型才能具有语言无关字段。
语言查找
语言工具返回要查找的语言列表。如果没有回退,则列表中只有一个元素。
在您的内容类型中启用多语言支持
在顶部,而不是 from Products.Archetypes.atapi import *,您添加
try: from Products.LinguaPlone import atapi except ImportError: # No multilingual support from Products.Archetypes import atapi
对于语言无关的字段,您在 Archetypes 架构定义中添加 languageIndependent=True。
示例
atapi.StringField( 'myField', widget=atapi.StringWidget( .... ), languageIndependent=True ),
只有当您的内容类型使用上述方式描述的LinguaPlone导入时,语言无关字段才能在相关翻译之间正确共享。
有关更多LinguaPlone相关编程示例,请参阅Plone开发者文档中的翻译内容。
开发者信息
许可协议
GNU通用公共许可证,版本2
常见问题
- LinguaPlone可以用作翻译内容吗?
是的,这正是它被开发的原因。
- LinguaPlone可以用作翻译Plone界面吗?
不,Plone界面翻译由Plone本身处理。
- LinguaPlone支持文件夹翻译吗?
是的,文件夹和非文件夹内容类型都可以进行翻译。
- LinguaPlone是如何跟踪翻译的?
它使用Archetypes引用来链接项目。每个翻译都有一个指向“规范”项目的引用。
- 什么是“规范”项目?
它是创建所有翻译的原始内容。所有翻译都有一个指向它的引用。
- 我可以有语言无关的项目吗?
是的,每个未显式设置语言的项都将被视为语言无关(中性),并在所有搜索和导航中显示。
- 我可以有语言无关的字段吗?
是的。查看“languageIndependent”架构定义的示例类型。理想用于日期和名称等所有翻译都应有相同文本的内容。语言无关的值只能编辑在规范项目中,而不能在翻译中编辑。
- 新创建的内容的语言是什么?
所有内容最初都是在您当前的语言中创建的。如果您希望它是语言无关的(中性),您必须在语言控制面板中显式设置此选项。
- 翻译内容会发生什么?
您将看到一个屏幕,您可以在其中选择原始内容和翻译的语言。此屏幕还显示了规范项目的内容,以便您可以看到每个字段的原始文本。
- 翻译文件夹会发生什么?
将创建一个新的文件夹,其语言为所选语言。此外,原始文件夹中当前具有相同语言的所有内容也将自动移动到新文件夹中。
- 翻译文件夹的默认视图会发生什么?
默认视图是直接访问文件夹时选择显示的内容。在这种情况下,翻译时,LinguaPlone首先为文件夹创建一个翻译,然后是内容。
- 为什么目录搜索现在只返回当前语言的内容?
对于所有语言感知项目(基本上,每个设置了语言变量的项目),LinguaPlone将过滤掉与当前语言不相关的所有内容。这样做是为了有一个一致的、一次一个语言网站。在网站上混合语言是一个非常糟糕的想法,并且非常不可预测。
- 所以我不能在其它任何语言中进行搜索吗?
当然可以,但您必须通过在搜索时指定“Language=all”来显式请求它。
- 我可以在内容初始创建后更改内容语言吗?
是的,但您只能将语言更改为未翻译的其中一种。您不能为同一内容有两个具有相同语言翻译。在更改内容语言时,如果父文件夹已经被翻译,LinguaPlone会将内容移动到具有相同语言的文件夹中。
- 我该如何更改内容语言?
“分类”标签和“管理翻译”菜单项都允许您更改条目的语言。区别在于后者还会进行一些限制,只显示合理的值,而前者显示所有语言。我们建议使用“管理翻译”下拉菜单中的条目。
- 我能否将已翻译的内容再次设置为语言无关的?
是的。您只需将语言更改为“中性”。这仅适用于条目的“分类”标签。
- “中性”语言是什么意思?
它正是其含义:中性。换句话说,这是一种表示所有语言内容的方式。内容变得与语言无关,在导航和搜索时都可以显示为任何语言。
- LinguaPlone是如何决定当有人访问我的网站时使用哪种语言的?
当您第一次访问LinguaPlone网站时,LinguaPlone会使用浏览器发送的“HTTP_ACCEPT_LANGUAGE”头信息来决定应使用哪种语言,然后设置一个带有该信息的cookie。从这一点起,您将只获得该语言的内容,除非您明确切换到另一种语言。在这种情况下,cookie值将更新为新语言。但如果您直接访问不同语言的内容,LinguaPlone将显示该内容条目并调整用户界面语言以匹配请求的内容的语言。
- 我如何将现有内容链接为另一内容的翻译?
“管理翻译”菜单项有一个表单,允许您从当前内容中选择同一类型的任何内容作为新的翻译,可以是任何未翻译的语言。
变更日志
4.3.0 (2018-02-23)
新功能
在翻译链接器弹出窗口中显示的面包屑显示了整个站点[erral]
翻译链接器弹出窗口在门户根目录[erral]
4.2.1 (2017-04-03)
错误修复
修复组合语言代码的翻译菜单[fRiSi]
4.2 (2017-03-09)
新功能
在“翻译成…”菜单中显示原语言名称[erral]
错误修复
修复Products.ATContentTypes.interfaces.的导入位置[thet]
如果LinguaPlone已经卸载,则在卸载时不会失败[thet]
4.1.8 (2017-01-12)
错误修复
修复translationbrowser_popup模板中的首页链接,使其指向导航根目录而不是站点根目录[vincentfretin]
添加对sitemap的测试[djowett]
4.1.7 (2016-11-10)
错误修复
修复了即使管理员也无法查看具有私有默认页的文件夹的bug。修复了https://github.com/plone/Products.CMFPlone/issues/1822 [maurits]
修复了@@language-setup-folders视图上的CSRF保护bug[syzn]
4.1.6 (2016-11-09)
错误修复
在头部hreflang链接中也显示当前语言链接[erral]
4.1.5 (2016-08-11)
修复
使用zope.interface装饰器[gforcada]
4.1.4 (2016-02-17)
语言选择器:仅在方法为GET时添加表单变量[gotcha]
修复处理已删除或重命名的“默认页面”条目的问题[witsch]
添加卸载配置文件[thet]
修复了manage_translations_form的权限,匿名用户现在无法访问该页面[prospchr]
getTypeInfo:延迟计算isCanonical[gotcha]
修复测试[jfroche]
如果mutator值中没有给出任何内容,则设置默认字段值[jfroche]
添加Travis buildout[jfroche]
4.1.3 (2013-01-18)
修复了从plone站点根目录更改引起的回归。当使用ZMI访问zope根目录时,getSite返回空,因此回退到遍历[pjstevns]
添加获取plone站点根目录的更好方法。由于在早期状态中遍历不可用,因此通过订阅者设置创建日期的Archetypes设置更改破坏了旧方法[hoka]
添加一个视图小部件来标记Google在http://googlewebmastercentral.blogspot.com.es/2011/12/new-markup-for-multilingual-content.html建议的翻译内容[erral]
更新bootstrap.py以兼容zc.buildout 1.5.0[pjstevns]
处理破坏的翻译,特别是当内容的语言与父语言不匹配时[pjstevns]
修复了如果语言已被禁用并且内容已在此语言中翻译,则获取可删除语言的问题[kroman0]
添加了禁用翻译视图中左侧小部件的选项[pingviini]
将翻译视图固定为在配置中隐藏时实际上隐藏门户组件。[pingviini]
如果可用,在当前语言中显示文件夹默认页面的翻译。[pjstevns]
在采取之前检查是否存在前向转换。[giacomos]
修复了“可渲染”字段的预览,这些字段不是简单的文本/html(如text/x-rst)。[keul]
通过在processForm中使用check_auto_id=True调整行为以使用current BaseObject。此修复在您有linguaPlone且未设置id时使用。[toutpt]
4.1.2 (2012-02-07)
翻译辅助脚本(getTransaltedLanguages,getUntranslatedLanguages,getDeletableLanguages)现在是视图方法。[thomasdesvenain]
当文件夹为中性时,在当前语言中显示文件夹默认页面的翻译。[thomasdesvenain]
避免当setLanguage被赋予一个非空字符串的null值时出现的问题。[thomasdesvenain]
4.1.1 (2011-11-15)
新的翻译仍然没有合适的id。修复 http://plone.org/products/linguaplone/issues/246 [gotcha]
4.1 (2011-11-14)
新的翻译没有得到合适的id。修复 http://plone.org/products/linguaplone/issues/246 [jfroche]
检查父项上的“添加门户内容”权限以显示翻译菜单项。检查父项上的“删除对象”或内容上的“修改门户内容”以显示“管理翻译”菜单项。检查用户是否有这些权限之一以显示菜单。参考 http://dev.plone.org/plone/ticket/12223。[thomasdesvenain]
更新为要求Plone 4.1。[hannosch]
在清除规范对象时通知p.a.caching清除翻译。[ggozad, stefan]
将控制面板的权限更改为plone.app.controlpanel.Language。这允许具有网站管理员角色的用户访问它。[toutpt]
4.0.4 - 2011-07-25
选择器不应提出链接到不可访问的内容(用户没有查看权限的内容)。如果存在翻译但不可访问,则遵循获取链直到可以访问的翻译项。如果我们到达一个不可访问的INavigationRoot,则完全不显示语言。[gotcha]
移除了损坏的图标并修复了翻译浏览器弹出窗口中的无效XHTML。[hannosch]
在某些VirtualHost设置中,翻译浏览器弹出窗口的链接已损坏。这关闭了 http://plone.org/products/linguaplone/issues/277。[tgraf, hannosch]
在语言选择器的视图let zcml声明中使用模板参数。这使得在插件中自定义更容易。此更改需要plone.app.i18n 2.0.1或更高版本。[toutpt]
强制翻译菜单标志图标尺寸为14x11 px,使其与语言选择器菜单保持一致。与plone.app.contentmenu 2.0.4+兼容。[thomasdesvenain]
更改了在语言选择器中保留视图/模板的策略。我们只有在目标项是当前上下文的直接翻译时才这样做。否则,我们可能会链接到在目标内容类型上不可用的视图。[thomasdesvenain, hannosch]
当内容没有“默认”字段集时,translate_item表单也能正常工作。[thomasdesvenain]
声明plone.app.iterate依赖项。[thomasdesvenain]
4.0.3 - 2011-05-27
在translate_edit.cpy中将字符串异常更改为ValueErrors。[robert]
修复测试以与GenericSetup 1.6.3+兼容。[hannosch]
在configure.zcml中使用权限之前明确加载CMF权限。[hannosch]
4.0.2 - 2011-01-26
在尝试翻译中性内容项之前,强制用户选择语言。一个内容项可以是中性的或具有翻译,但不能两者兼具。[witsch]
在翻译语言中性文件夹的默认页面时,不要创建额外的文件夹。[witsch]
4.0.1 - 2011-01-10
更改了I18NBaseObject中的默认Language行为,以便始终报告父文件夹的语言,即使它是中性的。[ggozad]
4.0 - 2010-11-25
修复了由于在HTML中显示未过滤的《描述》字符串字段而导致的可能的XSS安全问题。问题由Andrew Nicholson报告。[hannosch]
防止意外地从父对象中获取 getTranslations 方法,该方法是来自 utils.generatedMutator。感谢 Matous Hora 提供的补丁。这解决了 http://plone.org/products/linguaplone/issues/257。 [hannosch]
4.0b1 - 2010-11-04
在 translated_references 中优雅地处理每个 UID 的多个大脑。 [hannosch]
4.0a4 - 2010-10-06
避免在我们的顶层 __init__ 中使用模块全局导入。如果您意外地从 Products.LinguaPlone 直接导入了 public 模块的内容,您需要调整这些导入以从 public 模块导入。这解决了 http://plone.org/products/linguaplone/issues/253。 [hannosch, ggozad, shh42]
4.0a3 - 2010-09-24
重写了 getTranslationReferences 和 getTranslationBackReferences 的内部实现,以避免使用目录搜索 API 并利用对其内部结构的了解。 [hannosch]
在 TranslatableLanguageSelector 中,只有当存在要附加的查询字符串时才附加一个问号。 [hannosch]
4.0a2 - 2010-09-08
通过 TranslatableLanguageSelector 上的类变量使 set_language 查询字符串的添加可配置。 [hannosch]
4.0a1 - 2010-07-28
添加了删除规范文件夹的测试。添加了对 Products.ATContentTypes 2.0.2 的最小版本要求以修复 http://plone.org/products/linguaplone/issues/241。 [hannosch]
修复了语言选择器逻辑以正确处理所有类型的 VHM 规则。这解决了 http://plone.org/products/linguaplone/issues/240。 [hannosch]
将语言选择器视图小部件更改为主页中的 IPortalHeader 管理员显示,以与 Plone 4 中的新默认位置保持一致。这解决了 http://plone.org/products/linguaplone/issues/248。 [hannosch]
至少需要 Zope 2.12.5,并移除 -C 工作区。 [hannosch]
将迁移模块重命名为升级,以匹配当前命名约定。 [hannosch]
删除了 Archetypes uid 和引用目录的 GenericSetup 处理程序。这些现在是 Archetypes 的一部分。 [hannosch]
删除了 Plone 3.3 特定的测试。 [hannosch]
添加了所有升级步骤的测试。 [hannosch]
删除了对 zope.app 包的所有依赖。 [hannosch]
指定所有包依赖项。 [hannosch]
添加了对 Plone 4 的依赖项。如果您正在使用 Plone 3,请使用 3.x 系列的版本。 [hannosch]
3.1 - 2010-07-28
没有更改。
3.1b1 - 2010-07-18
更新许可证为仅适用于 GPL 版本 2。 [hannosch]
如果目录过滤器属性包含“Language”,并且“Language”设置为“all”,则不要向 REQUEST 对象添加语言过滤器 [do3cc]
3.1a5 - 2010-06-22
在 uid_catalog 中使用正常的 FieldIndex,并正确设置自定义 setuphandler 以创建功能性的 FieldIndex。 [hannosch]
3.1a4 - 2010-06-18
删除了示例类型,Plone 的默认类型现在对 LinguaPlone 有所了解,并提供了良好功能演示。 [hannosch]
重构了测试并使更多地方符合 PEP8。 [hannosch]
将用于语言的默认索引更改为正常的 FieldIndex。对于大多数站点,这已经足够,并且避免了 LanguageIndex 带来的主要性能影响。 [hannosch]
重构选择器代码以使其更容易编写单元测试。 [hannosch]
在 README 中添加了开发信息,这解决了 http://plone.org/products/linguaplone/issues/242。 [hannosch]
减少选择器代码中的优化,以处理用作默认页面的文件夹对象,参考 http://plone.org/products/linguaplone/issues/228。 [hannosch]
为了与 Plone 4 兼容,删除了 tabindex 的迭代器。 [hpeteragitator]
3.1a3 - 2010-05-25
在 invalidateTranslations、可删除的语言词汇表和脚本中进行了一些小的优化 - 避免计算审阅状态和完整对象查找。 [hannosch]
从 config.py 中删除了日志实例和 log 方法。 [hannosch]
从 config.py 中删除了未使用的变量:DEBUG、GLOBALS、PKG_NAME、SKIN_LAYERS、SKIN_NAME、INSTALL_DEMO_TYPES。 [hannosch]
添加了一般收集标准翻译同步功能,包括对语言无关标准的支持。目前此功能尚未自动激活,且尚未提供用户界面支持。有关更多信息,请参阅收集子包中的README.txt。 [hannosch]
添加了测试以证明索引和更新引用字段的功能。 [hannosch]
在utils.translated_references中,现在也处理由元组而不是列表给出的多值引用。 [thet]
语言选择器中的小优化。 [hannosch]
3.1a2 - 2010-03-29
修复了portal_factory中的isCanonical,这可能导致奇怪的错误。感谢Daniel Kraft提供的补丁。这解决了http://plone.org/products/linguaplone/issues/236、237和239。 [hannosch]
在语言选择器中使用_vh_部分时,链接会损坏。这解决了http://plone.org/products/linguaplone/issues/235。 [ramon]
极大地扩展了测试覆盖率。从84%增加到93%。 [hannosch]
移除了未完成的new_manage_translations_form原型。 [hannosch]
关闭了示例和测试类型中的manage_*警告。 [hannosch]
将GenericSetup步骤注册转换为ZCML。 [hannosch]
移除了所有针对InitializeClass的BBB导入。我们依赖于Plone 3.3,它附带Zope 2版本,具有Zope 2.10.8中引入的前向兼容导入位置。 [hannosch]
从示例和测试类型中移除了旧类型操作。 [hannosch]
进行了一些PEP8清理和轻微的文档更新。 [hannosch]
3.1a1 - 2010-02-19
将“语言”参数的过滤因子提取出来,以便可以在其他地方重用。 [hannosch, witsch]
通过将参考浏览器启动目录的调用替换为硬编码当前上下文作为启动目录,使manage_translations_form与Plone 4兼容。 [huub_bouma]
在设置视图中添加了工作流转换,以发布语言文件夹。 [hannosch]
将设置视图中的文件夹更改为使用本地语言标题。 [hannosch]
在设置视图中添加了自动设置语言切换器的功能。 [hannosch]
添加了新的language-switcher视图,可作为Plone站点对象的默认视图方法使用,以将流量分配到适当的语言根文件夹。 [hannosch]
添加了新的language-setup-folders辅助视图,以为每种受支持语言设置语言根文件夹的常规结构,并标记为导航根。 [hannosch]
为语言选择器添加了更多的CSS类,使其能够针对每种语言。灵感来自http://www.thirtysomething.it/。 [hannosch]
只有在它们不是Archetypes的一部分时才注册目录导出导入处理程序。这避免了在Plone 4.0中的冲突。 [hannosch]
3.0.1 - 2010-02-02
调整了有关更改项目语言的FAQ。这解决了http://plone.org/products/linguaplone/issues/234。 [hannosch]
澄清了ITranslatable接口描述中的getTranslation方法。这解决了http://plone.org/products/linguaplone/issues/226。 [hannosch]
当处理损坏的规范引用时,语言索引变得更加宽容。这解决了http://plone.org/products/linguaplone/issues/231。 [hannosch]
修复了3.0b4中引入的回归。翻译的标题不再从标题生成。虽然我们保留了指定显式id的能力,但默认情况下,新id现在再次从标题生成。这解决了http://plone.org/products/linguaplone/issues/233。 [hannosch]
由于选择器的先前更改,语言小部件已损坏。 [jensens]
进行了小的文档更新。 [hannosch]
3.0 - 2009-12-21
与上一个发布候选版本相比没有变化。 [hannosch]
3.0c4 - 2009-12-07
通过名为 PLONE_I18NAWARE_CATALOG 的环境变量,实现了禁用 i18n 感知目录功能。[hannosch]
3.0c3 - 2009-11-25
增强了翻译引用功能对错误的鲁棒性。我们在设置翻译引用的循环中覆盖了目标 值。如果某一语言的目标无效,这会导致所有后续翻译都因不同错误而失败。[hannosch]
3.0c2 - 2009-11-16
静默处理引用多路复用中引发的引用异常。普通用户对此无能为力,所以我们记录它们。[hannosch]
将导入从已废弃的 Products.Archetypes.public 更改为 Products.Archetypes.atapi。[maurits]
在 style_slot 中显式定义 portal。[maurits]
用 style_slot 替换了 css_slot,因为后者已废弃。[maurits]
使用新的共享 plonetest 配置文件。[hannosch]
3.0c1 - 2009-11-04
在 translated_references 中避免因损坏的引用而失败。[hannosch]
调整测试以适应 Plone 4 的新默认页面行为。[hannosch]
使用新的 getTranslations API,并在不需要时避免计算审查状态。[hannosch]
修复了功能测试,以避免 URL 中出现多余的斜杠。[hannosch]
添加了一个新的 I18NOnlyBaseBTreeFolder 混入,可以在 Plone 4 中使用,以赋予新 plone.app.folder 类型 LinguaPlone 行为。[hannosch]
避免对 Globals 包使用的弃用警告。[hannosch]
3.0b8 - 2009-10-22
调整语言选择器,使其指向每种语言的最近翻译。到目前为止,选择器仅适用于具有所有语言翻译的项目。否则,内容语言协商者会使选择器无效。这解决了 http://plone.org/products/linguaplone/issues/219。[hannosch]
修复了语言选择器,使其在虚拟主机环境中直接在根目录上工作。这解决了 http://plone.org/products/linguaplone/issues/216。[hannosch]
将开发 buildout 扩展到包括简单的 Nginx 配置,以便更容易测试虚拟主机问题。[hannosch]
将语言选择器更改为使用 canonical_object_url 而不是 view_url。我们自行保留 /view 后缀,因此使用 view_url 在某些情况下会重复。我们还停止了自己进行默认页面分析,并使用来自上下文状态视图的给定功能。[hannosch]
3.0b7 - 2009-10-21
保护 LanguageIndependentFields 适配器免受奇怪字段的影响,如计算字段。[hannosch]
3.0b6 - 2009-10-20
避免在语言选择器中保留神秘的 -C。[hannosch]
确保 I18NAWARE_REFERENCE_FIELDS 列表中的字段子类也获得特殊的引用处理。否则,schemaextender 字段将不会获得该行为。[hannosch]
让 generatedMutatorWrapper 直接在 schemaextender 字段上工作。[hannosch]
使用 __contains__ 协议将 has_key 替换为 in 检查。[hannosch]
将生成的函数从语言独立的 ClassGenerator 因素化到模块作用域函数中,以允许外部访问它们。[hannosch]
3.0b5 - 2009-10-14
通过允许调用函数传递有关 self 的规范状态的建议来优化 getTranslations 方法。通常,调用者知道这一点,不需要在 getTranslations 调用中确定。还通过在 getTranslations API 中扩展 include_canonical 标志来优化 getNonCanonicalTranslations。[hannosch]
优化 getCanonical 方法,以避免两次相同的引用目录查询,只需进行一次查询。[hannosch]
为引用处理添加了测试,并修复了更多边缘情况。此 API 有大约十七种不同的调用方式。[hannosch]
修复了 LanguageIndependentFields 适配器中的错误。它进行了大量魔法,以成为 LinguaPlone 感知,但却完全错过了重点。简单有时更好。这修复了最后一个引用处理测试失败。[hannosch]
修复了整个引用处理。之前它使用保存的引用进行同步,导致忽略新引用。现在它实际使用给定的新值并查找它们。现在它可以处理部分翻译的目标和非可翻译的目标。我还清理了这部分代码。[jensens]
3.0b4 - 2009-10-02
修复了一个严重的问题,这个问题出现在多值引用字段和archetypes.referencebrowserwidget中。由于我们在视图模式下渲染语言无关的字段,它们的数据不再包含在请求中。在processForm中省略字段被视为等同于“删除所有”。我们现在重写_processForm来忽略规范项上的processForm中的语言无关字段。这也带来了一点速度优势。[hannosch]
LinguaPlone不允许手动编辑ID。感谢David Hostetler提供的补丁。这解决了http://plone.org/products/linguaplone/issues/70。[hannosch]
从测试中移除了可疑的性能优化。不要删除目录。[hannosch]
从Python文件中移除了无效的许可头。所有代码均归Plone基金会所有,并使用GPL许可。[hannosch]
3.0b3 - 2009-09-26
更新要求为Plone 3.3而不是单个包。我们不再对此版本与旧版Plone进行测试。移除了不再需要的预Plone 3.1代码。[hannosch]
如果在链接翻译表单中没有选择项目,则表单处理器将选择一个随机项目。感谢Ichim Tiberiu提供的补丁。这解决了http://plone.org/products/linguaplone/issues/204。[hannosch]
在manage_translations_form上恢复了更改语言函数的正确功能。这解决了http://plone.org/products/linguaplone/issues/215。[hannosch]
添加了一个简单的配置选项来隐藏翻译编辑表单上的右侧列,并默认启用它。[hannosch]
移除了规范和翻译缓存。它从未完全安全使用。这解决了http://plone.org/products/linguaplone/issues/82。[hannosch]
添加了一个新的同步语言词汇表,并用于内容元数据的语言可用性。这限制了常见语言小部件中的语言为站点支持的语言的集合。[hannosch]
从manage_translations_form中移除了不再维护的Kupu引用浏览器支持。[hannosch]
修复了在translationbrower_popup中使用的isRightToLeft脚本弃用警告。[hannosch]
移除了GlobalRequestPatch - 它不再需要。[hannosch]
移除了
not_available_lang
模板。它不再使用。[hannosch]默认使用请求协商。[hannosch]
默认启用内容语言协商器。[hannosch]
在选择器中避免在语言名称后留有空格。[hannosch]
使语言索引导出导入处理器的代码现代化。[hannosch]
重构了目录导出导入处理器的通用功能。为新增索引添加了自动重新索引。[hannosch]
将包文档排列到发行版的顶层。[hannosch]
为独立测试添加了包的buildout配置。[hannosch]
修复了翻译视图中状态消息中的拼写错误。[hannosch]
确保像Plone本身一样,在语言选择器中使用本地语言名称。[hannosch]
在语言选择器图像上指定alt文本。这解决了http://plone.org/products/linguaplone/issues/188。[hannosch]
修复了README中的无效代码说明。这解决了http://plone.org/products/linguaplone/issues/207。[hannosch]
移除了长期损坏的portlet_languages。这是一个预Plone 3的旧式小部件。见http://plone.org/products/linguaplone/issues/209。[hannosch]
3.0b2 - 2009-09-25
在处理request.form时,别忘了其他表单变量。[tesdal]
3.0b1 - 2009-09-25
在允许Unicode时,不要破坏request.form。[tesdal]
从门户工厂内部的内容父级获取默认语言。[tesdal]
在translate_item.cpt中为
元素添加了动态id属性,以便于样式化。[jensens, hpeteragitator] 3.0a3 - 2009-09-09
允许request.form中包含Unicode。[tesdal]
3.0a2 - 2009-09-07
切换语言时,保留视图、模板和查询组件。[tesdal]
确保LinguaPlone浏览器层在界面__iro__中比默认层更具体,以便LinguaPlone层的注册优先。[rossp]
添加了对Products.PloneLanguageTool >= 3.0的未声明依赖。[hannosch]
3.0a1 - 2009-06-03
从我们的init方法中移除了checkVersion检查,并声明了对Plone的依赖。[hannosch]
将配置文件版本改为简单的3,以遵循使用简单整数作为配置文件版本号的最佳实践。[hannosch]
扩展了多语言感知的引用字段以处理多值字段。[hannosch]
添加了对语言无关行字段的测试。[hannosch]
修复了testSelector测试,使其与新默认页面处理兼容。[hannosch]
清理了一些旧的包元数据,并将zLOG使用转换为日志。[hannosch]
将语言选择器改为尊重默认页面。我们现在链接到已翻译默认页面的容器,而不是默认页面本身。[hannosch]
将语言添加为uid目录的额外索引。这是为了能够基于语言限制选择至少正常引用标准。[hannosch]
调整LanguageIndependentFields适配器的copyField方法,使其能够与没有访问器方法的字段一起工作。[hannosch]
重新工作了translationOf引用处理。我们不再依赖于正常的Archetypes引用API,而是深入研究一些内部细节,以优化我们特定用例的处理。
我们将语言作为额外的元数据添加到引用目录中。为此,我们需要将此包的GenericSetup处理程序添加到目录中。这应该被移动到Archetypes本身。现有站点的升级步骤可用,并需要运行。该步骤在Plone 3.3及以后的添加组件面板中宣传,或者可以通过ZMI中的portal_setup工具访问。
新的元数据反映了引用源的语种,所以我们索引翻译语言而不是规范语言。因此,翻译文件夹中的引用存储了该翻译的语言。它通过Acquisition获取,因为引用或at_references OFS.Folder都没有语言功能。
作为第二步,我们使用这些新的元数据来更有效地查询引用目录。一般来说,我们尽可能地避免获取实际对象,并依赖于目录内部的brains来获取所有相关信息。我们还绕过获取实际的引用对象,而是直接通过其uid查找引用的源或目标。
这些更改不会更改外部API,也不应该导致其他使用引用引擎的附加组件出现问题。[hannosch]
将CACHE_TRANSLATIONS的规范状态缓存拆分为自己的配置设置,通过CACHE_CANONICAL。[hannosch]
修复了语言选择器测试,使其在Plone 3.3中通过。[hannosch]
从翻译菜单描述中移除了空翻译。[hannosch, maurits]
添加了对语言无关引用字段更智能的处理。如果一个语言无关的引用字段指向一个目标,那么该源项的翻译将指向该目标的翻译,而不是规范的目标。这只有在引用建立后目标翻译已存在的情况下才有效。如果稍后添加了目标翻译,则必须重新保存规范源以调整引用到目标正确的翻译。[hannosch]
添加了对语言相关/无关引用字段的测试。[hannosch]
允许通过配置中的NOFILTERKEYS列表配置防止自动添加到目录查询中的查询键。[hannosch]
2.4 - 2008-12-09
从“翻译成”菜单中移除了“语言设置”。全局操作在特定上下文菜单中没有任何位置。[hannosch]
移除无用的“changeLanguage”脚本。在“manage_translations_form”中,使用“@@translate”代替。[nouri]
允许将“id”传递给addTranslation/createTranslation。[nouri]
2.3 - 2008-11-13
在迭代检查出时注册了NoCopyReferenceAdapter来避免检查出的对象成为翻译。[tesdal]
在模式更新期间修复了不必要的AlreadyTranslated异常。模式更新保存当前值,设置默认语言(此时如果默认语言是英语,很容易出现两个英语翻译),然后再次恢复原始值。因此,在这种情况下,除了设置值外,实际上没有理由做任何其他事情。[maurits]
addTranslation现在返回新创建的翻译。[wichert]
在包描述中包含常见问题解答。[wichert]
重构addTranslation:引入适配器以确定创建翻译的位置以及创建翻译。[wichert]
在目录视图中添加路径过滤器,就像非LP版本一样。[mj]
在处理编辑表单时确保重新索引翻译;语言无关字段可能已被更新。[mj]
提取了ILanguageIndependentFields适配器,封装了语言无关字段的同步。[stefan]
2.2 - 2008-07-22
现在在视图模式下显示语言无关字段,因此不再可以从翻译中进行编辑,这是按文档要求的行为。[regebro]
使升级步骤也适用于Plone 3(GenericSetup 1.3)。[maurits]
注册了GenericSetup升级步骤来删除旧的linguaplone_various导入步骤。我注册了从2.0升级到2.1,因为那时删除了这个导入步骤。它在ZMI的portal_setup/manage_upgrades中始终可用。[maurits]
访问规范翻译时,也切换到该语言。[maurits]
在“manage_translations”页面上,当当前上下文不是规范语言时,不要显示链接到其他内容或删除/取消链接现有翻译的表单。相反,添加到该规范语言的url。[maurits]
在添加翻译时,如果语言不存在,不要抛出错误,而是将其显示为信息并转到现有翻译。由于某些缓存,我看到了“添加翻译”选项仍然适用于已翻译的语言。[maurits]
当它是None时忽略回溯引用。[maurits]
确保现有的FieldIndex Language被正确替换为我们想要的LanguageIndex,而不是留下一个不可用的索引和空的索引属性。[maurits]
在开始可能很长的重新索引之前检查plone.browserlayer是否已安装,然后将其中止。[maurits]
在Plone 3.0.6上运行测试,同时使用plone.browserlayer 1.0rc3和原始GenericSetup(1.3),就像简单地运行Plone 3.1一样。[maurits]
2.1.1 - 2008-05-01
移除了对不再存在的plone.browserlayer GS配置文件的依赖。这关闭了http://dev.plone.org/plone/ticket/8083。[hannosch]
添加了一个用于Plone错误#8028的解决方案(http://dev.plone.org/plone/ticket/8028),该错误在没有portal_type上下文(如小部件添加表单)的情况下会导致站点错误。[wichert]
2.1 - 2008-04-11
对所有内容类型使用我们的语言选择视图小部件,而不仅仅是可翻译类型。这使所有类型保持一致。[wichert]
在取消索引不存在的内容时更加宽容。[hannosch]
允许在语言控制面板中取消选择语言。[wichert]
不要在控制面板的默认语言字段中使用LanguageDropdownChoiceWidget:LanguageDropdownChoiceWidget使用IUserPreferredLanguages,它不使用适当的词汇表来查找语言名称。[wichert]
2.1beta1 - 2008-04-07
将LanguageIndex与选择小部件注册,这样您就可以在集合中查询语言。[hannosch]
启用Plone语言插件,并正确地将其渲染链接更改为存在翻译时的情况,否则更改为站点根目录。[wichert]
在设置时间和浏览器菜单中不要依赖于Quickinstaller。[jensens]
进行较小的GenericSetup清理。[jensens]
使LinguaPlone与archetypes.schemaextender和类似方法友好地协作。[jensens]
在GenericSetup配置文件中将plone.browserlayer声明为依赖项。这将在Plone 3.1中自动安装它。[wichert]
改进取消链接处理。这修复了http://plone.org/products/linguaplone/issues/127。[wichert]
2.1alpha1 - 2007-12-13
如果plone.browserlayer尚未安装,则拒绝安装LinguaPlone。[wichert]
在LinguaPlone中将PloneLanguageTool的GenericSetup导出/导入步骤也注册。标准的Plone 3安装从未应用PloneLanguageTool的GenericSetup上下文,因此没有这个,portal_languages.xml将被忽略。[wichert]
用我们自己的版本替换标准Plone语言控制面板,该版本允许启用多种语言。[wichert]
如果启用了kupu参考浏览器,现在管理翻译表单使用kupu抽屉。[Duncan]
管理翻译屏幕上的操作现在将保持在同一屏幕上,以便可以链接多个翻译。现有翻译显示其路径。[Duncan]
2.0 - 2007-10-11
在翻译的父项中创建新内容时,使用父项的语言作为默认语言。[wichert]
在将对象移动到新翻译文件夹之前尝试解锁对象。[wichert]
在GS各种导入步骤中添加一个测试,如果portal_catalog中的语言目录索引已索引任何对象。如果没有,我们只是(重新)创建了索引,我们需要重新索引它。这修复了安装LinguaPlone后内容消失的问题。[wichert]
从GS配置文件中删除将LinguaPlone标记为已安装的代码,因为我们可以通过quickinstaller本身安装LinguaPlone,所以这不是必需的。[wichert]
2.0beta2 - 2007-09-24
修复translate_item模板中的语法错误。[wichert]
重构LinguaPlone产品布局,以便它可以作为egg分发。[wichert]
2.0beta1 - 2007-09-21
再次允许将未翻译容器的默认视图翻译为默认视图:我们现在有了添加容器翻译的正确代码。[wichert]
正确创建对象的翻译,这些对象是未翻译父项的默认视图。[wichert]
正确处理具有未翻译父项的内容的“翻译到”菜单。[wichert]
2.0alpha2 - 2007-09-19
如果LinguaPlone安装在quick installer中,则仅显示内容菜单。[wichert]
更新功能测试,以登录为成员,以便测试可以使用未发布的内容。[mj]
禁用将文件夹的默认视图翻译为没有翻译的语言的菜单选项。[wichert]
2.0alpha1 - 2007-09-10
使用GenericSetup配置文件安装LinguaPlone。[wichert]
将createTranslations移动到@@translate浏览器视图。[wichert]
迁移到Plone 3.0.1。[wichert]
仅允许链接到同一门户类型的其他对象。[wichert]
添加一个健全性检查,以防止addTranslationReference为已经具有翻译的语言添加翻译。[wichert]
语言选择器策略变更。我们尝试通过查找已翻译的父项来避免禁用标志。[fschulze]
添加了链接翻译的UI。[vlado, fschulze]
在addTranslation中更改为使用_createObjectByType,绕过添加限制可能产生的冲突。[deo]
1.0.1 - 2007-09-24
修复spitLanguage,当提供非字符串对象时返回(None, None)。这修复了LP问题#101。[mj]
修复LanguageIndex,更好地处理语言缺失或不是可调用的对象。修复LP问题#99。[mj]
修复LanguageIndex,使其在python 2.3上运行。[wichert]
修复语言选择器,以防其中一种翻译不可访问(即处于“私人”状态)时进入登录屏幕。[fschulze, godchap]
1.0 - 2007-06-19
如果由于模式更新而重置语言,请不要删除翻译引用。这修复了http://plone.org/products/linguaplone/issues/7 [wichert]
移除了与Plone 2.0的兼容性。[fschulze]
添加了一个实用方法来链接内容对象作为翻译。这在例如在GenericSetup导入步骤中链接在GenericSetup内容步骤中创建的内容时非常有用。[wichert]
在语言选择器中以目标语言显示“切换语言到”文本,而不是当前语言。[wichert]
修复了在TTW创建后只执行重命名的问题。不是在通过脚本创建的对象的第一次编辑时。[sashav]
修复了如果没有getTranslations可用的问题。这发生在存在非lp-enabled基于对象的直接在portal-object中。[jensens]
修复了一些会发出弃用警告的代码。[hannosch]
现在我们不再自定义switchLanguage,而是在LinguaPlone中使用portlet_languages,并使用更漂亮的languageSelectorData。[jladage]
LanguageIndex现在是一个专门索引,当搜索时将返回主语言中的替代翻译。[mj]
0.9.0 - 2006-06-16
现在可以直接与Plone 2.5配合工作,以及使用包含的PloneLanguageTool的Plone 2.1.3。[jladage]
修复了在Plone 2.1.3中翻译语言中的Unicode错误。它可以包含非ASCII字符,因此默认字符串需要声明为unicode。[encolpe]
修复了动作以优雅地回退的action属性“name”和“title”。[jladage] [encolpe]
添加了switchLanguage.py脚本并添加了对可翻译内容的支持。[jladage]
直接从语言工具查找语言标志名称。现在,正式要求PloneLanguageTool 1.3(或更高版本)。[deo]
使测试与Plone 2.5兼容。[hannosch]
一些非常小的国际化修复。[hannosch]
添加了一个迁移脚本来更新与语言无关的字段内容。在升级到0.9之前的版本时必须手动运行。[deo]
移除了自定义访问器/editAccessor生成。我们现在只使用自定义突变器和翻译突变器。这导致性能比以前版本提高了约30%。[deo]
确保在移除自定义访问器时将独立语言字段数据复制到所有翻译中。这也解决了尝试直接从字段获取值时的问题,因为现在数据也在翻译中,而不仅是在规范对象中。[deo]
为http://dev.plone.org/plone/ticket/4939提供修复。[deo]
修复了在图像/文件的不同翻译之间切换时的问题,此时内容显示,而不是视图屏幕。[deo]
修复了当您单击它时突出显示翻译的“编辑”选项卡。[deo]
对Plone 2.0兼容性进行了最终裁剪。回滚测试,处理迁移并修补了PythonScripts内容工具。[deo] [sidnei]
添加了与语言无关的字段标签。[deo] [limi]
使初始默认语言遵循PloneLanguageTool配置策略。[deo]
0.9-beta - 2005-10-27
从Translation Unavailable模板中移除了内容边框。[limi]
使不可编辑的测试字段在视图模式下渲染,而不是作为非可编辑的文本框。这样做的原因是人们倾向于认为“如果它是文本框,则它是可编辑的”,然后在它不可编辑时感到困惑(只读小部件会使用户感到困惑),另一个原因是它会破坏多重选择列表。[limi]
使在翻译中不可编辑的语言无关项。[limi] [deo]
添加了Plone 2.0兼容性的初步版本。[deo]
修复了每个地方的i18n域…… :-) [deo]
0.8.5 - 2005-09-06
使内容在中性语言中创建,现在这个概念按预期工作。[deo]
当尝试重复翻译时,addTranslation将引发AlreadyTranslated异常。[deo]
添加了当语言不存在且用户有适当的权限时创建翻译的表单。[deo]
旗帜切换器上的标题应显示:“切换语言至$LANGUAGE(内容翻译不可用)” - 如果内容未翻译,则显示最后部分,以补充阴影效果(纯粹视觉效果,不利于无障碍访问)。[deo]
分屏应更改两侧(“从”语言位于左侧,“到”语言位于右侧)。[deo]
如果关闭,分屏不应显示简称(如2.1中的默认设置)。[deo]
旗帜不再单独一行(以前位于文档操作下方)。[limi]
字段标题已翻译,字段帮助未翻译。[deo]
可能应从字段标题中删除旗帜,因为下拉菜单可能使这些标题产生误导。[deo]
分屏下拉菜单在翻译时需要语言选择器。[deo]
编辑可翻译内容时,除规范项外,请使用translate_item模板。[deo]
PloneLanguageTool在没有安装LinguaPlone时存在问题。[deo]
添加了挪威语翻译。[limi]
改进了i18n标记。更新了巴西葡萄牙语翻译。[deo]
0.8 - 2005-08-15
Plone __browser_default__ 审查。[deo]
调整LP目录补丁以兼容Plone 2.1。[stefan]
允许更改内容语言,将内容移动到适当位置,并在禁止时引发异常。[deo]
设计新的语言协商器的策略。[limi]
灰显旗帜。[deo, limi]
处理切换到不存在语言(即not_available_lang)的情况。[deo]
处理默认页面的翻译。[deo]
为灰显旗帜添加了hasTranslation()方法。[deo]
翻译包含文件夹和移动翻译内容时的ID策略。[limi]
语言切换:旗帜上的URL应为实际URL,而不是switchLanguage?set_language=no。[deo]
修复了Firefox中的languageswitcher。[deo]
LinguaPlone不应将语言代码附加到ID,而应使用与Plone 2.1相同的策略。[deo]
实现了新的语言协商器,其中内容语言和界面语言始终同步。[deo]
测试ATCT中的图像是否保持LangIndependent。[limi]
更新下拉菜单标记。[deo]
0.7 - 2004-09-24
于2004年Plone会议发布。[limi] [testal] [geir]
技术预览 - 2004-06-29
第一个公开版本。[limi] [testal] [geir]
项目详情
关闭Products.LinguaPlone-4.3.0.tar.gz的散列值
Products.LinguaPlone-4.3.0.tar.gz的散列值 算法 散列摘要 SHA256 244dd3564c2ceff29e5f966e036f1f161e5625b8012b4aa5091c7144bafc196f
MD5 6379892d5556f1cf4d50d0347865d711
BLAKE2b-256 a2d91de1d86d34e70f6ffc340f818307785df23b3881f657ebf8691f58638485
支持者