Class -- 09 -- Locale类常用方法解析
这次主要整理下 Java 中 Locale 类的常用方法
一、Locale 类定义
-
Locale 类位于 java.util 包中,主要用于语言的国际化
-
Locale 表示语言环境,每一个 Locale 对象都代表了一个特定的地理、政治或文化区域
-
Locale 类提供了三种方式来获取 Locale 对象
-
使用 Locale.getDefault() 方法
- 获取默认 Locale
-
使用 Locale 类提供的静态对象
- 如:Locale.CHINA
-
使用构造方法
-
Locale(String language)
-
Locale(String language, String country)
-
Locale(String language, String country, String variant)
-
-
二、Locale 类常用方法
-
实例方法
-
getLanguage()
-
获取当前 Locale 的语言代码
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getLanguage()); // zh
-
-
getCountry()
-
获取当前 Locale 的国家/地区代码
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getCountry()); // CN
-
-
getScript()
-
获取当前 Locale 的脚本
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getScript()); // ""
-
-
getVariant()
-
获取当前 Locale 的语言变体 (可以理解为方言,如:粤语 (yue))
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getVariant()); // yue
-
-
getDisplayLanguage()
-
获取适合展示给用户的 Locale 语言名称
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getDisplayLanguage()); // 中文
-
-
getDisplayLanguage(Locale inLocale)
-
inLocale
- 需要展示的 Locale
-
获取适合展示给用户的 Locale 语言名称,并根据 inLocale 进行本地化
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getDisplayLanguage(Locale.CHINA)); // 中文 System.out.println(locale.getDisplayLanguage(Locale.US)); // Chinese
-
-
getDisplayCountry()
-
获取适合展示给用户的 Locale 国家/地区名称
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getDisplayCountry()); // 中国
-
-
getDisplayCountry(Locale inLocale)
-
inLocale
- 需要展示的 Locale
-
获取适合展示给用户的 Locale 国家/地区名称,并根据 inLocale 进行本地化
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getDisplayCountry(Locale.CHINA)); // 中国 System.out.println(locale.getDisplayCountry(Locale.US)); // China
-
-
getDisplayScript()
-
获取适合展示给用户的 Locale 脚本名称
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getDisplayScript()); // ""
-
-
getDisplayScript(Locale inLocale)
-
inLocale
- 需要展示的 Locale
-
获取适合展示给用户的 Locale 脚本名称,并根据 inLocale 进行本地化
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getDisplayScript(Locale.CHINA)); // "" System.out.println(locale.getDisplayScript(Locale.US)); // ""
-
-
getDisplayVariant()
-
获取适合展示给用户的 Locale 语言变体名称 (可以理解为方言)
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getDisplayVariant()); // yue
-
-
getDisplayVariant(Locale inLocale)
-
inLocale
- 需要展示的 Locale
-
获取适合展示给用户的 Locale 语言变体名称 (可以理解为方言),并根据 inLocale 进行本地化
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getDisplayVariant(Locale.CHINA)); // yue System.out.println(locale.getDisplayVariant(Locale.US)); // yue
-
-
getDisplayName()
-
获取适合展示给用户的 Locale 名称
-
是 getDisplayLanguage()、getDisplayScript()、getDisplayCountry()、getDisplayVariant() 四个方法返回值组成的一个字符串
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getDisplayName()); // 中文 (中国,yue)
-
-
getDisplayName(Locale inLocale)
-
inLocale
- 需要展示的 Locale
-
获取适合展示给用户的 Locale 名称,并根据 inLocale 进行本地化
-
是 getDisplayLanguage()、getDisplayScript()、getDisplayCountry()、getDisplayVariant() 四个方法返回值组成的一个字符串
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getDisplayName(Locale.CHINA)); // 中文 (中国,yue) System.out.println(locale.getDisplayName(Locale.US)); // Chinese (China,yue)
-
-
getISO3Country()
-
获取当前 Locale 的国家/地区代码的三字母缩写 (多用于国际上的正式场合)
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getISO3Country()); // CHN
-
-
getISO3Language()
-
获取当前 Locale 的语言代码的三字母缩写 (多用于国际上的正式场合)
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getISO3Language()); // zho
-
-
stripExtensions()
-
获取当前 Locale 不带扩展的副本
-
如果当前 Locale 没有扩展名,则返回此 Locale
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.stripExtensions()); // zh_CN_yue
-
-
toLanguageTag()
-
获取当前 Locale 设置的格式完好的语言标记
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.toLanguageTag()); // zh-CN-x-lvariant-yue
-
-
hasExtensions()
-
如果当前 Locale 带有扩展,则返回 true;否则返回 false
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.hasExtensions()); // false
-
-
getExtensionKeys()
-
获取与当前 Locale 相关联的扩展键值集
-
如果当前 Locale 不带有扩展,则返回空的扩展键值集 (返回的集合是不可修改的,且键值都是小写的)
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getExtensionKeys()); // []
-
-
getUnicodeLocaleKeys()
-
获取与当前 Locale 相关联的 Unicode 语言环境键值集
-
如果当前 Locale 没有,则返回空的 Unicode 语言环境键值集 (返回的集合是不可修改的,且键值都是小写的)
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getUnicodeLocaleKeys()); // []
-
-
getUnicodeLocaleAttributes()
-
获取与当前 Locale 相关联的 Unicode 语言环境属性集
-
如果当前 Locale 没有,则返回空的 Unicode 语言环境属性集 (返回的集合是不可修改的)
Locale locale = new Locale("zh", "CN", "yue"); System.out.println(locale.getUnicodeLocaleAttributes()); // []
-
-
getExtension(char key)
-
key
- 扩展的 key 值
-
获取与当前 Locale 相关联的指定 key 值的扩展
-
如果没有与该 key 值相关联的扩展,则返回 null
-
为了格式整齐, key 值不区分大小写,且必须从 [0-9A-Za-z] 中取值
Locale locale = new Locale("zh", "CN", "yue"); locale.getExtension('A'); // ""
-
-
getUnicodeLocaleType(String key)
-
key
- Unicode Locale 的 key 值
-
获取与当前 Locale 相关联的指定 key 值的 Unicode 语言环境类型
-
若果 key 值未定义,则返回 null
-
为了格式整齐, key 值为两个字符,不区分大小写,且必须从 [0-9A-Za-z] 中取值
Locale locale = new Locale("zh", "CN", "yue"); locale.getUnicodeLocaleType("AA"); // ""
-
-
-
静态方法
-
Locale.getDefault()
-
获取默认 Locale
System.out.println(Locale.getDefault()); // zh_CN
-
-
setDefault(Locale newLocale)
-
newLocale
- 新的默认 Locale
-
设置默认 Locale
Locale.setDefault(new Locale("zh", "CN", "yue")); System.out.println(Locale.getDefault()); // zh_CN_yue
-
-
Locale.getAvailableLocales()
-
获取所有可获得的 Locale
System.out.println(Arrays.toString(Locale.getAvailableLocales())); // [, ar_AE, ar_JO, ar_SY, hr_HR, fr_BE, es_PA, mt_MT, es_VE, bg, zh_TW, it, ko, // uk, lv, da_DK, es_PR, vi_VN, en_US, sr_ME, sv_SE, es_BO, en_SG, ar_BH, pt, // ar_SA, sk, ar_YE, hi_IN, ga, en_MT, fi_FI, et, sv, cs, sr_BA_#Latn, el, uk_UA, // hu, fr_CH, in, es_AR, ar_EG, ja_JP_JP_#u-ca-japanese, es_SV, pt_BR, be, // is_IS, cs_CZ, es, pl_PL, tr, ca_ES, sr_CS, ms_MY, hr, lt, es_ES, es_CO, bg_BG, // sq, fr, ja, sr_BA, is, es_PY, de, es_EC, es_US, ar_SD, en, ro_RO, en_PH, // ca, ar_TN, sr_ME_#Latn, es_GT, sl, ko_KR, el_CY, es_MX, ru_RU, es_HN, zh_HK, // no_NO_NY, hu_HU, th_TH, ar_IQ, es_CL, fi, ar_MA, ga_IE, mk, tr_TR, et_EE, // ar_QA, sr__#Latn, pt_PT, fr_LU, ar_OM, th, sq_AL, es_DO, es_CU, ar, ru, en_NZ, // sr_RS, de_CH, es_UY, ms, el_GR, iw_IL, en_ZA, th_TH_TH_#u-nu-thai, hi, // fr_FR, de_AT, nl, no_NO, en_AU, vi, nl_NL, fr_CA, lv_LV, de_LU, es_CR, ar_KW, // sr, ar_LY, mt, it_CH, da, de_DE, ar_DZ, sk_SK, lt_LT, it_IT, en_IE, zh_SG, // ro, en_CA, nl_BE, no, pl, zh_CN, ja_JP, de_GR, sr_RS_#Latn, iw, en_IN, ar_LB, // es_NI, zh, mk_MK, be_BY, sl_SI, es_PE, in_ID, en_GB]
-
-
Locale.getISOCountries()
-
获取 ISO 3166 标准中定义的所有国家/地区代码
System.out.println(Arrays.toString(Locale.getISOCountries())); // [AD, AE, AF, AG, AI, AL, AM, AN, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, // BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, // CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, // DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, // GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, // IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, // KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, // MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, // NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, // RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, // ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, // UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, YE, YT, ZA, ZM, ZW]
-
-
Locale.getISOLanguages()
-
获取 ISO 639 标准中定义的所有语言代码
// [aa, ab, ae, af, ak, am, an, ar, as, av, ay, az, ba, be, bg, bh, bi, bm, bn, bo, br, // bs, ca, ce, ch, co, cr, cs, cu, cv, cy, da, de, dv, dz, ee, el, en, eo, es, et, eu, fa, // ff, fi, fj, fo, fr, fy, ga, gd, gl, gn, gu, gv, ha, he, hi, ho, hr, ht, hu, hy, hz, ia, // id, ie, ig, ii, ik, in, io, is, it, iu, iw, ja, ji, jv, ka, kg, ki, kj, kk, kl, km, kn, // ko, kr, ks, ku, kv, kw, ky, la, lb, lg, li, ln, lo, lt, lu, lv, mg, mh, mi, mk, ml, mn, // mo, mr, ms, mt, my, na, nb, nd, ne, ng, nl, nn, no, nr, nv, ny, oc, oj, om, or, os, pa, // pi, pl, ps, pt, qu, rm, rn, ro, ru, rw, sa, sc, sd, se, sg, si, sk, sl, sm, sn, so, sq, // sr, ss, st, su, sv, sw, ta, te, tg, th, ti, tk, tl, tn, to, tr, ts, tt, tw, ty, ug, uk, // ur, uz, ve, vi, vo, wa, wo, xh, yi, yo, za, zh, zu]
-
-
Locale.filter(List priorityList, Collection locales)
-
priorityList
- 用户的语言优先级列表,其中每个语言标记根据优先级降序排序
-
locales
- 用于匹配的 Locale 实例列表
-
根据 RFC 4647 标准中定义的过滤机制筛选出匹配的 Locale 实例列表
-
其底层调用了 filter(priorityList, locales, FilteringMode.AUTOSELECT_FILTERING) 方法
String ranges = "zh-CN;q=0.2, ja-JP;q=0.4, en-US;q=0.6"; List<Locale.LanguageRange> priorityList = Locale.LanguageRange.parse(ranges); List<Locale> locales = Arrays.asList(new Locale("zh", "CN"), new Locale("en", "US")); List<Locale> filter = Locale.filter(priorityList, locales); System.out.println(filter); // [en_US, zh_CN]
-
-
Locale.filter(List priorityList, Collection locales, FilteringMode mode)
-
priorityList
- 用户的语言优先级列表,其中每个语言标记根据优先级降序排序
-
locales
- 用于匹配的 Locale 实例列表
-
mode
-
过滤模式
名称 作用 AUTOSELECT_FILTERING 基于给定 Locale 列表的自动过滤模式 EXTENDED_FILTERING 扩展过滤模式 IGNORE_EXTENDED_RANGES 指定过滤模式,将忽略给定 Locale 列表中包含的扩展语言范围 MAP_EXTENDED_RANGES 指定过滤模式,如果给定的 Locale 列表中包含扩展语言范围,
则将其映射到基本语言范围REJECT_EXTENDED_RANGES 指定过滤模式,如果给定的 Locale 列表中包含扩展语言范围,
则拒绝该列表,并抛出异常
-
-
根据 RFC 4647 标准中定义的过滤机制筛选出匹配的 Locale 实例列表
String ranges = "zh-CN;q=0.2, ja-JP;q=0.4, en-US;q=0.6"; List<Locale.LanguageRange> priorityList = Locale.LanguageRange.parse(ranges); List<Locale> locales = Arrays.asList(new Locale("zh", "CN"), new Locale("en", "US")); List<Locale> filter = Locale.filter(priorityList, locales, Locale.FilteringMode.AUTOSELECT_FILTERING); System.out.println(filter); // [en_US, zh_CN]
-
-
Locale.filterTags(List priorityList, Collection tags)
-
priorityList
- 用户的语言优先级列表,其中每个语言标记根据优先级降序排序
-
tags
- 用于匹配的语言标记列表
-
根据 RFC 4647 标准中定义的过滤机制筛选出匹配的语言标记列表
-
其底层调用了 filterTags(priorityList, tags, FilteringMode.AUTOSELECT_FILTERING) 方法
String ranges = "zh-CN;q=0.2, ja-JP;q=0.4, en-US;q=0.6"; List<Locale.LanguageRange> priorityList = Locale.LanguageRange.parse(ranges); List<String> tags = Arrays.asList("zh-CN", "en-US"); List<String> filterTags = Locale.filterTags(priorityList, tags); System.out.println(filterTags); // [en-us, zh-cn]
-
-
Locale.filterTags(List priorityList, Collection tags, FilteringMode mode)
-
priorityList
- 用户的语言优先级列表,其中每个语言标记根据优先级降序排序
-
tags
- 用于匹配的语言标记列表
-
mode
- 过滤模式
-
根据 RFC 4647 标准中定义的过滤机制筛选出匹配的语言标记列表
String ranges = "zh-CN;q=0.2, ja-JP;q=0.4, en-US;q=0.6"; List<Locale.LanguageRange> priorityList = Locale.LanguageRange.parse(ranges); List<String> tags = Arrays.asList("zh-CN", "en-US"); List<String> filterTags = Locale.filterTags(priorityList, tags, Locale.FilteringMode.AUTOSELECT_FILTERING); System.out.println(filterTags); // [en-us, zh-cn]
-
-
Locale.lookup(List priorityList, Collection locales)
-
priorityList
- 用户的语言优先级列表,其中每个语言标记根据优先级降序排序
-
locales
- 用于匹配的 Locale 实例列表
-
根据 RFC 4647 标准中定义的查找机制返回最佳匹配的 Locale 实例
String ranges = "zh-CN;q=0.2, ja-JP;q=0.4, en-US;q=0.6"; List<Locale.LanguageRange> priorityList = Locale.LanguageRange.parse(ranges); List<Locale> locales = Arrays.asList(new Locale("zh", "CN"), new Locale("en", "US")); Locale lookup = Locale.lookup(priorityList, locales); System.out.println(lookup); // en_US
-
-
Locale.lookupTag(List priorityList, Collection tags)
-
priorityList
- 用户的语言优先级列表,其中每个语言标记根据优先级降序排序
-
tags
- 用于匹配的语言标记列表
-
根据 RFC 4647 标准中定义的查找机制返回最佳匹配的语言标记
String ranges = "zh-CN;q=0.2, ja-JP;q=0.4, en-US;q=0.6"; List<Locale.LanguageRange> priorityList = Locale.LanguageRange.parse(ranges); List<String> tags = Arrays.asList("zh-CN", "en-US"); String tag = Locale.lookupTag(priorityList, tags); System.out.println(tag); // en-us
-
-
Locale.forLanguageTag(String languageTag)
-
languageTag
- 语言标记
-
根据 IETF BCP 47 标准获取指定语言标记代表的 Locale
Locale locale = Locale.forLanguageTag("zh-CN-x-lvariant-yue"); System.out.println(locale); // zh_CN_yue
-
-
三、参考资料
上一篇: day-13 class,define