struts国际化,资源文件读取一
国际化的发展
看本文之前可先看一下properties文件的读取:
http://quicker.iteye.com/blog/571743
一.一般处理方式:
在项目的src根目录建立资源文件:
ApplicationResources.properties
ApplicationResources_zh_CN.properties
ApplicationResources_en_US.properties
以上三个文件分别代表默认,中文,英文,如果是其它语言那么从默认文件取值.
测试代码:
package com.lwf.struts.util;
import java.util.Locale;
import java.util.ResourceBundle;
public class Testl18n {
public static void main(String[] args) {
Locale lo = Locale.getDefault();
System.out.println(lo.getLanguage());
System.out.println(lo.getCountry());
ResourceBundle bundle = ResourceBundle.getBundle("ApplicationResources");
String value = bundle.getString("error.login.usernull");
System.out.println(value);
}
}
代码说明:
Locale lo = Locale.getDefault();
System.out.println(lo.getLanguage());
System.out.println(lo.getCountry());
从系统控制面板的语言设置里取值,如中文输出:
zh
CN
英文则输出
en
US
ResourceBundle类将ApplicationResources设为默认资源文件,注意不用加.properties后缀.
当我们的系统设置为中文时,从ApplicationResources_zh_CN.properties 里面读取值 .
如果设为英文从ApplicationResources_en_US.properties 里面读取值.
其它则读取默认值.当然可以新建多种语言的资源文件.
注意的是:ApplicationResources_zh_CN.properties 里面的中文显示出来可能会是乱码或问号.
处理方法:使用java安装目录bin下面的native2ascii直接将txt文件转换为properties文件.
如:
这里使用命令:
native2ascii ApplicationResources_zh_CN.txt ApplicationResources_zh_CN.properties
转换前ApplicationResources_zh_CN.txt 内容:
error.login.usernull = 用户名不能为空
转换后ApplicationResources_zh_CN.properties内容 :
error.login.usernull = \u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a
这样就不会出现乱码了.
二.上面我们是从操作系统读取设置好的语言值.那么在程序中不同的人可能要用到不同的语言.所以真正在程序里面实现应该将语言设置作为一个参数,可以让客户自己设定想以什么语言查看..
我们可以构建Locale对象,如:
Locale local = new Locale("en","US");
这样我们可以依据传入的en,US两个参数值来寻找从哪个资源文件读取内容.