`
hendryxu
  • 浏览: 123449 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

利用STRUTS实现国际化

阅读更多
一.JSP页面部分


1.    页面文字处理


1.1概述

   由于STRUTS提供了很好的国际化的支持,因此JSP页面可以STRUTS的这一特性做到国际化。
    STRUTS允许将不同语言的文字写在多个资源文件中,每个资源对应一种语言,而在JSP页面上则通过STRUTS标签<bean:message>来显示文字,该标签可以根据浏览器的当前语言设置确定从对应的语种资源文件中取出字符串,显示在页面上。

1.2资源文件

实现国际化,首先需要准备好资源文件,需要支持的语言各对应一个。资源文件一定要用支持多国语言文字的文本编辑器(如WORD,一定不能用NOTEPAD、UE等)编写,其格式如下:
# Project international
index.title=XX信息系统
index.copyright=XXX有限公司 版权所有
其中以#开头的行是注释,其它的行都是KEY=VALUE的形式,定义了一个KEY对应当前语言下的文字。保存资源文件时,需要在文件类型选项中选择纯文本类型,编码选择其它>>UTF-8,注意资源文件的扩展名为.properties,文件名可以任意取。
这样保存的资源文件还不能直接被STRUTS使用,JDK提供了一个工具native2ascii对编写的资源文件进行转换,该工具位于%JDK%/bin/目录下,一般在JDK正确安装后可以直接在命令行使用。使用native2ascii工具转换的资源的文件的命令行格式如下:
native2ascii -encoding UTF-8 ApplicationResources.properties ApplicationResources_zh_CN.properties
其中-encoding参数指明编写的资源文件的编码格式,这里必须与编辑时选择保存的编码格式一致,后面两个参数分别是需要转换的资源文件名和转换后保存的资源文件名。
转换后的资源文件名都必须以一个特定的前辍开头,该前辍写在struts-config.xml配置中,后辍是对应语言的简称,如
英文(美国) ApplicationResources _en_US.properties
  中文(简体)ApplicationResources _zh_CN.properties
  中文(繁体)ApplicationResources _tw.properties
  泰语        ApplicationResources _th.properties
资源文件的存放目录可以是/WEB-INF/classes/下的任意目录,为了便于管理 ,建议在/WEB-INF/ classes/下建立目录resources,将所有的资源文件都放在该目录下。STRUTS通过配置文件struts-config.xml配置资源文件的所在位置,如:
<message-resources parameter="resources.ApplicationResources" />
其中目录以包的方式表示。

1.3 JSP页面显示
   
      为了支持国际化,JSP页面的编码方式需要设成UTF-8,即在页面的头部加入以下几行:
      <%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
……(STRUTS及其它标签库引用)
<html:html locale="true">
JSP页面的中文字要全部写到资源文件中,注意每种语言资源文件都要写到,否则在使用某种语言访问系统时可能会报错。JSP中使用STRUTS标签<bean:message key="index.title"/>显示资源文件中定义的字符串。这样当改变浏览器的当前语言后,页面会自动取得与浏览器当前语言对应的资源文件中的字符串显示在页面上。
对于在ACTION的JAVA代码中直接设置的变量,如需要在JSP页面上进行显示,那么在设置变量时也需要从资源文件中通过KEY取到当前语言的字符串,再使用request.setAttribute方法进行设置,这样在JSP页面上使用<bean:write>标签展现设置的变量才会对应不同的语言会呈现不同的字符串。
在JAVA代码中取资源文件的信息的方法是,首先通过Globals.MESSAGES_KEY从request或session变量中取得资源对象(MessageResources),再调用MessageResources.getMessage方法即可取得相应的字符串,该方法需的两个参数是当前语言区域设置(Locale)和字符串的KEY,其中当前语言区域设置(Locale)保存在SESSION变量中,其变量名为Globals.LOCALE_KEY,该变量在下一节手工设置语言时也有提到。

1.4手工设置显示语言

用浏览器的语言设置来决定系统采用哪种语言展现可能会出现一个问题,就是用户的浏览器语言与他想要使用系统的语言不一致的情况,如某客户浏览器的语言设置为英文,但他还是在使用主站系统时看到的是中文界面。该问题可以通过手工选择语言来解决,在程序中可以通过设置名为Globals.LOCALE_KEY(Globals.LOCALE_KEY 是 struts的常量)的SESSION变量,也能改变系统中当前语言的设置,代码类似于:
Locale newLocale = new Locale( language, country );
session.setAttribute( Globals.LOCALE_KEY, newLocale );
其中变量language, country 可以通过用户的选择设置相应的值,各种语言的对应值参考http://www.unicode.org/unicode/onlinedat/countries.html。

2.    带有文字的图片处理
2.1静态图片
带有文字的图片应该也要根据语言的不同而显示不同的图片,但图片本身不是文本信息,无法直接用<bean:message>标签来完成国际化操作。但由于页面上显示图片取决于<image>标签的src属性,因此可以为每个图片对应各种语言的都准备一个版本,文件名或路径有所差异,然后将每种语言对应的图片的路径及文件名放在资源文件中,而在JSP页面上<image>标签的src属性由<bean:message>标签指定,这样即可以完成图片的国际化。

2.2 JAVA生成动态图片

    由于生成动态图片是在服务器端进行,因此同样需要将生成图形字符的静态部分放在资源文件中,如图形名称等,从资源文件中取字符串的方法在JSP页面显示部分已有说明;从数据库中取出的部分可以不用做任何处理,直接从数据库取出与静态部分拼装成图形字符串即可,数据库相关设置在数据库部分有详细说明。

3.    页面提交参数处理

页面上向WEB服务器提交参数有两种方式,一是在访问URL后面附加上request变量,这样的变量在服务器端可以通过request.getParameter方法得到,另一种方式是在JSP页面上用FORM表单方式提交,这种方法提交的变量在服务器端可以通过form的getXXX方法取到变量的值。
当WEB系统需要国际化时,JSP页面的编码方式被指定为UTF-8(前面已有说明),也就是说页面上可以处理各国文字,在使用URL传递变量时需要将变量用JS方法encodeURI方法处理过,才能在服务器端得到正确的值,如
location.href="int/do/common/queryUserInfo.do?sqlcode=QUERY0001&hh="+encodeURI(document.all.hh.value)+"&hm="+encodeURI(document.all.hm.value)+"&bmbh="+encodeURI(document.all.bmbh.value);
由于这种方式需要对每个request变量调用encodeURI方法,处理起来比较麻烦,但用FORM表单提交的方式即不需要进行任何处理,因此在开发时应尽量使用FORM表单提交的方式进行数据传递。
如果需要JAVA代码中生成URL,则其中传递的参数也需要调用URLEncoder.encode方法进行处理,并指定编码方式为"UTF-8"。
在服务器端取得客户端传递的参数时也需要对参数进行字符集的转换后才可以下确使用,如
strString = new String(strString.getBytes("ISO-8859-1"), "GBK");
但如此对每个变量都需要这样处理也是非常麻烦,实际上可以利用servlet的Filter机制进行统一处理。在调用servlet(包括struts)时,在到达实际的servlet类前,会首先调用指定的Filter进行处理,Filter处理完成后再决定是否交给实际请求的servlet类处理。
利用这一点,我们可以新建一个类继承自Filter基类,重载doFilter方法,并在该方法中加入
request.setCharacterEncoding(“UTF-8”);
指定客户端的字符集为UTF-8(默认客户端的字符集为ISO8859),这样在ACTION类中取得的参数就不需要进行任何的转换处理了。
配置Filter的地方在web.xml,在web.xml文件中加入类似这样的配置即可以使自定义的Filter生效:
<filter>
        <filter-name>charsetfilter</filter-name>
    <filter-class> international.CharsetFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>charsetfilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

二.数据库设置

在数据库建库时需要将数据库的字符集指定为unicode编码类型,以支持多种语言。
有一点需要特别说明的是UTF-8是用3个字节表示一个汉字,这点在进行表结构设计时需要注意,适当设置字段的长度。

分享到:
评论

相关推荐

    struts1.2 国际化

    本文将详细介绍 Struts 1.2 如何实现国际化,以及如何利用该框架创建国际化应用。 #### 二、本地化与国际化基础 ##### 1. 本地化 (Localization) 本地化是指将软件产品调整以适应某个特定市场(国家/地区或语言)...

    Struts2 使用 Struts2 实现国际化

    在Struts2中实现国际化是一项关键功能,它允许应用程序为不同的语言和地区提供本地化的用户体验。下面将详细介绍如何使用Struts2来实现国际化,并探讨相关的源码和工具。 **一、国际化基础** 国际化(i18n)是软件...

    struts2国际化源码以及eclipse国际化插件

    在Struts2中实现国际化(i18n)是一项重要功能,它允许应用程序支持多种语言,以满足全球用户的需求。国际化不仅仅是翻译文本,而是设计应用程序以适应不同地区的文化习惯和语言需求。 首先,让我们来探讨一下...

    Struts2国际化Demo

    在Struts2中,实现国际化通常涉及以下几个步骤: 1. **创建资源束文件**:在项目的`src/main/resources`目录下创建对应的资源文件,比如`messages.properties`作为默认语言(通常是英文),然后根据需要添加其他...

    struts2国际化demo

    首先,要实现国际化,我们需要创建资源文件。在Java中,这些通常是`.properties`文件,例如`message_en.properties`(英语)和`message_zh_CN.properties`(简体中文)。这些文件包含键值对,键是消息的唯一标识,值...

    struts2拦截器国际化

    通过这种方式,我们可以在不修改Action代码的情况下,利用Struts2拦截器实现国际化策略的动态调整,从而提供更灵活的多语言支持。 总的来说,Struts2拦截器和国际化是两个关键特性,它们分别提供了控制流管理和多...

    struts中文问题,struts国际化问题——终极解决方案

    通过上述步骤,Struts应用可以有效解决中文显示问题,实现国际化,提升用户体验。关键在于统一编码标准、合理使用资源文件以及正确处理客户端语言设置。实践证明,遵循这些原则,可以使Struts应用在多语言环境下表现...

    struts2实现国际化

    通过研究这个项目,你可以深入理解如何在实际开发中利用Struts2实现国际化。它可能包括Action类、配置文件、资源文件以及展示语言选择的JSP页面等组件。通过实践和调试,你将更好地掌握这个过程,并能够将其应用到...

    struts2国际化总结

    在Struts2中实现国际化(i18n)是确保应用程序能够支持多种语言和文化的关键步骤。这使得应用程序能够在全球范围内提供更好的用户体验。以下是对“Struts2国际化”这个主题的详细概述。 **一、国际化基础** 国际化...

    Struts2实现国际化+天气webservice接口+股票webservice接口

    在Struts2中实现国际化,主要涉及到资源包(properties文件)的创建和配置。 首先,我们需要创建一个或多个资源文件,如`messages_en.properties`(英文版)和`messages_zh_CN.properties`(简体中文版)。这些文件...

    struts2国际化源码

    这里我们将深入探讨Struts2国际化源码的实现及其工作原理。 国际化(i18n)是软件开发中的一个术语,意指设计和实施能够适应不同语言和文化环境的系统。在Web应用中,这通常涉及资源文件,如.properties文件,其中...

    struts2配置和Java国际化和JS国际化

    Struts2是一个非常流行的开源MVC框架,用于构建企业级的Java Web应用程序。...而JavaScript的国际化通常需要后端支持,或者利用JSON数据和前端库进行处理。这些技术都是构建全球化Web应用的关键组件。

    struts2国际化

    Struts2国际化(i18n)是Java Web开发中一个关键的概念,它允许应用程序根据用户的地域设置显示不同的语言和文化信息。这个过程涉及到资源文件的创建和使用,以实现多语言支持。以下是对Struts2国际化进行详细解释的...

    Struts2_国际化

    Struts2实现国际化的主要流程包括以下几个关键步骤: 1. 编写支持多种语言的国际化资源文件。资源文件通常包含键值对,其中键对应于需要显示的文本,值则对应于该文本的具体翻译版本。资源文件的命名应该遵循一定的...

    Struts对国际化支持(国际化概念及具体操作详细讲解)

    通过上述步骤,你可以充分利用Struts的国际化功能,为全球用户提供适应其语言环境的应用体验。在实际项目中,可能还需要考虑时区、排序规则、数字格式等其他文化差异,以确保全面的国际化支持。

    Struts2实例 国际化 类型转换 struts标签

    这个实例项目展示了如何在实际应用中结合Struts2、国际化、类型转换以及Struts2自定义标签来实现用户管理功能,包括用户数据的增删改查。 首先,我们来看Struts2的核心概念。Struts2作为MVC框架,它负责处理HTTP...

    struts实现的权限分配

    在“struts实现的权限分配”这一主题中,我们将深入探讨如何使用Struts来设计和实现一个安全的权限管理系统。 首先,我们需要理解权限分配的基本概念。在Web应用程序中,权限分配是确保不同用户或角色访问不同资源...

    基于struts2的国际化

    在Struts2中实现国际化是提升应用程序用户体验的重要手段,能够支持多种语言环境,使应用具备全球化的潜力。 国际化(i18n,因为"i"和"n"之间有18个字母)是一种设计和编程方法,使得软件可以根据用户所在的地区或...

    struts2的国际化

    接下来,我们将通过一个具体的HelloWorld示例来详细了解Struts2如何实现国际化。 **1. 工程搭建** - 在Eclipse中创建一个新的项目,并配置好Struts2的相关依赖库及环境。 **2. 配置Struts2** - **`struts....

Global site tag (gtag.js) - Google Analytics