国际化: 理解Java平台上的Locale


国际化: 理解Java平台上的Locale

关键词鲍尔默称 凭借Windows群集 打垮linux时间问题

  语言和地理环境对我们的文化产生重要影响.我们同他人之间的交流以及生活中的事件都发生在语言和地理环境所产生的一个系统里.由于语言和环境的不同,以至需要我们来制定一个适合的方式来达到向他人表述我们自己或者我们的想法的目的.为了有效地与他人交流,需要考虑对方的文化,环境以及使用对方的语言.
  
  类似地,一套有实效的软件系统也要考虑用户的语言和地理区域.语言和区域形成了本地环境,描述了软件本地化的配置和上下文.在Java平台上,通过java.util.Locale对象来描述本地化.
  
  本文为在Java平台上的编程人员讲解Locale对象以其含义.
  
  本文分成如下几部分:
  
  . 定义
  . 构造
  . 预先准备的各Locale
  . 识别可支持的Locale
  . 以字符串来表述Locale
  . 使用 Locale
  . 获取Locale的信息
  . 总结
  
  定义
  
  Locale确定了一种专门的语言和区域.通过使用java.util.Locale对象来为那些区域敏感型的对象定制格式化数据以及向用户的展示.Locale影响到用户界面的语言,情形映射,整理(排序),日期和时间的格式以及货币格式.Locale在很多文化背景和语言敏感型的数据操作上的要求很严格.
  
  java.util.Locale是个轻量级对象,包含为数不多的几个重要成员:
  
  . 一个语言代号
  . 一个国家或者区域的可选项
  . 一个另一形式代号的可选项
  
  谈到或者书写Locale时,为了方便使用,可用缩写.在这样的缩写表述里,使用下划线来把Locale对象的每部分隔开来:
   [_ [_ ]]
  
  这三部分内容提供了足够的信息让其他些个区域敏感型对象为了特定的语言文化来修饰它们的行为.举例讲,java.text.NumberFormat对象格式化出来的数字同在德语拼写的奥地利和瑞士是有区别的.
  
  表一,不同Locale的格式化输出
  
  Locale          formatted Numbers
  ======================================
  German (Germany)      123.456,789
  German (Switzerland)    123'456.789
  English (United States)  123,456.789
  
  Locale对象是个标识符,像jva.text.NumberFormat,java.text.DateFormat这样的区域敏感型的对象都会提供本地化的数字或者日期的格式.举例说,java.text.DateFormat类在其实例化过程中用Locale对象来正确地定出日期的格式.
  
  以下部分讲述locale的各成分
  
  ISO 639制定了语言代号,国际标准组织为世界上的大多数语言指派2个或者3个字母来代表.Locale用2个字母代号标识出想要的语言.表二列出这样的几个语言代号.
  
  表二, ISO 639标准里的语言代号的例子
  
  Language   Code
  =====================
  Arabic    ar
  German    de
  English    en
  Spanish    es
  Japanese   ja
  Hebrew    he
  
  语言环境是Locale对象里的重要组成部分,因为它描述了特定用户群的语言.你的应用程序需要用这此信息来为用户提供与其语言一致的用户界面.
  
  当然,语言并没描绘了整个Locale.举一例,即使把 de 作为本地语言代号, 单单的一个 de 并不能让你知道到底是哪一地区的的人讲的德语.一些国家把德语作为官方语言或者作为第二种语言.一个国家与另一个国家里的德语的区别之一就是排列顺序.由于这样的原因以及另外些原由,语言并不总能充分地准确地定义一个区域.
  
  国家(区域)代号
  
  另一个国际标准ISO 3166定义了国家代号.这个标准为世界上的大多数主要区域以及每个国家定义了2到3个的缩写字母.跟语言代号对比,国家代号是用大写字符的.表三给出了一些代号定义.Locale用两字母的代号来替代标准里也同样支持的3字母的代号
  
  表三,ISO 3166标准中的一些国家代号的定义
  
  Country   Code
  ====================
  China      CH
  Canada       CA
  France       FR
  Japan       JP
  Germany   DE
  
  国家代号是Locale的重要组成部分.对应日期的java.text.Format对象,时间,数字和货币都对国家代号很敏感.有了国家代号就可更好地确认Locale里的语言部分.举例来说,在加拿大和法国都说法语的,然而确切的用法和语言表达习惯却是不一样的.这些不同之处可以用Locale里的国家代号来区分出来.例如, 代号fr_CA(加拿大法语)跟fr_FR(法国法语)就不一样.
  
  方言
  

  操作系统,浏览器以及其他软件供应商可用这个代号来提供附加的功能或者到达语言和国家代号所不能实现的定制.比如说,一家软件公司也许会为一特定操作系统指定一个locale,于是开发人员为西班牙的Macintosh操作系统创建了es_ES_MAC或者为Windows操作系统创建es_ES_WIN的本地化.
  
  Java平台历史上的一个例子就是使用EURO变量来为欧洲用户实现本地化.Java 2平台1.3标准版过度时期里就为欧洲的这些国家的本地化使用了这个变量.比如,尽管已经存在了 de_DE(德国德语)的本地化,但还是将 de_DE_EURO(欧洲的德国德语)加进了Java环境里.由于欧元是那些接受欧元流通国家里的标准货币,因此这个变量就从 J2SE1.4版本里剔除了.多数应用程序可能不需要这个代号.
  
  构造
  
  Locale类有如下几个构造器:
  
  . Locale(String language)
  . Locale(String language, String country)
  . Locale(String language, String country, String variant)
  
  以下展示每个构造器如何使用:
  //创建一个通用英语的locale.
  Locale locale1 = new Locale("en");
  //创建一个加拿大英语的locale.
  Locale locale2 = new Locale("en", "CA");
  //创建一个美式英语的locale
  //硅谷的英语
  Locale locale3 = new Locale("en", "US", "SiliconValley");
  
  用ISO 639的两字母代号表示的en代表了英语.ISO 3166的代号CA和US分别代表加拿大和美国.有个特别:如上代码片段里最后一行上用一个可选变量en_US_SiliconValley创建locale.
  

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值