You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:18:05