アプリケーション名やフォルダ名をローカライズするにはどうしたらいいのか?
(例)Preview.app は日本語環境のファインダで見ると「プレビュー」となる。
Display Names
アプリ名とフォルダ名のローカライズに関しては Mac Dev Center の "Display Names" というドキュメントに記載がある。
Mac Dev Center: File System Overview: Display Names
これによれば MacOSX では下記をサポートしているとのこと。
・アプリケーション名とフォルダ名を多言語化できる
・ファイル名の拡張子を隠せる
以下、ガイドラインのまとめ。
- 実際の名前の他、表示用の名前を用意することができる(これを Display Name / 表示名と呼ぶ)。
- 表示名はプリファレンスの言語設定ごとにつけることができる。(例)Pictures フォルダは、ドイツ語で Bilder、日本語で ピクチャ、と表示される。
- 表示名は読み取り専用の文字列として扱う。変更できるようにすべきではない。
- 表示名は一時的な情報と考え、それをデータとして保存したりすべきではない。必要な場合は実際の名前を使う。
- 表示名はファインダと Open and Save ダイアログで使われる。
- コマンドラインアプリケーションでは表示名を使うべきでない。
表示名(Display Names)の取得の仕方
・Carbonアプリなら LSCopyDisplayNameForURL を使う。
・Cocoaアプリなら -[NSFileManager displayNameAtPath:] を使う。
Mac Dev Center: NSFileManager Class Reference
アプリケーション名のローカライズ
このドキュメントによれば InfoPlist.strings に CFBundleDisplayName を定義すれば良いとのこと。サンプルアプリを作って実際に試してみる。
Xcodeテンプレートでアプリを1つ作る。その中の InfoPlist.strings を選びローカライズする。
まず「情報を見る」を選ぶ。
「ローカリゼーションを追加」で "Japanese" を追加する。
作成された InfoPlist.strings/Japanese の情報を開き、エンコーディングを UTF-16 に変えておく。
InfoPlist.strings/Japanese に CFBundleDisplayName を追加する。
/* Localized versions of Info.plist keys */
CFBundleDisplayName = "表示名サンプル";
ビルドしてファイルを見てみる。が、アプリ名が変わらなかった。
ドキュメントに書かれていた LSHasLocalizedDisplayName を Info.plist へ追加してみる。
Info.plist の Key へ書き込むと変換されて "Application has localized display name" に変わった。
さてビルドしてみよう。
アプリケーション名が変わった。
実行すると Dock上でもちゃんと日本語になっている。
ターミナルでみると DisplayNamesSample.app となっている。
ちなみに InfoPlist.strings/English では次のように設定してある。
/* Localized versions of Info.plist keys */
CFBundleDisplayName = "Sample";
つまり英語だけが特別扱いにならないということ(当たり前か)。
アプリケーションの実体の名前はどこで決まるのか?Info.plist ファイルにありそうだが ${PRODUCT_NAME} としか書かれていない。
実はターゲットのビルド設定にある。
ターゲットの情報を開き、
「パッケージング」の中の「プロダクト名」を探す。
ここにあった。試しに変えてみよう。試しに "Renamed-Product" としてみた。
ビルドすると
変わった。
- - - -
次回はフォルダ名のローカライズを調べる(本当はそっちが最初の目的だった)。