【SwiftUI】変数や引数で渡された文字列だとLocalizableで設定した言語に置き換わらない

この記事は約2分で読めます。

Localizable.stringで多言語対応した際、変数や引数に格納してしまうと各言語に置き換わらないことがあったため、対応方法を紹介します。

以下のプログラムのようにLocalizable.stringで設定してある文字列でも、変数に格納してしまうと、そのままの文字列が表示されてしまいます。

import SwiftUI

struct SheetView: View {
    let hello = "HelloWorld"
    var body: some View {
        Text(hello)
    }
}

struct SheetView_Previews: PreviewProvider {
    static var previews: some View {
        SheetView()
            .environment(\.locale, .init(identifier: "ja"))
    }
}

対応するには『LocalizedStringKey』を使用してローカライズする文字列を渡すことを明示する必要があります。

なお、関数化する際など引数として渡される場合も同様に明示する必要があります

struct SheetView: View {
    let hello = "HelloWorld"
    var body: some View {
        Text(LocalizedStringKey(hello))
    }
}

多言語への対応については以下のページで紹介しています
https://swappli.com/multi-language/

タイトルとURLをコピーしました