JavaScriptプログラマがSwift iOSアプリを2週間で作って公開してみた〜その20 Internationalization〜


JavaScriptプログラマー(JSer)がSwiftデビューして、ただ作りたいアプリを作ってみたシリーズ第20回目です。

前回はチュートリアルのページの実装についてでした。今回はNSLocalizedStringを使ったラベルの国際化についてです。

TwitStockerは米国などの英語圏のAppStoreに出すために表示ラベルの他言語対応をしています。
以下ではざっと、その対応手順をまとめます。

xcode projectの設定のLocalizationsに言語を追加

まずは、xcodeのprojectを選択して、infoのタブにあるLocalizationsの項目に言語を追加します。

スクリーンショット 2015-03-17 23.29.32

試しに日本語を追加してみましょう。

スクリーンショット 2015-03-17 23.30.34

なにやらrefにしていいか、と聞かれます。作成するとプロジェクトの設定に言語が追加されます。

Localizable.stringsを作成する

既にLocalizable.stringsが既にある場合は、自動的に上記の手順で言語用のファイルが追加されますのでスキップで良いです。
初めてLocalizable.stringsを作るときは右クリックのファイルを作成時にiOS->”Resource”->”Strings File”を選んで作成します。

スクリーンショット 2015-03-17 23.31.43

名前はLocalizable.stringsが一般的なようです。作成するとフォルダーツリーに以下のように表示されると思いますので、選択します。
スクリーンショット 2015-03-17 23.45.09

するとxcodeの右側のプロパティを表示している部分(Identity and Typeの下)にLocalizationというセクションが表示されます。

スクリーンショット 2015-03-17 23.45.17

Localizeボタンを押すと、Baseとサポート言語の選択画面がでます。

スクリーンショット 2015-03-17 23.45.32

例えばBase(多分OSの言語がアプリの対応言語でない場合に読まれるファイル)を選んで作成していましょう。
右側のLocalizationの項目がcheckboxに変わります。以下のように他の言語も選択してみます。

スクリーンショット 2015-03-17 23.45.56

すると同時にフォルダーツリーのファイル構成も各言語ごとに用意されます。
スクリーンショット 2015-03-17 23.46.06

これで各言語ごとのLocalizable.stringsファイルの作成は終わりです。

Localizable.stringsの記述方法

Localizable.stringsは以下のように”{key}” = “{label}”の形式で記述します。

例: Localizable.strings (English)

"common_ok" = "OK";
"common_cancel" = "Cancel";

例: Localizable.strings (Japanese)

"common_ok" = "OK";
"common_cancel" = "キャンセル";

Localizeしたkeyの読み出し

ラベルを定義したら、swiftのコード内で読み出しましょう。
以下のように読み出します。

// これまで"OK"と記述していた部分を以下に置き換える
NSLocalizedString("common_ok", comment: "")

commentという引数はこのラベル自体のコメントです。あとで開発者が何のラベルかをわかりやすくするためのもので、指定しなくても動作に問題はありません。

おまけ: 画像をLocalizeする

前回のチュートリアルのスクリーン画像の部分で少し紹介しましたが、各言語ごとに表示する画像を変更したいときにも実はLocalizable.stringsは使えます。
まずは、画像ファイル名を言語ごとに以下のように記述しておきます。labelに当たる部分の”intro_{n}_{lang}”がイメージファイル名です。

例: Localizable.strings (English)

"tutorial_image_1" = "intro_1_en";
"tutorial_image_2" = "intro_2_en";
"tutorial_image_3" = "intro_3_en";
"tutorial_image_4" = "intro_4_en";

例: Localizable.strings (Japanese)

"tutorial_image_1" = "intro_1_ja";
"tutorial_image_2" = "intro_2_ja";
"tutorial_image_3" = "intro_3_ja";
"tutorial_image_4" = "intro_4_ja";

このように記述しておいた画像ファイルを以下のように読み出せば画像の他言語化も対応です。

// iはloopの中で使われるindex
UIImage(named: NSLocalizedString("tutorial_image_" + String(i + 1), comment: ""))

以上、今回は国際化についてのお話でした。次回は起動時のスクリーンをxibで作るお話です。

TwitStockerのダウンロードはこちらから。
https://itunes.apple.com/en/app/twitstocker/id958798898?l=ja&ls=1&mt=8