2009-03-06 77 views
1

我从事Java软件的本地化工作,我的项目同时拥有.properties文件和XML资源。我们目前使用评论来指导译员不翻译某些字符串,但评论的问题是他们不是机器可读的。如何将资源指定为不需要翻译?

我能想到的唯一解决方案是在_DNT_之前加上每个do-not-translate关键字的前缀,并训练我们的翻译工具忽略这些条目。有没有人有更好的主意?

回答

4

你可以将文件分解成要翻译的文件或不需要翻译的文件,然后只发送要翻译的文件? (不知道结构,哈日DTO知道回答时,如果这是实际的...)

+0

是的,我们可以移动不要将字符串转换成他们自己的文件,保持他们的位置。问题在于你的资源变得混乱。虽然不是世界上最糟糕的事情。谢谢 – 2009-03-06 04:21:16

+0

低技术解决方案难以解决译员的错误:-) 资源是否以ResourceBundle的形式完成? – TofuBeer 2009-03-06 04:22:51

0

像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找不到与本地语言匹配的消息文件时,使用默认值。

但是这在运行时不起作用。

0

最简单的解决方案是不要将不转换字符串(DNT)放到资源文件中。

的.properties文件没有提供多少在元数据处理的方式,因为你没有在运行时需要的数据,其在的.properties存在文件将是一个副作用,而不是东西这是可取的。也要考虑,部分DNT中包含可翻译字符串中包含的内容(如品牌名称或URI)的内容。

"IDENTIFIER english en en en" -> "french fr IDENTIFIER fr fr" 

据我所知,即使是像XLIFF标准没有考虑到的DNTs考虑,你必须通过自定义元数据文件,terminology files和/或意见(如XLIFF的note元素对其进行管理)。

0

如果您决定在属性文件中使用不翻译注释,我建议您遵循Eclipse convention。这没什么特别的,但如果我们都使用相同的魔术串,生活会更容易!

(Eclipse不真正支持DO-NOT-翻译评论,因为据我所知,但Tennera Ant-Gettext具有从资源包转换成gettext的PO文件时使用上述方案的实现。)