我致力于Java软件的本地化,我的项目同时拥有.properties文件和XML资源。我们目前使用注释来指示翻译人员不翻译某些字符串,但评论的问题在于它们不是机器可读的。

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

有帮助吗?

解决方案

您可以将文件分解为要翻译的文件或不翻译的文件,然后只将它们发送给要翻译的文件吗? (如果可行的话,不知道在回答的时候知道的结构......)

其他提示

Eclipse JDT还使用注释来阻止某些字符串的转换:

如何为国际市场编写Eclipse插件

我认为您的翻译工具应该以类似的方式运作?

最简单的解决方案是不在资源文件中放置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文件时使用。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top