環境変数によるロケールの管理:Linux Hacks(2/2 ページ)
各種言語をサポートするためにLinuxがロケールをどのように用いるのかを紹介しよう。ロケールを理解しておくことは、英語しか使わない場合でも役に立つことがある。
ロケール名
ロケール名は次の形式で表現される。
language(_territory)(.encoding)(@modifier)
必須になるのは言語(language)コードだけで、例えば、英語を表す言語コードはenfr_FRはフランスにおけるフランス語、fr_CAはカナダにおけるフランス語、en_CAはカナダにおける英語、といった具合である。エンコーディング(encoding)の指定も可能である。英語の場合、ASCIIがデフォルトのエンコーディングになっているが、en_US.UTF-8と指定すればUTF-8エンコーディングによる米国英語になる。通常、言語コードはISO-639-1に定義された2文字のコードの一覧から選択し、国/地域コードはISO-3166-1に定義された2文字のコードから選択する。
修飾子(modifier)として最もよく見かけるのはeuroである。この修飾子は、EUにユーロが導入される前にロケール定義が作られた国のロケールでユーロ通貨を用いる場合に使用される。例えば、es_ES@euroは現在のスペインのロケールであり、es_ESは同じくスペインのユーロ導入前のロケールである。
こうした名前付け規則に従わない特別なロケールも幾つか存在する。Cロケールとしてもよく知られているPOSIXロケールは、伝統的なUNIX環境を設定するもので、ASCIIエンコーディング、POSIX文字クラス、米国英語の日時、数、通貨の書式を用いる。sortやgrepのようなプログラムの使用時にうまく動作しない場合は、いつもと異なるソート順序や文字クラスを指定したロケールを使っていることが原因かもしれない。ロケールをPOSIXにすれば、適切な設定になるはずである。
現在のロケールを調べるには、localeコマンドを引数を与えずに実行する。LANGUAGEを除き、関連する環境変数の値がすべて表示される。また、locale charmapとすると現在のエンコーディング名が表示される。利用可能なロケールを調べるには、locale -aを実行する。利用可能なエンコーディングを調べるには、locale -mとすればよい。
ロケールのインストール
必要なロケールがコンピュータにインストールされていないこともある。その場合は、自分でインストールすることができる。ロケール定義は、locale(5)manページに記された特別な書式に従うASCII形式のプレーンテキストファイルとして保存される。独自のロケール定義を書く方法の説明はほかの記事に譲るが、ディストリビューションのglibcディレクトリ内のlocaledata/localesを探せば多数のロケール定義ファイルが見つかるだろう。ロケール定義ファイルの名前はロケール名と同じで、南アフリカ共和国のズールー語であればzu_ZAとなる。
ロケールファイルのインストールには、localedefを使用する。ズールー語をインストールする場合のコマンドは次のとおり。
localedef -i zu_ZA -f ../charmaps/UTF-8 zu_ZA
最後の引数はロケール名である。ロケール定義ファイル名は、「-i」フラグの後に指定する。「-f」フラグの後には適切な文字セット定義ファイル、多くの場合はUTF-8、を指定する。
今後の展望
2文字のコードでは多数の言語を表現しきれないため、ISO-639-2では3文字のコードも使用されている。同様に、ISO-3166-2に定義された国コードにも3文字のコードが現れている。
もう1つの進展として、Unicode Consortiumが後援するCommon Locale Data Repository(CLDR)プロジェクトがある。オペレーティングシステムおよび開発者ごとに別々の書式でローカライズ情報の編集や保存を行うのは非効率的だとして、このCLDRプロジェクトでは、既にJavaなどのプログラムで使用されているロケール情報を格納するためのXMLベースの新しいクロスプラットフォームな仕組みを開発中である。
Copyright © 2010 OSDN Corporation, All Rights Reserved.