Java属性文件本地化&字符编码问题

时间:2011-11-21 11:49:14

标签: java eclipse localization internationalization web

我正在开发一个Java Web应用程序,它现在处于开发的最后阶段,剩下的工作之一就是本地化。我们正在为每个支持的语言环境使用属性文件。 我发现的问题是某些unicode字符在Web浏览器中没有正确显示。网页具有在charset元标记中指定的UTF-8编码,并且浏览器已正确检测到它(在Firefox视图中 - >字符编码似乎选择了正确的字符编码)。我认为问题来自于这样一个事实:当应用程序将文本显示为UTF-8时,属性文件以ISO * xxxx编码保存,这恰好是一些日食默认设置。

我在这里找到了一个类似的问题:Java properties UTF-8 encoding in Eclipse建议我安装Resource Bundle插件。我安装并使用插件来编辑相应的属性,但我仍有问题。

是否存在快速解决方案(我的意思是一种解决方案,不会在应用程序中引起太多变化,因为它几乎完成了阶段)将克服我遇到的问题。

也许我应该提一下,我正在使用Firefox 7在Ubuntu Linux OS下开发和观察问题。 提前谢谢。

编辑: 我没有提到重要的事情。我的用户界面是用GWT编写的,属性是通过一个接口公开的,该接口在getT上有注释,GWT用它来内部创建该接口的实现并链接到相应的属性。所以我想我对如何实际读取属性没有多少控制权,或者至少我不知道如何在GWT中做到这一点。

4 个答案:

答案 0 :(得分:4)

Java properties files是ISO 8859-1(拉丁文1)编码。其他字符必须使用转义的Unicode表示。

因此,您不应将Latin 1之外的Unicode字符直接输入本地化文件。这些字符应该以Unicode转义的形式输入。

如果您有一堆UTF-8(或其他)编码的属性文件,您可以使用JDK中的native2ascii工具将这些文件转换为Latin 1转义的unicode。此外,Ant有一个native2ascii task

其他海报指出了解决这个问题的方法。但就个人而言,我更愿意坚持使用属性资源文件中的标准编码 - 这样它就可以解决所有问题。没有什么可以阻止你以UTF-8编码编写文件并将它们转换为Latin 1转义unicode作为构建的一部分(例如Ant任务)。

答案 1 :(得分:4)

这里有两个完全不同的问题:

  • 属性文件是否以正确的编码保存?如果在eclipse中编辑它们,则必须在项目属性中设置文本文件编码。请注意,此设置保存在项目的.settings子目录中。
  • 是否使用正确的编码来读取属性文件?如果您在代码中阅读它们,请务必使用InputStreamReader来设置编码。如果他们被某些框架读取,您必须查看其API和配置,以确定是否可以指定编码。

我建议尽可能避免使用unicode转义。

答案 2 :(得分:2)

根据this GWT localization page(这是一个使用注释方法进行本地化的教程,请参阅更新后的答案),它说

  

国际字符集编码

     

当您将应用程序的界面国际化时,请记住   您支持的语言可能包含不在ASCII中的字符   字符集。因此,都在HTML主机页面中   (StockWatcher.html),以及包含的Java属性文件   翻译,您必须将编码设置为UTF-8。

在“Create StockWatcherConstant_de.properties”标题下的一个例子中,它说:

  

将文件的编码更改为UTF-8。

     

选择文件,然后从Eclipse菜单栏中选择File>属性或右键单击。

     

Eclipse打开“属性”窗口。

     

在文本文件编码中,选择其他UTF-8。应用并保存更改。

     

注意:取决于您的   Eclipse配置,当您应用更改时,您可能会得到这个   警告:UTF-8与内容类型中定义的编码冲突   (ISO-8859-1)。你还想设置它吗?你可以忽略   警告并应用更改。

答案 3 :(得分:1)

我也遇到过同样的问题。我通过编写自己的Control扩展java.util.ResourceBundle.Control来克服这个问题。在将资源包作为propoerty文件读取时,覆盖包含相关字符集的重要方法是newBundle( ... ) 5个参数。

虽然不难;我所采用的方法是长期以来做得很好。

另一种选择是使用cal10n(http://cal10n.qos.ch/),但这可能需要进行重要的改造。