程序定制有很多级别。
首先当然是通过创建 i18n 消息让它说你的语言,其中 gettext 和 xgettext 等工具做得很好。
当您需要修改某些消息的含义以适应您的项目目的时,另一个会出现。
问题是:除了样板翻译之外,是否可以将自定义消息保存在单独的文件中,并让标准工具了解自定义消息优先?
这将有助于防止这些消息被提交到公共存储库并在升级时被样板文本覆盖。
编辑:由于没有太多人关心本地化,我认为收集任何平台的答案都是合适的,但是我目前有兴趣实现这个 python/django。
程序定制有很多级别。
首先当然是通过创建 i18n 消息让它说你的语言,其中 gettext 和 xgettext 等工具做得很好。
当您需要修改某些消息的含义以适应您的项目目的时,另一个会出现。
问题是:除了样板翻译之外,是否可以将自定义消息保存在单独的文件中,并让标准工具了解自定义消息优先?
这将有助于防止这些消息被提交到公共存储库并在升级时被样板文本覆盖。
编辑:由于没有太多人关心本地化,我认为收集任何平台的答案都是合适的,但是我目前有兴趣实现这个 python/django。
在 Java 中,这些本地化字符串由 ResourceBundles 处理。ResourceBundles 有变体的概念。例如,您可以有一个名为messages_en.propertie
s 的基本英语资源。message_en_US.properties
然后,您可以使用或自定义特定的英语变体message_en_UK.properties
。
美国和英国是 ISO 国家代码,但您也可以设置自己的自定义变体,其中只包含您想要自定义的字符串。例如:
#messages_en.properties
button.click=Click
label.go=Go
#messages_en_ZZ.properties
button.click=Click Me
通过将语言环境设置为en_ZZ
,您的应用程序将首先查看messages_en_ZZ.properties
自定义字符串是否存在,然后返回到messages_en.properties
您的样板翻译。[有关 ResourceBundle 加载优先级的更多信息][1]
[1]: http: //java.sun.com/javase/6/docs/api/java/util/ResourceBundle.html#getBundle (java.lang.String, java.util.Locale, java.lang.ClassLoader)