使用 ICU4C 和 XLIFF 进行本地化

Localizing with ICU4C and XLIFF

Localizing with ICU 建议以 XLIFF 格式保存可本地化的数据。

所以我使用GNU xgettext将字符串提取为gettext格式文件,然后使用po2xliff.

将它们转换为XLIFF文件

最后我尝试用XLIFF To ICU ResourceBundle Format Converter把它们转成ICU资源格式,发现不行。它抱怨错误:

The XLIFF document is invalid, please check it first: 
Line 2, Column 68
Error: cvc-elt.1: Cannot find the declaration of element 'xliff'.

几乎相同的错误was reported years ago,尚未修复。

糟糕的 XLIFF 文件的第 2 行是:

 <xliff xmlns="urn:oasis:names:tc:xliff:document:1.1" version="1.1">

好吧,我根据 example.xlf in Localizing with ICU page 编辑了该行(示例文件中有很多错别字),重试,结果是:

ERROR: java.lang.NullPointerException

那么使用 ICU4C 和 XLIFF 进行本地化的最佳做法是什么?

我无法回答您有关使用 ICU4C 和 XLIFF 进行本地化的最佳实践的问题,但我在使用构建 ICU 资源时 Java JDK 版本错误。

在我的系统上,我在使用 jdk1.7.0_67 时看到错误。如果我使用 jdk1.6.0_45,一切正常。这是 ICU 52.1。您可能需要验证您使用的 ICU 版本是否正确 JDK。

考虑到 XLIFF 到 ICU ResourceBundle 格式转换器尚不支持 XLIFF 1.2(已经存在多年),我建议远离 XLIFF 并使用 po 文件进行本地化。有几种支持 po 文件的本地化工具:在 this question and this one you will find a fairly large number of localization tools that handle po files, and new ones are still being developped (like this one).

的答案中

当然不是每个译员都能够或愿意处理 po 文件,但是通过 po 将您的软件本地化的机会比尝试采用 XLIFF 方式要好得多。