SwiftUI iOS15新Foundation格式化器日期月份星期名称翻译问题
iOS 日期格式化多语言适配解决方案
核心问题原因
iOS 15 开始调整了 Foundation 框架的默认 locale 取值逻辑:如果你的 Xcode 项目没有在 Localizations 配置中添加对应目标语言(此处为意大利语),即便用户设备系统语言为意大利语,日期格式化接口也会默认 fallback 到英文,不会自动跟随系统语言翻译。
前置配置检查
- 打开 Xcode 项目的
Info配置面板,在Localizations列表中确认已添加意大利语(Italian),如果未添加请先补充,这是日期格式化自动跟随系统语言生效的基础前提 - 配置修改后建议删除设备上的原有App重新安装,避免本地化缓存导致配置不生效
分版本代码实现
iOS 14 及更早版本
使用 DateFormatter 或 Calendar 相关接口时,如需强制指定语言可手动设置 locale 属性:
// 自动跟随系统语言(需完成前置配置) let autoFormatter = DateFormatter() autoFormatter.dateFormat = "yyyy年MM月" let autoDateStr = autoFormatter.string(from: Date()) // 强制指定为意大利语,不受系统语言影响 let itFormatter = DateFormatter() itFormatter.locale = Locale(identifier: "it_IT") itFormatter.dateFormat = "yyyy MMMM" let itDateStr = itFormatter.string(from: Date()) // 短月份符号强制意大利语适配 var itCalendar = Calendar.current itCalendar.locale = Locale(identifier: "it_IT") let itShortMonthSymbols = itCalendar.shortMonthSymbols
iOS 15 及以上版本
使用新版 Foundation 格式化接口时,需通过 locale() 修饰符指定区域,未手动指定的情况下会默认读取项目本地化配置:
// 自动跟随系统语言(需完成前置配置) let autoDateStr = Date().formatted(.dateTime.year().month()) // 强制指定为意大利语,不受系统语言影响 let itDateStr = Date().formatted( .dateTime .year() .month() .locale(Locale(identifier: "it_IT")) )
内容的提问来源于stack exchange,提问作者kAiN
相关产品推荐
相关产品推荐

