是不得不重新总结一下国际化问题的时候了,因为今天浪费了我整整一个下午的时间。
1.定义国际化资源文件
在resources目录里面新建一下文件:
ApplicationResources.properties ApplicationResources_zh_CN.properties
文件的内容格式为“key=value”
2.在代码中调用国际化资源文件
// 声明资源包 private ResourceBundle bundle; // 通过类加载器获取资源包 bundle = PropertyResourceBundle.getBundle("ApplicationResources"); // 获取 i18n 字符串 bundle.getString("ApplicationTitle")
国际化就这么简单,上面的内容只是为了本文的完整性。当你运行程序的时候会发现乱码,MyEclipse等集成开发环境除外。下面是讲解重点:
出现乱码的原因
Property 文件中,使用的编码方式根据机器本身的设置可能是GBK或者UTF-8。而在Java程序中读取Property文件的时候使用的是Unicode编码方 式,这种编码方式不同会导致中文乱码。因此需要将Property文件中的中文字符转化成Unicode编码方式才能正常显示中文。
有的IDE会自动给你转码,而有的不会。在不知情的情况下可能转码2次,也可能发生转码不对的情况。这是要注意检查资源文件的编码格式,同时利用我后面提供的批处理文件验证自己转码是否正确,一时解决不了的话可以直接用批处理的输出结果替换到打包文件。
3.使用 native2ascii 工具将资源文件转为 Unicode 编码
native2ascii -[options] [inputfile [outputfile]] 说明: -[options]:表示命令开关,有两个选项可供选择 -reverse:将Unicode编码转为本地或者指定编码,不指定编码情况下,将转为本地编码。 -encoding encoding_name:转换为指定编码,encoding_name为编码名称。 [inputfile [outputfile]] inputfile:表示输入文件全名。 outputfile:输出文件名。如果缺少此参数,将输出到控制台。
下面是我提供给大家的一个小工具 i18n.bat,可以批量转换指定目录下所有资源文件(请不要修改版权信息,谢谢!版本更新恕不通知)
4.通过 Maven 管理国际化资源文件
也许你比我还懒,批处理都不愿意使用。好吧,我再提供一种更好的办法来满足你。
抱歉:我的编辑器将尖括号转码了,请您自己用批量代替的方法转换一下吧。
src/main/resources *_zh*.properties true org.codehaus.mojo native2ascii-maven-plugin 1.0-beta-1 native2ascii GBK *_zh*.properties
至此,Java下的国际化问题就完美解决了,如果您有什么问题欢迎回复~