ResourceBundle 使用

2016/01/01 Java

ResourceBundle 是 Java 中专门用来处理国际化资源的类。

ResourceBundle

此类相当于在原有的 Properties 上扩充根据国别语言环境获取变量不同的值。

详细来说就是,读取资源属性文件(properties),然后根据 .properties 文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。

properties 文件命名规范为 自定义名_语言代码_国别代码.properties, 默认的供未指定国别语言情况下使用的为 自定义名.properties

如:

myres_en_US.properties
myres_zh_CN.properties
myres.properties

注意: 资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.

实例

定义三个资源文件,放到src的根目录下面(必须这样,或者你放到自己配置的calsspath下面。

myres.properties

aaa=good 
bbb=thanks

myres_en_US.properties

aaa=good 
bbb=thanks

myres_zh_CN.properties

aaa=\u597d 
bbb=\u591a\u8c22
import java.util.Locale; 
import java.util.ResourceBundle; 

/** 
* 国际化资源绑定测试 
*/ 
public class TestResourceBundle { 
        public static void main(String[] args) { 
                Locale locale1 = new Locale("zh", "CN"); 
                ResourceBundle resb1 = ResourceBundle.getBundle("myres", locale1); 
                System.out.println(resb1.getString("aaa")); 

                ResourceBundle resb2 = ResourceBundle.getBundle("myres", Locale.getDefault()); 
                System.out.println(resb1.getString("aaa")); 

                Locale locale3 = new Locale("en", "US"); 
                ResourceBundle resb3 = ResourceBundle.getBundle("myres", locale3); 
                System.out.println(resb3.getString("aaa")); 
        } 
}

运行结果:

好 
好 
good 

Process finished with exit code 0

Locale

Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。

构造方法:

 Locale(String language)
 Locale(String language, String country)
 Locale(String language, String country, String variant)

常用方法:

# 获取 ISO 国家代码
getCountry
# 获取 ISO 语言代码
getLanguage
# 获取适合向用户显示的国家名
getDisplayCountry
# 获取适合向用户显示的语言名
getDisplayLanguage

Search

    Table of Contents