表示名


表示名は、すべてのアプリケーションが対応すべきMac OS Xユーザ体験の方針です。

表示名とは、ユーザの現在の環境設定を元にして、ファイル、ディレクトリ、アプリケーションのために生成される名前です。

表示名はファイルシステムに変更を加えたり、他のユーザの表示に影響を与えることなく、それぞれのユーザごとに彼らのファイルシステムの見え方をカスタマイズさせます。

Mac OS Xは現在、以下の表示名カスタマイズに対応しています…

  • アプリケーションとディレクトリの名前の各国語化
  • ファイル名拡張子の非表示

アプリケーションとディレクトリの各国語化は、ユーザに対し、彼らがそれまで体験していたであろうものよりも、より徹底した各国語化の体験を与えます。アプリケーションはユーザの現在の言語環境設定に従った、異なる名前を持つことができます。アプリケーションが定義したディレクトリも、ユーザに彼らの母国語でファイルシステムを操作できるようにするために、各国語化することが可能です。Mac OS Xは多数のよく知られたシステムディレクトリの名前を、自動的に各国語化します。

ファイル名拡張子の非表示は、以前のバージョンのオペレーティングシステムの、ファイル名の付け方の慣習に慣れているMacintoshユーザに快適さを提供します。ユーザはそれぞれにファイル名拡張子の表示/非表示を決めることができます。ユーザは各自のやりかたで見ていたとしても、同一のシステムを共有しています。詳細は、「ファイル名拡張子」(39ページ)を参照してください。

表示名の使用方法のガイドライン

表示名はファイルシステム上のファイル、ディレクトリ、アプリケーションの実際の名前と混同されるべきではありません。表示名はファイルシステムの名前を元にしてはいますが、現在のユーザの環境設定を反映して変更されます。たとえば、英語を話すユーザのホームディレクトリにはPicturesディレクトリがあります。もしユーザが優先する言語をドイツ語に変更したら、ディレクトリ名はやはりPicturesのままですが、このディレクトリはFinderではBilderフォルダとして現れます。

あなたは、実際のファイルやディレクトリをファイルシステムで操作するために表示名を使用することはできません。あなたは、あなたのアプリケーションのユーザインタフェースにおいて、表示名を読み取り専用の文字列としてのみ使用します。表示名は常に編集できないコントロールの中か、読み取り専用として扱われるデータを持つコントロールの中に置かれるべきです。たとえば、あなたは書類ウインドウのタイトルバー、読み取り専用文字列入力欄、もしくはメニューの中で表示名を使用することになるでしょう。また一般的には、編集可能な文字列入力欄、特にユーザが文字列を変更し、その変更を保存できる場合には、表示名を使用することはありません。

常に、あなたは表示名の文字列を取得したら、即座に使用する必要があります。表示名は持続性があると考えるべきではありません。つまり、次に呼び出すまでに変更されている可能性があると仮定してください。決して、あなたのアプリケーションの環境設定にファイルの表示名を書いたり、内部的なデータ構造体にその名前を記録したりすべきではありません。もしファイルを参照する必要があれば、代わりに実際のファイル名のコピーを記録しましょう。

Mac OS XはFinderと、その開く、保存ダイアログにおいて表示名を使用しています。もしあなたがGUIベースのアプリケーションを書いているのなら、あなたはユーザが選択したファイルと、あなたのアプリケーション内でユーザが目にする名前との間の不一致を避けるために、表示名に対応すべきです。けれども、もしあなたがコマンドライン アプリケーションを書いているのであれば、表示名を用いるべきではありません。Mac OS XはDarwinおよびClassic環境では表示名に対応していません。これらの環境のアプリケーションは実際のファイルシステム上の名前で操作する必要があります。

あなたのコードで表示名を得る

表示名は表示のみを目的とするため、これらはあなたのアプリケーションのユーザインタフェースでのみ使用すべきです。たとえば、もし開いている書類ウインドウがあれば、あなたはウインドウのタイトルバーに表示名を使用することになるでしょう。また、あなたがファイル名を表示する、あなたのウインドウの他の場所でも、あなたは表示名を使用する必要があります。そして表示名の取得は、常に対応する文字列入力欄やラベルの名前を設定する前に行う、最後の事柄とすべきです。

Carbonアプリケーション開発者は、ファイルに対する表示名を、Launch Servicesから得ることができます。LSCopyDisplayNameForRef および LSCopyDisplayNameForURL関数は、それぞれFSRefとCFURLRef型から表示名を返します。これらの関数についての詳細は、Launch Services Referenceを参照してください。

Cocoaアプリケーション開発者は、NSFileManagerの displayNameAtPath: メソッドを用いてファイルの表示名を得ることができます。

