根据本地系统环境获取资源文件
msg_en_US.properties 内容如下:name=Tom
msg_zh.properties 内容如下:university=\u534e\u4e1c\u5e08\u8303\u5927\u5b66
msg_zh_CN.properties 内容如下: name=\u5f20\u4e09
package com.torey;
import java.util.*;
/**
* @ClassName:GuavaUtil
* @Description:
* @author: Torey
*/
public class NewHelloWord {
public static void main(String[] args) {
try{
showValeu(Locale.getDefault().toString(), null);
showValeu("zh", null);
showValeu("en", "US");
}catch (Exception ex){
System.out.println("报错了:"+ex.getMessage());
}
}
public static void showValeu(String lang, String country) {
if (null == lang && null == country || null == lang) {
return;
}
Locale myLocale = null;
if (null != country) {
myLocale = new Locale(lang, country);
} else {
myLocale = new Locale(lang);
}
System.out.println("语言环境为:"+myLocale);
//根据指定语言_国家环境加载资源文件
//这里是加载messaage_zh_CN这个文件
ResourceBundle bundle = ResourceBundle.getBundle("msg", myLocale);
//获取资源文件中的所有key
Enumeration<String> keys = bundle.getKeys();
//从资源文件中取得消息
while (keys.hasMoreElements()) {
String key=keys.nextElement();
System.out.println(key+":"+bundle.getString(key));
}
}
}
运行结果:
Locale类
- Locale(zh_CN,en_US)
- 语言,zh,en
- 国家/地区,CN,US等
- 其他变量(variant)(几乎不用)
- Locale方法
- getAvailableLocales()返回所有的可用Locale
- getDefault()返回默认的Locale
语言文件(1)
- 语言文件
- 一个Properties文件
- 包含K-V对,每行一个K-V
- 命名规则
- 包名+语言+国家地区.properties,(语言和国家地区可选)
- message.properties
- message_zh.properties
- message_zh_CN.properties
语言文件(2)
- 语言文件
- 存储文件必须是ASCII码文件
- 如果是ASCII以外的文字,必须用Unicode的表示\uxxxxx
- 可以采用native2ascii.exe(%JAVA_HOME%\bin 目录下)进行转码
命令如下:
ResourceBundle类
- ResourceBundle
- 根据Locale要求,加载语言文件(Properties文件)
- 存储语言集合中所有的K-V对
- getString(String key)返回所对应的value
- ResourceBundle根据key找value的查找路径
- 包名_当前Locale语言_当前Locale国家地区_当前Locale变量(variant)注:一般很少用
- 包名_当前Locale语言_当前Locale国家地区
- 包名_当前Locale语言
- 包名_默认Locale语言_默认Locale国家地区_默认Locale变量(variant)注:一般很少用
- 包名_默认Locale语言_默认Locale国家地区
- 包名_默认Locale语言
- 包名
- 根据Properties树结构,把第一步的Properties文件及父级文件全部加载,作为后续的K-V集合
- ResourceBundle 加载文件总结
- Locale:是由语言和国家/地区组合起来的
- 所有的Properties文件形成一棵树
- 指定Locale后,ResourceBundle就形成一个树
- 先找到第一个节点文件(搜索路径)
- 然后将该节点的所有父节点文件全部加载
- 根据所找的的文件内容和key,返回相应的值