2011-06-16 72 views
2

我有一个zope实例,每个实例都有不同的plone站点,供不同的客户使用。我希望覆盖特定翻译,例如只为单个Plone网站使用日期格式,而不会影响其他网站。我该怎么做呢?如何在plone 4实例的基础上覆盖翻译

教程(如http://maurits.vanrees.org/weblog/archive/2010/10/i18n-plone-4#overriding-translations)似乎表明自定义翻译会覆盖zope实例上的所有网站。

+1

确实;翻译是磁盘上安装范围内的资源,不会在ZODB中保留。因此,OOTB,你不能覆盖每个网站。 – 2011-06-16 05:49:09

+0

我可以为每个客户创建自己的语言,然后将每个网站设置为客户特定翻译? – djay 2011-06-17 00:51:21

+0

你可以;缺失的翻译将回到英文。尽管如此,破解日期格式化例程可能会更容易。 – 2011-06-17 08:10:00

回答

4

这是我如何解决它。这是一个黑客解决方案,但它适用于我特定的场景。

http://maurits.vanrees.org/weblog/archive/2010/10/i18n-plone-4#overriding-translations

  • 创建了自己的语言环境软件包。
  • 仅覆盖一个特定语言变体的plonelocales域,在本例中为en_AU。
  • 在zope中通过buildout加载了这个包,特别注意确保它是第一个ZCML段塞(不是博客文章中的说明不正确地声明它必须是egg部分中的第一个包,这不足以使其工作为了我)。
  • 为每个站点我想切换日期格式我去了网站设置>语言并将语言切换到“英语(澳大利亚)”。

其他疑难杂症,那就是释放和部署的语言环境软件包时,确保你已经

  • 生成的文件的.mo第一(做你,如果你在本地运行的Zope)
  • 并且您使用MANIFEST.in文件告诉setuptools包含所有.mo文件,因为您不应该将.mo文件放在源代码管理下,默认情况下,setuptools仅包含源代码管理下的文件。

这并不让我为每一个网站,但不够好自定义的日期格式,如果你想自定义日期格式实际上是你选择要使用的语言变体。

3

您可以实现您自己的zope.i18n.interfaces.ITranslationDomain实用程序,它在不同的位置查找翻译。正常的翻译域实用程序存储gettext消息目录的列表。那些从文件系统上的mo文件加载并用ZCML注册。

但你可以实现不同的翻译领域,其存储为每个站点持续的效用,并给它一些额外的存储空间来查找消息在。

+0

我正在尝试更改plone翻译域名翻译,尤其是日期格式。这是否适用于该场景? – djay 2011-06-17 02:41:55

+0

你可以看看http://plone.org/products/customizabletranslations实现了类似的东西。它可能会涉及翻译机器的旧部分,如PlacelessTranslationService,它们不再使用。 – 2011-06-22 11:00:14

+0

@djay:日期格式在'plonelocales'域中,但它们都是相同的机器。 – 2011-06-22 11:01:26