ページ

2010年2月6日土曜日

アプリケーション名とフォルダ名のローカライズ(その1)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

アプリケーション名やフォルダ名をローカライズするにはどうしたらいいのか?

(例)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" としてみた。

ビルドすると

変わった。

 - - - -
次回はフォルダ名のローカライズを調べる(本当はそっちが最初の目的だった)。