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

如何在使用String Catalog时禁用自动提取功能?

禁用String Catalog自动提取的全局解决方案

针对你遇到的问题——String Catalog自动提取使用LocalizedStringKey初始化的字符串,且Button、TextField等组件没有类似Text的init(verbatim:)方法,以下是几种简洁的全局解决方案:

方案1:给String添加全局后缀,强制使用非本地化初始化器

通过扩展String添加一个轻量后缀,让字符串字面量显式以String类型传入UI组件,避免编译器自动匹配LocalizedStringKey的初始化器:

extension String {
    var raw: String { self }
}

使用方式非常简洁,所有UI组件都能通用:

// Button不再自动提取字符串
Button("Hello World!".raw) {
    // 点击动作
}

// TextField的占位符也不会被提取
TextField("Enter text here".raw, text: $inputText)

方案2:为无verbatim方法的UI组件扩展初始化器

模仿Text的init(verbatim:),给Button、TextField等组件添加专属的非本地化初始化器,语义更明确:

// 扩展Button(Label为Text的情况)
extension Button where Label == Text {
    init(verbatim title: String, action: @escaping () -> Void) {
        self.init(title, action: action)
    }
}

// 扩展TextField
extension TextField {
    init(verbatim placeholder: String, text: Binding<String>) {
        self.init(placeholder, text: text)
    }
}

使用时直接调用verbatim参数:

Button(verbatim: "Submit") {
    // 动作
}

TextField(verbatim: "Username", text: $username)

方案3:全局关闭自动提取(不推荐)

如果需要彻底禁用项目中所有字符串的自动提取,可在项目Build Settings中找到Extract Localizable Strings相关选项,关闭该编译阶段;或在Info.plist中添加NSLocalizationAutomaticExtractEnabled并设置为NO。但此方法会影响所有本地化流程,仅适合完全不需要自动提取的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:25:15