java.util.ResourceBundle使用详解

一、认识国际化资源文件

这个类提供软件国际化的捷径。通过此类,可以使您所编写的程序可以:

轻松地本地化或翻译成不同的语言

一次处理多个语言环境

以后可以轻松地进行修改,支持更多的语言环境

说的简单点,这个类的作用就是读取资源属性文件(properties),然后根据.properties文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。

使用这个类,要注意的一点是,这个properties文件的名字是有规范的:一般的命名规范是: 自定义名_语言代码_国别代码.properties,

如果是默认的,直接写为:自定义名.properties

比如:

myres_en_US.properties

myres_zh_CN.properties

myres.properties

当在中文操作系统下,如果myres_zh_CN.properties、myres.properties两个文件都存在,则优先会使用myres_zh_CN.properties,当myres_zh_CN.properties不存在时候,会使用默认的myres.properties。

没有提供语言和地区的资源文件是系统默认的资源文件。

资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.

二、实例

定义三个资源文件,放到src的根目录下面(必须这样,或者你放到自己配置的calsspath下面。

myres.properties

aaa=good

bbb=thanks

myres_en_US.properties

aaa=good

bbb=thanks

myres_zh_CN.properties

aaa=\u597d

bbb=\u591a\u8c22

import java.util.Locale;

import java.util.ResourceBundle;

/**

* 国际化资源绑定测试

*

* @author leizhimin 2009-7-29 21:17:42

*/

public class TestResourceBundle {

public static void main(String[] args) {

Locale locale1 = new Locale("zh", "CN");

ResourceBundle resb1 = ResourceBundle.getBundle("myres", locale1);

System.out.println(resb1.getString("aaa"));

ResourceBundle resb2 = ResourceBundle.getBundle("myres", Locale.getDefault());

System.out.println(resb1.getString("aaa"));

Locale locale3 = new Locale("en", "US");

ResourceBundle resb3 = ResourceBundle.getBundle("myres", locale3);

System.out.println(resb3.getString("aaa"));

}

}

运行结果:

good

Process finished with exit code 0

如果使用默认的Locale,那么在英文操作系统上,会选择myres_en_US.properties或myres.properties资源文件。

三、认识Locale

Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。

使用此类中的构造方法来创建 Locale:

Locale(String language)

Locale(String language, String country)

Locale(String language, String country, String variant)

创建完 Locale 后,就可以查询有关其自身的信息。使用 getCountry 可获取 ISO 国家代码,使用 getLanguage 则获取 ISO 语言代码。可用使用 getDisplayCountry 来获取适合向用户显示的国家名。同样,可用使用 getDisplayLanguage 来获取适合向用户显示的语言名。有趣的是,getDisplayXXX 方法本身是语言环境敏感的,它有两个版本:一个使用默认的语言环境作为参数,另一个则使用指定的语言环境作为参数。

语言参数是一个有效的 ISO 语言代码。这些代码是由 ISO-639 定义的小写两字母代码。在许多网站上都可以找到这些代码的完整列表,如:

http://www.loc.gov/standards/iso639-2/englangn.html。

国家参数是一个有效的 ISO 国家代码。这些代码是由 ISO-3166 定义的大写两字母代码。在许多网站上都可以找到这些代码的完整列表,如:

http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html。

四、中文资源文件的转码 native2ascii

这个工具用法如下:

如果觉得麻烦,可以直接将中文粘贴到里面,回车就可以看到转码后的结果了。

看明白这个了,就不在为struts等web框架的国际化而感到稀奇了。

java resourcebundle_java.util.ResourceBundle使用详解相关推荐

  1. 【Java 8 新特性】Java 8 Util API: StringJoiner 详解 | 拼接字符串添加分隔符、前缀和后缀

    Java 8 Util API: StringJoiner 详解 StringJoiner(CharSequence d) StringJoiner.add(CharSequence element) ...

  2. java.util.ResourceBundle使用详解

    为什么80%的码农都做不了架构师?>>>      2009-07-29 00:47:17     一.认识国际化资源文件 这个类提供软件国际化的捷径.通过此类,可以使您所编写的程序 ...

  3. 【转】java.util.ResourceBundle使用详解

    原文链接:http://lavasoft.blog.51cto.com/62575/184605/ 人家写的太好了,条理清晰,表达准确. 一.认识国际化资源文件 这个类提供软件国际化的捷径.通过此类, ...

  4. java utill scanner_(转)java.util.Scanner应用详解

    java.util.Scanner应用详解 java.util.Scanner是Java5的新特征,主要功能是简化文本扫描.这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java A ...

  5. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  6. 【Java基础】HashMap原理详解

    [Java基础]HashMap原理详解 HashMap的实现 1. 数组 2.线性链表 3.红黑树 3.1概述 3.2性质 4.HashMap扩容死锁 5. BATJ一线大厂技术栈 HashMap的实 ...

  7. java 委托机制_通过反射实现Java下的委托机制代码详解

    简述 一直对Java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块API public Class Delegater()//空参构造,该类管理委托实例并 ...

  8. Java多线程之volatile详解

    Java多线程之volatile详解 目录: 什么是volatile? JMM内存模型之可见性 volatile三大特性之一:保证可见性 volatile三大特性之二:不保证原子性 volatile三 ...

  9. java委托机制教程_通过反射实现Java下的委托机制代码详解

    简述 一直对java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块api public class delegater()//空参构造,该类管理委托实例并 ...

  10. Java 进程间文件锁FileLock详解

    转载自  Java 进程间文件锁FileLock详解 最近需要在两个进程中对同一个文件进行操作,正好Java 提供了文件锁FileLock类,利用这个类可以控制不同程序(JVM)对同一文件的并发访问, ...

最新文章

  1. HTTP协议超级详解
  2. Scott用户的表结构
  3. 台达a2_台达自动化控制系统在IC烧录机上的应用
  4. Option,Some,None
  5. 在iframe中显示嵌套网页的指定部分
  6. sql中exec是什么意思_SQL 中为什么经常要加NOLOCK?
  7. 好了好久时间,终于写成了第一个Python代码
  8. redux使用教程详细介绍
  9. linux search用法,在Linux中使用ldapsearch只返回一个值
  10. Codeforces Round #415 (Div. 2) C. Do you want a date?
  11. 解析C#中[],List,Array,ArrayList的区别及应用
  12. [转]Java杂谈(七)--接口amp; 组件、容器
  13. 视频特效制作After Effects 2022 for Mac
  14. 【车道线】车道线检测代码复现---lanenet(小白篇)
  15. 高级5G网络优化工程师的要求,哪些人具备?
  16. 年轻人要明白,职场里不只有晋升
  17. PrimeNG p-tree 手动添加勾选
  18. 寒武纪MLU270安装运行Pytorch yolov3实录
  19. Python网络编程之初识
  20. python农历_用python计算农历/阴历假日

热门文章

  1. CAD学习笔记中级课【模板样式】
  2. 【速看】拼多多云服务平台流程信息流出
  3. C语言各个符号优先级(全)
  4. 海康流媒体客户端开发
  5. QTQString(UTF8)数据转GBK
  6. java excel 数组公式_Excel数组公式怎么使用? Excel数组公式计算的实例教程
  7. matlab 对自定义函数求导,用matlab对多项式函数求导
  8. EasyRecovery免费版一键数据恢复还原软件
  9. 通信原理 AMI码和HDB3码的编码方式
  10. 智能优化算法:基于Powell优化的鸽群优化算法