首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java本地化最佳实践

Java本地化最佳实践
EN

Stack Overflow用户
提问于 2010-09-03 02:15:46
回答 2查看 7.7K关注 0票数 18

我有一个带有服务器和Swing客户端的Java应用程序。现在我需要本地化用户界面,并且可能还需要特定于区域设置的一些数据。有几件具体的事情我想听听你的意见。

  1. 如何将UI的本地化字符串分发到属性文件中?在我的应用程序中,有几个视图,每个视图都有几个面板。我应该为每个面板或视图使用每种语言的一个本地化文件,还是应该将一种语言的所有翻译保存在同一个文件中?我目前倾向于每个视图和语言一个文件,但我不确定我应该如何处理出现在许多地方的一些领域特定术语。在几个文件上有相同的翻译听起来不太好。
  2. 服务器抛出一些异常,其中包含一条应该显示给用户的消息。我可以从会话中获取选定的语言环境并在服务器上处理本地化,但我觉得将所有本地化文件都保存在客户端会更好。我一直在考虑只从服务器发送一个本地化关键字,其中包含一些错误特定信息的占位符,它将与异常一起发送。则客户端可以基于本地化关键字构造消息,并用错误特定信息替换占位符。这听起来像是一个处理它的好方法吗,或者还有其他选择吗?通常,我的异常消息包含一些附加信息,这些信息会因每种情况而变化。例如,可以是“用户名为Khilon的用户已存在”,在这种情况下,属性文件中的字符串将类似于“用户名为{0}的用户已存在”。
  3. 数据的本地化是我最不清楚的区域。因为我不确定它是否会被需要,所以到目前为止我还没有做太多的计划。数据库部分听起来足够简单,基本上只需要一个用于字符串的附加表和一个列来告诉字符串是哪个语言环境的。虽然我不确定是否为每个数据表(例如产品和Product_names)都有一个本地化表是最好的,还是可以为所有数据表使用一个本地化字符串的表。真正棘手的部分是如何处理UI,因为在某种程度上,用户需要以多种语言输入对象的文本。实际上,这可能意味着,例如,芬兰的工人将用芬兰语和英语为对象命名,然后另一个国家的工人可以将其翻译成自己的语言。如果你们中的任何人做过类似的事情,我很高兴听到你们是如何做到的。

我非常感谢所有能与我分享他们的经验的人。

如果你碰巧知道任何关于这个主题的特别好的网站或书籍,我将很高兴听到他们。当然,我已经做了一些谷歌搜索,并阅读了一些关于本地化的文章,但还没有什么令人兴奋的事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-03 03:01:03

实际上,您正在谈论的是国际化(i18n),而不是本地化(L10n)。根据我的经验,你走在正确的道路上。

公元1年)。每个视图和区域设置一个属性文件(不是必须的语言,因为您可能希望根据国家/地区对某些语言使用不同的翻译,例如,对英国和美国英语使用不同的字符串,因此区域设置不同)是正确的方法。由于应用程序的发展趋势,当你只想修改一个视图时,它可以节省一大笔钱(因为翻译者甚至会为他们不会接触的东西向你收费-他们实际上必须找到需要更新/新翻译的字符串)。如果操作得当(总是在文件末尾添加新字符串),还可以更容易地使用翻译记忆库工具。

公元2年)。最好的想法是只从服务器或其他进程发送资源键;其他方法可以附加资源键,并可能使用分隔符附加数据(即数字值),以便可以重新创建消息并将其重新格式化为本地语言。

公元3年)。我见过几种本地化数据库的方法,但最好的方法(这不仅是我的观点,也是IEEE成员的观点)是存储资源键并使用适当的语言环境在客户端重新创建数据。当然,这适用于预安装的数据,如果您允许用户输入数据,则会出现其他问题……没有什么灵丹妙药,人们需要思考什么最适合他/她的环境。我倾向于包含一个外键列来标识语言,但这实际上取决于要存储的数据的种类。

不幸的是,i18n并没有在这里结束,请记住正确格式化日期和数字,以便使用您的程序的人能够理解它们。而且,如果您碰巧有一些字符串列表,排序顺序也应该取决于区域设置(称为排序规则)。Sun过去有(现在我们深爱的甲骨文)有相当好的i18n踪迹,你可以在这里找到:http://download.oracle.com/javase/tutorial/i18n/index.html

如果你想阅读有关i18n和L10n主题的好书,这将节省你学习这些主题的时间(虽然不是必须的,但会教你如何编程),微软出版社有一本很好的书:“开发国际软件”- http://www.amazon.com/Developing-International-Software-Dr/dp/0735615837。它仍然是相关的,尽管相当古老。

票数 13
EN

Stack Overflow用户

发布于 2010-09-03 03:02:47

1)我通常将所有内容都保存在一个文件中,并使用表示属性使用位置的名称。例如,我以"view“和"menu”作为前缀。

  • view.add_request.title
  • view.add_request.contact_information.sectionheader
  • view.add_request.contact_information.first_name.label
  • view.add_request.contact_information.last_name.label
  • menu.admin.user_management.add_user.label
  • menu.admin.user_management.add_role.label

2)是的,传递密钥会让事情变得更简单,也会让服务器代码更容易测试。它还避免了将区域设置信息传递给服务器,让服务器决定客户端的语言。它是一个胖客户端,所以让它来处理本地化。

3)我以前没有本地化过数据(通常只有标签和静态UI谓词),但我可能倾向于使用包含所有本地化字符串和地区的单个表(为了简单起见)。我不确定您在参考UI时所问的是什么,但我建议您确保您使用的任何字符集都支持您想要支持的所有语言。请务必阅读Joel Spolsky的题为:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)的文章

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3629945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档