Mac appのアプリケーション名のローカライズ
概要
macOSに標準でインストールされているいくつかのアプリケーションは、Finderで見える表示名が実体のバンドル名ではなく、言語環境に合った名前にローカライズされて表示されます。Mail, Music, Previewなどが代表的です。この資料では、Mac app開発においてこれらのアプリケーションのようなローカライズを行う方法を記します。
基本方針
Mac appの名前はInfo.plistの定義名を対象にローカライズを設定することで、表示名を言語環境にあった表記にすることができます。
Xcodeプロジェクトにはあらかじめローカライズのための言語を追加しておきます。(日本語ならja、など)
次に新規ファイルとして InfoPlist.strings
ファイルを追加します。そしてこれに言語ごとのローカライズを設定しておきます。要は次の画像のような状態にしておきます。
Info.plistのローカライズ用文言を記述
ja 前提で話を進めますが他の言語でも基本的には同じです。
Mac appでは2つのフィールド CFBundleName
と CFBundleDisplayName
を使用します。それぞれの InfoPlist.strings
ファイルに次のように記述します。
// InfoPlist.strings (en)
CFBundleName = "The Awesome App";
CFBundleDisplayName = "The Awesome App";
// InfoPlist.strings (ja)
CFBundleName = "すごいあぷり";
CFBundleDisplayName = "すごいあぷり";
CFBundleName
はメニューバーの表示名や「このAppについて」で表示される名前、Spotlight等で使われます。CFBundleDisplayNameの短縮版という扱いのようで、16文字未満にしなければならないそうです。記述はオプショナルです。
CFBundleDisplayName
はコードから参照できるローカライズ名やSiri、Finderでのアプリケーション表示名で使われます。記述は必須です。
Info.plist に必要なBool値を記述
CFBundleDisplayName
を定義しただけでは、Finderで見えるアプリケーション名はローカライズされません。これには Info.plist に LSHasLocalizedDisplayName
[1] を追加して YES
を指定する必要があります(stringsの方ではありません!)。
LSHasLocalizedDisplayName
=YES
ビルド後の様子
ここまでの設定でビルドすると、次の画像のような具合になります。このアプリケーションの本当のバンドル名は test
ですが、ローカライズを使って違う表記にしています。わかりやすいようにそれぞれのキー名にしてみました。
- メニューバーのApp名…
CFBundleName
- 「このAppについて」内の表示名…
CFBundleName
- FinderやDockの.app名…
CFBundleDisplayName
- Quick Lookの表示名…
CFBundleDisplayName
- Spotlight検索結果での表示名…
CFBundleName
まとめ
macOSアプリケーション名のローカライズに必要なものは次の記述です:
言語ごとに…
-
CFBundleName
…主にメニューバー、Spotlight等、短縮表示用 -
CFBundleDisplayName
…主にFinderでの表示用 -
LSHasLocalizedDisplayName
=YES
…CFBundleDisplayNameを.appの名前に反映する
余談:Spotlight検索用キーワードをローカライズして含める
例として Music.app(日本語名「ミュージック」)の情報ウインドウを見てみましょう。このアプリケーションには「キーワード」として複数の文字列が含まれています。これはSpotlightで検索対象にするためのメタデータで、Info.plist に MDItemKeywords
フィールドを記述しておくと対応できます。
(※iOSアプリでこれをやる場合は、「kMDItemKeywords
」となり、頭に「k」が付きます。)
MDItemKeywords のキーワードももちろんローカライズ可能なので、先ほどと同じく InfoPlist.strings に言語ごとの文字列を書いておくと良いでしょう。これの詳しい説明が書かれている公式資料を見つけられなかったのですが、Music.appに倣うと、スペース文字は使用可能で、区切り文字には,
を使うと良さそうです。
// InfoPlist.strings
MDItemKeywords = "Spotlight, 検索用, キーワード, 祇園精舎の鐘の声、諸行無常の響きあり";
これでビルドすると、Finderの情報ウインドウでキーワードが表示されました。
Spotlight検索もバッチシです。ちなみに CFBundleName
が表示されていますね。
余談:音声読み上げのためのアプリケーション名の発音を含める
CFBundleSpokenName
キーでアプリケーション名の発音を別途定義できます。読み方が複雑あるいは特殊なアプリケーションではこれを使うとよりアクセシブルにすることができます。対応OSはmacOS 10.10以降およびiOS 8以降です。
例えば “MyApp123” という名前のアプリケーションの場合は、この定義に “My app one two three” と記述すると良いみたいです。日本語の場合はふりがなで記述してあげると良いのでしょうか……?
(筆者はこれを試していません)
関連資料
- https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
- https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFileSystem/Articles/DisplayNames.html
-
LSHasLocalizedDisplayName
の自然表記名はApplication has localized display name
です。 ↩︎
Discussion