ソースコードを I18N 化する準備として、ファイル内の全ての文字列
を探す必要があります。翻訳を行う必要のある文字列はどれも
_('...')
-- すなわち関数 _() の呼び出しで
包むことでマーク付けしなくてはなりません。例えば以下のようにします:
filename = 'mylog.txt' message = _('writing a log message') fp = open(filename, 'w') fp.write(message) fp.close()
この例では、文字列 'writing a log message'
が翻訳対象候補として
マーク付けされており、文字列 'mylog.txt'
および 'w'
は
されていません。
Python の配布物には、ソースコードに準備作業を行った後で メッセージカタログの生成を助ける 2 つのツールが付属します。 これらはバイナリ配布の場合には付属していたりしなかったりしますが、 ソースコード配布には入っており、Tools/i18n ディレクトリ にあります。
pygettext プログラム 21.3
は全ての Python ソースコードを走査し、予め翻訳対象としてマーク
した文字列を探し出します。このツールは GNU gettext
プログラムと同様ですが、Python ソースコードの機微について
熟知している反面、C 言語や C++言語のソースコードについては
全く知りません。(C 言語による拡張モジュールのように) C 言語の
コードも翻訳対象にしたいのでない限り、 GNU gettext
は必要ありません。
pygettext は、テキスト形式 Uniforum スタイルによる人間が 判読可能なメッセージカタログ .pot ファイル群を生成します。 このファイル群はソースコード中でマークされた全ての文字列と、 それに対応する翻訳文字列のためのプレースホルダを含むファイル で構成されています。 pygettext はコマンドライン形式のスクリプトで、 xgettext と同様のコマンドラインインタフェースをサポート します; 使用法についての詳細を見るには:
pygettext.py --help
を起動してください。
これら .pot ファイルのコピーは次に、サポート対象の 各自然言語について、言語ごとのバージョンを作成する個々の人間の 翻訳者に頒布されます。翻訳者たちはプレースホルダ部分を埋めて 言語ごとのバージョンをつくり、.po ファイルとして 返します。(Tools/i18n ディレクトリ内の) msgfmt.py21.4 プログラムを使い、翻訳者から返された .po ファイルから 機械可読な .mo バイナリカタログファイルを生成します。 .mo ファイルは、 gettext モジュールが実行時に 実際の翻訳処理を行うために使われます。
gettext モジュールをソースコード中でどのように使うかは 単一のモジュールを国際化するのか、それともアプリケーション全体を 国際化するのかによります。 次のふたつのセクションで、それぞれについて説明します。