国际化
所谓国际化程序指的是同一套程序代码可以在不同的国家使用,可以根据其应用的国家自动在项目中显示出本国的相应文字信息。
使用Locale类定义语言环境
Locale类的常用方法
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public Locale(String language,String country) | 构造 | 设置使用的语言以及国家编码 |
2 | public static Locale getDefault() | 普通 | 取得当前语言环境下的Locale类对象 |
例:输出Locale类对象
package Project.Study.LocaleClass;
import java.util.Locale;
public class Test1 {
public static void main(String[]args){
Locale locale=Locale.getDefault();
System.out.println(locale);
}
}
//结果:
//zh_CN
我们可以看到,输出部分“zh_CN”由两个部分组成,其中“zh”表示现在使用的语言是中文,而“CN”表示现在的国家是中国。
利用ResourceBundle读取文件
资源文件一般都是以“key=value”的形式保存文本信息,这样在进行信息读取时就可以根据指定的key取得对应的value数据,但是资源文件的文件名称是有要求的,必须以“*.properties”作为文件后缀。
ResourceBundle类的常用方法
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public static final ResourceBundle getBundle(String baseName) | 普通 | 根据当前默认语言环境,取得资源对象 |
2 | public static final ResourceBundle getBundle(String baseName,Locale locale) | 普通 | 根据指定的语言环境,取得资源对象 |
3 | public final String getString(String key) | 普通 | 根据key取得对应的value数据 |
例:在IDEA中创建一个"*.properties"文件
如图,右键点击
输入所创建文件的名称,点击OK
这样,一个"*.properties"文件就创建完成了
接着就是往文件里面写入信息了
例:读取资源文件
package Project.Study.LocaleClass;
import java.util.ResourceBundle;
public class Test2 {
public static void main(String[]args){
//访问的时候不用加上后缀,因为默认找到的后缀就是“*.properties”
ResourceBundle resourceBundle=ResourceBundle.getBundle("Project.Study.LocaleClass.data1");//文件的存放地址
System.out.println(resourceBundle.getString("hello"));//根据文件中定义的key取得对应的value数据
}
}
//结果:
//Hello World!!!
例:读取数据并且动态设置内容
资源文件
package Project.Study.ResourceBundleClass;
import java.text.MessageFormat;
import java.util.ResourceBundle;
public class Test1 {
public static void main(String[]args){
//访问的时候不用加上后缀,因为默认找到的后缀就是“*.properties”
ResourceBundle resourceBundle=ResourceBundle.getBundle("Project.Study.ResourceBundleClass.test1_data");
System.out.println(MessageFormat.format(resourceBundle.getString("data"),"World","!!!"));//设置两个占位符的内容
}
}
//结果:
//Hello World!!!
多资源读取
关于资源文件的读取顺序:
在进行资源文件的定义时可能会出现两类资源:
1.公共资源(没有设置语言与国家编码)
2.具体的语言资源文件(设置了语言与国家编码)
因为存在两类文件,所以在读取的时候会优先读取存在具体语言与国家编码的资源文件,如果读取不到则再读取公共资源。
例:读取资源文件
定义中文资源文件
定义英文(英语——美国)资源文件
package Project.Study.ResourceBundleClass;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
public class Test2 {
public static void main(String[]args){
Locale zhLoc=new Locale("zh","CN");//中国——中文
Locale enLoc=new Locale("en","US");//英语——美国
ResourceBundle zhRB=ResourceBundle.getBundle("Project.Study.ResourceBundleClass.Message",zhLoc);//读取中文资源文件
ResourceBundle enRB=ResourceBundle.getBundle("Project.Study.ResourceBundleClass.Message",enLoc);//读取英文资源文件
//读取资源内容
System.out.println(MessageFormat.format(zhRB.getString("data"),"World","!!!"));
System.out.println(MessageFormat.format(enRB.getString("data"),"World","!!!"));
}
}
//结果:
//Hello World!!!
//Hi World!!!
注意:如果资源中的占位符不足,则就算输出时设置了相应的数据也不会输出这些数据;反之,如果资源中设置了相应的占位符,但输出时没有设置相应的数据,则会将占位符原封不动地输出,如: