C    国際化機能の使用

この付録では,Tru64 UNIX オペレーティング・システムの国際化機能について説明します。 これらの機能により,ユーザは,それぞれの言語,習慣,地域 (ロケール) に応じた方法で,データを処理したり,システムと対話することができます。

この付録を読み終えると,次のことができるようになります。

ユーザ・サイトが米国内にあり,アメリカ英語とその表記規約を使用する場合は,システムの省略時の設定がアメリカ英語であるため,ロケールを設定する必要はありません。

ユーザ・サイトが米国外の場合は,多くの場合,システム管理者がロケールを設定しています。 ロケールがすでに設定されている場合には,この付録にざっと目を通して国際化機能の概要について学ぶだけでかまいません。 しかし,ロケールが設定されていない場合には,この付録の情報は非常に重要ですので,必ず目を通してください。

C.1    ロケール

Tru64 UNIX は国際化されたオペレーティング・システムなので,さまざまな方法で情報を表示することができます。 ロケールを指定することにより,言語,国,文化習慣に適した方法で情報を処理したり表示するように,オペレーティング・システムに指示することができます。 ロケールの指定方法については,C.4 節を参照してください。

ロケールは一般に,言語,テリトリ,コード・セットという 3 つの要素から構成されます。 3 つとも,情報の処理および表示方法を指定する上で重要な要素です。

ここで,コード・セットについて簡単に説明します。

UNIX システムでは従来から,ASCII コード・セットを使用してアメリカ英語を表記しています。 アルファベット (A から Z,a から z) の各英字,数字,制御文字,および記号を,標準バイト 8 ビット中の 7 ビットによって一意に表現します。 しかしながら,新しいコード・セットの追加,または従来のコード・セットの拡張により,英語以外の文字のサポートが必要になりました。 大半のプログラムは ASCII に依存しているため,一般に使用されるコード・セットはすべて ASCII から始まり,そこから作成されていきます。

標準バイトの 8 ビットすべてを使用すると,1 つのコード・セットで多数のアルファベット使用言語をサポートすることができます。 最も普及しているコード・セットは,ISO 8859 と呼ばれる一連のコード・セットです。 最初のコード・セットは ISO 8859/1,2 番目は ISO 8859/2 と続き,ISO 8859/10 まであります。 ISO 8859/1 コード・セットは,一般に Latin-1 (ラテン 1) と呼ばれ,英語およびその他の西ヨーロッパの言語をサポートしています。

中国語や日本語などのアジアの言語の表意文字をすべてサポートするには,文字のコード化に 2 バイト以上を必要とします。 複数バイトの文字コード化を使用する数多くのコード・セットがアジアの言語に対して開発されていますが,複数バイトの文字コード化は一連の ISO 8859 コード・セットではサポートされていません。

Unicode および ISO/IEC 10646 標準では, アジア圏の言語を含めすべての言語に関して同じルールで文字を処理することができるユニバーサル文字セット (UCS) を定義しています。 32 ビット値をベースにした UCS-4 エンコーディング・フォーマットは,ほとんどすべての言語をサポートし,UNIX システムに加えて Windows NT でも使用されているため,各ロケール用のコード・セットとして注目されまじめています。

C.2    ロケールがデータの処理と表示に与える影響

これまで説明したように,情報がどのように処理されて表示されるかは,システムで指定されているロケールによって決まります。 ロケールは特に次の点に関してソフトウェアの動作に影響を与えます。

次の各項で,上記のそれぞれ関して詳しく説明します。

C.2.1    照合

照合とは,一連の要素を特定の順序に整列させる処理です。 照合は必ず,各種のルールに従います。 英語では使用されない照合のルールを必要とする言語もいくつかあります。

注意

(A から Z,a から z) の範囲にアルファベットのすべての文字が含まれるとは限りません。 たとえば,デンマーク語ではアルファベットの z の後にソートされる文字が 3 文字あります。

C.2.2    日付/時刻フォーマット

世界中のそれぞれの国では,それぞれ異なるフォーマット規約によって日付と時刻を表現します。 日付と月を指定する場合,アメリカでは一般に次のフォーマットで表現します。

Tuesday, May 22, 1996
 

一方,フランスでは次のようなフォーマットを使用します。

