在 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
。
LocalizedStringKey
是 ExpressibleByStringLiteral
,但 Text(string)
中的单词 string
不是“字符串文字”,因此它调用 this initialiser,并且没有本地化。您可以直接初始化 LocalizedStringKey
的实例,以便对其进行本地化:
Text(LocalizedStringKey(string))
当我的 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
。
LocalizedStringKey
是 ExpressibleByStringLiteral
,但 Text(string)
中的单词 string
不是“字符串文字”,因此它调用 this initialiser,并且没有本地化。您可以直接初始化 LocalizedStringKey
的实例,以便对其进行本地化:
Text(LocalizedStringKey(string))