Internationalization 如何在plone 4实例的基础上覆盖翻译

Internationalization 如何在plone 4实例的基础上覆盖翻译,internationalization,plone,Internationalization,Plone,我有一个zope实例,其中有许多plone站点,每个站点针对不同的客户。我想覆盖特定的翻译,如日期格式,只为一个单一的plone网站,而不影响其他网站。我该怎么做 教程(如“似乎表明自定义翻译”会覆盖zope实例上的所有站点。您可以实现自己的zope.i18n.interfaces.ITranslationDomain实用程序,该实用程序可在其他位置查找翻译。普通翻译域实用程序存储gettext消息目录列表。这些是从文件系统上的mo文件加载的,并在ZCML中注册 但您可以实现不同的翻译域,将其作

我有一个zope实例,其中有许多plone站点,每个站点针对不同的客户。我想覆盖特定的翻译,如日期格式,只为一个单一的plone网站,而不影响其他网站。我该怎么做


教程(如“似乎表明自定义翻译”会覆盖zope实例上的所有站点。

您可以实现自己的zope.i18n.interfaces.ITranslationDomain实用程序,该实用程序可在其他位置查找翻译。普通翻译域实用程序存储gettext消息目录列表。这些是从文件系统上的mo文件加载的,并在ZCML中注册


但您可以实现不同的翻译域,将其作为每个站点的持久性实用程序存储,并为其提供一些额外的存储以查找消息。

我就是这样解决的。这是一个有点黑客的解决方案,但它为我的特定场景工作

根据我

  • 创建了我自己的locales包
  • 只为一种特定的语言变体(在本例中为en_AU)覆盖plonelocales域
  • 通过buildout在zope中加载包时要特别注意确保它是第一个ZCML slug(不是博客文章中的说明错误地指出它必须是egg部分的第一个包。这还不足以让它对我起作用)
  • 对于每个我想切换日期格式的站点,我进入站点设置>语言,并将语言切换为“英语(澳大利亚)”
另一个问题是,在发布和部署locales包时,请确保

  • 首先生成.mo文件(如果在本地运行zope,则为您完成)
  • 您已经使用MANIFEST.in文件告诉setuptools包含所有.mo文件,因为您不应该将.mo文件置于源代码管理下,默认情况下,setuptools只包含源代码管理下的文件

这并不能为每个站点提供自定义日期格式,但如果您想要的自定义日期格式实际上是您选择使用的语言变体的格式,那么这就足够了

的确;翻译是磁盘上安装范围内的资源,不会持久保存在ZODB中。因此,OOTB,您不能覆盖每个站点。我可以为每个客户创建自己的语言,然后将每个站点设置为客户特定的翻译吗;缺少的翻译将回到英语。不过,破解日期格式化例程可能更容易。我正在尝试更改plone翻译域的翻译,尤其是日期格式化。这对那个场景有效吗?您可以看看哪个实现了类似的功能。它可能与翻译机器的旧部分(如PlacelessTranslationService)挂钩,这些部分已不再使用。@djay:日期格式在
plonelocales
域中,但它都是相同的机器。