学科分类
目录
Java Web

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。

点击此处
隐藏目录