JavaSE 国际化详解
2018-05-17 本文已影响0人
pr0metheus
1. Locale介绍
该类封装了语言名代号及国家名代号信息,通过如下程序我们可以进一步了解:
![](https://img.haomeiwen.com/i10402605/15c016810303f903.png)
以美国举例对应的语言代号为en,对应的国家代号为US,这也就是为什么资源文件命名中会出现大写字母的原因
2. ResourceBundle介绍
ResourceBundle是一个抽象类,专门用于读取资源文件,底层已经封装好了io, 通过它与Locale的搭配可以轻松实现国际化
3. 国际化示例
- 新建一个java工程, 并在src目录下新建如下两个资源文件,资源文件的命名规则为baseName_语言代号_国家代号:
![](https://img.haomeiwen.com/i10402605/37f358415707cd2f.png)
- 这两个配置文件的内容分别为:
![](https://img.haomeiwen.com/i10402605/0fbac1710bfbb5b6.png)
![](https://img.haomeiwen.com/i10402605/c8dbede4594acaeb.png)
- 主程序代码如下:
![](https://img.haomeiwen.com/i10402605/6f017c0a26045238.png)
- 控制台打印信息:
![](https://img.haomeiwen.com/i10402605/382706349fb54828.png)
-
如果第一行代码改为
ResourceBundle rb = ResourceBundle.getBundle("shengsiyuan", Locale.US);
那么控制台输出的是zhangsan -
总结:本质就是字符串的拼接而已,可以把Locale看作一个字符串变量
3. 默认资源文件
默认资源文件的名字为baseName.properties,当Locale对应的资源文件找不到的时候,最后就会加载baseName.properties文件
4. 资源文件占位符
我们可以在资源文件中设置占位符,搭配MessageFormat可以动态的设置资源文件中的内容值,示例如下:
![](https://img.haomeiwen.com/i10402605/15c24f9f831f3364.png)
![](https://img.haomeiwen.com/i10402605/c7fdef8a533972ea.png)
主程序代码:
![](https://img.haomeiwen.com/i10402605/8254976628497ad1.png)
控制台输出结果:
![](https://img.haomeiwen.com/i10402605/b7decfa223caeae7.png)
如果改为Locale.US那么输出结果就是zhangsan:welcome