代码之家  ›  专栏  ›  技术社区  ›  Carlos

Java本地化最佳实践

  •  18
  • Carlos  · 技术社区  · 15 年前

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

    我非常感谢所有能和我分享经验的人。

    2 回复  |  直到 15 年前
        1
  •  13
  •   Paweł Dyda    15 年前

    实际上,您所说的是国际化(i18n),而不是本地化(L10n)。 根据我的经验,你走的路是对的。

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

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

    如果你想读一本关于i18n和L10n的好书,那么你就可以省下多年的时间来学习这些主题(虽然没必要教你如何编程),微软出版社有一本很棒的书:“开发国际软件”- http://www.amazon.com/Developing-International-Software-Dr/dp/0735615837 . 它仍然相关,虽然相当古老。

        2
  •  2
  •   Javid Jamae    15 年前

    • view.add\u请求.职务
    • view.add\u请求.联系人_信息.sectionheader
    • view.add\u请求.联系人_信息.名字.标签
    • menu.admin.user\u管理.添加_角色.标签

    3) 我以前没有本地化过数据(通常只是标签和静态UI详细信息),但我可能倾向于使用一个表,其中包含所有本地化的字符串和区域设置(只是为了保持简单)。我不知道你问的关于UI的问题是什么,但是我建议你确保你使用的任何字符集都允许你想要支持的所有语言。请务必阅读Joel Spolsky的文章,标题为: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)