基本概念
同一套程序代碼可以在不同的語言環境下使用,比如中文、日文、英文環境。
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);
}
}