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

SwiftUI中ForEach内的Text使用数组字符串key时本地化失效问题

问题原因

Text 组件针对不同入参有两套不同的初始化逻辑:

  • 当你传入字符串字面量(比如硬编码Text("greeting1"))时,Swift 会自动调用接收 LocalizedStringKey 类型的构造器,自动触发本地化查找,返回对应翻译内容。
  • 当你传入字符串变量(比如从数组遍历得到的string变量)时,会默认调用接收verbatim参数的构造器,直接输出字符串原始内容,不会触发本地化逻辑。
    这个问题和ForEach循环没有关系,是入参类型匹配导致的。

解决方案

方案1:手动指定本地化查找

遍历的时候手动用NSLocalizedString包装key,强制触发本地化:

var localisedStrings = ["greeting1", "greeting2"]

struct Message: View {
    var body: some View {
        ForEach(localisedStrings, id: \.self) { string in
            Text(NSLocalizedString(string, comment: ""))
        }
    }
}

方案2:数组直接存储LocalizedStringKey类型

把数组的元素类型从String改成LocalizedStringKey,Text会自动识别该类型并触发本地化:

// 注意元素类型是LocalizedStringKey,不是String
var localisedStrings: [LocalizedStringKey] = ["greeting1", "greeting2"]

struct Message: View {
    var body: some View {
        ForEach(localisedStrings, id: \.self) { string in
            Text(string)
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:15:01