【JDK】国际化编程-ResourceBundle+Locale动态读取静态资源文件

1、国际化程序实现原理

       每个国家的人所使用的文字大多不一样,所以国际化程序实现中,业务逻辑不变,但是所加载的资源文件不同。需要解决的问题是区域和语言编码问题。

2、Locale类

       在java.util里面提供有一个专门描述区域和语言编码的类:Locale。

主要使用两个构造方法来实例化。

  • 构造方法:public Locale(String Language);
  • 构造方法:public Locale(String Language,String country);

       中文的代码:zh-CN、美国英语的代码:en_US。对于这些区域和语言的编码,最简单的获得方式就是通过IE浏览器获得。

手工选择

public class _43_1 {
    public static void main(String[] args) {
        Locale loc = new Locale("zh","CN");
        System.out.println(loc);
    }
}

       如果想要自动获得当前的运行环境,那么现在就可以利用Locale类本身默认的方式进行实例化;

  • 读取本地默认环境:public static Locale getDefault();

       在实际的开发过程之中,很多人可能并不关心国家和语言的编码,所以为了简化开发,Locale也将世界上一些国家的编码设置为了常量。

Locale.CANADA

使用常量的优势在于可以避免一些区域代码信息的繁琐

3、读取资源文件ResourceBundle

public abstract class ResourceBundle extends Object.

ResourceBundle是一个抽象类,我们可以使用它的子类。

  • 获取ResourceBundle类对象:public static final ResourceBundle getBundle(String baseName);
    • baseName:描述的是资源文件的名称,但是没有后缀。

       IDEA新建资源包步骤:在目录下Alt+Insert,选中Resource Bundle新建资源包。

public class _43_2 {
    public static void main(String[] args) {
        ResourceBundle resource = ResourceBundle.getBundle("com.tangxz._10.Messages");
        String val = resource.getString("info");
        System.out.println(val);
    }
}

4、实现国际化程序开发

       依靠资源文件、Locale、ResourceBundle类就可以实现国际化的处理操作。(核心关键:读取资源信息)

       在CLASSPATH下建立:一个Messages_zh_CN.properties;和一个Messgaes_en_US.prperties。

在这里插入图片描述

public class _43_3 {
    public static void main(String[] args) {
        Locale locale = new Locale("zh","CN");
        ResourceBundle resource = ResourceBundle.getBundle("com.tangxz._10.Messages",locale);
        String val = resource.getString("info");
        System.out.println(val);
    }
}

       这样它就会根据locale来自动获取某个资源文件的内容,如果没有对应locale的资源文件则使用默认locale。

5、格式化文本显示

       消息格式化,如果某一位用户登陆了,那么一般就会显示这样的信息“Xxx,欢迎您的光临”,也就是这个时候就会显示用户名,那么此时如果这些内容保存在了资源文件里面,则就需要通过占位符来进行描述,同时对于读取出来的数据也需要进行消息格式化的处理。

范例:修改资源文件

1、在资源文件中添加占位符

Messages_en_US.properties:info=Welcome!{0},data={1}

Messages_zh_CN.properties:info=欢迎{0}的访问,当前日期是{1}

2、此时进行资源读取会将占位符的信息一起读取出来,所以 此时就需要利用MessageFormat类进行格式化处理

在MessageFormat类中提供有一个格式化文本的方法:public static String format(String pattern , Object… arguments);

范例:格式化文本实现国际化

public class _43_5 {
    public static void main(String[] args) {
        Locale locale = new Locale("zh","CN");
        ResourceBundle resource = ResourceBundle.getBundle("com.tangxz._10.Messages",locale);
        String val = resource.getString("info");
        System.out.println(MessageFormat.format(val,"mldn",new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
    }
}

       如果在日后开发的过程之中见到资源文件里面出现有 {0}、{1} 的结构表示的都是占位符,该信息一定都要进行格式化处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值