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

Xcode 14.1中Preview locale功能失效问题咨询

问题描述

根据苹果官方文档,我们应当可以在SwiftUI预览中设置locale来切换本地化显示,但在Xcode 14.1(版本号14B47b)中,以下代码并未生效:

import SwiftUI

struct TestView: View {
    
    var timeFormatter: DateFormatter {
        let formatter = DateFormatter()
        formatter.dateStyle = .full
        formatter.timeStyle = .none
        return formatter
    }

    var body: some View {
        Text(timeFormatter.string(from: Date.now))
    }
}

struct TestView_Previews: PreviewProvider {
    static var previews: some View {
        TestView().environment(\.locale, .init(identifier: "fr_FR"))
    }
}

预览效果如下:
预览截图

请问是否有遗漏的设置?这是否是已知问题?


解决方案

这不是Xcode的已知问题,而是代码逻辑的问题:你自定义的DateFormatter没有关联SwiftUI环境中的locale,它默认使用系统当前locale,所以预览里设置的环境locale不会生效。

可以通过两种方式修复:

方法1:让DateFormatter绑定环境locale

通过@Environment获取环境中的locale,注入到自定义的DateFormatter中:

import SwiftUI

struct TestView: View {
    @Environment(\.locale) private var locale
    
    var timeFormatter: DateFormatter {
        let formatter = DateFormatter()
        formatter.dateStyle = .full
        formatter.timeStyle = .none
        formatter.locale = locale // 关联环境locale
        return formatter
    }

    var body: some View {
        Text(timeFormatter.string(from: Date.now))
    }
}

struct TestView_Previews: PreviewProvider {
    static var previews: some View {
        TestView().environment(\.locale, .init(identifier: "fr_FR"))
    }
}

方法2:使用SwiftUI原生日期格式化(更推荐)

直接借助SwiftUI的Text自带日期格式化能力,它会自动响应环境中的locale,无需自定义DateFormatter:

import SwiftUI

struct TestView: View {
    var body: some View {
        Text(Date.now, style: .date)
    }
}

struct TestView_Previews: PreviewProvider {
    static var previews: some View {
        TestView().environment(\.locale, .init(identifier: "fr_FR"))
    }
}

如果需要更自定义的格式,可使用formatted(_:)方法:

Text(Date.now.formatted(.dateTime.day().month().year().weekday()))

修改后,预览中的fr_FR locale设置就能正常生效,显示法语格式的日期。

内容的提问来源于stack exchange,提问作者adauguet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:40:11