言語とロケールの指定


Mac OS X は、言語とロケールの識別のための、既存の標準、そして将来の標準に対応しています。

Mac OS X のすべてのバージョンは、言語とロケールの情報を識別するための、国際標準化機構(ISO)の命名規則に対応しています。

Mac OS X v10.4において、言語を識別するための、将来の"RFC 3066bis"仕様が対応に加えられました。

注:もし、あなたのソフトウェアがバージョン10.4より前のバージョンの Mac OS X において実行するのであれば、あなたは既存の ISO の言語とロケール ID の規則を使い続ける必要があります。"RFC 3066bis"に見られるタグの使用は、10.4より前の Mac OS X のバージョンでは動作しないでしょう。 もしあなたのソフトウェアがバージョン10.4以降でのみ実行するのであれば、そしてあなたがそうすることを選択するのであれば、あなたは"RFC 3066bis"に見られる言語指定タグの新しい規約に適応することができます。

使用可能な規則を用いることで、あなたは異なる言語同士を区別することができ、また単一の言語のさまざまな地域の方言【regional dialects】同士を区別することができます。

以下のセクションでは、あなたのコード内でどのようにこの情報を指定するかを示します。

言語の指定

言語の指定【Language Designations】のために、Mac OS X は ISO 639-1 および ISO 639-2 の双方の規則に対応します。ISO 639-1 仕様は言語を識別するために2文字のコードを用い、Mac OS X において言語を識別するために優先されている方法です。

けれども、ISO 639-1 コードが特定の言語について使用できない場合、あなたは ISO 639-2 仕様 で定義された3文字の指定子【designator】も使用することができます。

表 1 (19ページ)は、一部の言語のための ISO 指定子を一覧にしています。ハワイ語のための ISO 639-1 指定子は存在しないので、あなたは ISO 639-2 指定子を使わなければならない点に注意してください。

表 1 ISO 言語指定子の例

言語 ISO 639-1 ISO 639-2
英語 en eng
フランス語 fr fre
ドイツ語 de ger
日本語 ja jpn
ハワイ語 指定子なし haw

注:ISO 639-1 および ISO 639-2 コードの完全な一覧については、http://lcweb.loc.gov/standards/iso639-2/englangn.htmlに行ってください。

地域の指定

地域の指定【regional designations】のために、Mac OS X は ISO 3166-1 の規則に対応しています。この仕様は特定の国を識別するために、2文字の、大文字始まりのコードを使用します。

言語の指定子と地域の指定子をアンダースコアで連結することにより、あなたは特定の言語と国のためのロケールを識別する指定子を手に入れます。

表 2 (20ページ)は、一部の言語と国のためのロケール指定子を一覧にしています。

表 2 ISO 地域指定子の例

方言 地域指定子
英語(アメリカ【United States】) US
英語(イギリス【Great Britain】) GB
英語(オーストラリア) AU
フランス語(フランス) FR
フランス語(カナダ) CA

注:ISO 3166-1 コードの完全な一覧については、http://www.iso.chに行ってください。

言語とロケールのID

言語 ID【language ID】は、書き言葉(または正しい綴り字【orthography】)を指定し、標準語と、その言語の特定の方言のどちらかを反映することができます。

言語 ID を指定するためには、あなたは言語指定子そのものを使用します。

ある言語の特定の方言を指定するためには、あなたは言語指定子と地域指定子を結合するためにハイフンを使用します。

よって、イギリスで話される英語からは、en-GB という言語 ID が作られ、一方、アメリカで話される英語は、en-US という言語 ID を持つことになるでしょう。

ロケール ID【locale ID】は、与えられた言語が話されている特定の場所を識別します。

ロケール ID を指定するためには、言語指定子と地域指定子を結合するためにアンダースコア文字を使用してください。

イギリスで英語を話す人のためのロケール ID は en_GB であり、一方、アメリカ在住の英語を話す人のためのロケールは en_US です。

ロケール ID と言語 ID はほとんど一緒と思われるかもしれませんが、微妙な違いがあります。言語 ID は、書き言葉と話し言葉だけを識別します。ロケールは地域とそこでの慣習を識別し、より文化的な文脈を持ちます。

言語 ID とロケール ID の間の違いを説明するためには、以下の例を考えてみてください。

イギリス在住のための方言は、 en-GB というコードによって指定されます。この同じ人物のために一般的に用いられるロケールは en_GBです【ハイフンとアンダースコアに注意】。

もし、ロケールを指定する際に、非常に正確を期すのであれば、あなたはロケールコードを en-GB_GB と指定することができます。これは、英語のイギリス方言を話し、イギリス在住の人物を指定します。

もし、この同じ人物がアメリカに移動したら、適切なロケールは、イギリス英語を話すけれど地域設定はアメリカに関連付けられているという人物を識別する、 en-GB_US となるでしょう。

