如何将资源指定为不翻译?
-
03-07-2019 - |
题
我致力于Java软件的本地化,我的项目同时拥有.properties文件和XML资源。我们目前使用注释来指示翻译人员不翻译某些字符串,但评论的问题在于它们不是机器可读的。
我能想到的唯一解决方案是为每个do-not-translate键添加前缀 _DNT _
,并训练我们的翻译工具忽略这些条目。有没有人有更好的主意?
解决方案
您可以将文件分解为要翻译的文件或不翻译的文件,然后只将它们发送给要翻译的文件吗? (如果可行的话,不知道在回答的时候知道的结构......)
其他提示
最简单的解决方案是不在资源文件中放置do-not-translate字符串(DNT)。
.properties 文件在元数据处理方面没有太多提供,并且由于您在运行时不需要数据,因此它存在于 .properties 文件中会是一种副作用,而不是一种可取的东西。还要考虑部分DNT,其中有一些无法翻译的内容包含在可翻译的字符串中(例如品牌名称或URI)。
"IDENTIFIER english en en en" -> "french fr IDENTIFIER fr fr"
据我所知,甚至像 XLIFF 不要考虑DNT,你必须通过自定义元数据文件管理它们,术语文件和/或评论(例如 note 元素。”
就像axelclk发布在他的链接中...... eclipse提供了一个
// $ NON-NLS-1 $
声明通知项目该行中的第一个字符串不应被翻译。你可以通过调用找到所有其他字符串 Source-> Externalize Strings
外部字符串包括您要支持的所有语言。
包含翻译的文件如下: PluginPage.Error1 = text1 PluginPage.Error2 = text2
阅读翻译的课程
private static final String BUNDLE_NAME = "com.plugin.name"; //$NON-NLS-1$
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
private PluginMessages() {
}
public static String getString(String key) {
// TODO Auto-generated method stub
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
你可以这样称呼:
String msg = PluginMessages.getString("PluginPage.Error2"); //$NON-NLS-1$
修改强>
当字符串外部化并且您想要使用原始字符串时,可以从所有属性文件中删除externalize字符串,而不使用默认字符串。当Bundle找不到与本地语言匹配的消息文件时,将使用默认值。
但这不是在运行时。
如果您决定在属性文件中使用do-not-translate注释,我建议您按照 Eclipse惯例。这没什么特别的,但是如果我们都使用相同的魔法弦,生活会更容易!
(据我所知,Eclipse实际上并不支持DO-NOT-TRANSLATE评论,但 Tennera Ant -Gettext 具有上述方案的实现,在从资源包转换为Gettext PO文件时使用。)