Java的国际化例子

阅读更多
PropertyResourceBundle bundle ;
bundle=(PropertyResourceBundle) ResourceBundle.getBundle("mess", Locale.US);
System.out.println( MessageFormat.format(bundle.getString("hello"),"loren" ) );

PropertyResourceBundle  是 ResourceBundle的子类,使用 ResourceBundle.getBundle来获取实例。
getBundle(String baseName)        
getBundle(String baseName, Locale locale)   
getBundle(String baseName, Locale locale, ClassLoader loader)
以上3个是使用较多的方法。

baseName,是消息文件的基础名,baseName不要加语言和国家后缀。ResourceBundle会自动根据参数、运行环境去查找资源文件。

baseName可以是简单的一个名字,如  "mess",或是带路径的 "config/mess",或是一个完整类名 "org.test.Main",那么它们分别对应的文件是以classpath为根目录进行查找
/mess_xx_xx.properties
/config/mess_xx_xx.properties
/org/test/Main_xx_xx.properties
其实,点和斜杠都是目录分隔符,没有区别。

接下来,说一下语言和国家的查找顺序,如果指定的语言国家的文件不存在,则找系统的语言国家文件,若还是不存在,则找没有后缀的文件,如mess.properties

按它的查找顺序来看,属性文件不添加任何后缀,那么它就是一个默认语言环境。也可以用它来获取属性文件,当作读取配置文件。
例如
jdbc.properties
ResourceBundle resource=.......
driver=resource.getString("driverName");
url=resource.getString("url");

再来说一下最后一个问题MessageFormat.format,它是将一个字符串中的{0}{1}{2}之类的占位符,替换成指定的值。
例如
MessageFormat.format("1+2={0},{1}", 1+2, "passed" );
foramt后的结果就是: 1+2=3,passed

OVER.

你可能感兴趣的:(java,ResourceBundle,i18n)