转载和引用,请注明原文出处! Fork me on GitHub
结局很美妙的事,开头并非如此!

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作国际化

后续补充。。。。。

posted @ 2017-10-30 19:44  小不点啊  阅读(875)  评论(0编辑  收藏  举报