java國際化編程示例代碼

根據本地系統環境獲取資源文件

在這裏插入圖片描述
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,返回相應的值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章