6.28.1 GNU gettext API

gettext モジュールでは、以下の GNU gettext API に 非常に良く似た API を提供しています。この API を使う場合、 メッセージ翻訳の影響はアプリケーション全体に及ぼすことになります。 アプリケーションが単一の言語しか扱わず、各言語に依存する部分を ユーザのロケール情報によって選ぶのなら、ほとんどの場合この方法で やりたいことを実現できます。Python モジュールを地域化していたり、 アプリケーションの実行中に言語を切り替えたい場合、おそらくクラス に基づいた API を使いたくなるでしょう。

bindtextdomain( domain[, localedir])
domain をロケール辞書 localedir に結び付け (bind) ます。 具体的には、 gettext は与えられたドメインに対する バイナリ形式の .mo ファイルを、(Unixでは) localedir/language/LC_MESSAGES/domain.mo から探します。ここで languages はそれぞれ環境変数 LANGUAGELC_ALLLC_MESSAGES、 および LANG の中から検索されます。

localedir が省略されるか None の場合、現在 domain に結び付けられている内容が返されます。6.2

bind_textdomain_codeset( domain[, codeset])
domaincodeset に結び付けて、gettext() ファミリの関数が返す文字列のエンコード方式を変更します。 codeset を省略すると、現在結び付けられているコードセットを 返します。

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

textdomain( [domain])
現在のグローバルドメインを調べたり変更したりします。 domainNone の場合、現在のグローバルドメインが返され ます。それ以外の場合にはグローバルドメインは domain に設定され、 設定されたグローバルドメインを返します。

gettext( message)
現在のグローバルドメイン、言語、およびロケール辞書に基づいて、 message の特定地域向けの翻訳を返します。通常、 ローカルな名前空間ではこの関数に _ という別名をつけます (下の例を参照してください)。

lgettext( message)
gettext() と同じですが、bind_textdomain_codeset() で特にエンコードを指定しない限り、翻訳結果を優先システムエンコーディング (preferred system encoding) で返します。

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

dgettext( domain, message)
gettext() と同様ですが、指定された domain から メッセージを探します。

ldgettext( message)
dgettext() と同じですが、bind_textdomain_codeset() で特にエンコードを指定しない限り、翻訳結果を優先システムエンコーディング (preferred system encoding) で返します。

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

ngettext( singular, plural, n)

gettext() と同様ですが、複数形の場合を考慮しています。 翻訳文字列が見つかった場合、n の様式を適用し、 その結果得られたメッセージを返します (言語によっては二つ以上の 複数形があります)。 翻訳文字列が見つからなかった場合、 n が 1 なら singular を返します; そうでない場合 plural を返します。

複数形の様式はカタログのヘッダから取り出されます。様式は C または Python の式で、自由な変数 n を持ちます; 式の評価値はカタログ中の 複数形のインデクスとなります。.po ファイルで用いられる 詳細な文法と、様々な言語における様式については、GNU gettext ドキュメントを参照してください。

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

lngettext( message)
ngettext() と同じですが、bind_textdomain_codeset() で特にエンコードを指定しない限り、翻訳結果を優先システムエンコーディング (preferred system encoding) で返します。

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

dngettext( domain, singular, plural, n)
ngettext() と同様ですが、指定された domain から メッセージを探します。

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

ldngettext( message)
dngettext() と同じですが、bind_textdomain_codeset() で特にエンコードを指定しない限り、翻訳結果を優先システムエンコーディング (preferred system encoding) で返します。

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

GNU gettext では dcgettext() も定義していますが、 このメソッドはあまり有用ではないと思われるので、現在のところ 実装されていません。

以下にこの API の典型的な使用法を示します:

import gettext
gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')
gettext.textdomain('myapplication')
_ = gettext.gettext
# ...
print _('This is a translatable string.')



... に結び付けられている内容が返されます。6.2
標準でロケールが収められているディレクトリはシステム依存です; 例えば、RedHat Linux では /usr/share/locale ですが、 Solaris では /usr/lib/locale です。 gettext モジュールはこうしたシステム依存の標準設定をサポートしません; その代わりに sys.prefix/share/locale を標準の 設定とします。この理由から、常にアプリケーションの開始時に 絶対パスで明示的に指定して bindtextdomain() を呼び出す のが最良のやり方ということになります。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。