- 实现struts2中国际化其实非常简单
首先,struts2中的国际化是通过资源文件来配置的。
资源文件分为:action类级,package类级,还有webapp类级的
1.action类级的:
新建一个.properites的资源文件。命名必须规范:action名_编码_地区,action名必须与你当前的action的名字相同,编码和地区可以通过IE的语言栏查看。然后就是编写你的资源文件:写的时候可以通过eclipse的可视化操作直接写数据。他可以帮你自动转换编码:
- login_submit=u63D0u4EA4
- login_reset=u91CDu7F6E
- login_sex=u6027u522B
- login_page=u767Bu5F55u9875u9762
- login_password=u5BC6u7801
- login_username=u7528u6237u540D
- login_sex_male=u7537
- login_sex_female=u5973
- login_hf=u5A5Au5426
该资源文件必须在你要映射的包下。其中命名必须以package开头,package_编码_地区。其他地方都一样。
3.整个应用类级的:
该资源文件必须放在你的src目录下。命名可随意起,名称_编码_地区。需要注意点是:这个还需配置一个常量:可在struts,xml文件中配置
- <constant name="struts.custom.i18n.resources" value="i18n"></constant>
4.获取值:替换当前的中文:
可以通过key,或%{getText('name')}获取,例;
- <s:form method="post" action="login" >
- <s:textfield name="username" value="" key="login_username" required="true" requiredposition="left" />
- <s:password name="password" value="" label="%{getText('login_password')}" required="true" />
- <s:radio list="#{1:getText('login_sex_male'),0:getText('login_sex_female')}" name="sex" value="1" key="login_sex" />
- <s:checkbox key="login_hf" value="" name="hf"/>
- <s:submit key="login_submit" /><s:reset key="login_reset"/>
- </s:form>
5.这三个的资源文件的优先级:
先找action类级的,再找到包类级的。最后才是webapp类级的。如果有冲突。就近原则。
6.语言切换:
先在jsp中添加两个链接。
- <a href="changeLang.action?lang=1">中文</a>
- <a href="changeLang.action?lang=2">english</a>
- public class ChangeLang extends ActionSupport {
- private String lang;
- Locale l=null;
- @Override
- public String execute() throws Exception {
- if(lang.equals("1")){
- //中文版
- l=Locale.CHINA;
- }else{
- //英文版
- l=Locale.US;
- }
- ActionContext.getContext().setLocale(l);//添加到locale对象中
- ServletActionContext.getRequest().getSession().setAttribute("WW_TRANS_I18N_LOCALE", l);//设置locale的属性
- return LOGIN;
- }
- }
- <action name="changeLang" class="com.accp.testAction.ChangeLang">
- <result name="login">/Login.jsp</result>
- </action>