如何格式化i18n文件?

时间:2015-01-02 17:31:37

标签: java internationalization

我有三个国际化文件:messages_es.properties,messages_en.properties和messages_pt.properties,这些文件遵循以下规则:

message1=value
message2=value2

它的值根据文件而变化。例如:

messages_en.properties:
hello=welcome
messages_pt.properties:
hello=bem vindo

问题是,在项目构建过程中,这些文件不一致,例如,存在于一个文件中的行不存在于其他文件中,这些行未在这些文件中生成...我想知道是否有一些方法可以轻松地重新排列和格式化那些i18n文件,以便存在于一个文件中但不存在于另一个文件中的行应该被复制并且行被排序等于?

5 个答案:

答案 0 :(得分:2)

有趣的问题是,您正在处理文本文件,因此有很多可能的选项来管理这种情况,但取决于您的场景(源代码控制,ide等)。

如果您正在使用Eclipse检查:http://marketplace.eclipse.org/content/eclipse-resourcebundle-editor

对于IntelliJ:https://www.jetbrains.com/idea/features/i18n_support.html

答案 1 :(得分:0)

是的,消息通常应出现在每个文件中,除非某些密钥的默认消息不需要翻译(可能是技术术语)。不同的IDE对管理消息文件有不同的支持。

就订购消息而言,没有技术上的需要,但它可以帮助人类维护者。任何文本编辑器的排序例程都可以正常工作。

答案 2 :(得分:0)

NetBeans IDE具有跨语言的属性编辑器,并在矩阵中并排显示。同样,有独立的编辑器可以做到这一点。可以假设这样的编辑器会使源文本保持同步并保持一致的布局。

首先寻找能够保持固定布局的翻译编辑器。 gettext( .po / .pot )等类似.properties的格式可能是更好的选择,具体取决于工具。

对于三种以上的语言,使用更多针对翻译器的源格式是有意义的,例如XML格式 xliff (尽管.properties是众所周知的)。并从这个源(通过XSLT)生成几个.properties文件,甚至是ListResourceBundles。

  

i18n的努力不应停止提供短语列表   翻译,但有些信息需要(消除歧义),也许   甚至是一致用于同一术语的词汇表。文本   呈现给用户的是非常重要的产品质量   和上诉。使用不同的同义词可以构成用户界面   模糊的,不必要的,不清楚的,纠结的。

答案 3 :(得分:0)

您遇到的问题是无效的本地化过程。它与属性文件无关,您现在甚至不应该比较这些文件(直到您修复该过程)。 要比较属性文件,您可以使用非常简单的技巧:对每个文件进行排序,并使用标准差异工具来显示差异。当然,你会错过英文文件中的评论和逻辑安排,但至少你可以看到发生了什么。这可以做到,但这是很多手工工作。

您应该修复损坏的进程,而不是手动修复文件。成功的本地化过程与此基本类似:

  1. 修改英文文件后,发送英文文件进行翻译。我的意思是所有翻译应该基于英文文件,并且应该重新创建本地化文件(敬请关注)。
  2. 使用Translation Memory填写您已有的翻译。这可以由您的翻译服务提供商或您自己完成,如果您真的知道如何做(猜猜是什么?很难)。
  3. 让译员翻译缺失的字符串。
  4. 放回本地化文件。
  5. 在向公众发布软件之前,有人通过用户界面走过语言评论员并纠正误译。
  6. 我故意跳过几个步骤(比如本地化测试,使用伪翻译和搜索i18n缺陷等),但是如果你使用这种过程,你的属性文件应该始终保持同步。
    现在你的问题可以简化为已经问过(并回答)的问题: Managing the localization of Java properties files

答案 4 :(得分:-1)

查看java.util.PropertyResourceBundle。这是一个用于读取属性文件的便捷类,您可以获得Set<String>个键。这应该有助于比较几个资源文件的内容。

但我认为更好的方法是将n种语言保存在单个文件中,例如,使用XML并从单一来源生成资源文件。

<entry>
   <key>somekey</key>
   <value lang="en">good bye</value>
   <value lang="es">hasta luego</value>
</entry>