一、概念
国际化编程:通过一套软件适配多个语言包。
二、相关函数
java.util.ResourceBundle:用于加载一个语言_国家语言包
java.util.Locale:定义一个语言_国家
三、相关类
Locale类
Locale(zh_CN,en_US,...)
-语言:zh、en等
-国家/地区:CN、US等
相关方法:
- -getAvailableLocales():返回所有可用Locale
- -getDefault():返回默认的Locale
ResourceBundle类:
-加载语言文件,并getString(String key)返回对应的value
三、语言文件
Properties文件(参见《Java核心技术》第十章)
-要求:存储文件必须是ASCII文件,ASCII以外文字,必须用Unicode表示,可用native2ascii.exe(%JAVA_HOME%\bin目录下)进行转码
-命名规则
包名+语言+国家地区.properties
如:message.properties、message_zh.properties、message_zh_CN.properties
四、语言文件匹配路径(匹配顺序)
ResourceBundle 根据key找value的查找路径
- -包名_当前Locale语言_当前Locale国家地区_当前Locale变量(variant)
- -包名_当前Locale语言_当前Locale国家地区
- -包名_当前Locale语言
- -包名_默认Locale语言_默认Locale国家地区_默认Locale变量(variant)
- -包名_默认Locale语言_默认Locale国家地区
- -包名_默认Locale语言
-
-包名
五、添加语言文件
语言文件使用的都是ascii编码,利用java库函数native2ascii,将本地语言转成ascii格式\uXXXX;
C:\Users\shism>cd C:\Users\shism\Desktop\文件
C:\Users\shism\Desktop\文件>native2ascii msg_zh_CN.txt msg_zh_CN.properties
拷贝进程序资源目录中
六、实践及输出
import javafx.fxml.LoadException;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* @author: Shism
* @Date: Created in 16:50 2023/3/16
* @Description:
**/
public class NewHelloworld {
public static void main(String[] args) {
//获取默认语言环境及国家
Locale myLocale = Locale.getDefault();
System.out.println(myLocale);
//根据本地语言环境zh_CN,加载语言文件 msg_zh_CN.properties
ResourceBundle ResourceBundle = java.util.ResourceBundle.getBundle("msg", myLocale);
System.out.println(ResourceBundle.getString("hello"));
//更改本地默认语言文件为en_US,加载语言文件 msg_en_US.properties
myLocale = new Locale("en", "US");
ResourceBundle = java.util.ResourceBundle.getBundle("msg", myLocale);
System.out.println(ResourceBundle.getString("hello"));
//获取java支持语言环境及国家
System.out.println("=============");
Locale[] localeList = Locale.getAvailableLocales();
for (Locale locale : localeList){
System.out.println(locale);
}
}
}
输出: