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

SwiftUI预览画布忽略locale设置,.environment修改locale不生效如何解决

问题原因

这是Xcode 12.5 ~ 12.5.1版本的已知Bug,SwiftUI预览的本地化逻辑会优先读取Xcode全局Scheme配置的运行语言,单独给预览View设置\.locale环境变量无法覆盖全局配置,因此仅在模拟器运行时读取系统语言的逻辑正常,预览场景不生效。

解决方案

分两种情况处理:

  • 可升级Xcode版本:直接升级到Xcode 13及以上版本,Apple已经在后续版本修复了该问题,你当前写的.environment(\.locale, .init(identifier: "es"))配置可以直接生效,不需要额外修改。
  • 必须保留Xcode 12.5.1版本:可选用以下任意一种方案解决
    1. 修改全局Scheme语言配置
      点击Xcode顶部导航栏的Scheme选择框 → 选择Edit Scheme → 切换到Run选项卡 → 进入Options页面 → 将Application Language修改为你需要测试的西班牙语(Spanish, es),之后无需额外加locale环境配置,预览会直接显示对应语言的本地化内容。
    2. 不修改全局Scheme,在预览代码中额外指定本地化bundle
      给你的预览View新增\.localizationBundle环境变量配置,修改后的预览代码如下:
    static var previews: some View {
            ForEach(["iPhone 8", "iPhone X", "iPhone XS Max"], id: \.self) { deviceName in
                MainContentView()
                    .environment(\.locale, .init(identifier: "es"))
                    .environment(\.localizationBundle, .main) // 新增该行强制指定本地化资源包
                    .previewDevice(PreviewDevice(rawValue: deviceName))
                    .previewDisplayName(deviceName)
                }
        } 
    
    1. 清除Xcode缓存重试
      若修改后依旧不生效,按下快捷键Option + Shift + Command + K清除构建文件夹,重启Xcode后重新加载预览即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:24:02