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
相关产品推荐
相关产品推荐

