我有一个带有服务器和Swing客户端的Java应用程序。现在我需要本地化用户界面,并且可能还需要一些特定于区域设置的数据。具体而言,我想听听你的意见。
我非常感谢所有能与我分享经验的人。
P.S。如果您碰巧知道有关该主题的任何特别好的网站或书籍,我会很高兴听到他们。我当然做了一些谷歌搜索并阅读了一些关于本地化的文章,但没什么好事的。
答案 0 :(得分:13)
实际上,你所说的是国际化(i18n),而不是本地化(L10n)。 根据我的经验,你走的是正确的道路。
ad 1)。每个视图和区域设置一个属性文件(不是必需的语言,因为您可能希望根据国家/地区对某些语言使用不同的翻译,即使用英语和美国英语的不同字符串,因此使用不同的语言环境)是正确的方法。由于应用程序趋于发展,当您只想修改一个视图时,它可以节省大量资金(因为翻译人员甚至会收取他们不会触摸的内容 - 他们必须实际找到需要更新的字符串/新翻译)。如果你正确使用翻译记忆库工具也会更容易(文件末尾的新字符串)。
ad 2)。最好的想法是仅从服务器或其他进程发送资源密钥;其他方法可能是使用分隔符附加资源键和可能的数据(即数值),因此可以重新创建消息并将其重新格式化为本地语言。
ad 3)。我已经看到了几种本地化数据库的方法,但最好的(不仅是我的意见,还有IEEE成员)是存储资源键并使用适当的语言环境在客户端重新创建数据。当然这适用于预先安装的数据,如果你让用户输入数据,其他问题就会出现......没有银弹,需要考虑什么在他/她的环境中最有效。我倾向于包含一个识别语言的外键列,但它实际上取决于将要存储的数据类型。
不幸的是i18n并没有在此结束,请记住正确格式化日期和数字,以便使用您的程序的人可以理解它们。而且,如果您碰巧有一些字符串列表,排序顺序也应该依赖于语言环境(它称为整理)。 太阳曾经(现在我们心爱的甲骨文)拥有相当不错的i18n路径,你可以在这里找到:http://download.oracle.com/javase/tutorial/i18n/index.html。
如果你想阅读有关i18n和L10n主题的好书,这将为你节省多年的学习这些主题(虽然没有必要教会你如何编程),微软出版社有一本很好的书:“开发国际软件“ - http://www.amazon.com/Developing-International-Software-Dr/dp/0735615837。它仍然相关,虽然很老。
答案 1 :(得分:2)
1)我通常将所有内容保存在一个文件中,并使用表示属性使用位置的名称。例如,我的前缀是“view”和“menu”
2)是的,传递密钥使事情变得更简单,使服务器代码更容易测试。它还避免了必须将区域设置信息传递给服务器以使其决定客户端的语言。它是一个厚客户端,所以让它处理本地化。
3)我之前没有本地化数据(通常只是标签和静态UI verbage),但我可能倾向于使用一个包含所有本地化字符串和语言环境的表来开始(只是为了保持简单) 。我不确定您在参考用户界面时所询问的内容,但我建议您确保您使用的任何字符集都允许您想要支持的所有语言。请务必阅读Joel Spolsky撰写的文章:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)