java国际化通过以下三个类来完成:
Ø
Ø
Ø
为了实现程序的国际化,必须先提供程序所需要的资源文件。资源文件的内容是很多key-value对。其中key是程序使用的部分,而value则是程序界面的显示字符串。
资源文件的命名可以有如下三种形式:
Ø
Ø
Ø
其中baseName是资源文件的基本名,用户可以自由定义。而language和country都不可随意变化,必须是Java所支持的语言和国家。
获取Locale对象的三种方式:
- Locale locale1 = new Locale("zh","CN");
- //②只有语言信息的本地化对象
- Locale locale2 = new Locale("zh"); //1
- //③等同于Locale("zh","CN")
- Locale locale3 = Locale.CHINA;
- //④等同于Locale("zh")
- Locale locale4 = Locale.CHINESE; //2
- //⑤获取本地系统默认的本地化对象
- Locale locale5= Locale.getDefault(); //3
案例:实现不同的语言环境下输出不同的"Hello world"。
SayHello.java类:
package com.bean;
import java.util.Locale;
import java.util.ResourceBundle;
public class SayHello {
public static void main(String []args) {
//获取系统默认的国家/语言系统
Locale locale = Locale.getDefault();
//根据指定的国家/语言环境加载资源文件
ResourceBundle rBundle = ResourceBundle.getBundle("hello", locale);
//通过键取值
System.out.println(rBundle.getString("hello"));
}
}
根路径下的两个属性配置文件:
hello_en_US.properties:
hello =Hello World\!
hello =\u60A8\u597D (您好)
以上程序不是直接打印"Hello World",而是从资源包中读取的信息,如果在中午环境下该程序的运行结果将打印“您好”,英文环境则打印"Hello world"。
MessageFormat类:
案例:创建MyLocale的java类:
package com.bean;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
public class MyResource {
public static void main(String[] args) {
Locale locale = Locale.getDefault();
ResourceBundle rBundle = ResourceBundle.getBundle("hello", locale);
String hello = rBundle.getString("hello");
String mFormat = MessageFormat.format(hello, "刘东升",new java.util.Date());//format(pattern,args)
System.out.println(mFormat);
}
}
创建国际化资源文件hello_zh_CN.properties:
hello ={0},\u60A8\u597D,{1}
输出: