通常习惯说成i18n也就是internationzation 首字母i中间18个字母最后字母n,合起来就是i18n.国际化就是web资源根据本地语言环境显示出不同的字符。
要编写国际化的web应用需要完成下面几步
1.编写属性资源文件,资源文件名为中文 XXX_zh_CN.properties,英文 XXX_en.properties
由于java内部采用的是unicode编码,所以对于中文字符我们需要用unicode来表示,应用jdk bin目录下的native2ascii工具
具体命令为native2ascii -encode a.tmp a_zn_CN.properties转换为unicode编码的字符
2.在程序中,可以根据请求报头"Accept-Language"来判断请求客户的语言环境,构建当地的Locale对象,利用ResouceBundle(或者其扩展类propertyResourceBundle,ListResourceBundle)来读取对应的资源文件
代码如下:
String headInfo=requesy.getHeader("Accept-Language");
Locale locale=null;
ResourceBundle bundle=null;
if(headInfo.indexOf("zh_cn")!=-1)
{
locale=new Locale("zh","CN");
bundle=ResourceBundle.getBundle("XXX",locale);//xxx表示资源文件前缀名,如my_zh_CN.properties 那么xxx就是my
}
//如果多种语言可以继续判断
//再将bundle对象保存在session中
...
session.setAttribute("bundle",bundle);
3.在页面中使用
用bundle.getString("");调用
<%=bundle.getString("name")%>