ローカライゼーション

ローカライゼーション とはプログラムが 特定の地域に応じた動作をするように作ることを言います。あるプログラムが 数値や日付を特定の地域に応じて書式化して出力したり、その地域の言語でメッ セージを出力したり(あるいはそのような入力を受け入れたり)できるのであれ ば、そのプログラムはローカライズされている と言 われます。この節では Subversion のローカライゼーションに向けた取り組み について説明します。

ロケールの理解

最近のほとんどのオペレーティングシステムは 「現在のロケール値」 という考え方を採り入れています — つまり、その時点で考慮されている ローカリゼーションの規約が、どの地域や国に対応しているかという値です。 このような規約は— 普通はコンピュータの実行時の設定のしくみを 通じて選択されるものですが — プログラムがデータをユーザに対して 出力する時や、ユーザからの入力を受け付けるときの動作に影響を与えます。

Unix 風のシステムではlocaleコマンドを実行して ロケール関連の実行時設定オプションの値をチェックすることができます:

$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL="C"

出力されているのはロケール関連の環境変数とその現在値です。この例では変 数はすべてデフォルトのCロケールになっています。ユー ザはこれらの変数を特定の国/言語コードの組合せに変更することができます。 例えば LC_TIME変数の値をfr_CA に すると、プログラムはフランス語を話すカナダ人に対する書式で時刻と日付を 表示するようになります。あるいは LC_MESSAGES変数を zh_TWに設定すれば、プログラムは人が読むためのメッセー ジ中国語で表示するようになります。 LC_ALL変数を設定 すると全てのロケール変数の値が同じ値になります。 LANG の値はどのロケール変数も設定されていない場合の デフォルト値になります。Unix システムで可能なロケールの一覧は locale -aを実行するとわかります。

Windows ではロケールの設定はコントロールパネルの「地域と言語のオ プション」を通じて設定することができます。その画面で利用できるロ ケール値がそれぞれどのようになっているかを確認し、選択することができ、 (かなり特殊なケースだと思いますが)表示形式の規約をさまざまにカスタマイ ズすることすらできます。

Subversion でのロケール

Subversion クライアントである svnは、ふたつの場面で 現在のロケール値を正しく扱います。まず、LC_MESSAGES 変数の値を見て全てのメッセージを特定の言語で表示しようとします。たとえ ば:

$ export LC_MESSAGES=de_DE
$ svn help cat
cat: Gibt den Inhalt der angegebenen Dateien oder URLs aus.
Aufruf: cat ZIEL[@REV]...
…

この動作は Unix でも Windows でも同じです。しかし、あなたのオペレーティ ングシステムが特定のロケールをサポートしているとしても Subversion クラ イアントがその特定の言語をしゃべることができるとは限りません。ローカラ イズされたメッセージを出力するにはボランティアによる言語ごとの翻訳が必 要になります。翻訳は GNU gettext パッケージを利用しているので、 .mo というファイル拡張子をもった翻訳モジュールが 結果として必要になります。たとえば、ドイツ語の翻訳ファイルは de.moになる、といった具合です。このような翻訳ファ イルはあなたのシステムの、ある特定の場所にインストールされます。Unix であれば普通は/usr/share/locale/ のような場所にな り、Windows であれば Subversion をインストールしたフォルダの中の ¥share¥locale¥フォルダなどに見つかることがよくあ ります。いったんインストールするとモジュールは翻訳を実行するプログラム の名前に変更されます。例えば de.moというファイル は最終的には /usr/share/locale/de/LC_MESSAGES/subversion.mo の ような名前でインストールされます。インストールされている .moファイルを見れば、Subversion クライアントが実 際にはどの言語を話すことができるかがわかります。

ロケールが考慮される二番目の場面は svn があなたの入力を解釈する時です。リポジトリはすべてのパス名、ファイル名 そしてログメッセージを UTF-8 でエンコードされた Unicode で保存します。 この意味でリポジトリは 国際化されています— つまり、リポジトリはどのような自然言語の入力も受け入れる用意ができて います。しかしこれは Subversion クライアントは UTF-8 ファイル名とログ メッセージだけをリポジトリに送る責任があることを意味します。このため Subversion クライアントはデータをネイティブのロケールから UTF-8 へと 変換しなくてなりません。

たとえばcaff竪.txtという名前のファイルを作り、そ のファイルをコミットするときに 「Adesso il caff竪竪 pi湛 forte」というログメッセージをつけたとします。ファイル名とログメッ セージの両方に 非ASCII 文字が含まれていますがロケールが it_ITに設定されているので Subversion クライアントは そのような文字列がイタリア語であることを理解することができます。そして イタリア語の文字セットを使ってデータ UTF-8 に変換し、それから結果を リポジトリに送信します。

リポジトリはファイル名とログメッセージは UTF-8 であることを要求します がファイルの内容にはまったく考慮 しません。 Subversion はファイルの内容を単なるバイト列の並びとして扱い、クライア ント側もサーバ側もその内容のキャラクタセットやエンコーディングを理解し ようとはしません。