Locale类是Java国际化基石,标识语言环境如“zh_CN”,驱动ResourceBundle、DateFormat等API按区域规则加载资源、格式化日期数字、排序字符串,并支持Builder等安全创建方式。

Locale类是Java国际化(i18n)的基石,它不直接翻译文字或格式化数据,而是**标识“当前用的是哪种语言环境”**——比如“简体中文(中国)”、“英语(美国)”或“法语(法国)”。系统根据这个标识,自动选择对应的日期格式、数字分隔符、货币符号、排序规则,以及最关键的:加载哪一套语言资源。
Locale封装三类核心区域信息
每个Locale对象至少包含以下一项或多项标识:
-
语言(language):ISO 639-1标准代码,如
zh(中文)、en(英语)、ja(日语) -
国家/地区(country):ISO 3166-1 alpha-2代码,如
CN(中国)、US(美国)、JP(日本) -
变体(variant):可选,用于区分同一国家内的特殊习惯,如
POSIX、phonebook(德语电话簿排序)
组合后形成标准标签,例如zh_CN、en_US、de_DE_phonebook,完全符合BCP 47国际规范。
Locale驱动实际功能的关键场景
它本身不执行操作,但为其他API提供上下文依据:
立即学习“Java免费学习笔记(深入)”;
-
资源加载:ResourceBundle根据Locale匹配
messages_zh_CN.properties或messages_en_US.properties - 日期时间格式化:DateFormat.getDateInstance(DateFormat.LONG, locale) 输出“2025年12月17日”或“December 17, 2025”
-
数字与货币显示:NumberFormat.getInstance(Locale.FRANCE) 格式化
123456.78为123 456,78 - 字符串排序:Collator.getInstance(locale) 确保中文按拼音、德语按变音符规则正确排序
创建Locale的三种常用方式
开发中推荐优先使用清晰、安全的方式:
-
用预定义常量:最简洁可靠,如
Locale.CHINA、Locale.US、Locale.JAPAN -
用Builder构建器:类型安全、可读性强,适合动态构造,如
new Locale.Builder().setLanguage("zh").setRegion("CN").build() -
用构造函数:支持灵活传参,如
new Locale("zh", "CN");注意不要传入自然语言名(如new Locale("汉语", "中国")无效)
获取和验证当前环境
运行时需准确识别用户所在环境:









