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 | Locale german = new Locale("de"); |
同时java SE还预定义了大量locale对象,从略
和大量的语言locale,他们只设定了语言而没有位置,从略
除此之外,还有两种办法能获得locale:
使用Locale的静态getdefault方法可以获得本地操作系统默认locale对象,可以调用setDefault来改变默认的java locale;但是这种改变只会对你的程序有效,不会影响操作系统
对于所有依赖locale的类,可以返回一个它们所支持的locale数组。比如
1
2Locale[] supportedLocales=DateFormat.getAvailableLocales();
//将返回所有DateFormat类所能处理的locale
有了locale后,可以调用其getDisplayName,它返回一个描述当前locale的字符串,如
1 | German (Switzerland) |
不过默认是以默认的locale来表示的,这是个问题,当你的用户选择了德语作为首选语言,你应该把字符串也显示成德语,可以给German locale一个参数可以做到这一点:
1 | Locale loc=new Locale("de","CH"); |
示例代码如下
1 |
|