`
houzhaowei
  • 浏览: 499187 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java EE的国际化解决方案

阅读更多

1 基本信息

摘要:跨语言的应用程序中,都会涉及到国际化的问题,本文详细介绍国际化的一般解决方案,并提供实例供参考。
作者:陈春 

2 Java EE的国际化解决方案

  当某个企业应用需要面对不同国家或地区的用户时,就必须考虑国际化问题。最终效果就是让不同国家的用户在界面上看到的文字内容是自己的语言,并且可以选择其他语言来显示。对于Java EE应用程序开发者来说,其主要工作包括提示信息国际化、编码国际化两个方面。详解如下:

2.1 提示信息国际化

  这部分工作主要就是把程序中字符串常量提取到统一的资源信息文件中。针对不同的程序代码,又有不同的处理方式。

2.1.1 java code的处理

  首先需提供一个公共国际化资源接口类,server启动时会根据具体环境加载不同的资源。假设国际化资源类为Message,接口为getString(String key),那么java code的形式变化如下:
原代码:
String strLabel = “业务逻辑”;
新代码:
String strLabel = Message.getString(“BIZ_NAME”);
资源文件(message_zh_CN.properties)内容:
BIZ_NAME=业务逻辑

1、 jsp代码的处理
1) html部分
页面中表单的提示信息和表格标题等内容,一般都是直接写在html代码中。根据jsp规范,此时做国际化有两种途径。第一种是直接利用<%=%>调java表达式来输出国际化信息,第二种是通过自定义标签来输出。例如:
原代码:

  1. <table>
  2. <tr>
  3. <td>客户姓名
  4. </td>
  5. <td><input type=”text” name=”cust_name”>
  6. </td>
  7. </tr>
  8. </table>

第一种实现:

  1. <table>
  2. <tr>
  3. <td><%=WebPageMessage.getString(“CUST_NAME”)%>
  4. </td>
  5. <td><input type=”text” name=”cust_name”>
  6. </td>
  7. </tr>
  8. </table>

第二种实现:

  1. <table>
  2. <tr>
  3. <td><i18n:message key=”CUST_NAME”/>
  4. </td>
  5. <td><input type=”text” name=”cust_name”>
  6. </td>
  7. </tr>
  8. </table>

资源文件(message_zh_CN.properties)内容:

  1. CUST_NAME=客户姓名

2) jsp tag部分

  有时候,jsp tag的属性值也是和具体语言相关的字符串,此时需要该属性支持java expression。如不支持,可修改<rtexprvalue>false</rtexprvalue>为<rtexprvalue>true</rtexprvalue>。例如:
源代码:
<dict:select businessType=”SEX” nullLabel=”未知”/>
新代码:
<dict:select businessType=”SEX” nullLabel=”<%=WebPageMessage.getString(“NULL”)%>”/>
资源文件(message_zh_CN.properties)内容:
NULL=未知

2、 js、css、image部分

  对于这三种元素,需要根据不同的语言环境加载不同的资源文件。我们可以在jsp对应的目录下建立一个resources目录,然后在下面按地区语言名建立文件夹本别保存但前语言对应的js,css,image资源。为了实现此目的,可以把以前html的引用方式,改成jsp tag来引用原资源文件。例如:
Html引用:

  1. <SCRIPT SRC="/resources/scripts/message.js" LANGUAGE="javascript"></SCRIPT>
  2. <LINK HREF="/resources /css/style.css" REL="stylesheet" TYPE="text/css"/>
  3. <IMG SRC="/resources/images/title.gif" WIDTH="300" HEIGHT="120" BORDER="0" ALT="title">

Jsp tag引用:

  1. <i18n:javascript src="/resources/scripts/message.js"/>
  2. <i18n:css href="/resources/css/style.css"/>
  3. <i18n:image src="/resources/images/title.gif" width="300" height="120" border="0" alt="title"/>

假如当前浏览器环境为zh_CN,那么上述tag生成的html代码如下:

  1. <script language=”javascript”>
  2. var Message= {
  3. getString: function(){ return eval("this." + arguments[0]);}
  4. };
  5. </script>
  6. <SCRIPT SRC="/resources/zh_CN/scripts/message.js" LANGUAGE="javascript"></SCRIPT>
  7. <LINK HREF="/resources/zh_CN/css/style.css" REL="stylesheet" TYPE="text/css"/>
  8. <IMG SRC="/resources/zh_CN/images/title.gif" WIDTH="300" HEIGHT="120" BORDER="0" ALT="title">

值得注意的是,对于js资源引用需要插入一段javascript代码,对应的国际化资源内容如下:

  1. Message.calendar_JANUARY="一月";
  2. Message.calendar_FEBRUARY="二月";
  3. Message.calendar_MARCH="三月";
  4. Message.calendar_APRIL="四月";
  5. Message.calendar_MAY="五月";
  6. Message.calendar_JUNE="六月";
  7. Message.calendar_JULY="七月";
  8. Message.calendar_AUGUST="八月";
  9. Message.calendar_SEPTEMBER="九月";
  10. Message.calendar_OCTOBER="十月";
  11. Message.calendar_NOVEMBER="十一月";
  12. Message.calendar_DECEMBER="十二月";

国际化时需作如下替换:
原代码:
var mon1 = “一月”;
新代码:
var mon1 = Message.getString(“ calendar_JANUARY”);

2.2 编码国际化

2.2.1 服务器配置

服务器端配置主要包括两方面,其一要指定环境语言,其二要指定字符集编码。
1、环境语言
一般服务器的JVM缺省语言和操作系统平台一致,但也可以为JVM指定特定的缺省语言。具体配置,例如:
 -Duser.language=zh -Duser.region=CN
3、 字符集编码
一般情况下,一种语言会对应一种或多种字符集编码。例如中文可以用 GB2312 编码来显示,日文可以用 Shift-JIS 编码来显示。一旦遇到客户端浏览器设置的是GB2312编码,而页面上有日文或韩文的内容,就不能正确显示了。假如采用UTF-8编码方式就不会出现这种情况了,因为UTF-8 编码几乎被所有的操作系统平台支持,并且包含了世界上绝大多数语言。
为统一编码,我们需要在JVM参数、浏览器请求、Web Server响应三个方面进行配置。具体如下:
a. JVM参数
-Dfile.encoding=UTF-8,针对EOS还需指定-Dxml.encoding=UTF-8
b. 浏览器请求
如果Web Serve支持jsp2.4规范,我们可以直接在WEB-INF目录下的web.xml中指定编码方式。如:

  1. <jsp-config>
  2. <jsp-property-group>
  3. <url-pattern>*.jsp</url-pattern>
  4. <page-encoding>UTF-8</page-encoding>
  5. </jsp-property-group>
  6. </jsp-config>

设置完毕,还需检查jsp、html页面中的字符显示设置是不是UTF-8,或者直接把页面显示字符设置删除。例如:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <META http-equiv="Content-Type" content="text/html; charset=UTF-8">

c. Web Server响应

如果是jsp,则需指定<% request. setCharacterEncoding(“UTF-8”); %>
如果是servlet,则需调用 HttpServletRequest. setCharacterEncoding(“UTF-8”);
这两条语句均要在放在getParameterValue(),getParameterValues()语句之前。

2.2.2 文件编码

  如果一个文件原编码是GBK,现要以UTF-8编码显示,我们会发现除了ASCII码之外的字符都是乱码。其原因是UTF-8仅仅和ASCII码兼容,除此之外同一字符的编码值并不相等。为解决这一问题,我们还需把Web应用涉及到的jsp、html、css、js等文本文件的格式转换成UTF-8编码。又由于windows操作系统识别UTF-8文件时,是靠该文件的头三个字节的内容判断的,而java虚拟机并不识别此文件头(BOM),故转换编码时一定不能包含BOM头。

分享到:
评论

相关推荐

    Java EE轻量级解决方案S2SH

    本书介绍了Java EE轻量级的三个开源框架:Struts2、Hibernate和Spring。其中在Struts2部分主要讲解MVC设计思想,Struts2的处理流程及配置,Struts2常用控制器组件,以及Struts2常用标签库的使用。在Hibernate部分...

    Java EE架构师认证指南

    Java EE 提供了一系列的国际化机制,包括 Unicode、Locale、ResourceBundle 等。 协议 Java EE 提供了一系列的协议,用于实现企业级应用程序的通信和交互。这些协议包括 HTTP、HTTPS、IIOP、JRMP 等。 设计模式 ...

    Java EE 轻量级解决方案 — SSH 青岛东合信息技术有限公司 青岛海尔软件公司 著 教材源码 _ 第七章 Spring基础

    Java EE轻量级解决方案通常指的是在企业级应用开发中,使用一些相对小巧、高效且易于配置的框架,来替代传统重量级的EJB(Enterprise JavaBeans)架构。SSH(Struts、Spring、Hibernate)是Java EE领域中一个经典的...

    Java EE 轻量级解决方案 — SSH 青岛东合信息技术有限公司 青岛海尔软件公司 著 教材源码 _ 第五章 Hibiscus基础

    本章“Java EE 轻量级解决方案 — SSH 青岛东合信息技术有限公司 青岛海尔软件公司 著 教材源码”主要聚焦于如何使用这些框架构建高效且易于维护的应用程序。SSH框架提供了模型-视图-控制器(MVC)架构,以简化开发...

    Java EE数据初始化应用中的设计模式解决方案.pdf

    Java EE数据初始化应用中的设计模式解决方案 Java EE 数据初始化应用中的设计模式解决方案是一种基于设计模式的数据初始化方法,旨在解决 Java EE 应用数据初始化时的先后顺序及依赖关系问题。该方法首先将要初始化...

    Java EE 5 SDK

    - **Java Persistence API (JPA) 1.0**:替代了原先的Entity Beans,提供了更简单、灵活的ORM解决方案。 - **JavaServer Faces (JSF) 1.2**:增强的用户界面组件,改进了事件处理和渲染树。 - **Unified ...

    Java EE -Hibernate 开源解决方案-Note.doc

    《Java EE - Hibernate 开源解决方案》 在Java EE的开发世界中,Hibernate作为一个强大的开源对象关系映射(ORM)框架,极大地简化了数据库操作。本文档旨在深入探讨Hibernate的基本概念、工作原理以及如何在Java ...

    Java EE数据持久层解决方案的设计与实现.pdf

    Java EE数据持久层解决方案的设计与实现是企业级应用开发中的关键环节,主要目的是解决应用程序与数据库之间的交互问题,确保数据的持久化存储。在Java EE环境中,数据持久化是通过数据访问对象(DAO)和对象关系...

    精通Java EE:精通Java EE 整合应用案例\源代码第三章

    本章内容可能涵盖多个Java EE技术的综合运用,如Servlet、JSP、EJB、JPA、JSF、CDI等,以及如何将它们集成到实际的企业级解决方案中。 Java EE(Java Platform, Enterprise Edition),原名为Java 2 Platform, ...

    Java EE+hibernate

    Java EE提供了一整套企业级服务,而Hibernate则为数据持久化提供了一个强大的解决方案。学习并掌握这些技术对于成为一名合格的Java EE开发者至关重要。在未来的技术发展中,这些技术和框架仍然会持续进化和完善,以...

    Professional Java EE Design Patterns

    设计模式通常分为创建型、结构型和行为型三大类,它们是面向对象软件设计中反复出现的问题的解决方案。这些模式被许多软件工程师广泛接受并应用于日常开发工作中,从而提高代码的重用性、可读性和灵活性。 在介绍了...

    Java.EE.7.Essentials

    12. Java Persistence API:提供了对象关系映射(ORM)解决方案,支持实体的生命周期管理、事务和锁定机制,以及第二级缓存。 13. Java Message Service(JMS):允许组件发送和接收消息,支持同步和异步消息接收...

    Java EE 8 Design Patterns and Best Practices最新版1.pdf

    本书介绍了如何通过使用Java EE提供的工具和服务来监控应用性能,如何分析和诊断问题,并提供了解决方案。 7. 安全最佳实践:安全性是企业级应用中不可或缺的一环。Java EE提供了一套全面的安全性机制,包括认证、...

    Java EE 实战教程

    - **JPA (Java Persistence API)**:Java EE平台上的标准对象关系映射(ORM)解决方案,用于管理Java应用程序中的关系型数据库。它允许开发人员以面向对象的方式处理数据库实体。 #### 四、开发环境搭建 - **...

    Java EE 轻量级解决方案 — SSH 青岛东合信息技术有限公司 青岛海尔软件公司 著 教材源码 _ 第一章 _ Java EE 概述

    在本教材源码中,重点介绍的是SSH框架,这是一个轻量级的Java EE解决方案,由Spring、Struts和Hibernate三个开源框架组成。 Spring框架是Java EE开发的核心组件之一,它提供了一个全面的基础设施,支持创建和管理...

    java ee博客网站

    Spring框架则是一个全面的后端解决方案,它包括依赖注入(DI)和面向切面编程(AOP)等功能,可以管理对象的生命周期和相互依赖关系。Spring还提供了事务管理、数据访问集成以及与各种持久化技术(如JDBC、Hibernate...

    Java路径问题最终解决方案之一.

    ### Java路径问题最终解决方案之一 #### 一、引言与背景 在进行Java开发时,文件路径处理一直是令人头疼的问题之一。特别是在涉及跨平台或在不同环境中部署的应用程序时,路径问题更是频繁出现。本文旨在深入探讨...

    Java EE数据持久化框架测试题含答案.docx

    Java EE 数据持久化框架是指在 Java 企业版(Enterprise Edition)中对数据持久化的解决方案。数据持久化是指将数据存储在磁盘或其他持久存储设备中,以便在需要时可以快速检索和使用。Java EE 提供了多种数据持久...

    基于SSH2的Java EE轻量级解决方案的研究与实践

    在Java EE平台上,SSH2(Struts 2 + Spring + Hibernate)框架的集成开发已经成为最常用的轻量级解决方案。SSH2框架的出现,为开发者提供了一种高效且易用的替代方案,相比于传统的基于EJB(Enterprise JavaBeans)...

Global site tag (gtag.js) - Google Analytics