21.1.2.2 GNUTranslations クラス

gettext モジュールでは NullTranslations から 導出されたもう一つのクラス: GNUTranslations を提供しています。 このクラスはビッグエンディアン、およびリトルエンディアン両方の バイナリ形式の GNU gettext .mo ファイル を読み出せるように _parse() を上書きしています。 また、このクラスはメッセージ id とメッセージ文字列の両方を Unicode に型強制します。

このクラスではまた、翻訳カタログ以外に、オプションのメタデータ を読み込んで解釈します。GNU gettext では、空の文字列に 対する変換先としてメタデータを取り込むことが慣習になっています。 このメタデータは RFC 822 形式の key: value のペアに なっており、 Project-Id-Version キーを含んでいなければ なりません。キー Content-Type があった場合、 charset の特性値 (property) は ``保護された'' _charset インスタンス 変数を初期化するために用いられます。値がない場合には、デフォルトと して None が使われます。 エンコードに用いられる文字セットが指定されている場合、カタログから 読み出された全てのメッセージ id とメッセージ文字列は、指定された エンコードを用いて Unicode に変換されます。ugettext() は常に Unicode を返し、gettext() はエンコードされた 8 ビット文字列を返します。どちらのメソッドにおける引数 id の 場合も、Unicode 文字列か US-ASCII 文字のみを含む 8 ビット文字列 だけが受理可能です。国際化されたPython プログラムでは、メソッドの Unicode 版 (すなわち ugettext()ungettext()) の利用が推奨されています。

key/value ペアの集合全体は辞書型データ中に配置され、``保護された'' _info インスタンス変数に設定されます。

.mo ファイルのマジックナンバーが不正な場合、あるいは その他の問題がファイルの読み出し中に発生した場合、 GNUTranslations クラスのインスタンス化で IOError が送出されることがあります。

以下のメソッドは基底クラスの実装からオーバライドされています:

gettext( message)
カタログから message id を検索して、対応するメッセージ文字列を、 カタログの文字セットが既知のエンコードの場合、エンコードされた 8 ビット 文字列として返します。message id に対するエントリがカタログに 存在せず、フォールバックが設定されている場合、フォールバック 検索はオブジェクトの gettext() メソッドに転送されます。 そうでない場合、message id 自体が返されます。

ugettext( message)
カタログから message id を検索して、対応するメッセージ文字列を、 Unicode でエンコードして返します。message id に対するエントリが カタログに存在せず、フォールバックが設定されている場合、フォールバック 検索はオブジェクトの ugettext() メソッドに転送されます。 そうでない場合、message id 自体が返されます。

ngettext( singular, plural, n)
メッセージ id に対する複数形を検索します。カタログに対する検索では singular がメッセージ id として用いられ、 n には どの複数形を用いるかを指定します。返されるメッセージ文字列は 8 ビットの文字列で、カタログの文字セットが既知の場合にはその 文字列セットでエンコードされています。

メッセージ id がカタログ中に見つからず、フォールバックオブジェクト が指定されている場合、メッセージ検索要求はフォールバックオブジェクトの ngettext() メソッドに転送されます。そうでない場合、 n が 1 ならば singular が返され、それ以外に対しては plural が返されます。

バージョン 2.3 で 新たに追加 された仕様です。

ungettext( singular, plural, n)
メッセージ id に対する複数形を検索します。カタログに対する検索では singular がメッセージ id として用いられ、 n には どの複数形を用いるかを指定します。返されるメッセージ文字列は Unicode 文字列です。

メッセージ id がカタログ中に見つからず、フォールバックオブジェクト が指定されている場合、メッセージ検索要求はフォールバックオブジェクトの ungettext() メソッドに転送されます。そうでない場合、 n が 1 ならば singular が返され、それ以外に対しては plural が返されます。

以下に例を示します。:

n = len(os.listdir('.'))
cat = GNUTranslations(somefile)
message = cat.ungettext(
    'There is %(num)d file in this directory',
    'There are %(num)d files in this directory',
    n) % {'num': n}

バージョン 2.3 で 新たに追加 された仕様です。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。