今天来说说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应用中实现本地化功能。 首先,我们来看一下本地化的基本概念。本地化是指将软件产品适应特定区域的语言、文化和习惯的过程,...
8. **国际化(Internationalization, i18n)与本地化(Localization, l10n)** - Struts2提供对多语言环境的支持,通过资源包(Resource Bundles)管理不同语言的文本和消息。 9. **异常处理(Exception Handling)** - ...
在ROS中,`robot_localization`是一个关键的功能包,用于融合来自多种传感器的数据,实现机器人的高精度定位。 **一、robot_localization功能介绍** `robot_localization`是ROS中的一个核心节点,其主要任务是通过...
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是专为Unity游戏开发者设计的一个强大工具,旨在帮助他们轻松实现游戏或应用的多语言支持。这款插件的强大之处在于它不仅限于处理文本,还支持声音和图片的本地化,...
I2 Localization是一款专门针对Unity设计的多语言本地化插件,能够帮助开发者轻松实现游戏内容的国际化。 I2 Localization插件提供了强大的功能,包括文本管理和翻译工作流,支持多种格式的资源导入,以及动态切换...
至于“环境建图”,ROS提供了多种工具和库来帮助构建SLAM(Simultaneous Localization and Mapping,同时定位与建图)解决方案。其中,`gmapping`和`amcl`是非常流行的两个库。`gmapping`是基于激光雷达的SLAM算法,...
### Struts 1.2 国际化详解 #### 一、引言 在软件开发过程中,为了满足不同地域和语言环境下的用户需求,软件国际化(Internationalization, 简称 I18N)和本地化(Localization, 简称 L10N)成为了一项重要的技术...
标题中的“LS_Localization_localization_最小二乘法_”暗示了我们将在讨论的是如何利用最小二乘法进行定位问题的解决。 定位技术是获取物体在特定空间坐标系中位置的过程,广泛应用于导航系统、物联网设备、机器人...
10. **国际化与本地化(Internationalization and Localization)**: - Struts2提供了对多语言的支持,开发者可以通过资源文件(properties)为不同地区提供本地化的文本。 以上就是Struts2核心jar包包含的关键...
无线网络定位技术是一种在无线通信环境中确定物体或用户...通过深入研究“无线 localization”压缩包中的文件,你将能够逐步熟悉并掌握无线网络定位的关键技术和克拉美罗滤波器的运用,从而在这一领域打下坚实的基础。
本篇将围绕“localization”这一核心,深入探讨Apollo自动驾驶系统中的定位模块。 一、Apollo定位系统概述 Apollo的定位模块,即“Localization”,旨在为自动驾驶车辆提供高精度的位置信息。它融合了多种传感器...
《I2 Localization 2.6.5:深度解析与应用指南》 在游戏开发和软件设计领域,语言本地化是一项至关重要的任务,它使得产品能够适应全球不同地区的用户需求。I2 Localization 2.6.5 是一款专为 Unity 开发者设计的...
在软件开发中,本地化(Localization)是一项关键任务,它涉及到将应用程序的用户界面、文本、日期、货币等元素适配到不同的语言和地区。`LocalizationHelpers`类通常是为了简化这一过程而创建的一个辅助工具,它...
Codestyling Localization 是一款功能强大的wordpress主题汉化翻译插件,使用此插件可以管理和编辑所有的gettext的翻译文件(.PO/MO).它会自动检测gettext的Ready组件像WordPress的自身或任何插件/主题支持gettext的...
首先,我们需要了解什么是国际化(Internationalization)和本地化(Localization)。国际化是指设计和开发软件,使其能够适应不同的语言和文化环境,而本地化则是将国际化的产品调整到特定地区的语言和习惯的过程。...
5. **国际化与本地化(Internationalization & Localization)**: `Struts_E5`可能涉及Struts如何支持多种语言环境,通过资源包(Properties文件)提供不同语言的文本内容,使应用程序能够根据用户的语言偏好展示...
Struts 2.0.14 是一个历史悠久的版本,它是Apache Struts框架的一个关键迭代,专注于MVC(Model-View-Controller)架构,用于构建Java Web应用程序。这个框架极大地简化了开发过程,并且提供了丰富的功能,如拦截器...
一个深入的分步教程,用于使用来自robot_localization 的扩展卡尔曼滤波器节点实现传感器融合!这里解释了协方差和卡尔曼滤波器等基本概念! 本教程特别有用,因为还没有一个完整的端到端实现教程,用于使用 robots...
本文将详细探讨基于标题"IoT-WIFI-localization-master"和描述"实现利用WiFi进行室内定位"的相关知识点,以及在物联网环境下,WiFi定位系统的设计与实现。 室内定位技术主要解决在GPS信号无法覆盖或效果不佳的室内...