Locale用于语言环境的格式化,在DateFormatter、Text(date, style:)等工具中,使用Localze可以本地化显示的内容格式。
例如:
中国:"2025/12/08"
美国:"12/8/25"
德国:"08.12.25"
基本用法
1、初始化方法
Locale(identifier: "zh_CN")
2、设置DateFormatter的语言环境
let f = DateFormatter()
f.locale = Locale(identifier: "zh_CN")
设置为中文语言环境。
常用Locale ID
1、中文体系:
“zh_CN” —— 简体中文(中国大陆)
“zh_HK” —— 繁体中文(香港)
“zh_TW” —— 繁体中文(台湾)
“zh_Hant” —— 繁体中文(通用)
“zh_Hans” —— 简体中文(通用)
2、英文体系:
“en_US” —— 美国英语
“en_GB” —— 英式英语
“en_AU” —— 澳大利亚英语
“en_CA” —— 加拿大英语
“en_IN” —— 印度英语
“en_US_POSIX”—— 固定技术格式(解析神器)
3、欧洲常见:
“fr_FR” —— 法语(法国)
“de_DE” —— 德语(德国)
“it_IT” —— 意大利语
“es_ES” —— 西班牙语
“nl_NL” —— 荷兰语
“ru_RU” —— 俄语
“pt_PT” —— 葡萄牙语(葡萄牙)
“pt_BR” —— 葡萄牙语(巴西)
4、亚洲常见:
“ja_JP” —— 日语(日本)
“ko_KR” —— 韩语(韩国)
“th_TH” —— 泰语(泰国)
“hi_IN” —— 印地语(印度)
5、中东常见:
“ar_SA” —— 阿拉伯语(沙特)
“ar_EG” —— 阿拉伯语(埃及)
“he_IL” —— 希伯来语(以色列)
6、特殊用途:
“root” —— 无本地化的中性格式
“en_US_POSIX”—— 最重要的技术性 Locale,用于固定格式解析
使用场景
1、切换货币格式:人民币显示 ¥12.5,美国显示 $12.50。
2、日期本地化:某些国家星期从星期天开始,有些从星期一开始。
3、数字分组符号:英文用 “1,234.56”,欧洲部分地区用 “1.234,56”。
4、多国语言展示界面的调试:在不修改iPhone 系统语言,直接设置环境 locale 测试格式。
注意事项
1、解析服务器时使用en_US_POSIX
苹果和 ICU 官方强烈推荐在“严格格式解析”时使用的特殊 Locale,避免日期/数字格式随设备语言变化而出错。
formatter.locale = Locale(identifier: "en_US_POSIX")
POSIX 最初是 Unix 世界的标准规范,和 Locale 结合时,它意味着:
1、不要使用用户的本地化规则
2、星期、月份永远用英文固定写法
3、数字永远是阿拉伯数字 (0–9)
4、始终 24 小时制 → 00–23
5、日期格式始终稳定,不受地区影响
这样系统不会因为用户把语言改为法语、阿拉伯语、日语导致格式化失败。
en_US会随着系统设置变化,例如数字分隔符、12/24 小时制、月份样式等。
而 en_US_POSIX 是不变的,专为“程序员格式化”设计。
总结
Locale决定日期、数字、货币、星期、月份、分隔符、排序方式等的显示风格。
SwiftUI 大量格式化 API(包括 FormatStyle)都会自动读取 Locale。
如果不设置Locale环境,默认使用系统的Locale.current。
SwiftUI设置方法:
.environment(.locale, Locale(identifier: "en_US"))
或者
.environment(.locale, .init(identifier: Locale.current.identifier))
根据环境值切换多语言环境。