mardi, 22 mai 1996
 

次の例は,1996 年 3 月 20 日を表すために使用するフォーマットです。 各フォーマットは必ずしもその国で唯一の表記方法というわけではありません。

日本の年号を使用したフォーマットでは,年 (上の例では 8) は現在の天皇が即位してからの年数です。

日付と同じように,時刻を表現する規約も数多くあります。 アメリカでは a.m. と p.m. を指定して 12 時制で表しますが,他の多くの国では,24 時制で表します。

12 時制/24 時制表示の違いだけでなく,句読点の使い方も異なります。 たとえば,次のような表記方法があります。

利用可能な日付/時刻フォーマットとその使用方法については, date(1) リファレンス・ページを参照してください。

C.2.3    数字と通貨のフォーマット

数字や通貨の値をフォーマットするために使用する文字は,国によって異なります。 アメリカでは,小数点 (整数と小数を区切る文字) としてピリオド (.) を使用し,千の位を表す区切り文字としてコンマ (,) を使います。 ヨーロッパのほとんどの国々では,この逆です。 次に,数字のフォーマットの例を示します。

次に,通貨フォーマットの例を示します。

また,通貨単位では 3 桁以上の小数桁が必要なこともあります。

C.2.4    メッセージ

プログラムには英語で書かれたメッセージが埋め込まれていることがあります。 国際化されたプログラムでは,メッセージはプログラムとは別のファイルに収められ,プログラム内でメッセージ・システムへの呼び出しが行われてメッセージが表示されます。 別のファイルに収められたメッセージを翻訳することにより,プログラムに翻訳メッセージを表示させることができるようになります。 翻訳済みのメッセージが利用できる場合には,ユーザはそれぞれの国の言語でシステムと対話することができます。

C.2.5    Yes/No プロンプト

多くのプログラムは,肯定または否定で応答する質問を行います。 このようなプログラムでは通常,英語文字列の y または yesn または no を入力します。 国際化されたプログラムでは,それぞれの言語に対応した文字や単語を入力することができます。 たとえば,フランス語では,o または oui が入力できるようにします。

C.3    ロケールが設定されているかどうかの判断

システムが自国の言語や規約に従って動作している場合は,ロケールが正しく設定されていると考えることができます。

ロケールが正しく設定されているかどうかわからない場合には,次のように locale コマンドを入力して,ロケール環境変数の現在の設定を表示させます。

% locale
LANG=fr_FR.ISO8859-1
LC_COLLATE="fr_FR.ISO8859-1"
LC_CTYPE="fr_FR.ISO8859-1"
LC_MONETARY="fr_FR.ISO8859-1"
LC_NUMERIC="fr_FR.ISO8859-1"
LC_TIME="fr_FR.ISO8859-1"
LC_MESSAGES="fr_FR.ISO8859-1"
LC_ALL=
 

ロケール環境変数 (C.4.1 項を参照) は,メッセージ,照合,コード・セット,数字フォーマット,通貨フォーマット,日付/時刻フォーマット,yes/no プロンプトなどに使用するロケール名を定義します。

LANG
LC_COLLATE
LC_CTYPE
LC_NUMERIC
LC_MONETARY
LC_TIME
LC_MESSAGES
LC_ALL

LANG 変数だけにロケールが設定されている場合は,LANG の設定が,LC_COLLATELC_CTYPELC_NUMERICLC_MONETARYLC_TIME および LC_MESSAGES の各ロケール・カテゴリ変数に省略時の値として設定されます。 この場合,ロケール・カテゴリ変数に LANG の値とは別の値を設定することも可能です。 LC_ALL 変数が設定されている場合は,その他のすべてのロケール変数の設定が無視されます。

C.4    ロケールの設定

ロケールを指定する場合には,言語,テリトリ,およびコード・セットを示すロケール名を指定します。 Tru64 UNIX オペレーティング・システムでは,ロケール名は次のフォーマットに従います。

lang_terr.codeset

各変数は,次のとおりです。

lang

言語名を 2 文字の小文字に省略したもの。 省略形は,『ISO 639 Code for the Representation of Names of Languages』に指定されている。 たとえば,en (English),fr (French),de (ドイツ語の Deutsch),ja (Japanese)。

