我致力于Java软件的本地化,我的项目同时拥有.properties文件和XML资源。我们目前使用注释来指示翻译人员不翻译某些字符串,但评论的问题在于它们不是机器可读的。
我能想到的唯一解决方案是为每个do-not-translate键添加前缀_DNT_
,并训练我们的翻译工具忽略这些条目。有没有人有更好的主意?
答案 0 :(得分:4)
您可以将文件分解为要翻译的文件或不翻译的文件,然后只将它们发送给要翻译的文件吗? (如果可行的话,不知道在回答的时候知道的结构......)
答案 1 :(得分:0)
Eclipse JDT还使用注释来阻止某些字符串的转换:
How to write Eclipse plug-ins for the international market
我认为您的翻译工具应该以类似的方式运作?
答案 2 :(得分:0)
就像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找不到与本地语言匹配的消息文件时,将使用默认值。
但这不是在运行时。
答案 3 :(得分:0)
最简单的解决方案是不在资源文件中放置do-not-translate字符串(DNT)。
.properties 文件在元数据处理方面没有太多提供,并且由于您在运行时不需要数据,因此它存在于 .properties 文件中会是一种副作用,而不是一种可取的东西。还要考虑部分DNT,其中有一些无法翻译的内容包含在可翻译的字符串中(例如品牌名称或URI)。
"IDENTIFIER english en en en" -> "french fr IDENTIFIER fr fr"
据我所知,即使像XLIFF这样的标准也没有考虑DNT,您必须通过自定义元数据文件terminology files和/或评论(例如XLIFF中的note元素。
答案 4 :(得分:0)
如果您决定在属性文件中使用do-not-translate注释,我建议您按照Eclipse convention进行操作。这没什么特别的,但是如果我们都使用相同的魔法弦,生活会更容易!
(据我所知,Eclipse实际上并不支持DO-NOT-TRANSLATE注释,但是Tennera Ant-Gettext具有上述方案的实现,在从资源包转换为Gettext PO文件时使用。 )