一、国际化的概念

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>

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

java struts2入门学习---国际化的更多相关文章

  1. java struts2入门学习实例--将客户端IP地址和访问方式输出到浏览器

    实例1:实现客户端IP地址和访问方式输出到浏览器. IpAction.java package com.amos.web.action; import javax.servlet.http.HttpS ...

  2. java struts2入门学习--OGNL语言基本用法

    一.知识点学习 1.struts2中包含以下6种对象,requestMap,sessionMap,applicationMap,paramtersMap,attr,valueStack; 1)requ ...

  3. java struts2入门学习--基于xml文件的声明式验证

    一.知识点总结 后台验证有两种实现方式: 1 手工验证顺序:validateXxx(针对Action中某个业务方法验证)--> validate(针对Action中所有的业务方法验证) 2 声明 ...

  4. java struts2入门学习--OGNL语言常用符号和常用标签学习

    一.OGNL常用符号(接上一篇文章): 1.#号 1)<s:property value="#request.username"/> 作用于struts2的域对象,而不 ...

  5. java struts2入门学习---自定义类型转换

    自定义类型转换器的作用就是将struts无法识别的类型转换成自己所需要的. 比如输入:广东-东莞-虎门,对应的输出时能输出:广东省 东莞市 虎门(镇/区) 这里涉及到的知识点即是将String转换为任 ...

  6. java struts2入门学习---文件下载的二种方式

    一.关于文件下载: 文件下载的核心思想即是将文件从一个地方拷贝到另一个地方. 1.传统方式: 在Action中加入大量servlet api 操作.优点是好理解,缺点是耦合度高. 2.stream方式 ...

  7. java struts2入门学习---异常处理和类型转换

    一.struts2对异常的处理 1.自定义局部异常: <action> <exception-mapping result="sonException" exce ...

  8. java struts2入门学习---中文验证、对错误消息的分离、结果(result)类型细节配置

    一.需求 利用struts2实现中文验证并对错误消息的抽离. 详细需求:用户登录-->不填写用户名-->页面跳转到用户登录页面,提示用户名必填(以英文和中文两种方式提示)-->填写英 ...

  9. java struts2入门学习---拦截器学习

    一.拦截器,拦截器栈 1.拦截器的作用 拦截器本质上和servlet的过滤器是一样的.在struts2中,拦截器能够对Action前后进行拦截,拦截器是一个可插拨的,你可以选择使用拦截器,也可以卸载拦 ...

随机推荐

  1. Android -- tools

    工具属性 Android 有一个专用的XML命名空间,用于使工具可以记录XML文件里的信息,并且在打包程序的进行把信息剥离到不会带来运行时期和下载大小的负面影响的程度. 这个命名空间的 URI 是 h ...

  2. 【Spark】Spark-reduceByKey-深入理解

    Spark-reduceByKey-深入理解 spark.apache.org_百度搜索 Apache Spark™ - Lightning-Fast Cluster Computing reduce ...

  3. Linux下简单线程池的实现

    大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的.在传统的多线程服务器模型中是这样实现的:一旦有个服务请求到达,就创建一个新的服务 ...

  4. FastText 文本分类使用心得

    http://blog.csdn.net/thriving_fcl/article/details/53239856 最近在一个项目里使用了fasttext[1], 这是facebook今年开源的一个 ...

  5. php5.6 的interactive模式

    1. 发现运行php 的interactive shell 的时候,不能输入一行执行一行,而要 输入完一整段内容,再按  ctrl + d才能执行这段内容. 原因是,没安装 readline这个模块, ...

  6. svn commit --cl app 时手动输入提交的注释,而不是在 -m 'comments here'这里输入

    原来只需要,提交的时候不指定 -m ,也不指定 -F就可以了,提交之前,svn会自动弹出编辑框来,可以修改信息. https://stackoverflow.com/questions/1746891 ...

  7. Unable to create new web application

      When I try to create a new web application, it just shows message as 'This should'nt take too long ...

  8. 鼠标上下滚动支持combobox选中

    首先需要jquery插件来支持: 1.代码SVN检出https://github.com/jquery/jquery-mousewheel 2.点击这里下载jquery.mousewheel.zip ...

  9. GPUImage API文档之GPUImageContext类

    GPUImageContext类,提供OpenGL ES基本环境,我们一般不会用到,所以讲的很简单. 属性 @property(readonly, nonatomic) dispatch_queue_ ...

  10. javascript奇技淫巧之位运算符

    奇技淫巧:指过于奇巧而无益还让人着迷的技艺与制品. And(与) & Or(或) | Exclusive Or(异或) 或者称 Xor ^ Not(非) ~ 位运算符,我们在日常js开发中其实 ...