🗾
SwiftUI でText をローカライズする
多言語対応していて、UI をローカライズしたい時があります。
事前準備
Localizable.strings
を定義済みとします。
// 英語
"one" = "one";
"two" = "two";
"three" = "three";
// 日本語
"one" = "一";
"two" = "二";
"three" = "三";
Text のローカライズ
SwiftUI のText
でこのように書くと、端末の言語設定により表示を出し分けてくれます。
Text("one")
変数をText に渡す場合
変数や定数を渡す場合は、LocalizedStringKey
型で渡す必要があります。
var key: LocalizedStringKey {
switch currentPage {
case .page1: return "one"
case .page2: return "two"
case .page3: return "three"
}
}
Text(key)
以下のようにString
型を指定すると、表示がローカライズされません。
var key: String {
switch currentPage {
case .page1: return "one"
case .page2: return "two"
case .page3: return "three"
}
}
動的にLocalzedStringKey をText に渡す場合
リストの処理などで、インデックスの数字を持たせたいことがあるかもしれません。
"key_0" = "foo";
"key_1" = "bar";
"key_2" = "baz";
次のようにLocalizedStringKey の配列を予め宣言しておくと、翻訳が適用されました。
(もうちょっといい感じの方法はないものか...)
let keys = ["key_0", "key_1", "key_2"] as [LocalizedStringKey]
var body: some View {
let index: Int
Text(keys[index])
}
以下のようにすると、翻訳が適用されませんでした。
var body: some View {
let index: Int
Text("key_\(index)" as LocalizedStringKey)
}
Discussion