`

Struts2.2 Localization

阅读更多

 

今天来说说Struts2 的另一个功能- 国际化,Struts2 的国际化是建立在Java 国际化的基础上的,一样是通过提供不同国家/ 语言环境的消息资源,然后通过ResourceBundle 加载指定的Locale 对应的资源文件,再取得该资源文件中指定key 对应的消息,整个过程与Java 程序的国际化完全相同,只是Struts2 框架对java 程序国际化进行了进一步的封装,从而简化了应用程序的国际化。

我们先来看看Java 的国际化:

Test.java:

package org.iflytek.test;

import java.util.Locale;
import java.util.ResourceBundle;

/**
 * @author xudongwang 2011-10-31
 * 
 */
public class Test {
	public static void main(String[] args) {
		// ResourceBundle res = ResourceBundle.getBundle("app", Locale.CHINA);
		ResourceBundle res = ResourceBundle.getBundle("app", Locale.US);
		// app_en_US.properties
		// en表示语言,US表示国家
		System.out.println(res.getString("welcome.msg"));
	}

}

 app_en_US.properties

welcome.msg=hello,sir

 

app_zh_CN.properties

welcome.msg=\u6b22\u8fce\u4f60\uff01

 

Struts2 内置国际化功能:

1、  自动创建 ResourceBundle 对象;

2、  http header 中自动创建 local 对象;

3、  为获得资源提供便利(标签库、工具类);

4、  提供层次化的资源分布(全局、 package Action );

5、  通过拦截器实现( com.opensymphony.xwork2.interceptor.i1 8nInterceptor ),是一;

 

Struts2 的资源加载机制:

         通过 TextProvider 实现资源文件查找和加载

         Properties 文件匹配顺序为:

1、  Action 所在 package 下的类名称匹配;

2、  Action 实现接口名称匹配;

3、  Action 父类名称匹配;

4、  Action 实现 Model Driven Model 类名称匹配;

注意这里可以到 struts2-core-2.1.8.1.jar-->org-->apache-->struts2-->default.properties 中查看;

 

Struts2 资源文件:

         全局资源文件:

1、  首先要放在 src 目录下

2 、名称必须为 globalMessages_en.properties globalMessages_zh.properties 等;

         针对单个 Action 的资源文件:

                   1 、放在 /src/struts/demo/action 下,即和 Action 目录相同;

                   2 、名字为 Action 的类名 _en.properties Action 的类名 _zh.properties 等;

 

Struts2 中需要做国际化的有: jsp 页面展示的信息、 Action 的错误信息、转换错误信息、校验错误信息。

         在前面的 Struts2.2 Configuration 中提过配置国际化:

<constant name="struts.custom.i18n.resources" value="message"></constant>

 

具体步骤:

1、  编写 login_from .jsp:

<title><s:text name="title"/></title>
<s:form action="login-form" namespace="/il8n">
<s:textfield name="user.username" key="username">
</s:textfield>
<s:passwordname="user.password"label="%{getText('password')}">
</s:password>
<s:submit key="submit"></s:submit>
<s:text name="greeting" />
</s:form>

 

说明:

      1 <s:text> 标签

      2、 Form UI 标签的 key 属性

      3 %{getText('key')}       

2 、分别编写全局的国际化资源文件和单个的

单个的:

              LoginAction_en.properties

title=please login
username=Username
password=Password
submit=Login

 

                 LoginAction_zh.properties

title=\u8BF7\u767B\u9646
username=\u5E10\u53F7
password=\u5BC6\u7801
submit=\u767B\u9646

 

全局的:

globalMessages_en.properties

greeting = welcome
language=Language

 

globalMessages_zh.properties

greeting = \u6B22\u8FCE
language=\u8BED\u8A00
 

 

3 struts.xml:

<constant name="struts.custom.i18n.resources" value="globalMessages" />
		<package name="il8n" namespace="/il8n" extends="struts-default">
		<action name="login-form" class="struts.demo.action.LoginAction" method="form">
			<result name="success">/login_form.jsp</result>
		</action>
		</package>

 

注意:因为上面有全局的国际化资源文件,所以需要配置 <constant name="struts.custom.i18n.resources"          value="globalMessages" /> ,这里和 struts1 不同的是在 Struts1 中的 struts 配置文件中还要有 <message-resources          parameter="myResource">

</message-resources> Struts2 是由于其内置的拦截器起来作用;

 

4 LoginAction.java:

		package struts.demo.action;
import struts.demo.bean.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

/**
 * @author xudongwang 2011-5-19
 * 
 */
public class LoginAction extends ActionSupport {
	private User user;
	getter/setter
	public String form() {
		return Action.SUCCESS;
	}
}

 

注意上面的要继承 ActionSupport 因为这个类下有国际化属性

 

i18nInterceptor 拦截机制:

         1 、从 request parameter 中查找 request_locale

         2 、如果不存在,则从 session 中查找 WW_TRANS_I18N_LOCALE

         3 、如果不存在则从 ActionContext 获得服务器的 locale

         4 、设置找到的 locale ActionContext 的默认 locale        

 

在上面的国际化的基础上实现不同语言间的切换:

在上面的基础上继续编写

         select-language.jsp

<title><s:text name="title" /></title>
<body>
	<s:bean name="struts.demo.bean.LocaleProvider" var="lp" />
	<s:form id="langForm">
		<s:select name="request_locale" list="#lp.enableLocales"
			value="#lp.currentLocale" listKey="key" listValue="value"
			key="language"	onchange="document.getElementById('langForm').submit()" />
	</s:form>
</body>

 

LocaleProvider.java

package struts.demo.bean;
import java.util.HashMap;
import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

/**
 * @author xudongwang 2011-5-19
 * 
 */
public class LocaleProvider {
	private static Map<String, String> enableLocales = new HashMap<String, String>();
	static {
		enableLocales.put("zh", "中文");
		enableLocales.put("en", "English");
	}
	public Map<String, String> getEnableLocales() {
		return enableLocales;
	}
	public String getCurrentLocale() {
		return ActionContext.getContext().getLocale().getLanguage();
	}
}

 

资源文件在上面已经包含了

         login_form.jsp 上只要多引用 select-language.jsp 即可,最终变为 ;

<title><s:text name="title"/></title>
<body>
<s:include value="/select-language.jsp"></s:include>
<s:form action="login-form" namespace="/il8n">
	<s:textfield name="user.username" key="username"></s:textfield>
	<s:password name="user.password" label="%{getText('password')}"></s:password>
	<s:submit key="submit"></s:submit>
	<s:text name="greeting" />
</s:form>

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Struts-Localization-Example.zip_localization

    这个"Struts-Localization-Example.zip_localization"文件很可能是为了演示如何在Struts应用中实现本地化功能。 首先,我们来看一下本地化的基本概念。本地化是指将软件产品适应特定区域的语言、文化和习惯的过程,...

    struts2 API帮助文档

    8. **国际化(Internationalization, i18n)与本地化(Localization, l10n)** - Struts2提供对多语言环境的支持,通过资源包(Resource Bundles)管理不同语言的文本和消息。 9. **异常处理(Exception Handling)** - ...

    Struts课堂笔记.rar--struts2的struts.properties配置文件详解

    struts.action.extension The URL extension to use to determine if the request is meant for a Struts action 用URL扩展名来确定是否这个请求是被用作Struts action,其实也就是设置 action的后缀,例如login....

    unity 语言本地化插件I2 Localization_v2.8.13 f2.rar

    Unity 语言本地化插件I2 Localization_v2.8.13 f2是专为Unity游戏开发者设计的一个强大工具,旨在帮助他们轻松实现游戏或应用的多语言支持。这款插件的强大之处在于它不仅限于处理文本,还支持声音和图片的本地化,...

    unity多语言本地化插件I2 Localization使用案例

    I2 Localization是一款专门针对Unity设计的多语言本地化插件,能够帮助开发者轻松实现游戏内容的国际化。 I2 Localization插件提供了强大的功能,包括文本管理和翻译工作流,支持多种格式的资源导入,以及动态切换...

    robot_localization_localization_雷达定位ekf_环境建图_ROS_ros小车建图_

    至于“环境建图”,ROS提供了多种工具和库来帮助构建SLAM(Simultaneous Localization and Mapping,同时定位与建图)解决方案。其中,`gmapping`和`amcl`是非常流行的两个库。`gmapping`是基于激光雷达的SLAM算法,...

    struts1.2 国际化

    ### Struts 1.2 国际化详解 #### 一、引言 在软件开发过程中,为了满足不同地域和语言环境下的用户需求,软件国际化(Internationalization, 简称 I18N)和本地化(Localization, 简称 L10N)成为了一项重要的技术...

    LS_Localization_localization_最小二乘法_

    标题中的“LS_Localization_localization_最小二乘法_”暗示了我们将在讨论的是如何利用最小二乘法进行定位问题的解决。 定位技术是获取物体在特定空间坐标系中位置的过程,广泛应用于导航系统、物联网设备、机器人...

    struts2的核心jar包

    10. **国际化与本地化(Internationalization and Localization)**: - Struts2提供了对多语言的支持,开发者可以通过资源文件(properties)为不同地区提供本地化的文本。 以上就是Struts2核心jar包包含的关键...

    wireless localization_localization_tentvts_无线网络定位克拉美罗_定位克拉美罗_

    无线网络定位技术是一种在无线通信环境中确定物体或用户...通过深入研究“无线 localization”压缩包中的文件,你将能够逐步熟悉并掌握无线网络定位的关键技术和克拉美罗滤波器的运用,从而在这一领域打下坚实的基础。

    localization_localization_apollo_自动驾驶_

    本篇将围绕“localization”这一核心,深入探讨Apollo自动驾驶系统中的定位模块。 一、Apollo定位系统概述 Apollo的定位模块,即“Localization”,旨在为自动驾驶车辆提供高精度的位置信息。它融合了多种传感器...

    I2 Localization2.6.5

    《I2 Localization 2.6.5:深度解析与应用指南》 在游戏开发和软件设计领域,语言本地化是一项至关重要的任务,它使得产品能够适应全球不同地区的用户需求。I2 Localization 2.6.5 是一款专为 Unity 开发者设计的...

    获取本地化资源信息LocalizationHelpers

    在软件开发中,本地化(Localization)是一项关键任务,它涉及到将应用程序的用户界面、文本、日期、货币等元素适配到不同的语言和地区。`LocalizationHelpers`类通常是为了简化这一过程而创建的一个辅助工具,它...

    Codestyling Localization v1.99.30.zip

    Codestyling Localization 是一款功能强大的wordpress主题汉化翻译插件,使用此插件可以管理和编辑所有的gettext的翻译文件(.PO/MO).它会自动检测gettext的Ready组件像WordPress的自身或任何插件/主题支持gettext的...

    ROS定位功能包:robot_localization

    在ROS中,`robot_localization`是一个关键的功能包,用于融合来自多种传感器的数据,实现机器人的高精度定位。 **一、robot_localization功能介绍** `robot_localization`是ROS中的一个核心节点,其主要任务是通过...

    struts2国际化处理全解

    首先,我们需要了解什么是国际化(Internationalization)和本地化(Localization)。国际化是指设计和开发软件,使其能够适应不同的语言和文化环境,而本地化则是将国际化的产品调整到特定地区的语言和习惯的过程。...

    6个struts小案例,网罗STRUTS基础知识

    5. **国际化与本地化(Internationalization & Localization)**: `Struts_E5`可能涉及Struts如何支持多种语言环境,通过资源包(Properties文件)提供不同语言的文本内容,使应用程序能够根据用户的语言偏好展示...

    struts-2.0.14源代码

    Struts 2.0.14 是一个历史悠久的版本,它是Apache Struts框架的一个关键迭代,专注于MVC(Model-View-Controller)架构,用于构建Java Web应用程序。这个框架极大地简化了开发过程,并且提供了丰富的功能,如拦截器...

    使用robot_localization 实现传感器融合 的深入分步教程_设计_文档_相关文件_下载

    一个深入的分步教程,用于使用来自robot_localization 的扩展卡尔曼滤波器节点实现传感器融合!这里解释了协方差和卡尔曼滤波器等基本概念! 本教程特别有用,因为还没有一个完整的端到端实现教程,用于使用 robots...

    IoT-WIFI-localization-master_室内WiFi定位_iot_localization_wifi定位_wi

    本文将详细探讨基于标题"IoT-WIFI-localization-master"和描述"实现利用WiFi进行室内定位"的相关知识点,以及在物联网环境下,WiFi定位系统的设计与实现。 室内定位技术主要解决在GPS信号无法覆盖或效果不佳的室内...

Global site tag (gtag.js) - Google Analytics