国際化への対応


Mac OS X は、国際化と、各国語化された内容に、さまざまな方法で対応しています。

  • ユーザが優先する言語のセットを指定できるようにします。
  • アプリケーション内に複数言語版のリソースを記録するための仕組みを提供します。
  • 文字列テーブルを生成し、各国語化された文字列にアクセスするための API とツール類を提供します。
  • 実行中であっても、追加の言語をアプリケーションに簡単に追加できるようにします。
  • Xcode を通じて、国際化に対応するプロジェクトを提供します。

この対応の裏には、優先する言語のセットという観念、バンドルの機構、各国語化されたリソース、そして実行時バインディングが存在します。

言語の環境設定

「言語環境」システム環境設定の「言語」ペイン(図 1)は、ユーザに、彼らのコンピュータ環境のための環境設定を基本とする言語を設定させます。

環境設定システム(Runtime Configuration Guidelinesで説明されています)は、順序付けされた言語のリストを、AppleLanguages キーの配下のユーザごとのデフォルトとして記録します。そのため、一つ以上の言語を理解するユーザは、あるアプリケーションが彼の最優先言語への各国語化情報を含まなければ、代わりの選択肢を指定することができます。

図 1 システム環境設定・言語環境モジュールの言語ペイン

バンドルがリソースを要求したとき、バンドルインタフェースは、リソースの各国語化情報が、ユーザの環境設定における言語と地域の設定に最も近く一致するリソースを選択しようとします。

もしユーザの優先言語に向けた各国語化情報が存在しなければ、ユーザの二番目に優先する言語、三番目に優先する言語、といった具合に検索を続行します。

もしバンドルの各国語化情報に、ユーザの環境設定に一致するものがなければ、インタフェースはバンドルの開発中に使用されていた各国語化情報【たぶん CFBundleDevelopmentRegion キーの値】を返します。

注:あなたがどのように言語固有のリソースをバンドル内に記録するかについての詳細は、Core Foundation Documentation の、Bundle Programming Guideを参照してください。 あなたのバンドル各国語化が CFBundle か NSBundle かを識別する方法についての詳細は、「あなたのバンドルで対応している各国語化を明示する」(29ページ)を参照してください。

Core Foundation Bundle Services(CFBundle)は、C 言語ベースのアプリケーションが、必要とする各国語化されたリソースを取得する手助けをします。

Cocoa NSBundle クラスは、同様の機能を Objective-C および Java ベースのアプリケーションのために提供します。

一般的に、あなたのアプリケーションは、どの言語がユーザに優先されているのかを知る必要はありません。CFBundle および NSBundle インタフェースは、現在のユーザに対して最も適切なリソースを自動的に返します。

ロケール環境設定

ロケール【locale】の環境設定は、日付、時刻、数字の表示のされ方の、地域による違いを伝達します。

Mac OS X は、世界の多くの地域のための、あらかじめ定義されたロケールを搭載しています。けれども、ユーザはシステムをさらに個人に合わせるために、これらのデフォルトのロケールにおける情報をカスタマイズすることもできます。

図 2 は、ユーザがロケールの設定をカスタマイズすることのできる、「言語環境」システム環境設定の「書式」ペインを示しています。

図 2 「書式」ペインのロケール情報

ほとんどの場合、あなたのコードはロケールの環境設定を適用することについて心配する必要はないでしょう。ほとんどの API は、ロケールを区別するデータを取得したり、整形する際に、ユーザの環境設定を考慮に入れます。

ですが、それでもあなたがロケール情報を取得する必要のある状況は存在するでしょう。たとえば、あなたが現在のロケールの設定を表示したい場合や、異なるロケールの比較を行う場合や、データの特定の部分に現在のロケールではなくほかのロケールを適用する場合があるかもしれません。

こうした状況において、Core Foundation は、ロケール情報を取得するための CFLocale 不透明【opaque】型を提供します。ロケールについて、そしてロケール関連のデータを得る方法についての詳細は、Core Foundation Internationalization Documentation の、Localesを参照してください。

バンドル

アプリケーションバンドル【application bundle】、またはファイルパッケージ【file package】、もしくはアプリケーションラッパとしても知られるこれは、実行可能ファイルとその関連するリソースを格納したディレクトリです。

アプリケーションバンドルは不透明なディレクトリであり、そのためユーザはこれをファイルのようなものとみなします。アプリケーションバンドルをダブルクリックすることにより、アプリケーションのシステムによる起動が起こります。

Mac OS X は、プラグインやフレームワークといった、その他の種類のバンドルにも対応しています。

プラグインバンドルは、アプリケーションバンドルのようにコードとリソースを格納していますが、ユーザに直接起動されることはありません。

フレームワークバンドルは動的共有ライブラリ【dynamic shared library】と、そのライブラリを補助するためのリソースを格納しています。他の種類のバンドルの多くとは異なり、フレームワークは不透明ディレクトリには記録されません。フレームワークバンドルのディレクトリは、開発者がそのフレームワークに含まれるヘッダファイルやリソースを調査することができるように、開いています。

アプリケーションの内部では、「バンドル」という用語はしばしば NSBundle または CFBundle のインスタンスを表すために用いられます。

あなたはこれらのオブジェクトを、バンドルディレクトリからリソースを取得するために使用します。どちらのオブジェクトも、リソースを探すときにはユーザの言語の環境設定を自動的に考慮に入れます。

バンドルがどのようにリソースを配置するかについての詳細は、Bundle Programming Guideを参照してください。

アプリケーションバンドルの構造

アプリケーションバンドルは、以下に示すものと同様の構造を持ちます…

