如何使Java属性文件保持人类可读性

时间:2010-11-20 17:56:33

标签: java grails unicode internationalization translation

Grails也使用Java Properties文件。

我可以使用Google翻译对我的message.properties文件进行初始翻译,甚至可以使用中文等语言。当我在Netbeans或notepad ++中查看时,我可以在新的messages_zh_CN.properties文件中看到实际的中文字符。

但是一旦文件进入svn,当它被签出时,中文字符就不再可见了。您只能看到ISO 8859-1编码。例如:

default.paginate.prev =\u4e0a\u4e00\u9875
default.paginate.next =\u4e0b\u4e00\u6b65
default.boolean.true =\u771f
default.boolean.false =\u5047

一旦应用程序运行,它仍然有效。谷歌翻译是翻译的一个很好的捷径。但在此之后,需要将属性文件发送给母语人士进行编辑。

那么如何才能将ISO 8859-1中的属性文件恢复为人类可读?像这样:

default.paginate.prev =上一页
default.paginate.next =下一步
default.boolean.true =真
default.boolean.false =假

4 个答案:

答案 0 :(得分:1)

对于Eclipse,有一个'Property Editor'插件 - > http://propedit.sourceforge.jp/index_en.html

它完全符合您的要求,在幕后进行unicode-to-glyph-and-back翻译。

答案 1 :(得分:1)

我认为您的诊断错误。

\ uXXXX语法是属性感知编辑器使用的语法,用于保存非ASCII序列,使其在编码方案和平台之间保持稳健,我认为这就是这里发生的事情。

请回溯您的步骤以查看哪个编辑器在此表单中保存,然后继续使用此编辑器(和其他\ uXXXX识别的编辑器)或远离它。您可能希望告诉您的母语翻译人员使用您选择的相同编辑器。

答案 2 :(得分:1)

我会选择ThorbjørnRavnAndersen 的答案: .properties 文件已在专门的编辑器中编辑,该编辑器以ASCII符号自动保存Unicode字符(为\ uXXXX)。

Alexander Pogrebnyak 提到了这样一个编辑器,它们在“Java世界”中很常见。

mfloryan 提到了native2ascii工具(JDK附带的工具),它在幕后进行转换。


现在有一些背景知识:

Java 的i18n机制主要基于PropertyResourceBundle类,ApiDoc表示:

  

构建PropertyResourceBundle   来自InputStream的实例需要   输入流被编码   ISO-8859-1。在那种情况下,人物   无法表现的   必须使用ISO-8859-1编码   由Unicode Escapes代表

因此,作为一种解决方法(!),在Java世界中,您可以使用JDK的native2ascii来转换 .properties 文件,或者使用专门的编辑器保存“Unicode Escapes”但允许您编辑实际的Unicode字符。

相比之下,在 Spring 框架中,默认情况下,i18n机制基于Spring的ResourceBundleMessageSource类,它完全支持Unicode。 Grails 'i18n机制是基于Spring的。

Grails默认设置grails.enable.native2ascii = true旨在启用混合的Spring / Grails和Java环境。 - 如果您不使用Java自己的native2ascii,并且如果您不使用,则既不需要ResourceBundle.getBundle("foo").getKey("bar")工具也不需要特殊的 .properties 文件编辑器。经典Java“JSTL或JSF标签。

使用Grails和Spring,您可以按原样使用Unicode .properties 文件。

答案 3 :(得分:0)

我与SVN无关 - 我不认为。 Grails中有一个配置选项可以指示此行为。在Config.groovy文件中,您将找到以下行:

// enabled native2ascii conversion of i18n properties files
grails.enable.native2ascii = true

这意味着,native2ascii命令应用于属性文件并将其转换为unicode表示法。如果要保留原始本地语言字符集,可以将此选项设置为false。您也可以使用native2ascii -reverse命令反转文件。