[iPhone] 多言語対応、Localizationの設定

アプリを他言語で表示するためにはLocalizationの設定が必要です。Localizationはstoryboardを分けてレイアウトを個々に作成したり、レイアウトはそのままで言語のみを変更したりできす。アプリ名の変更も他言語化できます。

English

日本語

Swift 3.1
Xcode 8.3.2

 

Localization

 

Localizationの追加

 
Xcodeの「PROJECT」(TARGETではありません)「Info」に
Use Base Internationalization」がありチェックされていると思います。
 

 
Development Language (Base)はdefaultでEnglishが設定されています。
「+」から追加したい言語を選びます。

 

 
例えば日本語を追加します。
ローカライズするファイルの選択ですが「Main.storyboard」を選択。
 

 
File Typeの設定をしますが、開発方法によって選びます。

  • Interface Builder Storyboard
    • storyboardのレイアウトが異なるものを作りたい場合、英語と日本語での文字幅が異なってレイアウトを変える必要があるなど
  • Localizable Strings:コードで全て記述したい場合はこちら
    • レイアウトは同じで表示言語だけ変えたい場合など


 
この設定は後からでも可能です。レイアウトはstoryboardを使わずコードで記述する場合は適当で大丈夫です。
 
これでEnglisの下に「Japanese」が追加されました。
 

 
プロジェクト内のファイルを見てみると「 ja.lproj 」フォルダーが新しくでき、その中にファイルが2つあるのがわかります。
 

 

 

Localizable.strings

 
Localizable.stringsファイルを作成します。これは翻訳したいKeyワードを登録しておくファイルになります。

例えば、Localizable.strings(Japanese)というファイルに
“hello” = “こんにちは”;
と記述するとダウンロードされた端末が日本語のときに「hello」が「こんにちは」に変換されます。
設定例:

Localizable.strings(Base) key Localizable.strings(Japanese)
“hello” = “Hello”; ←hello→ “hello” = “こんにちは”;

 
作成:
「New」「File…」「New」から「Strings File」というのを探します。
iOSのResourceにあります。検索した方が早いかもしれませんが…
 
 
Localizable.stringsというファイル名にして「Create」します。
ファイル名はLocalizable.stringsにするとdefaultです。カスタム名を設定できますがtable名として呼び出しで指定しないといけません。
 

 
ファルが作成されました。
 

 
このファイルを選択した状態でInspectorを見るとLocalizationの下に「Localize…」というボタンらしきもの?がありますのでクリック
 

 
Baseを選択して「Localize」すると言語が追加されています。
 

 
この「Japanese」にチェックを入れるとLocalizable.stringsの下に新しくLocalizable.string(Japanese)ができます。
 
 

 

NSLocalizedString

 
では、このLocalizable.strings (Japanese)に実際にコードを書いてみましょう。
NSLocalizedStringを使います。

  • key:キーワードです。これを元に翻訳
  • tableName:Localizable.stringsはdefaultのテーブルになります。異なるABC.stringsのようなファイルを作った場合そのテーブル名(ABC)を指定します。
  • bundle:stringsを含めたbundle
  • value:keyに合うものが見つからない場合に表示するもの
  • comment:コメント

defaultは省略可能ですからkeyとcommentだけでも使えます。
 

簡単な例

 
テーブルの設定
Localizable.strings (Base)

 
Localizable.strings (Japanese)

 
ViewController.swft

 
結果Log
Base:

 
Japanese:

 
Xcodeのsimulatorでは言語設定はSchemeから変更できます。(アプリ名以外)
 
「Product」「Scheme」「Edit Scheme」
Run, Option からApplication Languageを変更することにより対応言語を変更できます。
 

 
最初のLocalizeでMain.storyboardの選択で
Localizable Stringsを選択した場合は
Main.strings (Japanese)には何もありません
 

 
ここでMain.storyboard (Base)でLabelを1つ置きます。
 

 
Main.strings (Japanese)を選んで「Localization」からJapaneseのチェックを外してdiskから削除します。
 

 
もう一度「Localization」のJapaneseにチェックを入れると
 
Lableのコードができています。
 

 
ただし、これ以降storyboardでの変更は反映されないので、最終段階でボタン名の変更などの調整で使えます。
 
また、JapaneseのFile TypeをInterface Builder Storyboardに変更し「Convert」すると
 

 
ストーリボードが表示されました。BaseのLabelと同じLabelが見えます
 

こちらも、この後はBase側での変更は反映されませんので注意

 

アプリ名をローカライズ

 
アプリの名前は今までと多少異なります。アプリ名はInfo.plistで設定できますが、これを今まで通りにローカライズするとエラーになります。別のファイルInfoPlist.stringsを作ります。

  • Info.plist:CFBundleDisplayName = “App”を設定
  • InfoPlist.strings:CFBundleDisplayName = “アプリ”を記述

Info.plistを開いてCFBundleDisplayNameを入力し名前「App」を入れます。

次にInfoPlist.stringsを「New」「File…」「New」「Strings File」から作成します。

Licalizationボタンをクリックして「Japanese」でローカライズします。

InfoPlist.stringsに
CFBundleDisplayName = “アプリ”;
記述します。(keyは””がいりません、セミコロンも忘れずに)

これで出来上がりですが、この場合のテストはsimulatorの場合はSchemeは使えません、simulatorの設定から言語を変えます。

 

CollectionViewのLocalize

 
こちらのCollectionViewをローカライズしてみます。

  • Base(English)
    • 名前を英語
    • 名前の背景色を半透明グリーン
    • タイトルとしてラベルをつける
  • 日本語
    • 名前を日本語
    • 名前の背景色を半透明ピンク

Localizable.strings (Base)

 
Localizable.strings (Japanese)

 
名前を変更しますが、CollectionViewなのでCellによって変わるところに NSLocalizedString を使います。
ViewController.swift

 
後は、それぞれのストーリーボード上でラベルの背景色の変更とTopにラベルの追加します
 

Baseのstoryboard


 

Japaneseのstoryboard


 
最終的にこのようになりました。

 
 
References:
Localizing Your App
NSLocalizedString
localizedString


ページのトップへ戻る

シェアする

  • このエントリーをはてなブックマークに追加

フォローする