`

struts2 i18n (一)

 
阅读更多

国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能。

其实,Struts 1.x在此部分已经做得相当不错了。它极大地简化了我们程序员在做国际化时所需的工作,例如,如果您要输出一条国际化的信息,只需在代码包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME为默认资源文件的文件名),然后在struts-config.xml中指明其路径,再在页面用<bean:message>标志输出即可。

不过,所谓没有最好,只有更好Struts 2.0并没有在这部分止步,而是在原有的简单易用的基础上,将其做得更灵活、更强大。

国际化Hello World

下面让我们看一个例子——HelloWorld。这个例子演示如何根据用户浏览器的设置输出相应的HelloWorld

  1. 在Eclipse创建工程配置开发和运行环境(如果对这个步骤有问题,可以参考我早前的文章《Struts 2.0做好准备》)。
  2. 在src文件夹中加入struts.properties文件,内容如下:

struts.custom.i18n.resources=globalMessages

Struts 2.0有两个配置文件,struts.xmlstruts.properties都是放在WEB-INF/classes/下。

o struts.xml用于应用程序相关的配置

o struts.properties用于Struts 2.0的运行时(Runtime)的配置

  1. 在src文件夹中加入globalMessages_en_US.properties文件,内容如下:

HelloWorld=Hello World!

  1. 在src文件夹中加入globalMessages_zh_CN.properties文件,内容如下:

HelloWorld=你好,世界!

在此想和大家分享一个不错的编写properties文件的Eclipse插件(plugin),有了它我们在编辑一些简体中文、繁体中文等Unicode文本时,就不必再使用native2ascii编码了。您可以通过Eclipse中的软件升级(Software Update)安装此插件,步骤如下:

1、展开EclipseHelp菜单,将鼠标移到Software Update子项,在出现的子菜单中点击Find and Install
2
、在Install/Update对话框中选择Search for new features to install,点击Next
3
、在Install对话框中点击New Remote Site
4
、在New Update Site对话框的Name填入“PropEdit”或其它任意非空字符串,在URL中填入http://propedit.sourceforge.jp/eclipse/updates/
5
、在Site to include to search列表中,除上一步加入的site外的其它选项去掉,点击Finsih
6
、在弹出的Updates对话框中的Select the features to install列表中将所有结尾为“3.1.x”的选项去掉(适用于Eclipse 3.2版本的朋友);
7
、点击Finish关闭对话框;
8
、在下载后,同意安装,再按提示重启Eclipse,在工具条看到形似vi的按钮表示安装成功,插件可用。此时,Eclpise中所有properties文件的文件名前有绿色的P的图标作为标识。

  1. 在WebContent文件夹下加入HelloWorl.jsp文件,内容如下:

<%@ page contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h2><s:text name="HelloWorld"/></h2>
<h2><s:property value="%{getText('HelloWorld')}"/></h2>
</body>
</html>

  1. 发布运行应用程序,在浏览器地址栏中输入http://localhost:8080/Struts2_i18n/HelloWorld.jsp ,出现图1所示页面。

    图1 中文输出
  2. 将浏览器的默认语言改为“英语(美国)”,刷新页面,出现图2所示页面。

    图2 英文输出

上面的例子的做法,与Struts 1.x的做法相似,似乎并不能体现Struts 2.0的优势。不过,我在上面的例子用了两种方法来显示国际化字符串,其输出是相同的。其实,这就是Struts 2.0的一个优势,因为它默认支持EL,所示我们可以用getText方法来简洁地取得国际化字符串。另外更普遍的情况——在使用UI表单标志时,getText可以用来设置label属性,例如:

<s:textfield name="name" label="%{getText('UserName')}"/>

资源文件查找顺序

之所以说Struts 2.0的国际化更灵活是因为它可以能根据不同需要配置和获取资源(properties)文件。在Struts 2.0中有下面几种方法:

  1. 使用全局的资源文件,方法如上例所示。这适用于遍布于整个应用程序的国际化字符串,它们在不同的包(package)中被引用,如一些比较共用的出错提示;
  2. 使用包范围内的资源文件。做法是在包的根目录下新建名的package.properties和package_xx_XX.properties文件。这就适用于在包中不同类访问的资源;
  3. 使用Action范围的资源文件。做法为Action的包下新建文件名(除文件扩展名外)与Action类名同样的资源文件。它只能在该Action中访问。如此一来,我们就可以在不同的Action里使用相同的properties名表示不同的值。例如,在ActonOne中title为“动作一”,而同样用title在ActionTwo表示“动作二”,节省一些命名工夫;
  4. 使用<s:i18n>标志访问特定路径的properties文件。使用方法请参考我早前的文章《常用的Struts 2.0的标志(Tag)介绍》。在您使用这一方法时,请注意<s:i18n>标志的范围。在<s:i18n name="xxxxx">到</s:i18n>之间,所有的国际化字符串都会在名为xxxxx资源文件查找,如果找不到,Struts 2.0就会输出默认值(国际化字符串的名字)。

上面我列举了四种配置和访问资源的方法,它们的范围分别是从大到小,而Struts 2.0在查找国际化字符串所遵循的是特定的顺序,如图3所示:


3 资源文件查找顺序图

假设我们在某个ChildAction中调用了getText("user.title")Struts 2.0的将会执行以下的操作:

  1. 查找ChildAction_xx_XX.properties文件或ChildAction.properties;
  2. 查找ChildAction实现的接口,查找与接口同名的资源文件MyInterface.properties;
  3. 查找ChildAction的父类ParentAction的properties文件,文件名为ParentAction.properties;
  4. 判断当前ChildAction是否实现接口ModelDriven。如果是,调用getModel()获得对象,查找与其同名的资源文件;
  5. 查找当前包下的package.properties文件;
  6. 查找当前包的父包,直到最顶层包;
  7. 在值栈(Value Stack)中,查找名为user的属性,转到user类型同名的资源文件,查找键为title的资源;
  8. 查找在struts.properties配置的默认的资源文件,参考例1;
  9. 输出user.title。

参数化国际化字符串

许多情况下,我们都需要在动行时(runtime)为国际化字符插入一些参数,例如在输入验证提示信息的时候。在Struts 2.0中,我们通过以下两种方法做到这点:

  1. 在资源文件的国际化字符串中使用OGNL,格式为${表达式},例如:

validation.require=${getText(fileName)} is required

  1. 使用java.text.MessageFormat中的字符串格式,格式为{ 参数序号(从0开始), 格式类形(number | date | time | choice), 格式样式},例如:

validation.between=Date must between {0, date, short} and {1, date, short}

在显示这些国际化字符时,同样有两种方法设置参数的值:

  1. 使用标志的value0、value1...valueN的属性,如:

<s:text name="validation.required" value0="User Name"/>

  1. 使用param子元素,这些param将按先后顺序,代入到国际化字符串的参数中,例如:

<s:text name="validation.required">
<s:param value="User Name"/>
</s:text>

分享到:
评论

相关推荐

    struts2 i18n学习记录

    在Struts2中,i18n(国际化)是实现多语言支持的关键特性,它允许开发者为不同地区和语言的用户提供本地化的界面。这篇学习记录将深入探讨Struts2中的i18n实现。 一、i18n概念 i18n(“国际化”首字母的缩写,18...

    Struts2 I18N国际化最简单例子

    在这个“Struts2 I18N国际化最简单例子”中,我们将探讨如何在Struts2框架下实现国际化功能。 1. **Struts2的I18N支持** Struts2提供了内置的支持来处理多语言环境。它通过资源包(Resource Bundle)来管理不同的...

    国际化 struts2i18n demo

    在"struts2i18n"这个示例中,我们将会看到如何在Struts2环境中配置和使用i18n功能。这个实例基于Struts2.16版本,一个稳定且功能丰富的发行版。MyEclipse6是一个集成开发环境(IDE),它提供了对Struts2等框架的良好...

    struts2-i18n实现国际化例子

    总之,Struts2-i18n提供了一种方便的方式来实现Web应用的国际化,使得开发者可以轻松地为不同地区的用户提供本地化的体验。通过理解和实践这个例子,初学者可以快速掌握Struts2的国际化机制,并将其应用到实际项目中...

    struts2 i18n国际化实例

    这个"struts2 i18n国际化实例"应该包含了实现上述所有步骤的具体代码示例,对于初学者来说,是一个很好的学习起点,可以帮助理解Struts2如何处理国际化,以及如何在实际项目中应用这些概念。同时,遇到问题可以与...

    (三)Struts2国际化(i18n) :简单语言包的实现

    在Struts2中,国际化(i18n)是处理多语言环境的重要特性,使得同一个应用可以适应不同地区用户的需求。本篇文章将深入探讨如何在Struts2中实现简单语言包的国际化。 首先,我们需要了解什么是i18n。这里的数字"18...

    struts_i18n_login.rar_i18n

    在 Struts 1 中,国际化(i18n)是一个关键特性,它使得应用程序能够支持多种语言,从而满足全球用户的语言需求。"struts_i18n_login.rar_i18n" 这个标题暗示我们将会探讨如何在 Struts 1 中实现国际化登录界面。 ...

    struts_I18N

    2. **I18N在Struts中的应用**: - **资源包**:在Struts中,为了实现I18N,开发者需要创建一系列的资源包,每个包对应一种语言或地区。资源包通常是以.properties为扩展名的文本文件,其中存储了键值对,键是标识符...

    struts_I18N国际化

    Struts I18N 国际化是一种技术,它允许应用程序根据用户所在的地理位置或首选语言环境来显示相应的本地化内容。在Struts框架中,I18N(Internationalization)是一个关键特性,使得开发者能够轻松地创建支持多语言的...

    struts2国际化_i18n

    Struts2是一个非常流行的Java Web框架,用于构建可维护、可扩展且结构良好的应用程序。...这个提供的`i18n`压缩包文件可能包含了示例的资源包和相关的配置文件,可以帮助初学者理解并实践Struts2的国际化实现。

    struts2i18n

    struts2 中际化示例,加上s2sh所需的Jar就可以运行!如果不行留言,把demo发给你! 示例图:http://blog.csdn.net/liuc0317/archive/2010/12/01/6048552.aspx

    struts2_i18n

    在Struts2中,i18n(国际化)是一种重要的功能,它允许开发者创建能够支持多种语言的应用程序,以满足全球用户的需要。在这个主题"struts2_i18n"中,我们将深入探讨Struts2框架中的国际化实现机制。 首先,了解i18n...

    Struts2 国际化 I18N 和Java 国际化

    2. 在Struts2配置文件中启用I18N支持。 3. 使用`ActionContext`或`ValueStack`在Action和视图中获取本地化字符串。 4. 可以通过`MessageProvider`自定义消息提供策略。 5. 使用`Locale`对象进行语言环境切换,以便于...

    struts2-i18n

    Struts2-i18n是一个专门针对Struts2框架实现的国际化(i18n)解决方案。在Web开发中,国际化是一项重要的功能,它允许应用为不同地区的用户提供本地化的界面和内容。Struts2作为流行的Java Web MVC框架,提供了一套...

    struts2中的国际化(i18n)项目实例.(MyEclipse工具)

    这个"struts2中的国际化(i18n)项目实例"是为了帮助初学者理解如何在Struts2中实现在MyEclipse集成开发环境中配置和使用国际化功能。 首先,我们要知道i18n代表的是“国际化”,这里的18个字符代表了英文单词...

    i18n的一些源码

    在Java Web应用中,Struts2框架提供了一种方便的i18n支持。Struts2_i18n压缩包文件可能包含用于实现国际化功能的资源文件和相关代码。资源文件通常是.properties格式,例如`messages.properties`,它是默认的语言...

    struts1的I18例子

    2. **配置Struts1的I18N**: - 在`struts-config.xml`配置文件中,需添加一个`&lt;message-resources&gt;`元素来指定资源文件的位置。例如: ```xml ``` - `parameter`属性指定了资源文件的路径,可以是类路径或完全...

    struts_i18n1_login

    在"struts_i18n1_login"这个实例中,我们将探讨如何利用Struts框架实现国际化(i18n)功能,并创建一个基本的登录界面。国际化是一个重要的特性,它允许应用程序根据用户的语言和地区提供定制化的用户界面。 首先,...

    struts2 国际化 i18n

    Struts2的国际化(i18n)是Web应用开发中必不可少的一个特性,它允许应用程序根据用户的语言和地区提供相应的本地化内容。Struts2框架提供了强大的国际化支持,包括页面、Action和XML配置文件的国际化。 首先,为了...

    Struts2中的validation_多国语言版 国际化i18n+struts2数据校验.zip

    本资料包聚焦于Struts2中的数据校验以及国际化(i18n)支持。 首先,我们来探讨"Struts2中的validation_多国语言版",这是Struts2的数据校验功能。Struts2提供了一种灵活的机制来验证用户输入,通过在Action类中...

Global site tag (gtag.js) - Google Analytics