Java 国际化
Java 国际化相关知识
国际化用于解决不同国家的人往往存在语言文字不通的问题
Java 中相关的有以下3个类:
- Locale:表示了特定的地理、政治和文化地区;由语言和国家代码组成,缺省Locale是由操作系统决定的。
例如:
| 国家/地区 | 语言编码 |
| ------------------ | -------- |
| 简体中文(中国) | zh-cn |
| 繁体中文(香港) | zh-hk |
| 繁体中文(台湾地区) | zh-tw |
| 英语(美国) | en-us |
| 英语(英国) | en-gb |
| 英语(全球) | en-ww |
| 英语(香港) | en-hk |
- ResourceBundle:国际化资源包,由国际化资源文件生成。
国际化资源文件是以<资源名><语言代码><国家/地区代码>.properties命名的资源串文件,定义了多种语言资源,默认存放在 classpath 路径下。
- MessageFormat:用以实现动态填充国际化文件的占位符。
除此之外还有 NumberFormat、DateFormat 国际化工具类
Java 国际化的使用
Java 国际化的简单使用
- 在项目 classpath 目录下新建资源串文件
LocalStrings.properties
test=Test
LocalStrings_en_US.properties
test=Test
LocalStrings_zh_CN.properties
test=测试
- 编写测试类测试
LocalStringTest.java
public class LocalStringTest {
public static void main(String[] args) {
Locale l1 = new Locale("zh", "CN");
ResourceBundle rb1 = ResourceBundle.getBundle("LocalStrings", l1);
System.out.println(rb1.getString("test"));
ResourceBundle rb2 = ResourceBundle.getBundle("LocalStrings", Locale.getDefault());
System.out.println(rb2.getString("test"));
Locale l3 = new Locale("en", "US");
ResourceBundle rb3 = ResourceBundle.getBundle("LocalStrings", l3);
System.out.println(rb3.getString("test"));
}
}
执行结果为:
Java 国际化动态填充占位符
- 修改资源串文件内容
LocalStrings_zh_CN.properties
test=测试占位符,占位符1:{0},占位符2:{1}
- 编写测试类测试
LocalStringTest.java
public class LocalStringTest {
public static void main(String[] args) {
Locale l1 = new Locale("zh", "CN");
ResourceBundle rb1 = ResourceBundle.getBundle("LocalStrings", l1);
String s1 = MessageFormat.format(rb1.getString("test"), "我是占位符1", "我是占位符2");
String s2 = new MessageFormat(rb1.getString("test")).format(new Object[]{"我是占位符1", "我是占位符2"});
System.out.println(s1);
System.out.println(s2);
}
}
执行结果为: