6.27.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

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

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

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

ngettext( singular, plural, n)

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

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

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

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

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

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() を呼び出す のが最良のやり方ということになります。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。