国际化是开发中比较常见的一种要求
1.国际化实现思路
比如,一个程序要求可以同时实现英语,法语,汉语的显示
思路:
可以根据不同的语言配置不同的资源文件(资源文件有时也称属性文件,其后缀名.properties),所以资源文件是以key--value(键值对)的形式出现,只要找到了key,就找到了value。
想要实现Java程序的国际化,必须通过以下三个类实现
.java.util.Locale;用于表示一个国家的语言类
.java.util.ResourceBundle;用于访问资源文件
.java.txt.MessageFormat;格式化资源文件的占位字位符
具体流程如下:
Locale来指定区域码---->ResourceBundle根据Locale提供的区域码找到相应的资源文件--->如果资源文件中存在动态文本,则用MessageFormat来格式化
2.Locale类
locale的构造方法:
public Locale(String language)//根据语言代码来构造一个语言环境
public Locale(String language,)//根据语言和国家来构造一个语言环境
3.ResourceBundle类
代码:
在写代码之前首先写一个资源文件
Message.properties
public class InterDemo {
public static void main(String[] args) {
ResourceBundle rb=ResourceBundle.getBundle( "Message" );
//找到资源
System. out .println( "资源"
+rb.getString(
"info"
));
}
}
结果:
资源Hello
4.java国际化程序的实现
第一步:配好属性文件
中文:Message_zh_CN
info= \u4f60\u597d 这里的文字需要转码:你可以用native2ascii.exe来进行转码
英文:Message_en_US
内容:info=Hello
法文:Message_fr_FR
Bonjour
public class InterDemo2 {
public static void main(String[] args) {
Locale zhLoc= new Locale( "zh"
,
"CN"
);
//表示中国地区
Locale enLoc= new Locale( "en"
,
"US"
);
//表示美国地区
Locale frLoc= new Locale( "fr"
,
"FR"
);
//表示法国地区
//找到中文的属性文件
ResourceBundle zhrb=ResourceBundle.getBundle( "Message" ,zhLoc);
//找到英文的属性文件
ResourceBundle enrb=ResourceBundle.getBundle( "Message" ,enLoc);
//找到法文的属性文件
ResourceBundle frrb=ResourceBundle.getBundle( "Message" ,frLoc);
System. out .println( "中文:"
+zhrb.getString(
"info"
));
System. out .println( "英文:"
+enrb.getString(
"info"
));
System. out .println( "法文:"
+frrb.getString(
"info"
));
}
}
结果:
中文:你好
英文:Hello
法文:Bonjour
5.处理动态文本
步骤:
需要改动的地方:
中文:Message_zh_CN
info= \u4f60\u597d{0} 这里的文字需要转码:你可以用native2ascii.exe来进行转码
英文:Message_en_US
内容:info=Hello{0}
法文:Message_fr_FR
Bonjour{0}
代码:
public class InterDemo2 {
public static void main(String[] args) {
Locale zhLoc= new Locale( "zh"
,
"CN"
);
//表示中国地区
Locale enLoc= new Locale( "en"
,
"US"
);
//表示美国地区
Locale frLoc= new Locale( "fr"
,
"FR"
);
//表示法国地区
//找到中文的属性文件
ResourceBundle zhrb=ResourceBundle.getBundle( "Message" ,zhLoc);
//找到英文的属性文件
ResourceBundle enrb=ResourceBundle.getBundle( "Message" ,enLoc);
//找到法文的属性文件
ResourceBundle frrb=ResourceBundle.getBundle( "Message" ,frLoc);
System. out .println( "中文:"
+zhrb.getString(
"info"
));
System. out .println( "英文:"
+enrb.getString(
"info"
));
System. out .println( "法文:"
+frrb.getString(
"info"
));
String str1=zhrb.getString( "info" );
String str2=enrb.getString( "info" );
String str3=frrb.getString( "info" );
System. out .println( "中文-->"
+MessageFormat.format (str1, "中国" ));
System. out .println( "英文-->"
+MessageFormat.format (str2, "China" ));
System. out .println( "法语-->"
+MessageFormat.format (str3, "China" ));
}
}
结果:
中文:你好{0}
英文:Hello{0}
法文:Bonjour{0}
中文-->你好中国
英文-->HelloChina
法语-->BonjourChina
如果需要跟多的占位符,则是{1},{2}......