2010-11-20 44 views
0

Grails也使用Java属性文件。如何保持Java属性文件的可读性

我可以使用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 =假 

回答

1

我认为你的诊断是错误的。

\ uXXXX语法是一个属性感知编辑器用来保存非ASCII序列的代码,因为它在编码方案和平台上都很强大,我认为这就是发生在这里的事情。

请回顾一下您的步骤,看看哪个编辑器保存在这个表单中,然后继续使用这个编辑器(以及其他\ uXXXX知道的)或远离它。您可能想告诉您的母语口译员使用您选择的相同编辑器。

+0

在这种情况下,它看起来并不像编辑器,它是默认的Grails行为。 – mfloryan 2010-11-20 18:41:49

0

我与SVN无关 - 我不这么认为。在Grails中有一个配置选项来规定这种行为。在Config.groovy文件,你会发现下面一行:

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

这意味着,native2ascii命令适用于属性文件,并将它们转换为Unicode符号。如果要保留原始本地语言字符集,可以将此选项设置为false。您也可以使用native2ascii -reverse命令始终反转您的文件。

+0

'native2ascii'命令不适用于源属性文件,而是应用于目标文件(执行'grails run-app'或'grails war'时)。 - 源文件保持不变。 – robbbert 2010-11-20 18:52:05

0

我会去托尔比约恩Ravn的安徒生的回答是:的.properties文件已在专门的编辑器,在其ASCII符号(为\ uXXXX)自动保存Unicode字符被编辑。

Alexander Pogrebnyak提到过这样的编辑器,他们在“Java世界”中很常见。

mfloryan提到了native2ascii工具(它随JDK一起提供),它在引擎盖下进行转换。


现在,在所有的一些背景:

的Java的国际化机制大多是以PropertyResourceBundle类,ApiDoc状态:

构建的PropertyResourceBundle 实例来自InputStream需要 输入流编码在 ISO- 8859-1。在这种情况下,不能在 ISO-8859-1编码表示的字符 必须 用Unicode转义表示

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

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

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

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