Swift Locale语言环境
Swift Locale语言环境

Swift Locale语言环境

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")

设置为中文语言环境。

常用属性

1、Locale.preferredLanguages

返回用户首选语言的数组,按优先级排列。

let languages = Locale.preferredLanguages
print(languages)    // :["zh-Hans-CN", "en-CN"]

通常是 BCP 47 语言标识,例如:”en-US” 、”zh-Hans-CN”。

语言 - 脚本 - 地区
language - script – region

Locale.preferredLanguages.first为用户首选语言。

2、Locale.current

返回当前系统区域设置的 Locale 实例。

let currentLocale = Locale.current

它包含语言和地区信息。

例如:

let locale = Locale.current // 系统当前区域设置,"zh_CN (fixed zh_CN)"
let identifier = Locale.current.identifier // 完整标识符,"zh_CN"
let languageCode = Locale.current.languageCode ?? "zh" // 语言代码,"zh"
let regionCode = Locale.current.regionCode ?? "US"     // 地区代码,"CN"
let currencyCode = Locale.current.currencyCode ?? "USD" // 货币代码,"CNY"
let currencySymbol = Locale.current.currencySymbol ?? "$"     // 货币符号,"¥"
let scriptCode = Locale.current.scriptCode ?? "Latn" // 书写系统,"Latn"

languageCode 是语言(如 zh、en),regionCode 是地区(如 CN、US)。

常用方法

1、localizedString

根据Locale返回语言名称、地区名称。

例如:

let locale = Locale(identifier: "zh_CN")
let lanuageCode = locale.localizedString(forLanguageCode: "en") // "英语"
let regionCode = locale.localizedString(forRegionCode: "US") // "美国"

常用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))

根据环境值切换多语言环境。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注