## 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 に結び付けられている内容が返されます。39

`bind_textdomain_codeset`( | domain[, codeset])

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

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

`textdomain`( | [domain])

  現在のグローバルドメインを調べたり変更したりします。 domain が `None` の場合、現在のグローバルドメインが返され ます。それ以外の場合にはグローバルドメインは 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.')

#### Footnotes

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