国际化浅谈

 

新建个messageResouce _zh_CN.properties名字的记事本,内容为

loginPage=登录页面
errorPage=错误页面
succPage=成功页面
failTip=对不起,您不能登录!
succTip=欢迎,${0},您已经登录!
viewLink=查看作者李刚已出版的图书
bookPageTitle=作者李刚已出版的图书
bookName=书名:
user=用户名
pass=密 码

 在新建个英文的资源文件messageResource_en_US.properties,内容如上,把值改为英文

user=user name

pass=password

 

前面的user,pass都叫做key,到时根据key来找值。

 

接着:

native2ascii messageResouce.properties messageResouce_zh_CN.properties
native2ascii 原文件 新生成的文件


上面命令将包含非西欧字符的资源文件处理成标准的ASCII格式,处理完成后生成了一份新文件:messageResouce _zh_CN.properties文件。这个文件的文件名符合资源文件的命名格式,资源文件的文件名命名格式为:

basename_语言代码_国家代码.properties

把两个资源文件考到src目录下,struts.xml中加入

<constant name="struts.custom.i18n.resources" value="messageResource"></constant>

value的值和资源文件的前部分名一致。

 

jsp页面写法:

<s:text name="loginPage"/>直接从资源文件中取值name中的字符为key的名

<s:textfield name="username" key="user"/>这是另一种写法

Struts的页面有一个标签<s:i18n>,可以通过它来指定资源文件的位置。这个标签一般可做为其它标签的父标签,这样其它标签所读取的内容就是<s:i18n>标签所指定的资源文件中的内容。用法如下:

<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>
<s:i18n name="tmp">
<s:text name="loginPage"/>       //读取tmp资源文件中的loginPage的内容
</s:i18n>

</title>
</head>
<body>
<s:i18n name="tmp">
<s:form action="Login">
<s:textfield name="username" key="user"/>
<s:textfield name="password" key="pass"/>
<s:submit key="login"/>
</s:form>
</s:i18n>

</body>
</html>

 

页面获取后台传的值用

<s:text name="" >
 <s:param>${nameError}</s:param>
 </s:text>

后台

Locale locale = Locale.getDefault();
 ResourceBundle bundle = ResourceBundle.getBundle("messageResource", locale);

nameError = bundle.getString("nameError");

getString("")里的String值是key,nameError是key

 

通常若查找不到所需要的资源文件中的内容,都是直接输出KEY的字符串值。

选择语言后跳转到后台action,在跳转到一个类,类的写法:

public String getEnglish() {

//设置locale为英语(美国)
  Locale locale = Locale.US;


  //获取系统默认的国家/语言环境
     Locale myLocale = Locale.getDefault();


     //根据指定的国家/语言环境加载资源文件
     ResourceBundle bundle = ResourceBundle.getBundle("messageResource",locale);


     //获取资源文件中的key为hello的value值
     System.out.println(bundle.getString("user"));

 

 

 

//设置跳转后页面的locale,就是设置语言
     ActionContext.getContext().setLocale(locale);

 

//设置页面默认的locale,以后可以根据它获得资源文件里的值
     Locale.setDefault(locale);

 

//把locale添加到session里,以后跳转页面时会自动到session里查询WW_TRANS_I18N_LOCALE,看是否有值,若有值就用存的locale。就是页面自动转换成locale的语言。不用每个action类里都设置一遍了。
     ActionContext.getContext().getSession().put("WW_TRANS_I18N_LOCALE",locale);


  return SUCCESS;

页面跳转时一定要经过action类,在跳转页面,否则页面语言会出问题。
 }

 

 

 

你可能感兴趣的:(html,jsp,xml,struts,出版)