全球化
可以根据区域文化习俗向用户显示信息的应用程序称为全球化的应用程序:可以将该应用程序配置为以符合文化背景的方式与来自不同地区的用户进行交互。在全球化的应用程序中,一个区域中用户看到的错误消息、输出和界面元素是以他们请求的语言显示的。向区域中用户显示的日期和时间的格式以及货币都与该特定区域相应。另一区域中的用户看到的输出是以该区域的约定语言或格式显示的。全球化由两个阶段组成:国际化(使应用程序组件能够提供对多文化的支持)和本地化(转换和实现特定区域约定)。
以前只有编写复杂系统的大公司才能创建全球化应用程序。但是,随着万维网使用和分布式计算的不断增长,应用程序开发者不得不将更多种类的应用程序全球化。这一趋势要求应用程序开发者更多地掌握全球化技术。
由两个变量驱动应用程序国际化:时区和语言环境。时区表明了将本地时间作为从标准时间(如格林威治标准时间)的偏移来计算的方法。语言环境是有关语言、货币和约定(显示如日期这样的信息)的信息集合。时区可覆盖许多语言环境,单个的语言环境可跨时区。使用时区和语言环境,可以为特定区域中用户确定日期、时间、货币和语言。
按照惯例,用一对由不同标准管理的代码(语言和区域)来指定给定的语言环境。ISO-639 标准管理语言代码;ISO-3166 标准管理区域代码。在表示方面,通常用下划线 (_) 字符连接这两种代码,例如 en_US 表示美国英语。在 Java™ 代码中,通过 java.util.Locale 类设置和检索语言环境。
第一步:本地化界面字符串
在未全球化的应用程序中,用户界面将不可改变地写入应用程序代码。使用户界面国际化,会将抽象层添加到应用程序的设计中。此附加的抽象层使您可以本地化必须由应用程序支持的每个语言环境的应用程序。
在本地化的应用程序中,语言环境确定了应用程序从中检索消息字符串的消息目录。应用程序不会打印错误消息,而是用某些与语言无关的信息表示错误消息;在最简单的情况中,每个错误条件对应于一个关键字。要输出可用的错误消息,应用程序在消息目录中查找关键字。每条消息目录是带有关联字符串的关键字列表。不同的消息目录为所支持的不同语言提供字符串。应用程序在相应的目录中查找关键字,以所请求的语言获取相应的错误消息,并为用户打印该字符串。
文本本地化的使用范围远远不止于翻译错误消息。例如,通过使用键来表示图形用户界面 (GUI) 中的每个元素并通过提供相应的消息目录,GUI(按钮、菜单等等)可以支持多种语言。扩展对其他语言的支持需要您提供这些语言的消息目录;在许多情况中,应用程序无需再修改。
可本地化文本包是一组 Java 类和接口,可用于轻松地对分布式应用程序中的字符串进行本地化。特定于语言的字符串目录可以集中存储,以便有效地维护。
分布式应用程序的全球化问题
随着基于因特网的企业计算模型的出现,越来越多的应用程序由在不同地理区域内运行的客户机和服务器组成。这些差异给设计可靠的客户机/服务器基础结构任务带来了以下挑战:
- 客户机和服务器可以在具有不同的字节存储次序体系结构或代码集的计算机上运行。
客户机和服务器可以驻留在具有不同的字节存储次序体系结构的计算机中:客户机可以驻留在小尾数法 CPU 中,而服务器代码可以在大尾数法 CPU 中运行。客户机可能要调用在与客户机的代码集不同的代码集中运行的服务器的业务方法。
客户机/服务器基础结构必须定义准确的字节存储次序和代码集追踪,以及定义转换规则。Java 平台通过依靠其 Java 虚拟机 (JVM) 以独特的方式几乎已经消除了这些问题,此 Java 虚拟机以 UCS-2 格式对所有字符串数据进行编码并以大尾数法格式外部化所有内容。JVM 使用了一组特定于平台的程序与本机平台连接。这些程序在平台的 UCS-2 和本机代码集之间执行任何必要的代码集转换。
- 客户机和服务器可以在具有不同的语言环境设置的计算机上运行。
客户机和服务器进程可以使用不同的语言环境设置。例如,一台西班牙语客户机可能调用驻留在美式英语服务器的对象上的业务方法。某些业务方法实际上是对语言环境敏感的,例如,给定返回字符串的排序列表的业务方法,西班牙语客户机期望根据西班牙语整理顺序,而不是根据服务器的英语整理顺序来排序此列表。由于数据获取和排序过程在服务器上运行,因此客户机的语言环境必须可用于执行合理排序。
相似的注意事项适用的实例为:服务器必须返回根据客户机的文化需要格式化的字符串(这些字符串包含日期、时间、货币和异常消息等)。
- 客户机和服务器可以在不同的时区内驻留
客户机和服务器进程可以在不同的时区内运行。对于日期,所有的国际化文献和资源都主要集中在代码集和语言环境相关的问题上。即使业务方法可能像对语言环境敏感那样对时区敏感,但是一般说来它们已忽略了时区问题。
例如,假设供应商声明在下午 2 点之前接收的订单要在同一天的下午 5 点之前处理。当然,给定的时间是在处理此订单的服务器的时区内。了解客户机的时区是很重要的,这是为了将同一天内处理的正确时间提供给其他时区内的客户。
其他对时区敏感的操作包含记录到服务器的时间戳记消息、访问文件或数据库资源。夏令时的概念使时区问题变得更复杂。
Java Platform Enterprise Edition(Java EE)支持运行在具有不同字节存储次序体系结构和代码集的计算机上的应用程序组件。它不提供对运行在具有不同语言环境或时区的计算机上的应用程序组件专用的支持。
- 由于它要求将一个或多个参数添加到所有的 Bean 方法(位于对语言环境敏感或对时区敏感的方法的调用链中),因此它是插入的。
- 本质上它是易出错的。
- 在不支持修改的应用程序(如,旧应用程序)中,它是不可行的。
在不导致常规技术局限性的情况下,Internationalization service 处理由语言环境和时区不匹配所造成的问题。该服务系统地管理在 EJB 应用程序(包括客户机应用程序、企业 Bean 和 Servlet)的不同组件之间分发国际化上下文。有关更多信息,请参阅任务概述:国际化应用程序组件(国际化服务)。