読者です 読者をやめる 読者になる 読者になる

夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

【iPhoneアプリ】英語アプリをローカライズして日本語対応にする方法

iPhoneアプリ Objective-C

BeeClusterは世界各国でダウンロードされる事を期待してユーザーインターフェースは英語で表示していました、というのは建前で、本当はローカライズするのが面倒だったためです。
最近は日本でのダウンロードすうが圧倒的なので日本語にローカライズしたいと思います。
BeeClusterはcocos2dで開発したのでユーザーインターフェースに表示される文字は全てプログラム内の文字列によるものです。

次の手順でローカライズできました。

1. Localizable.stringsファイルを作る
プロジェクトのSupporting Filesフォルダーを右クリックしてNew Fileを選択する。
f:id:takujidev:20130811003333j:plain
左のリストからiOSのResourceを選び、Strings Fileをクリックし、Nextを押す。
ファイル名のFileの部分をLocalizableに書き換え、Createを押す。
f:id:takujidev:20130811004120j:plain:w360
Supporting FilesのなかにLocalizable.stringsファイルが作られる。
f:id:takujidev:20130811004148j:plain:w360

2. Localizable.stringsファイルを英語、日本語にローカライズする
Localizable.stringsファイルを選択する。
Xcodeの画面右側のペインを出し、Localize...ボタンを押す。
f:id:takujidev:20130811004535j:plain:w360
Localizeボタンを押す。なお、ここではEnglishしか選べません。
f:id:takujidev:20130811004718j:plain:w360
プロジェクト設定画面のInfoタブのLocalizationの下の方の+ボタンを押し、Japanese (ja)を選ぶ。
f:id:takujidev:20130811005613j:plain:w240
Localizabke.stringsを選び、Finishを押す。
f:id:takujidev:20130811005729j:plain:w360
Localizable.stringsフォルダーの下にLocalizable.strings(English), Localizable.string(Japanese)ができている。
f:id:takujidev:20130811010042j:plain:w360

3. Localizable.strings(English)のフォーマットをUTF-16にコンバートする
Localizable.string(English)を選択肢、Xcode右側のペインのText EncodingをUTF-16に変更する。出てくるダイアログでConvertを押す。
f:id:takujidev:20130811010324j:plain

4. Localizable.strings(English)にプログラム内の文字列をガシガシコピペしていく
プログラム内の文字列をコピペしてLocalizable.strings(English)ファイルに次のフォーマットで書き込んで行く。
基本的にはプログラム内で使っている文字列をイコールの両側にそのままコピーすればOKですが、長いもののキー(左側の文字列)は適当に別な名前を付けても問題ありません。(あとからプログラムの方で調整します。)

"PLAY" = "PLAY";
"EASY" = "EASY";
"NORMAL" = "NORMAL";
"HARD" = "HARD";
"hi-score" = "HI-SCORE: %07d";
"tweet" = "BeeCluster - %@ Mode\nMy high score is %d points!\n";
"iTunesURL" = "https://itunes.apple.com/app/beecluster/id663801586?mt=8&ls=1";
"CONGRATULATIONS!" = "CONGRATULATIONS!";
"SCENE %d" = "SCENE %d";
"GAME OVER" = "GAME OVER";
"RETRY?" = "RETRY?";
"YES" = "YES";
"NO" = "NO";
"Your Score" = "Your Score";
"Number of Bees Left" = "Number of Bees Left";
"Your Grade" = "Your Grade";
"Tap to Return to Title" = "Tap to Return to Title";
"Combo x %03d" = "Combo x %03d";
"RESUME" = "RESUME";
"RETRY" = "RETRY";
"TITLE" = "TITLE";
"VOLUME" = "VOLUME";

5. 日本語用Localizable.stringsを準備する
Localizable.strings(English)の内容をLocalizable.srings(Japanese)にコピペする。
なお、2.の手順で日本語用ファイルを作る時点で既に英語版のファイルに内容が書かれている場合はその内容が自動的にコピーされます。

6. Localizable.strings(Japanese)ファイルをガシガシ日本語に翻訳して行く
こうなりました。

"PLAY" = "プレイ";
"EASY" = "イージー";
"NORMAL" = "ノーマル";
"HARD" = "ハード";
"hi-score" = "ハイスコア: %07d";
"tweet" = "BeeClusterの%@モードのハイスコア\n %d点!\n";
"iTunesURL" = "https://itunes.apple.com/jp/app/beecluster/id663801586?mt=8&ls=1";
"CONGRATULATIONS!" = "おめでとう!";
"SCENE %d" = "シーン %d";
"GAME OVER" = "ゲームオーバー";
"RETRY?" = "リトライする?";
"YES" = "はい";
"NO" = "いいえ";
"Your Score" = "点数";
"Number of Bees Left" = "ハチの残数";
"Your Grade" = "階級";
"Tap to Return to Title" = "タイトル画面に戻る";
"Combo x %03d" = "コンボ x %03d";
"RESUME" = "戻る";
"RETRY" = "やり直し";
"TITLE" = "タイトルへ";
"VOLUME" = "ボリューム";

7. プログラムを修正する。
イコールの左右に同じ文字列をコピペした場合は@"文字列"の部分を次のように、NSLocalizedString(@"文字列", nil)に置き換える。必要であればnilの部分に適当なコメントを文字列で入れられます。

label = [CCLabelTTF labelWithString:@"PLAY" fontName:@"arial" fontSize:30.0];

//上の行を次の行のように変更

label = [CCLabelTTF labelWithString:NSLocalizedString(@"PLAY", nil) fontName:@"arial" fontSize:30.0];

上の例で文字列を短くして登録した場合は短い文字列で置き換えます。

[tweetViewController addURL:[NSURL URLWithString:@"https://itunes.apple.com/jp/app/beecluster/id663801586?mt=8&ls=1"]];

は次のようにする。

[tweetViewController addURL:[NSURL URLWithString:NSLocalizedString(@"iTunesURL", nil)]];

以上の作業でBeeClusterは日本語化されました。

タイトル画面
f:id:takujidev:20130811013533j:plain:w360

ポーズメニュー
f:id:takujidev:20130811013556j:plain:w360

Game Center画面
日本語表示となりますが、Game Center内で表示するリーダーボードの名前などのコンテンツの部分ははGame Centerの設定で日本語化します。
f:id:takujidev:20130811013829j:plain:w360