Struts 2 – i18n或本地化示例

Struts 2国际化(i18n),本地化(i10n)或多语言示例,以显示使用资源包显示来自不同语言的消息。 在此示例中,您将创建一个简单的登录屏幕,通过Struts 2 UI组件显示来自资源包的消息,并根据所选语言选项更改语言环境。

下载它– Struts2-i18-localization-Example.zip

1.项目结构

此示例的项目结构

Struts2 localization folder structure

2.属性文件

确保属性文件被命名为国家指定的代码。

在某些“非欧洲”或“非英语”之类的字符中,应始终使用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

请阅读此Struts 2资源包示例,以了解Struts 2如何自动搜索属性文件。

3.行动

有两个动作类, LocaleAction基本不执行任何操作,而LoginAction将执行简单的验证,并通过getText()显示来自资源包的错误消息。

LocaleAction.java

package com.mkyong.common.action;

import com.opensymphony.xwork2.ActionSupport;

public class LocaleAction extends ActionSupport{

	//business logic
	public String execute() {
		return "SUCCESS";
	}
}

LoginAction.java

package com.mkyong.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组件的登录页面。

为了支持Struts 2本地化,您必须在视图页面中声明<%@页面contentType =” text / html; charset = UTF-8”%> ,否则将无法正确显示“ UTF-8数据” ,尤其是汉字。 阅读有关Struts 2中文本地化问题的文章

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类。 在Struts 2中,在struts-default.xml中声明的com.opensymphony.xwork2.interceptor.I18nInterceptor拦截器将劫持Action类并相应地处理语言环境。

5.显示资源束消息?

在Struts 2中,有很多方法可以根据所选语言或语言环境显示资源包消息。 举些例子,

<s:textfield key="global.username" name="username" />
<s:text name="global.username" />	
<s:property value="getText('global.username')" />
<s:text name="global.password" />

在Struts 1中,有一个标准的bean:message来显示资源束消息,这是更可取的。 但是在Struts 2中,有很多等效的方式来显示资源包消息(即使内部工作是不同的),乍看之下却相当混乱。 基本上,无论您选择什么,Struts 2也会正确显示资源束消息。

6. struts.xml

将Struts 2配置文件链接在一起。

<?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.mkyong.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.mkyong.common.action.LocaleAction">
		<result name="SUCCESS">user/pages/login.jsp</result>
	   </action>
	</package>
	
</struts>

7.演示

http:// localhost:8080 / Struts2Example / user / login.action
http:// localhost:8080 / Struts2Example / locale.action?request_locale = zh-CN

Struts2 localization english

http:// localhost:8080 / Struts2Example / locale.action?request_locale = zh_CN

Struts2 localization chinese

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

Struts2 localization German

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

Struts2 localization France

参考

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

翻译自: https://mkyong.com/struts2/struts-2-i18n-or-localization-example/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值