国际化的介绍
Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。
你的手机语言设置过英语吗?虽然语言变化了,但是功能变了吗?
locale类
主要的功能是:设置国家和语言
三种使用方式
通过构造方法
遍历已安装语言环境的数组,获得语言和国家信息
// 返回所有已安装语言环境的数组
Locale[] ls = Locale.getAvailableLocales();
//遍历打印
for (Locale locale : ls) {
System.out.println("locale :" + locale);
}
/*
运行结果
例如ar_AE,ar是语言,AE是国家
locale :
locale :ar_AE
locale :ar_JO
locale :ar_SY
locale :hr_HR
locale :fr_BE
locale :es_PA
locale :mt_MT
locale :es_VE
locale :bg
locale :zh_TW
locale :it
locale :ko
locale :uk
locale :lv
locale :da_DK
locale :es_PR
locale :vi_VN
locale :en_US
locale :sr_ME
locale :sv_SE
locale :es_BO
locale :en_SG
locale :ar_BH
locale :pt
locale :ar_SA
locale :sk
locale :ar_YE
locale :hi_IN
locale :ga
locale :en_MT
locale :fi_FI
locale :et
locale :sv
locale :cs
locale :sr_BA_#Latn
locale :el
locale :uk_UA
locale :hu
locale :fr_CH
locale :in
locale :es_AR
locale :ar_EG
locale :ja_JP_JP_#u-ca-japanese
locale :es_SV
locale :pt_BR
locale :be
locale :is_IS
locale :cs_CZ
locale :es
locale :pl_PL
locale :tr
locale :ca_ES
locale :sr_CS
locale :ms_MY
locale :hr
locale :lt
locale :es_ES
locale :es_CO
locale :bg_BG
locale :sq
locale :fr
locale :ja
locale :sr_BA
locale :is
locale :es_PY
locale :de
locale :es_EC
locale :es_US
locale :ar_SD
locale :en
locale :ro_RO
locale :en_PH
locale :ca
locale :ar_TN
locale :sr_ME_#Latn
locale :es_GT
locale :sl
locale :ko_KR
locale :el_CY
locale :es_MX
locale :ru_RU
locale :es_HN
locale :zh_HK
locale :no_NO_NY
locale :hu_HU
locale :th_TH
locale :ar_IQ
locale :es_CL
locale :fi
locale :ar_MA
locale :ga_IE
locale :mk
locale :tr_TR
locale :et_EE
locale :ar_QA
locale :sr__#Latn
locale :pt_PT
locale :fr_LU
locale :ar_OM
locale :th
locale :sq_AL
locale :es_DO
locale :es_CU
locale :ar
locale :ru
locale :en_NZ
locale :sr_RS
locale :de_CH
locale :es_UY
locale :ms
locale :el_GR
locale :iw_IL
locale :en_ZA
locale :th_TH_TH_#u-nu-thai
locale :hi
locale :fr_FR
locale :de_AT
locale :nl
locale :no_NO
locale :en_AU
locale :vi
locale :nl_NL
locale :fr_CA
locale :lv_LV
locale :de_LU
locale :es_CR
locale :ar_KW
locale :sr
locale :ar_LY
locale :mt
locale :it_CH
locale :da
locale :de_DE
locale :ar_DZ
locale :sk_SK
locale :lt_LT
locale :it_IT
locale :en_IE
locale :zh_SG
locale :ro
locale :en_CA
locale :nl_BE
locale :no
locale :pl
locale :zh_CN
locale :ja_JP
locale :de_GR
locale :sr_RS_#Latn
locale :iw
locale :en_IN
locale :ar_LB
locale :es_NI
locale :zh
locale :mk_MK
locale :be_BY
locale :sl_SI
locale :es_PE
locale :in_ID
locale :en_GB
*/
通过普通方法
Locale locale = Locale.getDefault()
通过静态对象
全部的静态对象如下
public static final Locale CANADA
public static final Locale CANADA_FRENCH
public static final Locale CHINA
public static final Locale CHINESE
public static final Locale ENGLISH
public static final Locale FRANCE
public static final Locale FRENCH
public static final Locale GERMAN
public static final Locale GERMANY
public static final Locale ITALIAN
public static final Locale ITALY
public static final Locale JAPAN
public static final Locale JAPANESE
public static final Locale KOREA
public static final Locale KOREAN
public static final Locale PRC
public static final Locale ROOT
public static final Locale SIMPLIFIED_CHINESE
public static final Locale TAIWAN
public static final Locale TRADITIONAL_CHINESE
public static final Locale UK
public static final Locale US
使用方法如下
Locale locale = Locale.SIMPLIFIED_CHINESE
ResourceBundle类
主要功能是:根据国家和语言选择对应的properties文件,进而输出对应语言的信息。
定义properties文件
还记得文章开始的两个图片吗?虽然改变了手机的语言,但是手机功能并没有变,相当于英语和中文存储在两个properties文件中。
properties文件放在src目录下,且命名规则为:baseName_语言_国家.properties
PS:baseName下方有介绍
使用方式
//第一个参数为baseName,第二参数为Locale的对象
ResourceBundle resourceBundle = ResourceBundle.getBundle("resource", Locale.getDefault());
综合小例子
通过上方手机语言的例子,做了一个相似的小案例加深理解
//配置语言和国家为中文、中国
ResourceBundle resourceBundle = ResourceBundle.getBundle("resource", Locale.getDefault());
//输出中国中文的相关配置
System.out.println(resourceBundle.getString("test.connections"));
System.out.println(resourceBundle.getString("test.sounds"));
System.out.println(resourceBundle.getString("test.notifications"));
System.out.println(resourceBundle.getString("test.display"));
System.out.println(resourceBundle.getString("test.wallpaper"));
System.out.println(resourceBundle.getString("test.themes"));
//配置语言和国家为英语、美国
resourceBundle = ResourceBundle.getBundle("resource", Locale.US);
//输出美国英文的相关配置
System.out.println("============分隔符=================");
System.out.println(resourceBundle.getString("test.connections"));
System.out.println(resourceBundle.getString("test.sounds"));
System.out.println(resourceBundle.getString("test.notifications"));
System.out.println(resourceBundle.getString("test.display"));
System.out.println(resourceBundle.getString("test.wallpaper"));
System.out.println(resourceBundle.getString("test.themes"));
/*
运行结果为:
连接
声音
通知
显示
壁纸
主题
============分隔符=================
connections
sounds
notifications
display
wallpaper
themes
*/