検索
特集

環境変数によるロケールの管理Linux Hacks(2/2 ページ)

各種言語をサポートするためにLinuxがロケールをどのように用いるのかを紹介しよう。ロケールを理解しておくことは、英語しか使わない場合でも役に立つことがある。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
SourceForge.JP Magazine
前のページへ |       

ロケール名

 ロケール名は次の形式で表現される。

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ベースの新しいクロスプラットフォームな仕組みを開発中である。

関連キーワード

Linux | ローカライズ | Linux Hacks


前のページへ |       

Copyright © 2010 OSDN Corporation, All Rights Reserved.

ページトップに戻る