十二 国际化和中文编码问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第十二章S truts国际化程序和中文编码问题第一节国际化问题概述

一、什么是国际化编程

1)国际化(Internationalization ):

就是设计一个应用的流程,以使之能够不经过工程修改就可以使用于各种不同的语言和区域场所。

2)本地化(Localization ):

通过添加特定场所的组建和翻译文本来使软件适用于特定的场所和语言的过程。

我们花费了大量的精力来开发自己的Web应用,当然都希望在应用的开发上得到更大的投资回报。因为互联网连接着世界各地,每个应用都可以面对国际的受众。如果某个应用可以被本地化,那么它就可以被更多的访问者所访问。特别是在多语言的国家,比如比利时、加拿大、瑞士,甚至美国尤其重要。

3)本地化那些内容:

当一个软件产品需要在全球范围应用的时候,得考虑在不同的地域和语言环境下面的使用情况(也就是国际化问题),最简单的要求就是UI上的信息上能用本地化语言来显示,这主要包括操作界面的风格问题、提示和帮助语言的版本问题、界面定制个性化问题等。

Java语言内核基于Unicode2.1提供了对不同国家和不同语言文字的内部支持,由于先天的原因,Java对于国际化的支持远远要比C/C++来的优越。

Struts的国际化能力是它本身提供的,但为了更好的理解国际化问题,我们先从Java语言国际化本身的技术谈起。

二、几个术语

1)i18n(Internationalization):

就是internationalization, 国际化,由于首字母"i"和末尾字母"n"间有18个字符,所以简称i18n. internationalization指为了使应用程序能适应不同的语言和地区间的变化而不作系统性的变化所采取的设计措施,即:

将依赖于语言和地区的代码与和语言无关的代码分离开来的过程。一旦程序完成了这项工作,它只需很少的工作就可以适用于不同语言的国家和地区。

2)l10n(Localization):

就是localization, 本地化,由于首字母"l"和末尾字母"n"间有10个字母,所以简称l10n. localization指为了使应用软件能够在某一特定语言环境或地区使用而加入本地特殊化部件和翻译后文本的过程,即:

使程序适用于特定语言或地区的过程,它不仅包括文本的翻译,还包括特定于文化的数据项格式的转换。

3)locale:

简单来说是指语言和区域进行特殊组合的一个标志。

三、Java中如何解决国际化的问题:

1)应用被国际化的基本要求:

要被国际化,一个应用应该能够。

1.自动地区分不同的场所;

2.使用同一个可执行包根据不同的场所显示相应的信息和标签;

3.在不重新编译的情况下提供对新的场所的支持;

4.自动格式化场所敏感的条目,比如日期和货币,为相应的场所和语言支持的格式。

2)Java 语言对国际化的支持

国际化需求Java 类

区别不同的场所java.util.Locale

使用同一个可执行包根据不同的场所显示相应的信息和标签java.util.ResourceBundle

自动格式化场所敏感的条目,比如日期和货币,为相应的场所和语言支持的格式java.text.MessageFormat

另外由于Java语言具有平台无关、可移植性好等优点,并且提供了强大的类库,所以Java 语言可以辅助我们解决上述问题。Java语言本身采用双字节字符编码,采用大汉字字符集,Java 本身在设计时,即针对国际化之需求采用Unicode作为系统内部的编码,这就为解决国际化问题提供了很多方便。

四、实现国际化程序的基本思路

1)国际化的基本策略

利用locale类区分地理地区:在Java平台中,每种语言和地区在Java中都存在一个标识符(参考上面的locale说明),每个与本地化敏感的类都可以保存它自己的与本地化有关的信息,所有对本地化敏感的操作都可以明确指定一个地区标识符作为参数,这样,就大大简化了多语言程序。

利用资源文件文件来分离与语言有关的内容:从设计角度来说,只要把程序中与语言和文化有关的部分分离出来,加上特殊处理(单独提取出来并放到资源文件中),就可以部分解决国际化问题。

采用参数化的手段来定制界面:在界面风格的定制方面,我们可以把参数化的元素,如字体、颜色等,存储在数据库里,以便为用户提供友好的界面;如果某些部分包含无法参数化的元素,那么我们可能不得不分别设计,通过有针对性的编码来解决具体问题。

2)国际化程序的特征

文本元素在程序中不进行硬编码。它们存储于源代码之外,可自动进行动态检索;

通过使用附加的本地化数据,统一可执行程序,可在世界各地运行;

支持新的语言时无须重新编译;

与文化有关的数据(如日期和货币),其格式根据最终用户的地区和语言而定并可以迅速进

行本地化。

五、Java中与国际化问题相关的包与类

在用Java解决国际化问题的过程中,可能利用到的主要的类都是由java.util包提供的。该包中相关的类有Locale、ResourceBundle、ListResourceBundle、PropertyResourceBundle等,其继承关系如下图所示。

其中的各个类所提供的主要功能如下:

1)Locale类

该类包含对主要地理区域的地域化特征的封装。其特定对象表示某一特定的地理、政治或文化区域。通过设定Locale,我们可以为特定的国家或地区提供符合当地文化习惯的字体、符号、图标和表达格式。例如,我们可以通过获得特定Locale下的Calendar类的实例,显示符合特定表达格式的日期。

Java使用兩個字符串代碼來表示不同的区域,分別是「语言」和「国家」,这两个代码遵守国际标准组织的标准,语言是遵守ISO-639的兩個小写英文字母來表示,而国家則使用ISO-3166的两个大写字母來表示。完整的代碼,可在下列网址取得:

/pub/ietf/http/related/iso639.txt,http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html 。

依照此标准,中文的代码是zh、英文的代码是en 、台湾的区域代码是TW、美国的区域代码是US、中国大陆的区域代码是CN。

语言代码说明国家或地区代码说明

de German CN China

es Spanish CA Canada

en English DE Germany

fr French FR France

ja Japanese IN India

jw Javanese US United State

ko Korean TW TaiWan

zh Chinese

相关文档
最新文档