2011-06-16 73 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