根據本地系統環境獲取資源文件
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,返回相應的值