terr

テリトリ名を2文字の大文字で省略したもの。 省略形は『ISO 3116 Code for the Representation of Names of Countries』に指定されている。 たとえば, US (United States),NL (the Netherlands), FR (France),DE (ドイツ語の Deutschland), JP (Japan)。

codeset

コード・セットを識別する文字列。 たとえば,ISO8859-1 (ISO 8859/1),SJIS (Shift Japanese Industrial Standard),AJEC (Advanced Japanese EUC)。

完全なロケール名は,en_US.ISO8859-1 (英語,アメリカ向けの統合規約),fr_FR.ISO8859-1 (フランス語,フランス向けの統合規約),de_DE.ISO8859-1 (ドイツ語,ドイツ向けの統合規約) などのようになります。

ロケールは,各ユーザまたはシステム管理者のどちらでも設定することができます。 システム管理者がサイトのロケールを設定した場合には,そのシステムだけでなく,サイト内の全システムに対して省略時のロケールがすでに指定されていると考えられます。 必要であれば,ユーザは省略時の指定を変更することができます。

ロケールを設定するには,1 つまたは複数の環境変数にロケール名を割り当てます。 LANG 環境変数は,ロケールのすべての要素 (コード・セット,照合順序,数字,通貨,および日付/時刻フォーマット,メッセージなど) をカバーするので,この変数にロケール名を割り当てるのが最も簡単な設定方法です。

表 C-1 は,単一バイトのヨーロッパ向けロケールのサブセットをインストールした場合に使用できるロケールの一覧です。 他の言語用のソフトウェア・サブセットがインストールされている場合には,利用できるロケールが異なることがあります。 使用できるロケールについては, l10n_intro(5) リファレンス・ページを参照してください。

表 C-1:  ロケール名

言語 コード・セット ロケール名
- - ASCII C
- - ASCII POSIX
デンマーク語 デンマーク Latin-1 da_DK.ISO8859-1
ドイツ語 スイス Latin-1 de_CH.ISO8859-1
ドイツ語 ドイツ Latin-1 de_DE.ISO8859-1
ギリシャ語 ギリシャ Latin-7 el_GR.ISO8859-7
英語 イギリス Latin-1 en_GB.ISO8859-1
英語 アメリカ Latin-1 en_US.ISO8859-1
スペイン語 スペイン Latin-1 es_ES.ISO8859-1
フィンランド語 フィンランド Latin-1 fi_FI.ISO8859-1
フランス語 ベルギー Latin-1 fr_BE.ISO8859-1
フランス語 カナダ Latin-1 fr_CA.ISO8859-1
フランス語 スイス Latin-1 fr_CH.ISO8859-1
フランス語 フランス Latin-1 fr_FR.ISO8859-1
イタリア語 イタリア Latin-1 it_IT.ISO8859-1
オランダ語 ベルギー Latin-1 nl_BE.ISO8859-1
オランダ語 オランダ Latin-1 nl_NL.ISO8859-1
ノルウェー語 ノルウェー Latin-1 no_NO.ISO8859-1
ポルトガル語 ポルトガル Latin-1 pt_PT.ISO8859-1
スウェーデン語 スウェーデン Latin-1 sv_SE.ISO8859-1
トルコ語 トルコ Latin-9 tr_TR.ISO8859-9

C ロケールは,システムにロケールが設定されていない場合の省略時の設定です。 POSIX ロケールは C ロケールと同等であり, POSIX ロケールと C ロケールに対して指定されている ASCII コード・セットには,英語のアルファベットの文字だけが含まれます。

C.4.1    ロケール・カテゴリ

表 C-2 に,ロケール関数に影響を及ぼす環境変数を示しています。

表 C-2:  ロケール関数に影響を及ぼす環境変数

環境変数 説明
LC_COLLATE 文字列のソート,およびパターン内の文字範囲の決定に使用する照合順序を指定する。
LC_CTYPE 文字分類 (コード・セット) 情報を指定する。
LC_MONETARY 通貨フォーマットを指定する。
LC_NUMERIC 数字フォーマットを指定する。
LC_MESSAGES 翻訳版が利用できる場合に,システム・メッセージを表示する言語を指定する。 さらに,この変数は肯定/否定プロンプトに使用する文字列も指定する。
LC_TIME 日付/時刻フォーマットを指定する。
LC_ALL 前述のすべての変数および LANG 環境変数の指定を変更する。

