あひる裁縫店

好きなこと、技術のこと、くだらないこと

iOS編、Localizable.stringsでテキスト管理

「多言語化?しないと思うけど・・・」ならやっておこう!


最近、初めて作ったiOSアプリを英語に対応させました。
リリースしてみると、実は海外の方が需要があるようで、それではと途中から対応となりました。

しかし、最初はそんなことを考えずに作っていたため、

「あれ、どこに文章あったっけ・・」
「そうか、変わったらボタンのタイトルが変わるから・・・あれ、アラートはやったっけ・・・」

と、まあなかなかの手間とミスと時間がかかってしまったため、最初からそれを見越しつつ、管理していた方がいいよ!ということで、

簡単に、「とりあえず」テキスト管理をしよう!というメモです。




今回はiOS

Xcode9.0
Swift4.0

テキストの管理が目標ですが、わかりやすく、

・日本語の場合
・日本語以外の場合

を想定して、Strings Fileを触っていきます。


まずは、info.plistの辺りに、新しいファイルを作ります。

「Strings File」を選択します。

f:id:pg_0212:20171105174840p:plain


ファイル名は、必ず「Localizable」とします。

f:id:pg_0212:20171105175225p:plain


その後、できたLocalizable.stringsのユーティリティエリア内のLocalize... というボタンをクリックします。

f:id:pg_0212:20171105230728p:plain

ちゃんと作成されたようです。


次は、対応言語に日本語を増やしましょう。
PROJECT -> Info -> Localizations に日本語を追加します。

プラスボタンから、対応したい言語を探して追加します。

f:id:pg_0212:20171105182640p:plain

Japaneseを追加します。


その際に、

f:id:pg_0212:20171105223822p:plain

Main.storyboard
LaunchScreen.storyboard
Localizable.strings

の3つがありますが、Localizable.stringsにのみチェックを入れます。
storyboard上でも多言語化はできます。が、今回はstoryboardは使わないので、チェックをはずしておきます。

その後、EnglishをLocalizationsから削除します。


Localizable.stringsに戻ると、このようにEnglishが消え、Japaneseが追加されていることがわかります。

f:id:pg_0212:20171105231301p:plain



次は、Localizable.stringsはどの言語に対応させるか、決めましょう。

Baseを指定すると、作った言語以外の場合表示するファイルとなり(今回の場合は、日本語以外)、

Japaneseなどの言語を指定すると、指定した言語(Japaneseの場合、端末を日本語に選択していると)の場合、そこで指定した文字を表示します。



先ほど作ったファイルは、日本語に対応したファイルとしましょう。

同様に、Baseも作ろうと思います。
Japaneseのみ選択されていたところを、Baseも選択します。

f:id:pg_0212:20171105221558p:plain

すると、BaseとJapaneseのLocalizable.stringsファイルができます。

f:id:pg_0212:20171105221636p:plain


これでファイルの準備は完了です。


※BaseのLocalizable.stringsを見ると、Japanがチェックされていますが問題ありません(わかりずらい・・・)




実際に使っていきましょう。


今回は、Labelにテキストを表示させます。

まずは、Localizable.stringsに使用するテキストを追加します。
両方に書くのを忘れないように!

//Localizable.strings(Base)

//キー = 文言
"hello" = "Hello";
//Localizable.strings(Japanese)

//キー = 文言
"hello" = "こんにちは";

使用するときは、以下のようにします。

    override func viewDidLoad() {
        super.viewDidLoad()
        
        testLabel.text = NSLocalizedString("hello", comment: "hello")
        
    }

commentは、なくても問題はないですが、とりあえずキーと同じにしておきます。
まだ有効的に使えていないので、わかりしだい追記します。


さて、これだけです!

シュミレーターで確認して見ます。



まずは、端末の言語が日本語の場合。

f:id:pg_0212:20171105222012p:plain


端末の言語が日本語以外の場合。

f:id:pg_0212:20171105222142p:plain



きちんと端末の言語によって、変わっているのを確認できました!


今回は、日本語とその他と分けて見ましたが、
最初にプロジェクトを作る際に、Localizable.stringsを作っておけば管理も楽です。こうして作っておけば、内容を変更したいとき、修正したいときなど、一箇所にかいておけばミスも減ります。


少しの手間ですが、後々の事を考えれば楽です。


次回はAndroidも書いていこうと思います。