Locale类
在Web应用程序中,要想实现国际化的功能,首先需要学习一下Locale类,Locale类是实现国际化非常重要的一个类,几乎所有对国际化的支持都需要依赖这个类。
Locale类位于java.util包中,它的实例对象用于代表一个特定的地理、政治或文化上的区域。Locale对象本身并不执行和国际化相关的格式化和解析工作,它仅负责向本地敏感类(JDK中的某个类在运行时需要根据 Locale 对象来调整其功能,这个类就称为本地敏感类)提供本地化信息。例如,DateFormat类需要依据Locale对象来确定日期的格式,然后对日期进行分析和格式化。接下来,介绍Locale对象的几种创建方式和Local类中的一些方法,具体如下:
1、创建Locale实例对象
JDK提供了多种方式来创建Locale的实例对象,其中包括使用Locale类的构造方法、使用Locale的常量等。接下来就针对如何创建Locale类的实例对象进行讲解。
(1)使用Locale类的构造方法
Locale类有三个重载的构造方法,它们的语法定义如下:
● public Locale(String language)
● public Locale(String language,String country)
● public Locale(String language,String country,String variant)
以上三个构造方法都可以创建Locale对象,这些方法中都传递了一个或多个参数。其中,参数language表示有效的ISO语言代码(国际标准化组织ISO为各语言所定制的语言代码),它使用ISO-639定义的两个小写字母表示,如使用“en”表示英语;参数country表示有效的ISO国家代码,它使用ISO-3166定义的两个大写字母表示,如使用“US”表示美国;参数variant是预留给第三方软件开发商或浏览器使用的一个附加变量,例如,使用WIN代码Windows,MAV代表Macintosh等。
使用Locale类的构造方法创建Locale实例对象时,如果Locale对象仅仅用于说明当地的语言信息,则使用第一个构造方法即可,示例代码如下:
Locale enLocale = new Locale("en");
如果要创建一个标识当地语言信息以及国家信息的Locale对象时,则使用第二个构造方法即可,示例代码如下:
Locale enLocale = new Locale("en","US");
如果要创建一个带有附加变量的Locale对象时,则使用第三个构造方法即可,例如,创建一个标识传统西班牙排序的Local对象,具体示例如下:
Locale enLocale = new Locale("es","ES","Traditional_WIN");
(2)使用Locale类的常量
虽然使用Locale类的构造方法可以创建Locale的实例对象,但需要指定语言代码和国家代码作为构造方法的参数,这样会比较麻烦。为此, Locale类中定义了一些常量,如Locale.ENGLISH、Locale.GERMAN、Locale.US、Locale.HK等,这些常量分别对应一些提前创建好的表示不同语言和国家的Locale对象。使用这些常量便可以方便的创建Locale实例对象,示例代码如下:
Locale locale=Locale.CHINESE;
2、Locale类的常用方法
在程序开发中经常会使用Locale对象标志一些本地信息,为了方便获取Locale对象中标志的信息,Locale类中还定义了一些方法,使用这些方法可以获取国家代码和语言代码等信息,表1列举了Locale类中定义的一些常用方法。
表1 Locale的相关方法
方法声明 | 功能描述 |
---|---|
String getCountry() | 获取Locale实例对象的ISO国家代码 |
String getLanguage() | 获取Locale实例对象的ISO语言代码 |
String getVariant() | 获取Locale实例对象的变量编码 |
String getDisplayCountry() | 获取Locale实例对象适合显示给用户的国家名称 |
String getDisplayCountry(Locale inLocale) | |
String getDisplayLanguage() | 获取Locale实例对象适合显示给用户的语言名称 |
String getDisplayLanguage(Locale inLocale) | |
String getDisplayName() | 获取Local实例对象显示的名称 |
String getDisplayName(Locale inLocale) |
在表1中,列举了Locale类的常用方法,对于读者来说,这些方法可能会比较难以理解,接下来通过一个案例来演示这些方法的使用。首先在Eclipse中新建chapter10工程,然后在该工程中创建cn.itcast.chapter10包,在该包中编写LocaleExam.java程序,如例1所示。
例1 LocaleExam.java
1 package cn.itcast.chapter10;
2 import java.util.*;
3 public class LocaleExam {
4 public static void main(String[] args) {
5 Locale locale = new Locale("en", "US");
6 System.out.println("美国地区的ISO语言代码:" +
7 locale.getLanguage());
8 System.out.println("美国地区的ISO国家代码:" +
9 locale.getCountry());
10 System.out.println("显示给本地用户的语言名称:" +
11 locale.getDisplayLanguage());
12 System.out.println("显示给美国用户的语言名称:" +
13 locale.getDisplayLanguage(locale));
14 System.out.println("显示给本地用户的信息名称:" +
15 locale.getDisplayName());
16 System.out.println("显示给美国用户的信息名称:" +
17 locale.getDisplayName(locale));
18 }
19 }
在Eclipse中运行LocaleExam.java程序,此时,控制台窗口中显示的结果如图1所示。
图1 控制台窗口
从图10-3可以看出,控制台窗口中输出了美国地区的ISO语言代码和国家代码、显示给本地用户和美国用户的语言名称以及信息名称。这是由于在例10-1中创建了一个美国地区的Locale对象,当使用相应的方法获取信息时,如果传递一个Locale对象,则会获取美国地区的国家代码、语音名称等,否则就会获取本地区域的国家代码、语音名称等。
多学一招:获取ISO语言代码和国家代码的方式
在讲解Locale对象时,会使用一些ISO语言代码和国家代码,这些代码我们不用特殊记忆,在许多网站都可以查询,例如在http://www.loc.gov/standards/iso639-2/langhome.html
网页可以查询ISO语言代码,在http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
网页可以查询ISO国家代码。
除了以上方式可以查询各个地区的ISO语言代码和国家代码,我们还可以通过IE浏览器轻松的完成这种功能,首先点击IE浏览器的“工具”à“Internet选项”菜单,在打开的“Internet选项”对话框中,单击“语言按钮”,打开“语言首选项”窗口,在该窗口中点击“添加”按钮,如图2所示。
图2 添加语言
在打开的“Internet选项”对话框中,单击【语言】,如图3所示。
图3
单击图3中的【添加】按钮,如图4所示。
图4
从图4中,可以看到许多地区的ISO语言代码和国家代码,其中方括号内“-”前面的字符是ISO语言代码,“-”后面的字符是ISO国家代码,例如阿拉伯语(巴林)的语言代码为ar,国家代码为BM。