如何格式化 i18n 文件?

how to format i18n files?

我得到了三个国际化文件: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 文件,因此应该复制一个文件中存在而另一个文件中不存在的行,并且这些行的顺序等于?

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

如果您使用的是 Eclipse,请检查:http://marketplace.eclipse.org/content/eclipse-resourcebundle-editor

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

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

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

看看java.util.PropertyResourceBundle。方便class读取属性文件,可以获得Set<String>的密钥。这应该有助于比较几个资源文件的内容。

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

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

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

先去找一个能保持固定排版的译者编辑器。与 .properties 类似的 gettext (.po/.pot) 格式可能是更好的选择,具体取决于工具。

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

The effort for i18n should not stop at providing a list of phrases to translate, but some info where needed (disambiguating note), and maybe even a glossary for a consistent use of the same term. The text presented to the user is a very significant of the products quality and appeal. Using different synonyms may make the user-interface fuzzy, needlessly unclear, tangled.

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

您应该修复损坏的进程,而不是手动修复文件。汉化成功的过程基本和这个差不多:

  1. 修改英文文件后,发送英文文件进行翻译。我的意思是所有翻译都应该基于英文文件,本地化文件应该重新创建(敬请期待)。
  2. 使用Translation Memory 填写您已有的翻译。这可以由您的翻译服务提供商或您自己完成,如果您真的知道该怎么做(猜猜是什么?这很难)。
  3. 让翻译人员翻译缺失的字符串。
  4. 放回本地化文件。
  5. 在将软件发布给 public 之前,请某人引导语言审阅者完成 UI 并更正错误翻译。

我故意跳过了几个步骤(比如本地化测试、使用伪翻译和搜索 i18n 缺陷等),但是如果您使用这种过程,您的属性文件应该始终保持同步。
现在您的问题可以简化为已经提出(并回答)的问题: Managing the localization of Java properties files.