7.6.7 国际化与本地化概述

优质
小牛编辑
131浏览
2023-12-01

国际化是指在某个国家或地区使用的软件将以本地的语言和习惯显示软件中的信息。国际化的英文单词是internationalization,由于这个英文单词太长,因此,国际化也可以写成i18n,其中“i”和“n”分别是internationalization的首字母和尾字母,而“18”表示在“i”和“n”之间共有18个英文字母。由于国际化的实质就是按着本地用户的语言和习惯显示软件中的信息,因此,国际化也被称为本地化。

一般在安装操作系统时可以选择本地的语言,如中文版的Windows XP默认语言是中文,但在安装的过程中也可以选择其他的语言。除了在安装过程中可以选择不同的语言外,通过Windows的【区域和语言选项】对话框也可以修改Windows的当前语言。

进入Windows控制面版,单击【区域和语言选项】图标,打开【区域和语言选项】对话框,如图8.1所示。

01

图8.1 【区域和语言选项】对话框

从图8.1所示的【区域和语言选项】对话框可以看出,操作系统的当前语言是“中文”。在“示例”分别给出了“数字”、“货币”、“时间”、“短日期”和“长日期”的格式。如果这时执行如下的代码,将输出中文格式的信息:

java.text.DateFormat df =
    java.text.DateFormat.getDateInstance(java.text.DateFormat.LONG);
System.out.println(df.format(new Date()));
System.out.println(java.util.Locale.getDefault());

上面的代码将输出当前语言的长日期和国家-地区,输出的内容如下:

2008年10月7日

zh_CN

如果修改了Windows的当前语言,那么上面的代码将输出不同的信息。读者可以将当前语言修改成“英语(英国)”,如图8.2所示。

02

图8.2 修改当前语言

执行上面的代码后,将输出如下的信息:

07 October 2008

en_GB

从上面的输出结果可以看出,随着操作系统当前语言的不同,输出的日期、国家-地区也不同。上面的过程只是通过修改操作系统的当前语言来模拟在不同的语言环境下国际化信息的输出结果。但在实际应用中,软件可能会真正运行在不同语言的操作系统中,因此,输出的国际化信息也会随着操作系统当前语言的不同而有所差异。

为了在真实的环境中可以根据操作系统语言来输出符合本地用户习惯的信息,必须在程序中加入国际化的支持。如上面的代码使用java.text.DateFormat.LONG来告诉程序要使用操作系统的长日期格式来输出日期。

一个国际化程序不能将信息的输出格式硬编码在程序中,如将上面的程序改成如下的形式将无法支持国际化:

java.text.SimpleDateFormat sdf =

    new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println(sdf.format(new Date()));

上面的代码无论操作系统当前是什么语言,都会输出固定格式的当前日期。

一个支持国际化程序除了要根据操作系统的当前语言输出不同格式的信息外,还需要从资源文件中读取不同语言的国际化资源信息。如要使一个程序支持中文和英文,就要为该程序准备两个资源文件,一个资源文件保存中文的信息,另一个资源文件保存相同含义的英文信息。而应用程序会根据操作系统的当前语言来决定读取哪一个资源文件。如果操作系统的当前语言是英文,应用程序就会读取保存英文信息的资源文件,并显示相应的信息。这样用户就可以看到英文版的应用界面了。

从上面的描述可以看出,国际化程序有如下的特点:

l 根据操作系统当前的语言输出符合这些语言习惯的信息。

2 在输出字符串信息时,可以根据操作系统当前的语言读取相应的资源文件,并将相应的信息显示在界面中。

3 为了支持上面两个特性,不能将资源信息、输出格式、国家-地区等国际化信息硬编码在程序中。

4 一个成熟的国际化程序应该不需要修改源代码和重新编译程序就可以支持新的国家或地区的用户使用。