在 ForEach 内部时,SwiftUI 文本不会本地化

SwiftUI Text doesn't localise when inside ForEach

当我的 Text 从数组中获取它的字符串时,它不会本地化,但是当我硬编码时,它会:

Localizable.strings

"greeting1" = "Hello there";
"greeting2" = "Howdy";

(已本地化为英文)

我的观点

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

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

文中只会写key,比如 “greeting1”,而不是“你好

有没有办法强制 Text 对象使用本地化字符串?还是因为它从 ForEach 循环中获取内容而发生某种变化?

我的视图(硬编码)

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

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

这很好用,结果文本显示“你好”。

因为这里你使用的是普通 String Swift 类型

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

这里你使用的是SwiftUI自己的LocalizedStringKey类型

Text("greeting1")

要解决您的问题,请将您的 string 映射到 LocalizedStringKey

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

Text.init(_:tableName:bundle:comment:)

请按照链接文档了解更多信息。

当你硬编码字符串时它起作用,因为你正在使用这个initialiser,它需要一个LocalizedStringKey

LocalizedStringKeyExpressibleByStringLiteral,但 Text(string) 中的单词 string 不是“字符串文字”,因此它调用 this initialiser,并且没有本地化。您可以直接初始化 LocalizedStringKey 的实例,以便对其进行本地化:

Text(LocalizedStringKey(string))