リスト 1 アプリケーションバンドルの構造

MyApp.app/                              アプリケーションラッパ
    Contents/
        MacOS/
            MyApp                       アプリケーションの実行可能ファイル
        Info.plist
        Resources/                      リソースはすべてここに行きます
            MyApp.icns
            PeaceSign.tiff              各国語化されないリソース
            en.lproj/                   英語向けに各国語化されたリソース
                StopSign.eps            各国語化された画像
                Localizable.strings     動的に表示される文字列
                MyApp.nib               デフォルトプラットフォームの nib
                MyApp Help/             ヘルプファイル
            fr.lproj/                   フランス語向けに各国語化されたりソース
                StopSign.eps
                Localizable.strings
                MyApp.nib
                MyApp Help/             ヘルプファイル
            ja.lproj/                   日本語向けに各国語化されたりソース
...

この構造から見て取れる通り、あなたの国際化されたアプリケーションは、対応する各国語化ごとに一つの .lproj ディレクトリを必要とします。このディレクトリは、それが格納しているリソースの言語バージョンに応じて名前を付けられます。

あなたがこれらのフォルダを手作業で作成したり配置する必要はありません。この作業は Xcode が面倒を見てくれます。

それぞれの .lproj ディレクトリは、初期状態ではあなたのアプリケーションの現地語リソースファイルのコピーを格納しています。

リソースファイル名は、.lproj ディレクトリのそれぞれにおいて一緒でなければいけません。

あなたに各国語化を行う用意があるときは、このリソースファイルを翻訳者に渡して作業してもらってください。次に彼らはファイルの内容を翻訳し、あなたの Xcode プロジェクトに含めるために、翻訳したリソースをあなたに返します。

もしあなたのアプリケーションがユーザに(画像ファイル名や音声ファイル名などの)リソースファイル名を表示するのであれば、あなたはリソースファイル名そのものを .strings ファイル内に記録すべきです。この方法により、あなたはリソースファイルの名前を、その内容と同じく翻訳することができます。

リソースを読み込むには、あなたはまず、対応する .strings ファイルからリソースファイル名を要求します。いったん名前を手にすれば、あなたはいつも通りリソースを読み込むことができます。

.lproj ディレクトリの中のファイルは、以下の種類とすることができます…

  • nib ファイル これらの、Interface Builder アプリケーションで作られたファイルは、ユーザインタフェースオブジェクト、カスタムオブジェクト参照、オブジェクト間接続のエンコード【符号化】されたアーカイブ【書庫】です。

    エンコードされたユーザインタフェースオブジェクトは、静的に表示される文字列、画像、音声を含むことができます。

    nib ファイルは一般的に、Interface Builder を用いて、直接各国語化されます。

    各国語化を行う人は、nib ファイル(もしくは、より一般的には、あなたのアプリケーションの nib ファイルのセット)を手に入れ、ユーザインタフェースの文字列をすべて翻訳し、必要に応じてユーザインタフェースオブジェクトの大きさの変更、文化固有の画像や音声の置き換えといった、その他の調整を行います。

    あなたのアプリケーションを、ウインドウやパネルがそれぞれ独自の nib ファイルに記録されるように設計することはよい考えです。これはあなたのアプリケーションの性能を向上させ【(全部のリソースを一度に読み込まないため。たぶん。)】、各国語化を段階的に進められるようにもします。

  • 画像 Cocoa アプリケーションは、EPS、TIFF、PICT、GIF、JPEG、BMP を使用することができ、また ICO ファイルも、他の対応している画像ファイル形式と同様に使用することができます。また、あなたは QuickTime ムービーも含めることができます。
  • 各国語化されたテキスト文字列 .strings ファイル(デフォルトでは Localizable.strings)は、与えられたロケールに応じて動的に表示される文字列を格納します。詳細は、「strings ファイル」(37ページ)を参照してください。
  • 音声
  • オンラインヘルプ オンラインヘルプファイルは HTML で書かれています。アプリケーションのプロパティリストによって、ユーザが「ヘルプ」コマンドを選択したときに、どのファイルをあなたのアプリケーションが開くべきかを、あなたが指定することができます。

    各国語化されたあなたのヘルプの各版は、対象とする各国語化ごとの適切な .lproj ディレクトリの中に配置してください。

各国語化を行うためには、あなたは元となる言語の .lproj フォルダ(英語圏の開発者の場合は en.lproj)を、各国語化の業者か、あなたの社内の翻訳部署へ送付します。

また、あなたの各国語化の作業担当者が、文脈の中で動的に読み込まれるリソースを見ることができるように、適切な翻訳を保障するために、そして動的に読み込まれるリソースを表示するユーザインタフェース要素について、面積が不足していないことを保障するために、あなたはアプリケーションのコピーを送付することも必要です。

彼らは、各リソースファイルが適切に各国語化された .lproj フォルダを送り返してくることでしょう。

リソースを編集するために用いるツールは、リソースの種類によってさまざまです。

あなたは、.strings ファイルを好きなテキストエディタで編集することができます。できれば、Mac OS X に搭載されるテキストエディット アプリケーションのように、Unicode 形式でテキストを保存できるエディタを使用してください。他のファイル形式が最初に変換を必要とするのに対して、Unicode 形式で保存された strings ファイルは、実行中のアプリケーションで直接使用することができます。

各国語化の担当者は、nib ファイルを Interface Builder を用いて編集することができます。また他のリソース(画像、ヘルプファイル、音声、その他)は、ファイル形式とあなたの要求に対して適切なツールを用いて編集することができます。