當我的Text從一個陣列中獲取它的字串時,它不會被本地化,但當我硬編碼時,它就會被本地化:
Localizable.strings
"greeting1" = "Hello there" ;
"greeting2" = "Howdy"。
(本地化為英文)
我的觀點
var localisedStrings = ["greeting1"/span>, "greeting2"/span>]
struct Message。View {
var body。some View {
ForEach(localisedStrings, id: .self) { string in
Text(string)
}
}
}
該文本將只寫關鍵,如 "greeting1",而不是"Hello there"
。是否有辦法強迫Text物件使用一個本地化的字串?還是因為它從ForEach回圈中獲取內容而發生了某種變化?
我的視圖(硬編碼)
//var localisedStrings = ["greeting1", "greeting2"]/span>
struct Message: View {
var body。some View {
/ForEach(localisedStrings, id: .self) { string in
Text("greeting1")
//}
}
}
這樣做很好,結果是文本顯示"Hello there"。
uj5u.com熱心網友回復:
當你硬編碼字串時,它是有效的,因為你正在使用這個初始化器,它需要一個LocalizedStringKey.
LocalizedStringKey是ExpressibleByStringLiteral,但是Text(string)中的string不是一個 "字串字面",所以它呼叫這個初始化器,而不是本地化。你可以直接初始化LocalizedStringKey的實體,以便對其進行本地化:
Text(LocalizedStringKey(string)
uj5u.com熱心網友回復:
這是因為你在這里使用了普通的String Swift型別
var localisedStrings = ["greeting1"/span>, "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:)
請按照鏈接的檔案來了解更多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/307292.html
標籤:
