## 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 はそれぞれ環境変数 LANGUAGE、LC_ALL 、LC_MESSAGES、 および LANG の中から検索されます。

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

`textdomain`( | [domain])

  現在のグローバルドメインを調べたり変更したりします。 domain が `None` の場合、現在のグローバルドメインが返され ます。それ以外の場合にはグローバルドメインは 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()` を呼び出す のが最良のやり方ということになります。