java编程

ResouceBound详解

字号+ 作者:风潇潇 来源:原创 2018-05-03 16:31 我要评论( )

在阿里做项目发现了一个国际化的好东东,java本身就支持国际化,就是ResouceBound。具体看教程

ResourceBundle提供软件国际化的捷径。通过此类,可以使您所编写的程序可以:
         轻松地本地化或翻译成不同的语言
         一次处理多个语言环境
         以后可以轻松地进行修改,支持更多的语言环境
 
作用就是读取资源属性文件(properties),然后根据.properties文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。
 
使用这个类,要注意的一点是,这个properties文件的名字是有规范的:一般的命名规范是: 自定义名_语言代码_国别代码.properties
如果是默认的,直接写为:自定义名.properties
比如:
res_en_US.properties
res_zh_CN.properties
res.properties
 
当在中文操作系统下,如果res_zh_CN.properties、res.properties两个文件都存在,则优先会使用 res_zh_CN.properties,当res_zh_CN.properties不存在时候,会使用默认的 res.properties。

也就是说这个处理逻辑是这样的,如果你传递了参数,首先会按照你传递的Locale去查找,如果找不到对应的也不会报错,然后它会获取当前操作系统公的Locale,如果根据当前系统的Locale还获取不到资源文件,那他就会去取 默认的资源文件res.properties.如果这个文件也没有,那它就报错了。
资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.
以下是java代码: 
                 Locale locale1 = new Locale("zh", "CN");
                ResourceBundle resb1 = ResourceBundle.getBundle("res", locale1);
                System.out.println(resb1.getString("ddd"));

                ResourceBundle resb2 = ResourceBundle.getBundle("res", Locale.getDefault());
                System.out.println(resb1.getString("ddd"));

参考了一下 http://lavasoft.blog.51cto.com/62575/184605/ 资料,多谢
                Locale locale3 = new Locale("en", "US");
                ResourceBundle resb3 = ResourceBundle.getBundle("res", locale3);
                System.out.println(resb3.getString("ddd"));

另外当前还有一种情况,不知道是怎么回事,但是确实有,就是在linux上设置的Locale是en_US,但java获取到默认的Locale却有可能是zh_CN.注意下就是。

2018/05/03 更新
    Locale locale1 = new Locale("zh", "CN");和     Locale locale1 = new Locale("zh_CN");是不一样的。
    注意使用第一种方式,使用第一种方式;
从java源代码可以看出,第二种是没有携带国家的
 1、 public Locale(String language, String country)
 2、public Locale(String language)



 

转载请注明出处。

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • SpringMVC 国际化

    SpringMVC 国际化

    2016-02-26 16:51

网友点评
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)