Locales

Locale是一种专门负责国际化格式处理的类。它描述了

  • 一种语言
  • 一个位置(可选)
  • 一个变量(可选)

定位了国家与语言

比如在美国是:language=English, location=United States

在德国:language=German,location=Germany

瑞士有四种官方语言(德语,法语,意大利语,里托罗曼斯语)。一个说德语的瑞士人使用的Locale是:language=German,location=Switzerland。这个locale的格式化方式和在德国使用的locale很相似;但货币值被表示成瑞士法郎而不是德国马克

如果只设定了语言,locale就无法处理和国家相关的问题,比如货币

变量只在意外情况才会用的到,定位那些某一个国家确定的语言中更为细节的问题。比如,挪威人有两个拼写集,一种是传统的:Bokmal;一种是新的:Nynorsk。传统的拼写方法将会以变量来表示。

language=Norwegian,location=Norway,variant=Bokmal

java使用由国际标准化组织(ISO)所定义的编码。本地语言由小写的两个字母的代码来表示,它遵循ISO-639-1。国家代码由大写的两个字母的代码来表示,它遵循ISO-3166-1

常用语言和国家代码

构造Locale方法如下

1
2
3
4
5
6
7
8
Locale german = new Locale("de");
//德语
Locale germanGermany=new Locale("de","DE");
//德语+德国
Locale germanSwitzerland=new Locale("de","CH");
//德语+瑞士
Locale norwegianNorwayBokmal=new Locale("no","NO","B");
//挪威

同时java SE还预定义了大量locale对象,从略

和大量的语言locale,他们只设定了语言而没有位置,从略

除此之外,还有两种办法能获得locale:

  1. 使用Locale的静态getdefault方法可以获得本地操作系统默认locale对象,可以调用setDefault来改变默认的java locale;但是这种改变只会对你的程序有效,不会影响操作系统

  2. 对于所有依赖locale的类,可以返回一个它们所支持的locale数组。比如

    1
    2
    Locale[] supportedLocales=DateFormat.getAvailableLocales();
    //将返回所有DateFormat类所能处理的locale

有了locale后,可以调用其getDisplayName,它返回一个描述当前locale的字符串,如

1
German (Switzerland)

不过默认是以默认的locale来表示的,这是个问题,当你的用户选择了德语作为首选语言,你应该把字符串也显示成德语,可以给German locale一个参数可以做到这一点:

1
2
Locale loc=new Locale("de","CH");
System.out.println(loc.getDisplayName(Locale.GERMAN));

示例代码如下

1
2
3
4
5
@Test
public void testLocale(){
Locale german=new Locale("de","CH");
System.out.println(german.getDisplayName());
}
Donate comment here