重要:ユーザに、あなたのインタフェース内で表示名を変更できるようにすべきではありません。もし、あなたがファイル名のためのプロンプトをユーザに出す必要があれば、Navigation Services および Cocoa を通じて利用できる、開くダイアログ、保存ダイアログを使用してください。

各国語化されたアプリケーション名を指定する

アプリケーションの表示名は現在のユーザに合わせて各国語化することができます。あなたのアプリケーションの、各国語化されたバージョンの表示名を提供するには、あなたは既存のバンドル各国語化機構を利用します。

アプリケーションバンドルのResourceディレクトリは、複数の.lprojサブディレクトリを格納することができ、そのそれぞれは一つの言語のために各国語化されたリソースを格納しています。これらの言語サブディレクトリにあなたが置くことのできるファイルの一つは、InfoPlist.stringsファイルです。これはいくつかのインフォメーション プロパティ リスト キーに対する各国語化された値を記録しています。

あなたのアプリケーションのために各国語化された名前を指定するには、このファイルにCFBundleDisplayNameキーを含め、そのアプリケーションの各国語化された名前を値に設定します。

表示名のために、Mac OS Xはアプリケーションバンドルに格納されたどの値よりも、ユーザのカスタマイズした名前を優先します。もし、ユーザがアプリケーションの名前を変更したら、その名前はファイルシステムに反映されます。

もしユーザのカスタマイズした名前が、アプリケーションのインフォメーション プロパティ リスト ファイル(Info.plist)のCFBundleDisplayNameキーの値に一致しなかった場合、現在の言語設定に関わらず、システムはユーザのカスタマイズした名前を表示します。

けれども、値が一致した場合、Mac OS Xはアプリケーションに記録された、各国語化された名前を使用します。

注:もしあなたのアプリケーションで各国語化された表示名に対応するのであれば、あなたのインフォメーション プロパティ リストにLSHasLocalizedDisplayNameキーも含める必要があります。このキーを含めることは、各国語されたアプリケーション名の表示に関連する性能を向上させます。

アプリケーションバンドルとその設定についての詳細は、Bundle Programming Guideを参照してください。

各国語化されたディレクトリ名を指定する

もし、あなたのアプリケーションが何らかの独自対応ディレクトリをインストールするのであれば、あなたはこれらのディレクトリの各国語化バージョンを提供することができます。各国語化されたディレクトリ名は、ディレクトリの表示名として現れます。あなたのコードはディレクトリの内容にアクセスする際に、依然として(表示名ではない)本来のディレクトリ名を用いる必要があります。

ディレクトリに対する各国語化された名前の提供をするために、あなたが前もってそのディレクトリの名前を知っている必要はありませんが、あなたが名前を知っているディレクトリに対してのみ各国語化を行うべきではあります。また、どんなユーザ固有のディレクトリに対しても、これを行うべきではありません。

注:各国語化されたディレクトリ名は、Finder環境設定の「すべてのファイル拡張子を表示」のオプションが選択されていないときにのみ現れます。
【試しに Mac OS X v10.4.8 で test.localized/.localized に、
"test" = "てすと";
という内容の ja.strings を置いてログアウト&ログインして各国語化されたフォルダを作ってみたあとで、Finder 環境設定の詳細ペインの「すべてのファイル拡張子を表示」をオンにしてからログアウト&ログインしてみたが、「てすと」というフォルダ名が表示されたままであった。あれれ?】
各国語化された名前は、ユーザが次回ログインするまで現れません。【こちらはその通りだった。】

ディレクトリに対して各国語化された表示名を提供するには、以下を行います…

  1. ディレクトリ名に.localizedの拡張子を加えます。
  2. ターミナル アプリケーションから、そのディレクトリの中に.localizedというサブディレクトリを作成します。
  3. .localizedサブディレクトリの中に、あなたの対応する各国語化に対応した、一つ以上のstringsファイルを置きます。

各stringsファイルはUnicodeのテキストファイルです。ファイルの名前は適切な二文字の言語コードに.stringsの拡張子を続けたものです。たとえば、英語、日本語、ドイツ語で各国語化されたRelease Notesというディレクトリは、以下のディレクトリ構造を持つことになるでしょう。

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

各stringsファイルの中には、各国語化されていないディレクトリ名と各国語化された名前を対応付ける、単一の文字列エントリが含まれます。本来のディレクトリ名を指定する際は、あなたが加えた.localizedの拡張子を含めないでください。たとえば、"Release Notes"という名前に各国語化されたディレクトリ名を対応付けるには、各stringsファイルは以下と同様のエントリを持つことになるでしょう…

"Release Notes" = "Localized name";

stringsファイルを作成するうえでの詳細は、Internationalization Programming Topicsの、"Extracting Localizable Strings From Your Code"を参照してください。

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