Hi_Amos
坚持每天都在进步!!

一、国际化的概念

1、不同国家的人访问同一个网站,显示的语言不同。

2、对JSP页面进行国际化

属性(properties)文件命名规则:基名---语言--国家如, message_zh_CN.properties

>>>使用标签获取相对应的值,如:

<s:textfield key="login.username" name="username"/> 
<s:submit key="login.submit"/>

login.username与属性(properties)文件中的key值相对应。

 

>>>给{0},{1}等占位符动态赋值

<s:text name="属性中的key">

<s:param>属性值</s:param>

 

二、实例1

1、需求:访问同一个页面,不同语言的访问者,显示不同语言的页面

1)英文访问者访问页面

 

2)中文访问者访问页面

 

 

2、代码分析

login_i18n.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>login</title>
</head>
<body>
    <s:form action="LoginAction" method="POST">
        <s:textfield key="login.username" name="username"/>    
        <s:submit key="login.submit"/>
    </s:form>
</body>
</html>
View Code

message_en_US.properties

login.username=USERNAME
login.submit=LOGIN

message_zh_CN.properties

login.username=\u7528\u6237\u540D
login.submit=\u767B\u5F55

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <!--<include file="config/upload.xml"></include>-->        
    <!-- 加载其他配置文件 -->
    <!-- <include file="config/upload-interceptor.xml"></include> -->
    <constant name="struts.custom.i18n.resources"  value="message"></constant>
</struts>

struts2的拦截器在项目启动时就已经加载到内存中了,主要通过struts.xml,这里只是测验国际化,所以将其他都注释掉了,在常量中配置i18n的拦截器的值,这里值就为基值,不需要将语言和国家带上;然后当jsp页面调用值时,使用struts2自带的标签将用户对应语言的值加载进来。

拦截器的作用就是将配置文件加载到内存中,标签的作用就是将对应语言的值加载到页面中去。

三、实例2

1、需求:

 

2、代码分析

在实例1的基础上增加动态参数注入。

message_en_US.propertiest和message_zh_CN.properties中增加两个参数如下所示:

login.hello=hello {0},I am {1}

在login_i18n.jsp页面中新增加如下代码:

    <hr>
    <s:text name="login.hello">
        <s:param>tom</s:param>
        <s:param>amos</s:param>
    </s:text>

使用<s:text>标签来调用带参数的属性值,同时使用<s:param>标签来给参数赋值,其中顺序就与参数的顺序对应。

3.综合运用

能不能将参数值不写入到jsp页面中,因为这样很不方便,可不可以直接配置到properties属性文件中?

login_i18n.jsp页面中的参数内容改为如下:

<s:text name="login.hello">
        <s:param><s:text name="login.tom"></s:text></s:param>
        <s:param><s:text name="login.amos"></s:text></s:param>
</s:text>

在properties文件中分别配置如下:

login.tom=TOM
login.amos=AMOS
/*******us上面,cn下面********/
login.tom=\u6C64\u59C6
login.amos=\u963F\u83AB\u65AF

这样将参数配置到properties中使用<s:text >标签再获取属性(properties)文件中的值,再根据不同语言进行显示,如下所示:

1)中方显示

 2)英文显示:

 

 本文只是讲了简单的配置,具体实现可参考I18nInterceptor拦截器的实现。

 本文源码https://github.com/amosli/strut2_learn    struts2 国际化

 

posted on 2014-01-22 00:57  Hi_Amos  阅读(1312)  评论(5编辑  收藏  举报