1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【iOS】iOSアプリのローカライズ方法

Last updated at Posted at 2024-02-23

はじめに

こんにちは。
iOS開発の一環として、アプリのローカライズ方法について学んだので、その手順を共有したいと思います。

実装前の準備

まず実装を始める前に以下の手順を行います。

  1. Infoを選択してLocalizationsに使用する言語を「+」をクリックして追加する
  2. File > New > File...を選択してStrings Fileを選択しLocalizable.stringsを作成する
  3. 作成したLocalizable.stringsをクリックしてUtilityAreaからLocalizationボタンをクリックして言語を確定させる
  4. 2と3を言語分作成する

設定アプリの言語変更によりローカライズ対応を行う(StoryBoard)

StoryBoardで作成している人向けです。
設定アプリで言語変更を行いその変更に伴い言語を変わるようにするときは以下の対応を行います

  1. storyboardにカーソルを合わせてUtilityAreaにあるLocalizationの設定言語にチェックを入れる
  2. Main.strings(チェック入れた言語)が作成されるのでvalueに表示したい文言を入力する

上記の対応をすることにより設定アイコンから言語を変更することによりアプリ表示の文言が自動で変わります。

動的に言語を変更したい場合

次に動的に言語を変更したい場合のやり方です。
やっていることとしてはLocalizable.stringsのvalueを取得してボタンにセットする対応になります。

Localizable.strings(Japanese)
"button_1" = "ボタン1";
"button_2" = "ボタン2";
Localizable.strings(English)
"button_1" = "Button 1";
"button_2" = "Button 2";
ViewController.swift
@IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!
private var bundle: Bundle?

override func viewDidLoad() {
    super.viewDidLoad()
    // 日本語にしたい場合
    updateLocalizedText(lang: "ja")
    // 英語にしたい場合
    updateLocalizedText(lang: "en")
}

private func updateLocalizedText(lang: String) {
    // key : Localizable.stringsのkey value : IBoutlet
    let ibOutletAndWordId: KeyValuePairs = [
        "button_1" : button1,
        "button_2" : button2,
    ]

    // ボタンのテキストを変更する
    for (key, value) in ibOutletAndWordId {
        setLanguage(lang)
        let displayText = localizedString(forKey: key)
        value?.setTitle(displayText, for: .normal)
    }
}

private func setLanguage(_ code: String) {
    // 言語を設定する
    guard let path = Bundle.main.path(forResource: code, ofType: "lproj"),
    let bundle = Bundle(path: path) else {
        self.bundle = nil
        return
    }
    self.bundle = bundle
}

// Localizable.stringsのvalueを取得する
private func localizedString(forKey key: String) -> String {
    return bundle?.localizedString(forKey: key, value: nil, table: nil) ?? key
}

最後に

動的な対応を入れなければほとんどファイルをいじらずにXcodeをポチポチするだけでできるなんて驚きました。
無理に動的な変更を入れなくてもいいと思えば修正はすごく簡単な対応で済むので便利だなと感じました。
この記事が参考になれば嬉しいです。
最後までご覧いただきありがとうございました。

Androidのローカライズ対応(おまけ)

iOSでのローカライズ方法に加えて、Androidにもローカライズ対応が可能です。
興味のある方は、以下の記事を参照してください。
こちらは、Androidアプリのローカライズ方法に関する方法を説明しています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?