上一篇:使用ResourceBundle实现资源的统一调配 | 带你学《Java语言高级特性》之二十八
在前两节了解了程序国际化的基本内容,并能够实现对相关功能的使用后,现在让我们一起来实操一个程序,使其完成国际化。
【本节目标】
通过阅读本节内容,你将整合之前所学,依靠预设的资源文件,使用Locale进行自动调用,或使用ResourceBundle指定一个资源文件,完整完成对一个程序的国际化改造。
实现国际化程序开发
现在国际化程序的实现前期准备已经全部完成了,也就是说依靠资源文件、Locale、ResourceBundle类就可以实现国际化的处理操作,那么下面来进行国际化的程序实现(核心关键:读取资源信息)。
1、在CLASSPATH下建立:cn.mldn.message.Messages_zh_CN.properties(中文资源);
info=欢迎您的访问!
2、在CLASSPATH下建立:cn.mldn.message.Messages_en_US.properties(英文资源);
info=Welcome !
现在加上没有默认区域的资源文件,一共定义了三个资源:
三个资源文件
3、通过程序进行指定区域的资源信息加载
import java.util.ResourceBundle;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
ResourceBundle resource = ResourceBundle.getBundle("cn.mldn.message.Messages");
String val = resource.getString("info");
System.out.println(val); //欢迎您的访问!
}
}
此时在利用ResourceBundle类读取资源的时候并没有设置一个明确的Locale对象,但是发现“Messages_zh_CN”文件起作用了,因为这个方法里面默认加载的就是当前本地的Locale的资源:
public static final ResourceBundle getBundle(String baseName) {
Class<?> caller = Reflection.getCallerClass();
return getBundleImpl(baseName, Locale.getDefault(),
caller,getDefaultControl(caller,baseName));
}
4、如果现在有需要也可以修改当前的Locale环境,则可以使用ResourceBundle类中的如下方法:
获取ResourceBundle:
public static final ResourceBundle getBundle(String baseName, Locale locale);
import java.util.Locale;
import java.util.ResourceBundle;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Locale loc=new Locale("en","US");
ResourceBundle resource = ResourceBundle.getBundle("cn.mldn.message.Messages",loc);
String val = resource.getString("info");
System.out.println(val); //Welcome !
}
}
如果现在有指定区域的资源文件存在的时候,那么没有设置区域的资源文件的信息将不会被读取。
资源文件读取顺序:读取指定区域的资源文件>默认的本地资源>公共的资源(没有区域设置)。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学