Java的ResourceBundle

Java的ResourceBundle是一个很好用的工具,可以很方便的用来实现软件的国际化和本地化功能。因为ResourceBundle能够按照一定的规则,自动寻找目录下符合某个文化和地区的资源文件(.properties文件)。通过为不同的文化和地区提供不同的资源文件,然后让java自动根据规则来读取这些资源文件,实际上就完成软件的本地化工作。

                先看一个小例子,建立一个test工程,目录结构如下:
                test/       
                                classMain.java
                                message_zh.properties
                                message_en.properties
               
                2个message*.properties文件都只有一行,分别是:
                                message_zh.properties:
                                              msg0="Chinese locale"               
                                message_en.properties:
                                              msg0="English locale"                                                         
     
                classMain.java同样简单,主程序只有2行:
                                 import java.util.*;
public class classMain{
                          public static void main(String args[])
                          {
                                    ResourceBundle  rb = ResourceBundle.getBundle("message"--);   
                                    System.out.println(rb.getString("msg0"));
                          }
                    }

                编译javac classMain.java即可生成classMain.class文件,分别在中文Locale和英文Locale下运行java classMain.class,会发现输出的字符串分别是“Chinese locale“和“English locale“。
               
                看看上面的2行代码,关键在于ResourceBundle.getBundle(“message“)。显然这个message与那两个message*.properties文件大有关系。查阅一下JDK的文档可以发现,ResourceBundle实际上是把“message“当作一个basename使用,然后根据当前的Locale和国家来查找basename_*.properties文件,所以当Local分别为中文和英文时,ResourceBundle分别使用的就是message_zh.properties和message_en.properties文件。然后ResourceBundle读入找到的.properties文件,并对其中的资源进行处理,这就不难理解ResourceBundle.getString(“msg0“)的结果了(msg0=“** locale“)。

                为了求证以上的分析,我又查看了一下java的源代码,getBundle实际上会转而调用getBundleImpl,getBundleImpl先确定实际使用的Locale,然后根据搜索规则形成一个搜索列表,再交给findBundle处理,然后由findBundle完成实际.properties文件的搜索工作。所有代码均在JDK的java.util.ResourceBundle.java中,不再列举。

                Eclipse的国际化和本地化的实现,实际上就是基于ResourceBundle来实现的(当然,要感谢Eclipse强大的插件机制)。本人因为工作需要,稍稍做了一下了解,顺手记下来,以防忘却。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值