31
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS アプリの多言語化(ローカリゼーション)まとめ(アプリ編)

Last updated at Posted at 2019-04-22

iOS アプリを多言語化する機会があったのでアプリ内での対応をまとめてみました。

アプリ内の文言を言語によって切り替える

辞書ファイルの準備

  • PROJECT の設定 Info タブ内の Localizetions の + ボタンから必要な言語を追加する
  • Localizable.strings ファイルを追加する
  • Localizable.strings を選択し、ウインドウ右の File inspector の Localize… ボタンをクリックして表示を切り替えたい言語にチェックを入れる
  • 先ほど追加した Localizable.strings の下に言語毎のファイルがツリー表示される

Localizable.strings(Base) は端末の言語設定に対応する言語が追加されていない場合に参照されるファイルです。その場合に日本語で表示させたい場合はこの中身も日本語で記述します。

  • 追加された言語毎の Localizable.strings に、参照キーと表示させたいテキストを "キー名" = "テキスト"; の形で追加する
Localizable.strings(Base)
"exampleTextKey" = "テキスト";
Localizable.strings(Japanese)
"exampleTextKey" = "テキスト";
Localizable.strings(English)
"exampleTextKey" = "text";

コード

swift
exampleLabel.text = NSLocalizedString("exampleTextKey", comment: "")

のように書けば端末の言語設定によって切り替えることができますが、この場合は端末の言語設定による切り替えしかできず、端末の言語設定≠アプリの言語設定の場合に対応できません。
また全てに NSLocalizedString(~ を書くのは面倒なので、 後述のように String クラスを拡張して "キー名".localized で参照できるようにするのが見た目もスッキリするのでおすすめです。

swift
exampleLabel.text = "exampleTextKey".localized

String クラスの拡張

端末の言語設定によって切り替える場合

StringExtension.swift
import Foundation

extension String {
  var localized: String {
    return NSLocalizedString(self, comment: "")
  }
}

アプリ内の設定によって切り替える場合

ローカライズのリソースが英語の場合は en.lproj フォルダに格納されることから、下記サンプルコードの lang に相当する文字列は、日本語なら ja 、英語なら en など、ISO 639-1 に準拠している必要があります。不安であればローカライズを追加した時にできるフォルダ名で判断するといいでしょう。

StringExtension.swift
import Foundation

extension String {
  var localized: String {
    let lang = {アプリ内で設定している言語の文字列を取得するコード}
    // lang からリソースのパスを取得して bundle を取得
    guard let path = Bundle.main.path(forResource: lang, ofType: "lproj"),
      let bundle = Bundle(path: path) else {  
        // bundle が取得できなかった場合は端末の言語設定を元に切り替える
        return NSLocalizedString(self, comment: "")
    }
    // 取得した bundle でキーを参照して切り替える
    return NSLocalizedString(self, tableName: nil, bundle: bundle, value: "", comment: "")
  }
}

言語によってプライバシーデータアクセス許可の文言を変更する

  • これは端末の言語設定による変更のみです
  1. InfoPlist.strings ファイルを追加する(すでに存在していれば手順4のみ)
  2. InfoPlist.strings を選択し、ウインドウ右の File inspector の Localize… ボタンをクリック
  3. アプリ名を切り替えたい言語にチェックを入れる
  4. 追加された InfoPlist.strings(言語名) にアクセス許可の種類に対応するキーと文言を追加する
InfoPlist.strings(言語名)
// フォトライブラリへ書き込みのアクセス許可の場合
NSPhotoLibraryAddUsageDescription = "言語名したい言語での文言";

言語によってアイコンのアプリ名表示を切り替える

  • これも端末の言語設定による変更のみです
  1. InfoPlist.strings ファイルを追加する(すでに存在していれば手順4のみ)
  2. InfoPlist.strings を選択し、ウインドウ右の File inspector の Localize… ボタンをクリック
  3. アプリ名を切り替えたい言語にチェックを入れる
  4. 追加された InfoPlist.strings(言語名) に以下を追加する
InfoPlist.strings(言語名)
CFBundleDisplayName = "表示したいアプリ名";
31
33
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
31
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?