Java本地化最佳实践

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

我有一个带有服务器和Swing客户端的Java应用程序。现在我需要本地化用户界面,并且可能还需要某些数据需要特定于语言环境。有几件事我特别想听听你的意见。

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

提问于
用户回答回答于

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

每个视图和区域设置一个属性文件(不是必要的语言,因为您可能希望根据国家/地区对某些语言使用不同的翻译,即对英国人使用不同的字符串,因此不同的语言环境使用不同的语言)是正确的方法。由于应用程序趋于发展,当您只想修改一个视图时,它可以节省大量资金(因为翻译人员会为您收取一些他们不会涉及的费用 - 即他们必须实际找到需要更新/新翻译)。如果您正确使用翻译记忆库工具(在文件末尾添加新字符串),使用它也会更容易。

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

我已经看到了几种本地化数据库的方法,但最好的方式(不仅仅是我的观点,还有IEEE的成员)是存储资源密钥并使用合适的区域设置在客户端重新创建数据。当然,这也适用于预安装的数据,如果你让用户输入数据,其他问题就会出现......没有银弹,需要考虑在他/她的情况下最好的方法。我会倾向于包含一个可以识别语言的外键列,但它确实取决于将要存储的数据类型。

用户回答回答于

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 verbage),但我可能会倾向于使用一个包含所有本地化字符串和区域设置的表(以保持简单)。我不确定你在参考UI时询问什么,但是我建议你确保你使用的任何字符集都允许你想要支持的所有语言。请务必阅读Joel Spolsky的文章:绝对最低限度的每一位软件开发人员,积极肯定Unicode和字符集

扫码关注云+社区