ローカライゼーション とはプログラムが 特定の地域に応じた動作をするように作ることを言います。あるプログラムが 数値や日付を特定の地域に応じて書式化して出力したり、その地域の言語でメッ セージを出力したり(あるいはそのような入力を受け入れたり)できるのであれ ば、そのプログラムはローカライズされている と言 われます。この節では 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 クライアントである 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 はファイルの内容を単なるバイト列の並びとして扱い、クライア ント側もサーバ側もその内容のキャラクタセットやエンコーディングを理解し ようとはしません。