关于国际化的一点记录

这次做一个国际项目,要求系统支持西班牙语。其中研究一些和国际化相关的东西,没有多大价值但是容易被忽略,这里记下来。

1、ResourceBundle.getBundle(baseName, locale, classloader)方法的加载顺序,比如传入的参数baseName=“messageRes",locale是"es_ES",classloader是当前class的加载器。则加载资源的顺序是:

               messageRes_es_ES.properties、messageRes_es.properties。如果在这个时候资源文件仍然没有找到,则会通过Locale.getDefault()获取默认Locale对象,这个默认的Locale是从JVM中获取的。加入这里的Locale是“zh_CN”,则会接着加载messageRes_zh_CN.properties、messageRes_zh.properties。这里要特别注意,这个缺省Locale加载完后还是没有找到,这个时候就去加载messageRes.properties这个资源文件。这里要特别注意了,只是以baseName作为名字加载的是加载完缺省的Locale都没有找到之后才会加载,之前我错误认为指定传入的locale没有加载到就会直接加,这个耽误了事情。

2、有的时候我们想修改缺省的Locale,就可以在系统的任何地方使用Locale.setDefault的方式设置,这是全局性的设置,整个系统再获取Locale.getDefault都会是当前设置的值。

3、在Struts2中要让我们的系统根据浏览器自己的区域语言来切换Locale,则可以在Strut2的配置文件中添加静态配置,如果是使用XML配置的,则添加<contant name="struts.locale" value=""/>,如果是properties配置的,则需要添加struts.loacle=""。这里要特别注意这个值比如是“”这样的空字符串才能起作用,可以参看Struts2的源码Dispatcher类的parare方法,其中是根据"defaultLocale!=null"为true才进入获取浏览器区域语言的信息,而defaultLocale就是从Struts的配置文件中来的,如果配置文件不配置,则defaultLocale就是null,则不会去获取浏览器的区域语言信息。这里是一个比较奇怪的配置,有点让人莫名其妙,但是源码就是这样写的,我们就这样用吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值