我从事Java软件的本地化工作,我的项目同时拥有.properties文件和XML资源。我们目前使用评论来指导译员不翻译某些字符串,但评论的问题是他们不是机器可读的。如何将资源指定为不需要翻译?
我能想到的唯一解决方案是在_DNT_
之前加上每个do-not-translate关键字的前缀,并训练我们的翻译工具忽略这些条目。有没有人有更好的主意?
我从事Java软件的本地化工作,我的项目同时拥有.properties文件和XML资源。我们目前使用评论来指导译员不翻译某些字符串,但评论的问题是他们不是机器可读的。如何将资源指定为不需要翻译?
我能想到的唯一解决方案是在_DNT_
之前加上每个do-not-translate关键字的前缀,并训练我们的翻译工具忽略这些条目。有没有人有更好的主意?
你可以将文件分解成要翻译的文件或不需要翻译的文件,然后只发送要翻译的文件? (不知道结构,哈日DTO知道回答时,如果这是实际的...)
Eclipse的JDT也使用意见,以防止某些字符串的翻译:
How to write Eclipse plug-ins for the international market
我想你的翻译工具应该以类似的方式工作?
像axelclk贴在他的链接...日食提供
// $ NON-NLS-1 $
声明,通知,在该行的第一个字符串不应该翻译项目。所有其他字符串可以通过调用 Source-> Externalize Strings
外部字符串包括您想要支持的所有语言。
文件,其中包括翻译看起来像:其中阅读翻译 PluginPage.Error1 = text1的 PluginPage.Error2 =文本2
类
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$
编辑:
当一个字符串被外化并且您想使用原始字符串时,您可以从所有属性文件中删除外部化字符串,而不使用默认字符串。当Bundle找不到与本地语言匹配的消息文件时,使用默认值。
但是这在运行时不起作用。
最简单的解决方案是不要将不转换字符串(DNT)放到资源文件中。
的.properties文件没有提供多少在元数据处理的方式,因为你没有在运行时需要的数据,其在的.properties存在文件将是一个副作用,而不是东西这是可取的。也要考虑,部分DNT中包含可翻译字符串中包含的内容(如品牌名称或URI)的内容。
"IDENTIFIER english en en en" -> "french fr IDENTIFIER fr fr"
据我所知,即使是像XLIFF标准没有考虑到的DNTs考虑,你必须通过自定义元数据文件,terminology files和/或意见(如XLIFF的note元素对其进行管理)。
如果您决定在属性文件中使用不翻译注释,我建议您遵循Eclipse convention。这没什么特别的,但如果我们都使用相同的魔术串,生活会更容易!
(Eclipse不真正支持DO-NOT-翻译评论,因为据我所知,但Tennera Ant-Gettext具有从资源包转换成gettext的PO文件时使用上述方案的实现。)
是的,我们可以移动不要将字符串转换成他们自己的文件,保持他们的位置。问题在于你的资源变得混乱。虽然不是世界上最糟糕的事情。谢谢 – 2009-03-06 04:21:16
低技术解决方案难以解决译员的错误:-) 资源是否以ResourceBundle的形式完成? – TofuBeer 2009-03-06 04:22:51