整装待发-实操程序国际化 | 带你学《Java语言高级特性》之二十九

上一篇:使用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 !
现在加上没有默认区域的资源文件,一共定义了三个资源:

整装待发-实操程序国际化 | 带你学《Java语言高级特性》之二十九
三个资源文件

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的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:教你借助占位符定制资源内容 | 带你学《Java语言高级特性》之三十
更多Java面向对象编程文章查看此处

上一篇:存储器成本价格增加致整个芯片市场成长


下一篇:【阿里云资讯】这些小鲜肉要当未来安全界的“十八罗汉”