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

String Catalog失效:仅提取Text初始化器字符串,开启SWIFT_EMIT_LOC_STRINGS仍无效

String Catalog无法提取自定义视图参数中字面量字符串的解决方法

问题核心

开启SWIFT_EMIT_LOC_STRINGS后,SwiftUI的String Catalog仍只提取Text初始化器中的字符串,自定义视图的参数字面量(如示例中的title、subtitle)未被纳入本地化文件,本质是编译器无法识别这些普通字符串需要本地化。

解决办法

  • 手动标记本地化字符串
    将需要本地化的字面量用String(localized:)包装,明确告诉编译器该字符串需要被提取:

    IntroView(
        title: String(localized: "titleTest"),
        subtitle: String(localized: "subtitleTest"),
        actionTitle: String(localized: "ActionTest")
    ) {
        print("testAction")
    }
    
  • 修改自定义视图参数类型
    如果自定义视图的这些参数是用于UI展示的文本,直接将参数类型从String改为LocalizedStringKey。传入字面量时,编译器会自动识别为需要本地化的内容,无需额外包装:
    自定义视图定义示例:

    struct IntroView: View {
        let title: LocalizedStringKey
        let subtitle: LocalizedStringKey
        let actionTitle: LocalizedStringKey
        let action: () -> Void
    
        var body: some View {
            VStack {
                Text(title)
                Text(subtitle)
                Button(actionTitle, action: action)
            }
        }
    }
    

    原调用代码无需修改,传入的字面量会自动被提取到String Catalog。

  • 验证全局配置
    确认SWIFT_EMIT_LOC_STRINGS在所有目标的Build Settings中都设为YES,覆盖Debug、Release等所有配置项,避免因配置遗漏导致的提取失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:32:39