LANG 変数と同様,表 C-2 に示しているすべての環境変数にはロケール名を代入することができます。 たとえば,会社は米国にあるが,従業員の多くはスペイン語を使用しているとします。 この場合には,LANG 環境変数をスペイン語のロケール名に設定し,LC_NUMERIC および LC_MONETARY 変数をアメリカ英語のロケール名に設定することができます。 明示的に LC_NUMERIC および LC_MONETARY 変数を設定すると,LANG によって暗黙に設定される指定を変更します。 ただし,LC_CTYPELC_MESSAGESLC_TIMELC_COLLATE 変数は,スペイン語ロケールに設定されたままです。 C シェルの場合,上記のように設定するには,次の変数を割り当ててください。

setenv LANG es_ES.ISO8859-1
setenv LC_NUMERIC en_US.ISO8859-1
setenv LC_MONETARY en_US.ISO8859-1
 

Bourne,Korn,および POSIX シェルの場合には,次のように割り当てます。

LANG=es_ES.ISO8859-1
export LANG
LC_NUMERIC=en_US.ISO8859-1
export LC_NUMERIC
LC_MONETARY=en_US.ISO8859-1
export LC_MONETARY
 

特定の言語やソフトウェア・アプリケーションの要求を満たすために,同じロケールの異なるバージョンがローカルに用意されていることがあります。 このようなロケール名には後ろにアットマーク (@) と修飾子フィールドが付いています。 たとえば,電話帳で使用する照合順序が辞書で使用する照合順序と異なる言語があります。 ある言語の標準的なロケールが辞書の照合順序を定義している場合には,そのロケールにもう 1 つのバージョンを用意して,電話帳の照合順序をサポートします。 この場合,ロケールの代替バージョンの名前は,en_RF.ISO8859-1@phone のようになります。

C.4.2    ロケール設定の制約

ロケールを設定すれば環境を調整することができますが,間違って設定してしまうことがないとはいえません。 以降の項で,ロケール変数を定義する場合に起こる可能性がある問題点について説明します。

C.4.2.1    ロケール設定が有効でない

ロケールの種々のアスペクトに対して,ありそうもないロケール名の組み合わせを定義してしまうことがありますが,これを防止する方法はありません。 たとえば,LANG 環境変数をフランス語のロケールに設定し,LC_CTYPE 変数をノルウェイ語のロケールに設定したとします。 おそらく望ましくない結果が生じてしまうでしょう。 フランス語に訳されたメッセージには,ノルウェイ語で指定されていない文字が含まれています。 LANG の他にロケール変数を定義した場合には,ユーザの責任においてロケール設定の組み合わせが有効であることを確認しなければなりません。

C.4.2.2    ファイル・データがロケールに対応していない

ファイルの作成時に設定されていたロケールをシステムが識別する方法はありません。 したがって,システムでは,異なるロケールを使用したファイルのデータ処理を防ぐことはできません。 たとえば,LANG 変数がドイツ語のロケールに設定されていたときに作成されたファイルを自分のシステムにコピーしたとします。 自分のシステムで LANG がフランス語のロケールに設定されている場合に, そのファイルに対し grep コマンドを使用して文字列を検索しようとすると,grep コマンドはフランス語の照合およびパターン照合規則をドイツ語のデータに適用することになります。 ファイルに入っているデータの言語を調べ,それに合わせてロケールを設定するのはユーザの責任です。

C.4.2.3    LC_ALL の設定は他のロケール変数を上書きする

LC_ALL 変数に指定した値は,その後に LC_COLLATE など,そのカテゴリだけに作用する変数を設定しても,すべてのロケール環境変数の値として使用されます。 LC_ALL の影響を取り消す唯一の方法は,unsetenv LC_ALL コマンドを入力することによって,この変数の定義を解除することです。

LC_ALL 変数は System V 環境に慣れているユーザのための変数です。 System V 環境では LC_ALL を設定するかもしくは個々のすべてのロケール・カテゴリ変数を設定して,ロケールの設定を行います。