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