警告:我不是 java 黑客,所以 YMMV 但是...
使用“属性”列表的问题在于您需要大量的纪律。每次添加应该输出给用户的字符串时,您都需要打开属性文件,查看该字符串(或大致等价的字符串)是否已在文件中,然后添加新属性如果不是。最重要的是,如果您想将属性文件交给外部翻译团队来处理,您必须希望属性文件具有相当的可读性/可编辑性。
基于数据库的方法对所有基于数据库的内容都很有用。理想情况下,您希望轻松地将内容片段与其翻译联系在一起。它只适用于您可能想要从数据库中输出不是的东西(错误消息等)的所有地方。
我们发现一个相当古老的技术仍然很好用,那就是使用 gettext。 Gettext 或某些变体似乎可用于大多数语言和平台。基本前提是您将输出包装在一个特殊的函数调用中,如下所示:
echo _("Please do not press this button again");
然后在您的源代码上运行 gettext 工具会将所有这样包装的实例提取到“po”文件中。这将包含以下条目:
#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr ""
您可以将您的翻译添加到适当的位置:
#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr "s’il vous plaît ne pas appuyer sur le bouton ci-dessous à nouveau"
gettext 工具的后续运行只会更新您的 po 文件。您甚至不需要从源中提取 po 文件。如果您知道自己可能想要翻译您的网站,那么您可以使用上面显示的格式(下划线函数)来处理所有输出。如果您不提供 po 文件,它只会返回您在引号中输入的任何内容。 gettext 设计用于使用语言环境,因此用户语言环境用于检索适当的 po 文件。这使得添加新翻译变得非常容易。
Gettext 优点
- 编码时不会妨碍您
- 很容易添加翻译
- PO 文件可以编译下来以提高速度
- 有适用于大多数语言/平台的库
- 有很好的跨平台工具来处理翻译。实际上,您可以使用 poEdit 等工具设置您的翻译团队,以便他们轻松管理翻译项目
Gettext 缺点
- 解决您的网站“家具”需求,但您通常仍需要基于数据库的方法来处理数据库驱动的内容
有关 gettext 的更多信息,请参阅this wikipedia page