概述
在程序设计领域,把在无需改写源代码即可让开发出来的应用程序能够支持多种语言和数据格式的技术称为国际化。
与国际化对应的是本地化,指让一个具备国际化支持的应用程序支持某个特定的地区。
Struts2 国际化是建立在 Java 国际化基础上的:
1. 为不同国家/语言提供对应的消息资源文件
2. Struts2 框架会根据请求中包含的<s:text name="submit"></s:text>
3. Locale 加载对应的资源文件
4. 通过程序代码取得该资源文件中指定 key 对应的消息
配置国际化资源文件
方法一:Action范围资源文件:
在Action类文件所在的路径建立名为ActionName_language_country.properties 的文件
方法二:包范围资源文件:
在包的根路径下建立文件名为package_language_country.properties 的属性文件,一旦建立,处于该包下的所有 Action 都可以访问该资源文件。注意:包范围资源文件的 baseName 就是package,不是Action所在的包名。
方法三:全局资源文件
命名方式: basename_language_country.properties
在struts.xml文件中配置:<constant name="struts.custom.i18n.resources" value="baseName"/>
或在struts.properties文件中配置:struts.properties struts.custom.i18n.resources=baseName
方法四:临时指定资源文件:
<s:i18n.../> 标签的 name 属性指定临时的国际化资源文件
加载资源文件的顺序
假设我们在某个 ChildAction 中调用了getText("submit"):
(1)加载和 ChildAction 的类文件在同一个包下的系列资源文件 ChildAction.properties
(2)加载 ChildAction 实现的接口 IChild,且和 IChildn 在同一个包下 IChild.properties 系列资源文件。
(3)加载 ChildAction 父类 Parent,且和 Parent 在同一个包下的 baseName 为 Parent.properties 系列资源文件。
(4) 若 ChildAction 实现 ModelDriven 接口,则对于getModel()方法返回的model 对象,重新执行第(1)步操作。
(5) 查找当前包下 package.properties 系列资源文件。
(6) 沿着当前包上溯,直到最顶层包来查找 package.properties 的系列资源文件。
(7) 查找 struts.custom.i18n.resources 常量指定 baseName 的系列资源文件。
(8) 直接输出该key的字符串值。
访问国际化消息
方式一:JSP 页面访问国际化消息:
a)不带占位符:
<s:text name="key"/>
表单元素的 label 属性:可替换为 key 或使用 getText() 方法,并对其进行强制 OGNL 解析
b)带占位符:
在 <s:text.../> 标签中使用多个 <s:param.../> 标签来填充消息中的占位符。
Struts2 直接在国际化消息资源文件中通过 “${}” 使用表达式,该表达式将从值栈中获取对应的属性值
方式二:Action 访问国际化消息:
若 Action 类继承了 ActionSupport ,则可调用 TextProvider 接口的 getText 方法。
利用超链接实现动态加载国际化资源文件
a) Struts2 使用 i18n 拦截器 处理国际化,并且将其注册在默认的拦截器中
b) i18n拦截器在执行Action方法前,自动查找请求中一个名为request_locale 的参数。如果该参数存在,拦截器就将其作为参数,转换成Locale对象,并将其设为用户默认的Locale(代表国家/语言环境)。并把其设置为 session 的 WW_TRANS_I18N_LOCALE 属性
c) 若 request 没有名为request_locale 的参数,则 i18n 拦截器会从 Session 中获取 WW_TRANS_I18N_LOCALE 的属性值,若该值不为空,则将该属性值设置为浏览者的默认Locale
d) 若 session 中的 WW_TRANS_I18N_LOCALE 的属性值为空,则从 ActionContext 中获取 Locale 对象。
I18N 拦截器确定Locale对象流程分析
相关推荐
在国际化处理方面,Struts2提供了全面的支持,使得开发者能够轻松地为多语言环境的应用程序创建接口。 首先,我们需要了解什么是国际化(Internationalization)和本地化(Localization)。国际化是指设计和开发...
在Struts2的配置文件`struts.xml`中,我们需要添加一个全局结果类型(`<global-results>`),用于处理国际化请求。例如: ```xml <package name="default" extends="struts-default"> ...
在Action类中处理国际化: - `ActionSupport`类提供了`getText()`方法的重载版本,用于获取国际化的文本。例如,可以使用`addActionError(getText("wintys.i18n.name.invalid"))`添加错误消息。`addFieldError()`...
总结来说,Struts2的数据验证和国际化功能提高了开发效率,保证了数据的准确性和应用程序的多语言支持。开发者可以通过Action验证或ActionForm验证来处理数据有效性,同时通过资源文件实现内容的国际化。这些特性...
在“Struts2数据校验与国际化”这一主题中,我们将深入探讨Struts2如何通过不同的验证机制确保数据的有效性,以及如何通过国际化功能提供多种语言的用户体验。 首先,数据校验是任何Web应用程序中的关键环节,它...
标题提到的“国际化与Struts2”意味着我们将探讨如何在Struts2应用中实现多语言支持。在描述中提到的“与上一个文件是相同效果、相同目的的升级文件”,可能是指这个文件包含了一些更新或者改进,用于增强之前版本的...
Struts2框架中的错误和异常消息也能被国际化。在配置文件中定义全局异常处理,通过`key`属性指定资源文件中的键,如`<global-exception-mappings><exception key="java.lang.Throwable" result="error"/>...
在Struts2中实现国际化,可以帮助开发者创建对多语言环境友好的应用。 本示例主要围绕Struts2框架如何实现国际化进行深入探讨。源码中包含两个关键部分:WebRoot目录和src目录。 1. **WebRoot** 目录: - `WEB-...
在某些情况下,我们需要在拦截器中处理国际化问题,例如根据用户的选择或浏览器的默认语言动态切换资源包。这时,我们可以编写一个自定义拦截器来实现这一功能: 1. 自定义拦截器中,检查请求头或Cookie以获取用户...
2. **表单验证的国际化**:Struts2支持在表单验证时显示国际化错误消息。这可以通过在资源文件中配置相应的验证错误消息来实现。 3. **日期和时间的格式化**:使用`<s:textfield>`等标签时,可以通过设置`...
在“Struts2国际化Demo”中,我们主要探讨的是如何利用Struts2框架实现应用的多语言支持,即国际化(i18n)功能。国际化是一种设计方法,使得软件能够根据不同地区的语言和文化习惯进行调整,使得全球用户都能无障碍...
虽然Struts1和Struts2都是为了处理Web应用的国际化,但Struts2提供了更强大和灵活的机制。在升级或迁移项目时,了解这两个框架的国际化处理方式对于保持代码的兼容性和可维护性至关重要。在实际开发中,开发者可以...
在“struts2国际化测试”这个主题中,我们将探讨如何在Struts2框架下实现应用程序的国际化功能。 首先,国际化(i18n,i代表第9个字母n,18是n到i的字母数,表示国际化)是使软件能够适应不同语言和文化背景的重要...
它们可以从资源包中获取,允许开发者将消息文本与实际代码分离,方便国际化。 4. **Struts标签库**: - Struts1提供了一套丰富的JSP标签库,如`<bean:message>`和`<html:error>`,这些标签可以方便地与资源包中的...
同时,为了支持多语言环境,可以利用Struts2的国际化特性,提供不同语言的错误消息。 9. **日志和调试** 在处理异常时,记录详细的错误日志对调试至关重要。Struts2集成了Log4j等日志框架,开发者可以配置日志级别...
在Struts2和Freemarker中实现国际化,可以让应用的用户界面适应全球范围内的用户。 首先,我们需要理解Struts2的国际化流程。Struts2提供了一种机制,通过资源属性文件(通常是.properties格式)来管理不同语言的...
- **标签库**:Struts 1.2 提供了一系列用于显示和处理国际化内容的标签,如 `<s:text>` 标签用于显示资源文件中的消息。 - **配置文件**:可以在 `struts-config.xml` 配置文件中指定默认的 `Locale`,并通过 `...
- **易用性**:Struts2的`<s:text>`标签使得在JSP页面中处理国际化变得更加直观。 - **性能**:由于Struts2的拦截器机制,国际化处理可能在请求处理早期就完成,这可能带来一定的性能优势。 4. **最佳实践** - *...
2. **配置Struts2**:在Struts2的配置文件(struts.xml或struts-default.xml)中,我们需要添加一个Interceptor(拦截器)来处理国际化。`i18n interceptor`是专门用于这个目的的,它可以自动检测用户的浏览器设置并...
这篇指南将深入探讨Struts2如何实现国际化支持,并提供一个初步的引导。 首先,理解国际化的基本概念是至关重要的。国际化不仅仅是翻译文本,它还涉及到日期、时间、货币等格式的本地化。在Java中,这一过程通常...