Java 國際化

基本概念

同一套程序代碼可以在不同的語言環境下使用,比如中文、日文、英文環境。

Locale

java.util.Locale 表示特定的地理、政治和文化區域,需要 Locale 來執行任務的操作稱為語言環境的敏感操作。

構造方法

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

public Locale(String language, String country) 

public Locale(String language)

獲取默認 Locale 對象:

public static Locale getDefault() {
    // do not synchronize this method - see 4071298
    return defaultLocale;
}

ResourceBundle

國際化的核心問題在于顯示的語言,通常的做法是定義若干個 .properties 屬性文件(文件內容格式為 "key=value"),然后根據 Locale 環境進行解析。

java.util.ResourceBundle 用于讀取資源文件,讀取時不需要加上文件類型后綴。

// 使用默認 Locale 環境
public static final ResourceBundle getBundle(String baseName)

// 使用指定 Locale 環境
public static final ResourceBundle getBundle(String baseName, Locale locale)

info_en_US.properties:

system.name=EMP Manager System

info_zh_CN.properties:

# 員工管理系統
system.name=\u5458\u5de5\u7ba1\u7406\u7cfb\u7edf
import java.util.Locale;
import java.util.ResourceBundle;

public class Test1 {

    public static void main(String[] args) {
        // 地區和語言環境對象
        Locale local_CN = new Locale("zh", "CN");
        Locale local_US = new Locale("en", "US");

        // baseName:路徑名 + 配置文件名前綴
        ResourceBundle resourceBundle = ResourceBundle.getBundle("com.demo.info");
        System.out.println(resourceBundle.getString("system.name"));
    }
}

動態文本

動態的文本處理需要使用 java.text.MessageFormat

info_en_US.properties:

system.name=EMP Manager System
welcome=welcome,{0}

info_zh_CN.properties:

# 員工管理系統
system.name=\u5458\u5de5\u7ba1\u7406\u7cfb\u7edf
welcome=\u6b22\u8fce\u4f60\uff0c{0}
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;

public class Test1 {

    public static void main(String[] args) {
        // 地區和語言環境對象
        Locale local_CN = new Locale("zh", "CN");
        Locale local_US = new Locale("en", "US");

        // baseName:路徑名 + 配置文件名前綴
        ResourceBundle resourceBundle = ResourceBundle.getBundle("com.qf.oop.info");
        System.out.println(resourceBundle.getString("system.name"));

        String welcomStr = resourceBundle.getString("welcome");
        welcomStr = MessageFormat.format(welcomStr, "用戶1");
        System.out.println(welcomStr);
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 每個面向國際的語言都需要有自己的國際化解決方案,Java 從一開始就是用 Unicode 來處理所有的字符串,這讓...
    海人為記閱讀 4,087評論 0 1
  • 背景知識 通訊的發達,使得世界各地交流越來越緊密。許多的軟件產品也要面向世界上不同國家的用戶。其中,語言障礙顯然是...
    靜默虛空閱讀 4,604評論 0 0
  • 背景:企業項目中,往往面對國際的。針對不同地區語言,ResourceBundle主要用來處理本地化資源和國際化資源...
    采藥僧閱讀 1,447評論 0 4
  • 使用java編寫一個帶GUI程序或者其他需要給用戶傳遞文字信息的程序的時候,就很有可能需要用到國際化的知識,來總結...
    德彪閱讀 1,888評論 0 1
  • ??所謂的國際化的程序指的是同一個程序代碼可以根據不同的國家實現不同的語言描述,但是程序處理的核心業務是相同的。 ...
    江湖非良人閱讀 681評論 0 1