Www.helper3.com
热门关键字: php net javascript java
Struts2基础 专题
专题目录
您的位置:java > Struts2基础专题 > Struts2本地化和国际化
Struts2本地化和国际化
作者:--    发布时间:2019-11-20 10:17:45
struts 2的国际化(i18n)和本地化(i10n)或多语言的例子,来说明如何使用资源包来显示不同语言的消息。在这个例子中,您将创建一个简单的登录屏幕,通过struts 2的ui组件显示来自资源包的消息, 并更改基于所选的语言选项的语言环境。


1. 工程结构

项目结构,如下图片显示:

2. properties文件

确保属性文件命名为国家指定的代码。
在一些“非欧洲”或“非英语”之类的字符,应该始终编码的内容 native2ascii属性

global.properties

#global messages
global.username = username
global.password = password
global.submit = submit

global_zh_cn.properties

#global messages
global.username = \u7528\u6237\u540d
global.password = \u5bc6\u7801
global.submit=\u63d0\u4ea4

global_fr.properties

#global messages
global.username = nom d'utilisateur
global.password = mot de passe
global.submit = soumettre

global_de.properties

#global messages
global.username = benutzername
global.password = kennwort
global.submit = einreichen 
请仔细阅读struts2资源包的例子来了解struts 2的自动搜索属性文件。

3. 动作类

两个动作类,localeaction基本上是什么都不做, 而 loginaction 会做一个简单的验证和通过gettext()显示来自资源包错误信息。

localeaction.java

package com.h3.common.action;

import com.opensymphony.xwork2.actionsupport;

public class localeaction extends actionsupport{

	//business logic
	public string execute() {
		return "success";
	}
}

loginaction.java

package com.h3.user.action;

import com.opensymphony.xwork2.actionsupport;

public class loginaction extends actionsupport{

	private string username;
	private string password;
	 
	//...getter and setter methods

	//business logic
	public string execute() {
		return "success";
	}

	//simple validation
	public void validate(){
		if("".equals(getusername())){
			addfielderror("username", gettext("username.required"));
		}
		if("".equals(getpassword())){
			addfielderror("password", gettext("password.required"));
		}
	}
}

4. 视图页面

一个登录页面带有一个文本框,密码和提交ui组件。
为了支持struts2 本地化,必须声明 <%@ page contenttype=”text/html;charset=utf-8″ %>在您的视图页面,否则能将有问题的“utf-8数据”正确显示,尤其是中国汉字。阅读这篇文章,关于struts2中国本土化问题

login.jsp

<%@ page contenttype="text/html;charset=utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>

<body>
<h1>struts 2 localization example</h1>

<s:form action="validateuser" namespace="/user">

	<s:textfield key="global.username" name="username" />
	<s:password key="global.password" name="password"/>	
	<s:submit key="global.submit" name="submit" />
	
</s:form>

<s:url id="localeen" namespace="/" action="locale" >
   <s:param name="request_locale" >en</s:param>
</s:url>
<s:url id="localezhcn" namespace="/" action="locale" >
   <s:param name="request_locale" >zh_cn</s:param>
</s:url>
<s:url id="localede" namespace="/" action="locale" >
   <s:param name="request_locale" >de</s:param>
</s:url>
<s:url id="localefr" namespace="/" action="locale" >
   <s:param name="request_locale" >fr</s:param>
</s:url>

<s:a href="%{localeen}" >english</s:a>
<s:a href="%{localezhcn}" >chinese</s:a>
<s:a href="%{localede}" >german</s:a>
<s:a href="%{localefr}" >france</s:a>
 
</body>
</html> 
要更改默认的语言环境,只需要声明“request_locale”参数,设置你喜欢的语言代码,并传递给一个action类。在 struts2中,com.opensymphony.xwork2.interceptor.i18ninterceptor 拦截器, 在 struts-default.xml中声明将拦截action类,并相应地处理语言环境。

5. 显示资源包的消息?

在struts2,有很多的方式来显示所选择的语言或语言环境的资源包的信息。有关示例,
<s:textfield key="global.username" name="username" />
<s:text name="global.username" />	
<s:property value="gettext('global.username')" />
<s:text name="global.password" /> 
在struts1,有一个标准的 bean:message 来显示资源包的消息。但是在struts 2中,有这么多相当于显示资源包的消息(甚至内部的工作不同)方式,基本上,无论选择的是什么,在 struts2 也将显示正确的资源包的消息。

6. struts.xml

struts2 的配置文件,链接一起。
<?xml version="1.0" encoding="utf-8" ?>
<!doctype struts public
"-//apache software foundation//dtd struts configuration 2.0//en"
"http://struts.apache.org/dtds/struts-2.0.dtd">
 
<struts>

	<constant name="struts.custom.i18n.resources" value="global" />
 	<constant name="struts.devmode" value="true" />
 	
	<package name="user" namespace="/user" extends="struts-default">
	   <action name="login">
		<result>/pages/login.jsp</result>
	   </action>
	   <action name="validateuser" class="com.h3.user.action.loginaction">
		<result name="success">/pages/welcome.jsp</result>
		<result name="input">/pages/login.jsp</result>
	   </action>
	</package>
	
	<package name="default" namespace="/" extends="struts-default">
	   <action name="locale" class="com.h3.common.action.localeaction">
		<result name="success">/user/pages/login.jsp</result>
	   </action>
	</package>
	
</struts>

7. 示例

http://localhost:8080/i18nlocalization/user/login.action

http://localhost:8080/i18nlocalization/locale.action?request_locale=en


http://localhost:8080/i18nlocalization/locale.action?request_locale=zh_cn

http://localhost:8080/i18nlocalization/locale.action?request_locale=de

http://localhost:8080/i18nlocalization/locale.action?request_locale=fr

参考

  1. http://struts.apache.org/2.1.8/docs/localization.html
  2. http://www.h3.com/java/java-convert-chinese-character-to-unicode-with-native2ascii/
  3. http://www.h3.com/struts2/struts-2-resource-bundle-example/
  4. http://www.h3.com/struts/struts-internationalizing-or-localization-example/

代码下载 - http://pan.baidu.com/s/1jgcuaj8


所有评论

loading......

滚动到顶部 滚动到底部
合作联系(微信):
www.helper3.com
关于本站:
宗旨
网站备案号:
粤ICP备17073857号-1

声明:
本站部分内容来自网络,如您发现本站内容侵害到您的利益,请联系本站管理员处理。