`

JavaWeb之国际化

 
阅读更多

 

概述

 

软件的本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯。

软件的国际化:软件开发时,让它能支持多个国家和地区的本地化应用。使得应用软件能够适应多个地区的语言和文化风俗习惯。

随用户区域信息而变化的数据称为本地信息敏感数据。例如数字,货币等数据。

应用程序的国际化就是在应用软件的设计阶段,使软件能够支持多个国家和地区的用户的使用习惯。

国际化又称为 i18n:internationalization

 

软件国际化的特征

 

一个国际化的应用软件应有下面的特性:

对于程序中的本地信息敏感的数据(日期,货币等)能根据当前所在的国家或地区的文化习惯进行显示

对于文本元素(错误提示信息,状态信息等)不是直接写在应用程序中,而是存储在应用程序外部的资源文件中,在应用程序中通过程序代码来动态获得这些数据

无需修改和重新编译程序就能支持新的国家或地区的用户使用

 

Java 国际化解决方案

 

本文信息不能硬编码在程序代码中,而是需要将它们从应用程序中分离出来,在软件运行时根据本地信息读取相应的文本内容进行显示

数值,货币,时间,日期等本地敏感数据可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。Java 中提供了解决这些问题的 API 类(位于 java.util 包和 java.text 包中)

 

Locale 类

 

Locale 实例对象代表一个特定的地理,政治或文化上的区域

一个 Locale 对象本身不会验证它代表的语言和国家地区信息是否正确,只是向本地敏感的类提供本地信息,与国际化相关的格式化和解析任务由本地敏感的类(若JDK中的某个类在运行时需要根据 Locale 对象来调整其功能,这个类就称为本地敏感类)去完成

 

DateFormat 类

 

DateFormat 类可以将一个日期/时间对象格式化为表示某个国家地区的日期/时间字符串,也可以将表示某个本地的日期/时间的字符串解析为相应的日期/时间对象

DateFormat 类定义了一些用于描述日期/时间的显示模式的 int 型的常量,包括FULL, LONG, MEDIUM, DEFAULT, SHORT,这些常量用于描述表示日期/时间字符串的长度。这些常量说明表示的日期/时间的确切格式取决于具体的国家和地区

 

获取 DateFormat 对象

DateFormat 对象通常不是线程安全的,每个线程都应该创建自己的 DateFormat  实例对象

DateFormat 对象的方法:

format: 将日期/时间对象格式化为符合某个本地环境习惯的字符串

parse:将符合某个本地环境习惯的日期/时间字符串解析为日期/时间对象

 

 

NumberFormat 类

 

NumberFormat 可以将一个数值格式化为符合某个国家地区习惯的数值字符串,也可以将符合某个国家地区习惯的数值字符串解析为对应的数值

NumberFormat 类的方法:

format 方法:将一个数值格式化为符合某个国家地区习惯的数值字符串

parse 方法:符合某个国家地区习惯的数值字符串解析为对应的数值

 

MessageFormat 类

 

MessageFormat 类提供了一种参数替换模式字符串中的占位符的方式,它将根据模式字符串中包含的占位符产生一系列的格式化对象,然会调用这些格式化对象对参数进行格式化,并用格式化后的结果字符串替换模式字符串中的相应占位符。

 

 

模式字符串与占位符

 

模式字符串:

      On {0}, {1} destroyed {2} houses and caused {3} of damage.

对模式字符串进行格式化操作时,需要采用数组的方式提供模式字符串中的每个占位符所对应的参数.

占位符有以下三种方式:

{argumentIndex}: 0-9 之间的数字,表示要格式化对象数据在参数数组中的索引号

{argumentIndex,formatType}: 参数的格式化类型

{argumentIndex,formatType,FormatStyle}: 与指定的格式化类型对应的模式,它的值必须是与相应的格式化类型匹配的合法模式或表示合法模式的字符串

 

MessageFormat 格式化模式字符串

 

MessageFormat 类可以格式化模式字符串,它根据其中的占位符产生一系列的格式化对象,然后调用这些格式化对象对参数进行格式化,并用格式化后的结果字符串替换模式字符串中的相应占位符。

格式化模式字符串的步骤:

创建 MessageFormat 对象:须指定格式化的模式字符串,也可以指定 Locale 对象来按某个国家地区的习惯进行格式化。

调用 MessageFormat 对象的 format 方法执行格式化操作:须为format 方法传递一个数组类型的参数,数组中的每个元素分别用于代替模式字符串中的与其索引号相对应的占位符

 

 

ResourceBundle 类

 

ResourceBundle 类用于描述一个资源包,一个资源包用于包含一组与某个本地环境相关的对象,可以从一个资源包中获取特定于本地环境的对象。对于不同的本地环境,可以有不同的 ResourceBundle 对象与之关联,关联的 ResourceBundle 对象中包含该本地环境下专有的对象

 

 

资源包简介

 

在设计一个国际化应用时,应该把程序显示的文本内容从源程序中分离出来,放在独立的资源文件中,并针对不同的本地环境编写不同的资源文件。这些资源文件被称为应用程序的资源包

应用程序在运行时,将从与用户的本地环境相对应资源文件中读取名称项对应的值的内容,由于同一个名称项在各个资源文件中对应的值内容是随本地环境信息而改变的,这样就实现了程序的静态文本内容的国际化。

当要为应用程序添加某个新的本地化支持时,只需编写一个适合的本地环境的资源文件即可,不用修改源程序代码

 

 

一个应用程序可以有多个资源包,一个资源包中的每个资源文件都拥有共同的基名。除了基名,每个资源文件的名称中还有标识其本地信息的附加部分。例如:一个资源包的基名是:“myproperties”, 则该资源包中与中文环境相对应的资源文件为: “myproperites_zh.properties”

一般情况下,每个资源包都有一个默认的资源文件,默认的资源文件不带标识本地信息的附加部分。若应用程序在资源包中找不到某个本地环境匹配的资源文件,最后将选择该资源包中的默认资源文件。

 

 

资源文件的内部格式

 

资源文件通常采用 java.util.Properties 类要求的文件格式,其中包含每项资源信息的名称项和值内容,每个名称项用于唯一地标识一个资源信息,值内容用于指定资源信息在某个本地环境下的内容

一个资源包中的所有资源文件中通常都应包含相同的名称项,与各个本地环境对应的资源文件中为这些名称项设置的值分别是适合该本地环境的内容。

资源文件完全遵循 java.util.Properties 类要求的文件格式,它要求资源文件中的字符必须全部为有效的 ASCII 字符。若资源文件中要包含非 ASCII 的字符,必须将它们转化成”\uXXXX”形式的转移序列,其中 XXXX 是该字符的 Unicode 编码的十六进制数值

 

 

使用 native2ascii 程序转换字符编码

 

JDK 中提供了一个 native2ascii 工具程序,它可以将某种本地字符集编码的字符转换成 Unicode 转义序列的形式

DOS 下进入 haha.txt 文件所在目录,运行下面的命令后将在当前目录下生成一个名为 hehe.properites 文件:

    native2ascii -encoding gb2312 haha.txt haha.properites

 

装载资源包

 

ResourceBundle 类提供了存放和管理资源包的功能

当应用程序需要获取特定locale对象关联的资源包时,可以调用ResourceBundle的getBundle方法,并将locale对象作为参数传入。

     Locale currentLocale = Locale.getDefault();

     ResourceBundle myResources = 

         ResourceBundle.getBundle(“myproperties ", currentLocale);

如果与该locale对象匹配的资源包子类找不到,getBundle将试着查找最匹配的一个子类。如果特定locale对象的语言代码、国家代码和可选变量都是空值,则基名是唯一的候选资源包名称。 

 

读取资源信息

 

加载资源文件后, ResourceBundle 的实例对象就可以使用 getString 方法获取指定的资源信息名称所对应的值。

      String OkKey  =  myResources.getString("OkKey");

 

Web 应用程序的国际化

 

实现 web 应用国际化有两种方式:

针对不同语言和地区的用户开发出不同的 JSP 网页版本,当用户请求资源时,根据请求消息中携带的本地信息为用户提供合适的版本

将对本地环境敏感的资源数据(例如:错误提示信息,菜单文字等)从网页中分离出来,放在 .properties 属性资源文件中。对于应用程序中的数值,货币和日期/时间等本地敏感数据,可以通过占位符的方式设置它们的格式类型和格式模式。

 

 

获取 web 应用中的本地信息

 

要实现 web 应用的国际化,首先要获得客户端浏览器的本地信息。

在 Servlet 程序中,调用 HttpServletRequest 对象的 方法获得代表客户端本地信息的 Locale 对象:

getLocale():返回代表客户端的首选本地信息的 Locale 对象

getLocales():返回一个包含客户端支持的所有本地信息的 Locale 对象的 Enumeration 对象,这些Locale 对象按照客户端支持的所有本地信息的优先级在集合中一次排列

 

 

国际化格式标签库示例

 

国际化:<fmt:setLocale> <fmt::formatDate> 

 



 

 

消息标签:<fmt:bundle> <fmt:message> <fmt:setBundle> <fmt:param> 

 

所对应的读取文件为 dbconn.properties(放在WEB-INF/classes下了), 内容为:

 



 

 



 

国际化格式标签库简介

 

<fmt:bundle>标签用于绑定数据源.properties文件(基名):

       <fmt:bundle basename="源文件名(且不能带后缀哦)" prefix=""> 

            语句,代码等 

        </fmt:bundle>

<fmt:message>标签用于从指定的资源文件中把指定的键值取来:

     <fmt:message key="" [var="varname"] [bundle=""] [scope="page|..."] />  

      如果用到var的话就不会在页面直接输出,而需要用到<c:out>标签来进行页面  

      的输出

<fmt:message>必须和<fmt:bundle >搭配使用 

<fmt:message>标签可以配合<fmt:param>标签来进行设定<fmt:message>标签指向键的动态值

<fmt:setBundle>标签用于设置默认的数据来源:

     <fmt:setBundle basename="" [ var=""]  [scope="" ]  />

 

<fmt:formatNumber>标签用于根据设定的区域将数据格式化输出;

<fmt:formatDate>标签用于格式化输出日期和时间;

<fmt:parseDate>标签用于把字符串类型的日期和时间转换成日期型数据类型;

<fmt:setTimeZone>标签用于设定默认的时区;

<fmt:timeZone>标签用于设定在本签体内有效的时区

 

小结

 

1. 什么是国际化和本地化:

 

I.   本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯。

II.  国际化:软件开发时,让它能支持多个国家和地区的本地化应用。使得应用软件能够适应多个地区的语言和文化风俗习惯

III. 本地敏感数据: 随用户区域信息而变化的数据称为本地信息敏感数据。例如数字,货币, 日期,时间等数据

 

2. 相关的 API:

 

I.   DateFormat 和 SimpleDateFormat √. 

II.  NumberFormat 

III. MessageFormat

IV.  ResourceBundle

V.   Locale

 

3. 关于国际化资源文件:

 

I.   properties 文件格式

II.  必须提供 基名.properties 文件和 基名_语言代码_国家代码.properties 文件

III. 相同的 基名 的资源文件必须有相同的 key. 

IV.  可能需要使用 native2ascii 工具把非 asc 码转为 asc 码.

 

4. WEB 的国际化

 

I.   可以使用 request.getLocale() 获取 Locale 对象

II.  可以使用 JSTL 的 fmt 标签完成的国际化. 后面使用框架提供的标签完成. 

III. 实现 "中文" "英文" 的切换:

 

> 提供两个超简洁. 携带不同的变量值

> 根据变量值确定对应的 Locale 对象

> 把 Locale 对象放入到  session 中

> 绑定 Locale 对应的资源文件. 

 

IV.  其他 fmt 标签可以参考 standard-examples.war 中的例子.  

  • 大小: 71.1 KB
  • 大小: 46.7 KB
  • 大小: 127.9 KB
分享到:
评论

相关推荐

    JavaWeb国际化实例

    JavaWeb国际化实例是一种常见的开发需求,特别是在构建面向全球用户的Web应用程序时。这个实例结合了JAVA、国际化、多语言以及SpringMVC框架,旨在提供一种灵活且易于实施的解决方案。下面将详细阐述这些知识点: 1...

    JavaWeb国际化开发-语言代码表

    "JavaWeb国际化开发-语言代码表"这个主题主要涵盖了如何实现JavaWeb应用的多语言支持,并涉及到关键概念、技术和最佳实践。 1. **国际化(i18n)的基本概念** - **国际化与本地化**:国际化是设计和实现软件的过程...

    JavaWEB开发-国际化

    JavaWEB开发-国际化 如何让java程序开发面向国际

    java web 国际化

    Java Web国际化是一种功能,它允许Web应用程序适应不同国家或地区的用户习惯,使得应用程序能够在多种语言环境下正确地显示信息。随着互联网的普及,Web应用程序可能会被世界各地的用户访问,因此支持国际化对于提供...

    web项目国际化

    Web项目的国际化,通常简称为i18n(取“internationalization”一词的第18个字母和第19个字母),是使软件能够适应不同语言和地区的过程。这个过程涉及将文本、日期、时间、货币格式等从源代码中分离出来,以便在...

    javaWeb课件

    尚硅谷_JavaWEB_国际化.pptx` 讲解了如何在JavaWeb应用中实现多语言支持。这包括资源文件的创建、Locale对象的使用,以及如何在JSP页面中动态切换语言环境。 3. **HttpSession**: `6. 尚硅谷_JavaWEB_...

    javaweb开发学习手册

    学习Struts,你需要理解Action类、配置文件、国际化、异常处理、Tiles组件以及与Spring、Hibernate等其他框架的集成。 3. **JavaWeb应用开发** JavaWeb应用开发涵盖Servlet、JSP(JavaServer Pages)、JSTL(Java...

    javaweb课程设计基础知识+教程+课件

    javaweb课程设计基础知识+教程+课件,涵盖: 适合人群:大学生、毕业生、各在职人员需要系统补充基础的人员 ---JSTL_Core.ppt ...---_国际化11.ppt --- 文件的上传和下载ppt --- 标签与简单标签ppt

    《JavaWeb程序开发进阶》-黑马程序员配套资源ppt.zip

    8. **第10章 国际化**:JavaWeb应用的国际化涉及资源文件的使用,如properties文件,以存储不同语言的文本。通过Locale对象和ResourceBundle类,可以根据用户的语言环境加载相应的资源,实现多语言显示。 9. **第11...

    javaweb网站门户首页

    9. **国际化与本地化**:为了支持多语言环境,需要实现国际化和本地化功能,根据用户的语言设置显示对应的内容。 10. **性能优化**:包括缓存策略、减少HTTP请求、压缩资源、CDN内容分发网络等手段,提升网页加载...

    JavaWeb系列教程

    6. **国际化(Internationalization)**:在开发全球化应用程序时,国际化是一个关键概念。它涉及到为不同地区和语言提供支持,通过资源文件管理多语言文本,使得应用程序可以适应不同地区的用户需求。 7. **Cookie...

    Javaweb第六章的代码

    6. **EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)**:EL是用于在JSP页面中简洁地访问JavaBean属性的表达式语言,而JSTL是一套标准的标签库,可以简化...,如迭代、条件判断、国际化等...

    JAVAWeb的网页模块

    JSTL(JavaServer Pages Standard Tag Library)提供了一系列预定义的标签,如fmt、fn、sql等,用于处理国际化、函数操作、SQL查询等复杂任务,使代码更加简洁。 5. **过滤器和监听器**:过滤器(Filter)在请求...

    【狂神说JavaWeb】JavaWeb项目—SMBMS(超市管理项目)源码

    而`resources`下可能有如数据库连接配置(application.properties或application.yml)、国际化资源文件(messages.properties)等。 `target`目录是Maven构建过程中产生的目标文件夹,包含编译后的字节码文件、打包...

    javaweb使用的Jstl.zip

    2. **I18N & Format Tags(国际化和格式化标签)**:这些标签用来处理国际化和日期/时间格式化,如`&lt;fmt:message&gt;`用于显示本地化的消息,`&lt;fmt:formatDate&gt;`用于格式化日期。 3. **XML Tags(XML标签)**:处理XML...

    javaweb汽车销售网站源码.zip

    7. **国际化与本地化**:对于多语言支持,源码可能使用了资源文件(properties文件)来实现内容的国际化和本地化,根据用户的选择显示相应的语言。 8. **部署与运行**:此源码需要在Java运行环境中,如Tomcat或...

    基于MVC的JavaWeb设计与开发,JavaWeb设计与开发,MVC

    4. **国际化与本地化**:Struts支持多语言,使得应用可以轻松适应不同的区域设置。 5. **异常处理**:提供了统一的异常处理机制,简化了错误和异常的处理。 6. **Struts标签库**:提供了一系列预定义的JSP标签,...

    JavaWeb笔记_javaweb_javaweb_

    9. **JSTL(JavaServer Pages Standard Tag Library)**: JSTL提供了一系列预定义的标签,用于处理常见任务,如循环、条件判断、国际化等,使JSP页面更易于阅读和维护。 10. **过滤器(Filter)和监听器(Listener...

    JavaWeb笔试面试大全

    此外,Struts的拦截器机制、异常处理和国际化也是考察的重点。 总的来说,这些资源为准备JavaWeb相关的笔试和面试提供了全面的复习材料。掌握这些知识点不仅有助于通过面试,还能提升实际开发中的技能和效率。在...

    JavaWeb标签大全

    - fmt:格式化标签,用于日期、数字的国际化和本地化。 - fn:函数标签库,提供了许多有用的字符串和数组操作方法。 - i18n:国际化标签,处理资源包和消息。 - sql:执行SQL查询。 - xml:处理XML数据。 2. ...

Global site tag (gtag.js) - Google Analytics