Mac OS X v10.4 において、言語 ID の指定における新興の標準である"RFC 3066bis"が対応に加わりました。ISO 3166-1 の地域コードに加えて、この標準の草案(http://www.inter-locale.com/にて利用可能です)は、3文字から8文字までの長さの範囲を取る、独自【カスタム】タグへの対応が加わりました。独自タグの使用は、特定の地域や国から、方言や筆記情報を分離することを可能にします。

特に中国語の方言において、地域コードは必ずしも正しい方言やスクリプト【筆記形式】を指定するための最良の手段ではありません。

たとえば、伝統的な中国語(繁体字)は台湾で話される【(用いられる)】デフォルトの言語であり、Mac OS X v10.3.9およびそれ以前では、zh_TW というコードで識別されます。けれども、繁体字は香港やマカオでも一般的に話されており、これらの場所において、zh_TW 指定子の意味するところは完全に正確であるとはいえません。

新しい標準は、新しいタグを繁体字(Hant)と簡体字(Hans)に対して定義します。よって、あらゆる国で話される繁体字は、 zh-Hant というコードを使用します。台湾で話される繁体字は、今度は zh-Hant_TW というロケールを使用します。一方、台湾で話される簡体字は、zh-Hans_TW というロケールを使用します。

表 3 (21ページ)は、特定の方言やスクリプトを識別する、その他の独自タグのいくつかを一覧にしています。

表 3 独自言語 ID タグ

言語 ID 説明
az-Arab アラビア文字のアゼルバイジャン語
az-Cyrl キリル文字のアゼルバイジャン語
az-Latn ラテン文字のアゼルバイジャン語
sr-Cyrl キリル文字のセルビア語
sr-Latn ラテン文字のセルビア語
uz-Cyrl キリル文字のウズベク語
uz-Latn ラテン文字のウズベク語
zh-Hans 簡体字の中国語
zh-Hant 繁体字の中国語

重要:Mac OS X v10.4以降においては、あなたが選べば、.lproj ディレクトリ【(各国語化したりソースを入れる場所)】の名前に、従来の zh_TW および zh_CN タグの代わりに、新しい Hant および Hans タグを使用することができます。けれども、あなたは Mac OS X v10.3.9以前ではこれらのタグ(もしくは新規タグのすべて)を使用してはいけません。
もしあなたが古いタグの使用を継続するのであれば、これらのタグをあなたのコード内で使用する前に、与えられた言語またはロケールのタグの正規の形式を取得するために、Core Foundation および Cocoa のルーチンを使用すべきです。
どのようにして正規のタグを取得するかの詳細については、「正規の言語 ID とロケール ID を取得する」(30ページ)を参照してください。

言語固有のプロジェクトディレクトリ

あなたが作成する各国語化されたリソースを一般的にすればするほど、あなたが単一セットのリソースで対応することのできる地域が増えていきます。このことは、あなたのバンドル内の多くの空間を節約することができ、翻訳コストの縮小に役立ちます。

たとえば、英語の地域間の区別をする必要がなければ、あなたはアメリカ、イギリス、オーストラリアのユーザに対応するために唯一つの en.lproj ディレクトリを含めるだけで済みます。もちろん、地域固有版のリソース上に重ねて共通リソースを使用するという決定を下すのも、完全にあなたの製品とあなたのユーザの要求次第です。

重要:もしあなたが地域固有の各国語化に対応していたとしても、地域固有ではない共通リソースの完全なセットを常に提供すべきです。

リソースを検索するとき、システムのバンドルルーチンはあなたのバンドル内の .lproj ディレクトリと、ユーザの言語と地域の環境設定との間で最適な一致を見つけようと試みます。

バンドルルーチンは最初に地域固有のディレクトリで要求されたリソースを探し、次により一般的な言語ディレクトリを探します。従って、もしあなたがアメリカ、イギリス、オーストラリアのユーザへ向けた各国語化を行っていれば、バンドルルーチンはまず適切な地域のディレクトリ(en_US.lproj、en_GB.lproj、en_AU.lproj)を検索し、次に en.lproj ディレクトリを探すでしょう。

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

指定子から言語名を取得する

Mac OS X v10.4 よりも以前においては、ISO の言語と地域の指定子【designators】が、システムにおいて言語を識別するために推奨されている方法です。

けれども、ISO 指定子で言語を認識できるユーザはわずかです。もし、ユーザに対して言語の実際の名前を表示する必要があれば、指定子を各国語化された言語名に変換するために、MacLocales.h 内で定義された Carbon 関数を使用することができます。

詳細はLocale Utilities Referenceを参照してください。

もしあなたのソフトウェアが Mac OS X v10.4以降で実行するのであれば、MacLocales.h の関数は使用すべきではありません。代わりに、言語またはロケール ID の正しい表示名を取得するために、CFLocaleCopyDisplayNameForPropertyValue 関数を使用してください。

独自の指定子を使用する

CFBundle や NSBundle に知られていない言語やロケールの省略名が使用される可能性があります。たとえば、あなたはまだISOの規則に挙げられていない言語のための言語指定子を独自に作成することができます。ですが、独自の指定子の使用はお勧めしません。

もしあなたが新規の指定子を作成することを選ぶのであれば、"RFC 3066bis"のセクション2.2.1および4.5に見られる規定に、確実に従ってください。これらの規則に従わないタグは、動作が保障されません。

独自のタグを使用するときは、ユーザの言語の環境設定によって記録された省略名が、あなたの .lproj ディレクトリによって使用される指定子と正確に一致するということを保障しなければいけません。

旧来の言語指定子

ISO 言語指定子に加えて、Mac OS X の以前のバージョンは、旧来の指定子のセットにも対応していました。これらの指定子は、2〜3文字のコードの代わりに、名前を用いて言語をあなたに指定させます。指定子は English、French、German、Japanese、Chinese、Spanish、Italian、Swedish、Portuguese、およびその他の名前を含んでいました。

これらの名前は今でも CFBundle および NSBundle に識別され、処理されますが、これらの使用は非推奨【deprecated】であり、Mac OS X の将来のバージョンでの対応は保障されていません。

「言語の指定」(19ページ)および「地域の指定」(20ページ)で説明されているコードを使用して下さい。