パス名を各国語化する


よりよいユーザ体験を提供するために、Mac OS X はシステムとアプリケーションのディレクトリに対して、各国語化された名前を表示するための能力に対応しています。

各国語化されたパス名は、国際的なユーザが情報を見つけることを容易にしますが、そうすることであなたのアプリケーションの邪魔をすることはありません。

この機能の実装は、単にいくつかのディレクトリの名前を、これらがユーザへと表示されるときに、各国語化されたバージョンに置き換えるだけです。ハードディスク上の実際のパス情報が変更されることはありません。

各国語化されたパス名に対応するためには、二通りのやり方があります。初めのものは、これらをあなたのアプリケーションにおいて表示するためのものです。二つ目のものは、あなたのアプリケーションに関連付けられたあらゆるディレクトリの名前を各国語化するためのものです。

以下のセクションでは、各国語化されたパス名を取得するための工程と、あなたのアプリケーションのパス情報を各国語化するための工程を説明します。

あなたのアプリケーションのメニューと内容を各国語化するための詳細は、「あなたの nib ファイルに各国語化の準備を整える」(33ページ)を参照してください。

重要:Mac OS X は、Darwin および Classic 環境においては、項目の各国語化されたパス名を表示しません。

各国語化されたパス名を取得する

あなたは、あなたのアプリケーションにおける各国語化されたパス名を認識し、これらを適切に表示させる必要があります。

各国語化されたパス名は表示専用であり、ファイルシステムへアクセスするためには決して使用すべきではありません。キャッシュやユーザ環境設定を書き込む必要があるときを含めて、あなたのコード内でファイルやディレクトリを用いて作業を行う際には、大部分、実際のパス名を使い続ける必要があるでしょう。

あなたが各国語化されたパス名を使用すべき唯一のときは、あなたが自分のユーザインタフェースを通じてユーザにそのパスを表示したいときです。

Mac OS X は、パスの各国語化された名前を取得するためにいくつかの関数を提供しています。あなたは、常にこれらの関数のいずれかを用いて、パスを表示する直前に、各国語化された名前に変換する必要があります。

すべてのアプリケーションは、各国語化された表示名を取得するために Launch Services のメソッド LSCopyDisplayNameForRef および LSCopyDisplayNameForURL を使用することができます。

また、Cocoa アプリケーションはこの情報を取得するために NSFileManager のメソッド displayNameAtPath: および componentsToDisplayForPath: も使用することができます。

注:これらの関数は、単に各国語化されたパス名を返す以上のことを行います。また、これらは現在のファイルと Finder 設定によっては、呼ばれたときにファイル拡張子を隠すことも行います。 従って、これらは実際のファイルシステムと、Finder によって表示されるファイルシステムとの間の抽象化を提供します。表示名を用いることで、あなたのアプリケーションはこの抽象化を推し進める助けとなります。

あなたのアプリケーション名を各国語化する

もしあなたにバンドル化されたアプリケーションがあれば、あなたのアプリケーションのための各国語化された表示名を指定することができます。

Finder は現在の言語の設定を元にして各国語化されたバンドル名を表示します。その他のアプリケーションも同様にあなたのアプリケーションの各国語化された名前を要求し、それを適切に表示することができます。

注:Mac OS X は、非バンドル形式のアプリケーションに対しては各国語化された名前に対応していません。

あなたは、既存のバンドル各国語化機構を用いて、あなたのアプリケーションの各国語化された名前を指定します。

あなたのアプリケーションバンドルの Resource フォルダは、一つかそれ以上の言語固有リソースディレクトリを格納しています。(バンドルリソースディレクトリについての情報は、Bundle Programming Guideの、"Anatomy of a Modern Bundle"を参照。)

言語固有ディレクトリのそれぞれの中には、各国語化されたプロパティリストキーのリストを持つ InfoPlist.strings ファイルを一つ含めることができます。あなたがこのファイルに含めることのできるキーの一つが CFBundleDisplayName キーであり、ここにあなたのバンドルの各国語化された名前を設定することができます。

