struts2系列(四):struts2国际化的多种方式
一、struts2国际化原理
根据不同的Locale读取不同的文本。
例如有两个资源文件:
第一个:message_zh_CN.properties
第二个:message_en_US.properties
当Locale=zh_CN时,就去第一个文件查找;当Locale=en_US时,就去第二个文件查找。
二、简单方式实现国际化
1. 新建一个maven的web项目,项目结构如下:
2. 在src/main/java目录下新建两个国际化资源文件message_zh_CN.properties、message_en_US.properties,然后将各个key-value对添加到这两个文件中,key字段一定要统一
message_zh_CN.properties:
info=\u4FE1\u606F info_not_empty=\u4FE1\u606F\u4E0D\u80FD\u4E3A\u7A7A
submit=\u63D0\u4EA4
message_en_US.properties:
info=information info_not_empty=info not empty
submit=submit
3. 配置struts.properties文件,这个文件也是放在src/main/java目录下的
struts.cunstom.i18n.resources=message struts.i18n.encoding=utf-8
struts.cunstom.i18n.resources=message是为了告诉程序,国际化资源文件是message开头命名的资源文件。这个需要在struts的xml文件里面配置
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <struts> 7 8 <!--告诉程序,国际化资源文件是message开头命名的资源文件。 --> 9 <constant name="struts.custom.i18n.resources" value="message" /> 10 11 <package name="default" namespace="/" extends="struts-default"> 12 13 14 </package> 15 16 </struts>
4. Struts2的页面国际化,默认要走action才行,如果直接访问jsp文件,是没有国际化效果的,所以定义一个语言的LangAction,然后在struts.xml文件里面配置
LangAction:
1 package com.study.struts2.demo; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 public class LangAction extends ActionSupport { 6 7 /** 8 * 9 */ 10 private static final long serialVersionUID = -5273948217476741834L; 11 12 @Override 13 public String execute() throws Exception { 14 // TODO Auto-generated method stub 15 return SUCCESS; 16 } 17 18 }
struts.xml:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <struts> 7 8 <!--告诉程序,国际化资源文件是message开头命名的资源文件。 --> 9 <constant name="struts.custom.i18n.resources" value="message" /> 10 11 <package name="default" namespace="/" extends="struts-default"> 12 13 <action name="lang" class="com.study.struts2.demo.LangAction"> 14 <result name="success">index.jsp</result> 15 </action> 16 17 </package> 18 19 </struts>
5. 实现在index.jsp页面中的中英文切换
1 <%@ page language="java" pageEncoding="UTF-8"%> 2 <!--引入struts2的标签 --> 3 <%@ taglib prefix="s" uri="/struts-tags"%> 4 <body> 5 <!--中英文切换按钮 --> 6 <a href="lang.action?request_locale=zh_CN">中文</a> 7 <a href="lang.action?request_locale=en_US">English</a> 8 9 <p> 10 <a href="<s:url action='hello'/>">Hello World</a> 11 </p> 12 13 <!--struts2的取值标签 value="<s:property value="msg" />"输入正确的被保留 --> 14 <form action="hello.action"> 15 <!-- 信息: --> 16 <s:text name="info"></s:text> 17 <input type="text" name="msg" value="<s:property value="msg" />" /> 18 <s:property value="fieldErrors['msg'][0]" /> 19 <br> <input type="submit" value="<s:text name="submit"></s:text>"> 20 </form> 21 22 <!--验证通过后显示 --> 23 <h2> 24 <s:property value="msg" /> 25 </h2> 26 </body> 27 </html>
5. 在tomcat里面启动项目输入地址验证http://localhost:8080/TestStruts2
中文页面:
英文页面:
三、过滤器方式实现国际化
后续补充。。。。。
四、把Locale放到session里面,从session里面取出Locale作国际化
后续补充。。。。。