Cocoaアプリケーションを地道に日本語化してみる
まずは基本に忠実に、XcodeとInterface Builderのみで日本語ファイルを設定してみた。Minuは超簡易アプリケーションなので、この方法で十分通用する。
Info.plistの日本語化
- InfoPlist.stringsを選択して、コマンド + iで情報ウィンドウを開く。
- 左下の「ローカリゼーションを追加」ボタンを押す。
- プルダウンリストからJapaneseを選択した。
- 追加されたファイルを以下のように編集した。
/* Localized versions of Info.plist keys */ // About Minuで表示される著作権表示 NSHumanReadableCopyright = "© bebe工房, 2008"; // メニューのアプリケーション名になる CFBundleName = "ミニュー"; // Info.plistの「LSHasLocalizedDisplayNameがtrue」の時、利用される // Finder、Dockで表示されるアプリケーション名になる CFBundleDisplayName = "ミニマムメニュー"; // Finderの「情報を見る」で、一般情報 >> バージョンに表示される内容になる CFBundleGetInfoString = "ミニマムメニュー バージョン 0.1, Copyright 2008 bebe工房";
- 「クリーニング」してから「ビルドして進行」すると...日本語の解説が反映された!
.nibファイルの日本語化
- MainMenu.nibを選択して、コマンド + iで情報ウィンドウを開く。
- 左下の「ローカリゼーションを追加」ボタンを押す。
- プルダウンリストからJapaneseを選択した。
- 追加したJapaneseをダブルクリックしてInterface Builderを起動して、MainMenu.nibを以下のように編集した。
- これで唯一のアプリケーションメニューも上記の通り日本語化された!(「クリーニング」してから「ビルドして進行」を忘れずに)
ソースコード中のメッセージ文字列の日本語化
今回のMinuではソースコード中で文字列を扱っていないが、今後のために以下のような状況での日本語化についても調べてみた。
- もし、ソースコード中で以下のように直接文字列を扱ってしまうと、日本語化の夢は断たれてしまうので...
- (void) runTestAlertPanel { int result = NSRunAlertPanel(@"Test", @"This is test.", @"OK", @"Cancel", nil); switch (result) { case NSAlertDefaultReturn: NSLog(@"OK"); break; case NSAlertAlternateReturn: NSLog(@"Cancel"); break; case NSAlertOtherReturn: NSLog(@"Other"); break; default: NSLog(@"Error"); break; } }
- Localizable.stringsファイルを用意して、それを利用する必要がある。
Localizable.stringsファイルの追加
- Resourcesを右クリックして、「追加 >> ファイル...」を選択。
- 「プロジェクト内の空のファイル」を選択して「次へ」ボタン。
- ファイル名を「Localizable.strings」にして「完了」ボタン。
ローカライズ可能に
- 上記で追加された「Localizable.strings」を選択して「コマンド + i」で情報ウィンドウを表示。
- 左下の「ファイルをローカライズ可能にする」ボタンを押す。
- Englishが追加されるので、以下のように編集して保存しておいた。(「"検索キー" = "表示する文字列"」の書式)
// testRunAlertPanel "testTitle" = "Test"; "testMessage" = "This is test."; "testOK" = "OK"; "testCancel" = "Cancel";
Localizable.stringsの利用方法
- 「NSLocalizedString(@"検索キー", @"コメント")」のように指定すると...
- Localizable.stringsから検索キーに対応する文字列を取得することができる。
- コメントは、検索キーを説明する自分用のメモになる。省略したい衝動に駆られるが、ちゃんとnilを指定しておかないとエラーで怒られる。
- (void)runTestAlertPanel { int result = NSRunAlertPanel(NSLocalizedString(@"testTitle", nil), NSLocalizedString(@"testMessage", nil), NSLocalizedString(@"testOK", nil), NSLocalizedString(@"testCancel", nil), nil); ...(中略)... } }
- これで直接文字列を指定した時と同じようにアラートウィンドウが表示される。
Localizable.stringsに日本語ファイルを追加
- Localizable.stringsを選択して「コマンド + i」、情報ウィンドウで「ローカリゼーションの追加」ボタン、Japaneseを追加して以下のように編集した。
// testRunAlertPanel "testTitle" = "テスト"; "testMessage" = "これはテストです。"; "testOK" = "OK"; "testCancel" = "キャンセル";
- 日本語のメッセージが表示された!