🐰

Mac appのアプリケーション名のローカライズ

2022/11/03に公開

概要

macOSに標準でインストールされているいくつかのアプリケーションは、Finderで見える表示名が実体のバンドル名ではなく、言語環境に合った名前にローカライズされて表示されます。Mail, Music, Previewなどが代表的です。この資料では、Mac app開発においてこれらのアプリケーションのようなローカライズを行う方法を記します。

基本方針

Mac appの名前はInfo.plistの定義名を対象にローカライズを設定することで、表示名を言語環境にあった表記にすることができます。

Xcodeプロジェクトにはあらかじめローカライズのための言語を追加しておきます。(日本語ならja、など)

次に新規ファイルとして InfoPlist.strings ファイルを追加します。そしてこれに言語ごとのローカライズを設定しておきます。要は次の画像のような状態にしておきます。

Info.plistのローカライズ用文言を記述

ja 前提で話を進めますが他の言語でも基本的には同じです。
Mac appでは2つのフィールド CFBundleNameCFBundleDisplayName を使用します。それぞれの 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” と記述すると良いみたいです。日本語の場合はふりがなで記述してあげると良いのでしょうか……?

(筆者はこれを試していません)

関連資料

脚注
  1. LSHasLocalizedDisplayName の自然表記名は Application has localized display name です。 ↩︎

Discussion