一、国际化的概念

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. IE11 F12工具报错

    系统环境 win7+IE11 报错描述: Exception in window.onload: Error: An error has ocurredJSPlugin.3005 Stack Trac ...

  2. jQuery操作radio、checkbox、select 集合

    1.radio:单选框 HTML代码: <input type="radio" name="radio" id="radio1" va ...

  3. 利用blob对象实现粘贴图片

    blob的一个常用应用场景,就是获取剪切板上的数据来进行粘贴的操作.例如通过QQ截图后,需要在网页上进行粘贴操作. 粘贴图片我们需要解决下面几个问题 1.监听用户的粘贴操作 2.获取到剪切板上的数据 ...

  4. [转]0.python:scikit-learn基本用法

    感谢百小度治哥,该文原地址:here 经Edwin Chen的推荐,认识了scikit-learn这个非常强大的python机器学习工具包.这个帖子作为笔记.(其实都没有笔记的意义,因为他家文档做的太 ...

  5. 解决eclipse导出javadoc时的“错误: 编码GBK的不可映射字符”问题(转)

    http://blog.csdn.net/psy1100/article/details/51179342 今天要将自己的API接口和MODEL导出来一份java doc参考文档, 但是在导出的时候却 ...

  6. Python3 使用 matplotlib 画折线图

    ChartUtil.py import matplotlib.pyplot as plt from pylab import mpl def plotLine(xData,yData,xLabel,c ...

  7. linux下获取硬盘使用情况[总结]

    1.前言 在嵌入式设备中,硬盘空间非常有限,在涉及到经常写日志的进程时候,需要考虑日志的大小和删除,不然很快就硬盘写满,导致日志程序崩溃.为了捕获硬盘写满的异常场景,我们需要在写日志过程中判断硬盘空间 ...

  8. Spark Strcutured Streaming中使用Dataset的groupBy agg 与 join 示例(java api)

    Dataset的groupBy agg示例 Dataset<Row> resultDs = dsParsed .groupBy("enodeb_id", "e ...

  9. 【Python】将对象存成json文件及从json取出对象

    常用代码,单拎出来以备查. 对象存json文件: import json obj={'name':'张有财','age':39,'arr':[2,34,5,6,7,88,'李有钱']} with op ...

  10. C#.NET常见问题(FAQ)-如何在不同窗体之间传递值

    最简单的方法是在定义窗体的时候就写好几个变量,在实例化Form2的时候,就把这些参数传递过去   或者你也可以定义一个类,然后通过这个类的静态变量交互(注意只能用静态的,因为Form2无法访问Form ...