いついかなるときにも、Mac OS X はデフォルトの名前や、あなたがバンドルの中で指定した、各国語化された名前よりも、ユーザがカスタマイズした表示名を優先します。

もし、ディスク上のアプリケーション名が、あなたのバンドル表示名の各国語化されていないバージョン―すなわち、あなたの Info.plist ファイル内の CFBundleDisplayName キーに結び付けられた名前―と異なっていたら、システムはユーザが変更を加えたと仮定し、カスタマイズされた名前を返します。

もし後になって、ユーザがアプリケーション名を元の名前に戻したら、システムはあなたのアプリケーションバンドルからの各国語化された値を使用することを再開します。

【蛇足だがまとめると、(要確認)
ファイルシステム上のバンドルディレクトリ名が"TextEdit.app"、
TextEdit.app/Contents/Info.plistのCFBundleDisplayName = "TextEdit"、
TextEdit.app/Contents/Info.plistのLSHasLocalizedDisplayName = "yes"、
TextEdit.app/Contents/Resources/ja.lproj/InfoPlist.stringsのCFBundleDisplayName = "テキストエディット"
という設定の場合、デフォルトの表示名は"TextEdit"、日本語環境での表示名は"テキストエディット"となるが、Finder 上でユーザがアプリケーション名を"てきすとえでぃっと"に変更すると、言語設定に関わらず表示名は"てきすとえでぃっと"となる。はず。 】

重要:もしあなたの各国語化された表示名を表示させたいのであれば、あなたのアプリケーションの Info.plist ファイル内に LSHasLocalizedDisplayName キーを含めて、その値に "yes" を設定しなければいけません。各国語化された表示名情報にアクセスする関数は、情報を取得する前にこのキーの有無をチェックします。

ディレクトリ名を各国語化する

もし、あなたのアプリケーションパッケージが、何らかの独自の補助ディレクトリをインストールするのであれば、あなたはこれらのディレクトリのために各国語化された名前を提供することができます。

ただし、そうすることは必須ではありません。もしあなたのアプリケーションの補助ディレクトリを各国語化したければ、あなたのアプリケーションがあらかじめ知っている名前を持つディレクトリに対してのみ、それを行うべきです。

注:各国語化されたディレクトリ名は、Finder 環境設定において、「常に拡張子を表示する」オプションが無効の場合にのみ現れます。【「ファイルシステム概要」の「表示名」を参照。】各国語化された名前はユーザが次回ログインするまで現れません。

ディレクトリ名を各国語化するためには、ディレクトリ名に .localized 拡張子を加えてください。

このディレクトリの内側に、ターミナル アプリケーションを用いて .localized と呼ばれるサブディレクトリを作成してください。

さらにこのサブディレクトリの内側に、あなたの対応する各国語化に相当する、一つ以上の strings ファイルを置いてください。各 strings ファイルは Unicode のテキストファイルです。ファイルの名前は、適切な二文字の言語コードに .strings 拡張子を続けたものです。

たとえば、英語、日本語、ドイツ語の各国語化情報を持つ、各国語化された Release Notes ディレクトリは、以下のディレクトリ構造を持つことになるでしょう…

Release Notes.localized/
	.localized/
		en.strings
		de.strings
		ja.strings

それぞれの strings ファイル の中には、各国語化されていないディレクトリ名を各国語化された名前に対応付ける、単一の文字列エントリを含めてください。たとえば、"Release Notes"に各国語化されたディレクトリ名を対応付けるためには、各 strings ファイルは下記のものと同じようなエントリを持つことになります…

"Release Notes" = "Localized name";

strings ファイルの作成についての詳細は、「strings ファイルを生成する」(39ページ)

注: /System、/Library といったシステム定義のディレクトリ、そして各ユーザのホームディレクトリ内のデフォルトディレクトリは、ここで説明したものとは異なる各国語化の仕組みを使用します。 これらのディレクトリに関しては、.localized という名前を持つ空ファイルの存在が、システムが各国語化された名前でディレクトリを表示することをもたらします。これらのどのディレクトリからも、.localized ファイルを削除してはいけません。