🦋
SwiftUI: LocalizedStringKeyに動的なキーを使う
Text()
にLocalizedStringKey
を渡すと自動でstringsファイルから指定したキーの文言に変換して多言語対応してくれますが、このLocalizedStringKey
を動的に指定したい場合は注意が必要です。
例えば、以下のようなstringsファイルがあったとします。
Localizable.strings
"step1" = "Step1: Hello World!";
"step2" = "Step2: Good Morning";
"step3" = "Step3: Good Evening";
ここで以下のようにループでLocalizedStringKey
をText
に渡そうとすると、失敗します。
VStack {
ForEach(0 ..< 3) { i in
Text(LocalizedStringKey("step\(i + 1)"))
}
}
.padding(8)
そこで、LocalizedStringKey
の初期化の際String
でキャストしてから渡すとうまくいきます。
VStack {
ForEach(0 ..< 3) { i in
Text(LocalizedStringKey(String("step\(i + 1)")))
}
}
.padding(8)
これはLocalizedStringKey
の変数埋め込みの仕様が原因です。
例えば以下のような変数埋め込み用の形式で書かれたstringsファイルがあった場合はちゃんとその機能が発揮します。
Localizable.strings
"hello%@" = "Hello, %@!";
let name = "Mike"
Text(LocalizedStringKey("hello\(name)"))
Discussion