22.1。 gettext —多言語の国際化サービス
ソースコード: :source: `Lib / gettext.py`
gettext モジュールは、Pythonモジュールおよびアプリケーションに国際化(I18N)およびローカリゼーション(L10N)サービスを提供します。 これは、GNU gettext
メッセージカタログAPIと、Pythonファイルにより適している可能性のある高レベルのクラスベースAPIの両方をサポートします。 以下で説明するインターフェースを使用すると、モジュールとアプリケーションのメッセージを1つの自然言語で記述し、さまざまな自然言語で実行するための翻訳済みメッセージのカタログを提供できます。
Pythonモジュールとアプリケーションをローカライズするためのヒントもいくつか示されています。
22.1.1。 GNU gettext API
gettext モジュールは、GNU gettext APIと非常によく似た次のAPIを定義します。 このAPIを使用すると、アプリケーション全体の翻訳にグローバルに影響します。 多くの場合、これは、アプリケーションが単一言語であり、ユーザーのロケールに応じて言語を選択する場合に必要なものです。 Pythonモジュールをローカライズする場合、またはアプリケーションで言語をオンザフライで切り替える必要がある場合は、代わりにクラスベースのAPIを使用することをお勧めします。
- gettext.bindtextdomain(domain[, localedir])
domain をロケールディレクトリ localedir にバインドします。 より具体的には、 gettext は、パス(Unixの場合)を使用して、指定されたドメインのバイナリ
.mo
ファイルを検索します:localedir/language/LC_MESSAGES/domain.mo
、ここで言語が検索されます環境変数LANGUAGE
、LC_ALL
、LC_MESSAGES
、および [X272X ]LANG
それぞれ。localedir が省略されているか
None
の場合、ドメインの現在のバインディングが返されます。 1
- gettext.bind_textdomain_codeset(domain[, codeset])
domain を codeset にバインドし、 gettext()ファミリーの関数によって返される文字列のエンコーディングを変更します。 codeset を省略すると、現在のバインディングが返されます。
バージョン2.4の新機能。
- gettext.textdomain([domain])
- 現在のグローバルドメインを変更またはクエリします。 domain が
None
の場合、現在のグローバルドメインが返されます。それ以外の場合、グローバルドメインは domain に設定され、返されます。
- gettext.gettext(message)
- 現在のグローバルドメイン、言語、ロケールディレクトリに基づいて、メッセージのローカライズされた翻訳を返します。 この関数は通常、ローカル名前空間で
_()
としてエイリアスされます(以下の例を参照)。
- gettext.lgettext(message)
gettext()と同等ですが、 bind_textdomain_codeset()で他のエンコーディングが明示的に設定されていない場合、変換は優先システムエンコーディングで返されます。
バージョン2.4の新機能。
- gettext.dgettext(domain, message)
- gettext()と同様ですが、指定されたドメインでメッセージを検索します。
- gettext.ldgettext(domain, message)
dgettext()と同等ですが、 bind_textdomain_codeset()で他のエンコーディングが明示的に設定されていない場合、変換は優先システムエンコーディングで返されます。
バージョン2.4の新機能。
- gettext.ngettext(singular, plural, n)
gettext()と同様ですが、複数形を検討してください。 翻訳が見つかった場合は、 n に複数形を適用し、結果のメッセージを返します(一部の言語には3つ以上の複数形があります)。 翻訳が見つからない場合、 n が1の場合、 singular を返します。 それ以外の場合は plural を返します。
複数の式は、カタログヘッダーから取得されます。 これは、自由変数 n を持つCまたはPython式です。 式は、カタログ内の複数形のインデックスに評価されます。
.po
ファイルで使用される正確な構文とさまざまな言語の式については、GNUgettextのドキュメントを参照してください。バージョン2.3の新機能。
- gettext.lngettext(singular, plural, n)
ngettext()と同等ですが、 bind_textdomain_codeset()で他のエンコーディングが明示的に設定されていない場合、変換は優先システムエンコーディングで返されます。
バージョン2.4の新機能。
- gettext.dngettext(domain, singular, plural, n)
ngettext()と同様ですが、指定されたドメインでメッセージを検索します。
バージョン2.3の新機能。
- gettext.ldngettext(domain, singular, plural, n)
dngettext()と同等ですが、 bind_textdomain_codeset()で他のエンコーディングが明示的に設定されていない場合、変換は優先システムエンコーディングで返されます。
バージョン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.')
22.1.2。 クラスベースAPI
gettext モジュールのクラスベースAPIは、GNU gettext APIよりも柔軟性と利便性を提供します。 これは、Pythonアプリケーションとモジュールをローカライズするための推奨される方法です。 gettext
は、GNU .mo
形式のファイルの解析を実装する「翻訳」クラスを定義し、標準の8ビット文字列またはUnicode文字列を返すメソッドを備えています。 この「translations」クラスのインスタンスは、関数_()
として組み込みの名前空間に自分自身をインストールすることもできます。
- gettext.find(domain[, localedir[, languages[, all]]])
この関数は、標準の
.mo
ファイル検索アルゴリズムを実装します。 textdomain()が取るものと同じ、 domain を取ります。 オプションの localedir は、 bindtextdomain()のとおりです。オプションの languages は文字列のリストであり、各文字列は言語コードです。localedir が指定されていない場合は、デフォルトのシステムロケールディレクトリが使用されます。 2 言語が指定されていない場合、次の環境変数が検索されます:
LANGUAGE
、 [ X136X]、LC_MESSAGES
、およびLANG
。 空でない値を返す最初の値は、 languages 変数に使用されます。 環境変数には、コロンで区切られた言語のリストが含まれている必要があります。これは、コロンで分割されて、予期される言語コード文字列のリストが生成されます。find()は、言語を展開して正規化し、言語を反復処理して、次のコンポーネントで構築された既存のファイルを検索します。
localedir/language/LC_MESSAGES/domain.mo
存在する最初のそのようなファイル名は、 find()によって返されます。 そのようなファイルが見つからない場合は、
None
が返されます。 all を指定すると、すべてのファイル名のリストが、言語リストまたは環境変数に表示される順序で返されます。
- gettext.translation(domain[, localedir[, languages[, class_[, fallback[, codeset]]]]])
ドメイン、 localedir 、および言語に基づいて
Translations
インスタンスを返します。これらは、最初に find()に渡されます。 ]関連する.mo
ファイルパスのリストを取得します。 同一の.mo
ファイル名を持つインスタンスがキャッシュされます。 インスタンス化される実際のクラスは、提供されている場合は class_ 、それ以外の場合はGNUTranslations
のいずれかです。 クラスのコンストラクターは、単一のファイルオブジェクト引数を取る必要があります。 指定されている場合、 codeset は、翻訳された文字列のエンコードに使用される文字セットを変更します。複数のファイルが見つかった場合、後のファイルが前のファイルのフォールバックとして使用されます。 フォールバックの設定を可能にするために、 copy.copy()を使用して、キャッシュから各変換オブジェクトのクローンを作成します。 実際のインスタンスデータは引き続きキャッシュと共有されます。
.mo
ファイルが見つからない場合、この関数は fallback がfalse(デフォルト)の場合にIOError
を発生させ、 NullTranslations インスタンスを返す場合にフォールバックは真です。バージョン2.4で変更: codeset パラメーターを追加しました。
- gettext.install(domain[, localedir[, unicode[, codeset[, names]]]])
これにより、関数に渡される domain 、 localedir 、および codeset に基づいて、関数
_()
がPythonの組み込み名前空間にインストールされます。 translation()。 unicode フラグは、結果の変換オブジェクトの install()メソッドに渡されます。names パラメータについては、変換オブジェクトの install()メソッドの説明を参照してください。
以下に示すように、通常、次のように
_()
関数の呼び出しで文字列をラップすることにより、翻訳の候補となるアプリケーション内の文字列をマークします。print _('This string will be translated.')
便宜上、
_()
関数をPythonの組み込み名前空間にインストールして、アプリケーションのすべてのモジュールから簡単にアクセスできるようにする必要があります。バージョン2.4で変更: codeset パラメーターを追加しました。
バージョン2.5で変更: names パラメーターを追加。
22.1.2.1。 NS NullTranslations クラス
翻訳クラスは、元のソースファイルのメッセージ文字列から翻訳されたメッセージ文字列への翻訳を実際に実装するものです。 すべての変換クラスで使用される基本クラスは NullTranslations です。 これにより、独自の特殊な翻訳クラスを作成するために使用できる基本的なインターフェイスが提供されます。 NullTranslations
のメソッドは次のとおりです。
- class gettext.NullTranslations([fp])
オプションのファイルオブジェクト fp を取りますが、これは基本クラスによって無視されます。 派生クラスによって設定される「保護された」インスタンス変数 _info と _charset 、および add_fallback()[によって設定される _fallback を初期化します。 184]。 次に、 fp が
None
でない場合、self._parse(fp)
を呼び出します。- _parse(fp)
基本クラスでは操作なしで、このメソッドはファイルオブジェクト fp を受け取り、ファイルからデータを読み取り、メッセージカタログを初期化します。 サポートされていないメッセージカタログファイル形式がある場合は、このメソッドをオーバーライドして形式を解析する必要があります。
- add_fallback(fallback)
現在の変換オブジェクトのフォールバックオブジェクトとして fallback を追加します。 翻訳オブジェクトは、特定のメッセージの翻訳を提供できない場合、フォールバックを参照する必要があります。
- gettext(message)
フォールバックが設定されている場合は、
gettext()
をフォールバックに転送します。 それ以外の場合は、翻訳されたメッセージを返します。 派生クラスでオーバーライドされます。
- lgettext(message)
フォールバックが設定されている場合は、
lgettext()
をフォールバックに転送します。 それ以外の場合は、翻訳されたメッセージを返します。 派生クラスでオーバーライドされます。バージョン2.4の新機能。
- ugettext(message)
フォールバックが設定されている場合は、
ugettext()
をフォールバックに転送します。 それ以外の場合は、翻訳されたメッセージをUnicode文字列として返します。 派生クラスでオーバーライドされます。
- ngettext(singular, plural, n)
フォールバックが設定されている場合は、
ngettext()
をフォールバックに転送します。 それ以外の場合は、翻訳されたメッセージを返します。 派生クラスでオーバーライドされます。バージョン2.3の新機能。
- lngettext(singular, plural, n)
フォールバックが設定されている場合は、
lngettext()
をフォールバックに転送します。 それ以外の場合は、翻訳されたメッセージを返します。 派生クラスでオーバーライドされます。バージョン2.4の新機能。
- ungettext(singular, plural, n)
フォールバックが設定されている場合は、
ungettext()
をフォールバックに転送します。 それ以外の場合は、翻訳されたメッセージをUnicode文字列として返します。 派生クラスでオーバーライドされます。バージョン2.3の新機能。
- info()
「保護された」
_info
変数を返します。
- charset()
「保護された」
_charset
変数を返します。
- output_charset()
「保護された」
_output_charset
変数を返します。これは、翻訳されたメッセージを返すために使用されるエンコーディングを定義します。バージョン2.4の新機能。
- set_output_charset(charset)
「保護された」
_output_charset
変数を変更します。これは、翻訳されたメッセージを返すために使用されるエンコーディングを定義します。バージョン2.4の新機能。
- install([unicode[, names]])
unicode フラグがfalseの場合、このメソッドは
self.gettext()
を組み込み名前空間にインストールし、_
にバインドします。 unicode がtrueの場合、代わりにself.ugettext()
をバインドします。 デフォルトでは、 unicode はfalseです。names パラメーターを指定する場合は、
_()
に加えて、組み込み名前空間にインストールする関数の名前を含むシーケンスである必要があります。 サポートされている名前は、'gettext'
( unicode フラグに従ってself.gettext()
またはself.ugettext()
にバインドされます)、'ngettext'
(self.ngettext()
またはself.ungettext()
( unicode フラグによる)、'lgettext'
および'lngettext'
。これは、
_()
機能をアプリケーションで使用できるようにするための、最も便利な方法ではありますが、1つの方法にすぎないことに注意してください。 これはアプリケーション全体、特に組み込みの名前空間に影響を与えるため、ローカライズされたモジュールは決して_()
をインストールしないでください。 代わりに、次のコードを使用して、モジュールで_()
を使用できるようにする必要があります。import gettext t = gettext.translation('mymodule', ...) _ = t.gettext
これにより、
_()
はモジュールのグローバル名前空間にのみ配置されるため、このモジュール内の呼び出しにのみ影響します。バージョン2.5で変更: names パラメーターを追加。
22.1.2.2。 NSGNUTranslations クラス
gettext モジュールは、 NullTranslations から派生した1つの追加クラスGNUTranslations
を提供します。 このクラスは_parse()
をオーバーライドして、GNU gettext 形式.mo
ファイルをビッグエンディアン形式とリトルエンディアン形式の両方で読み取れるようにします。 また、メッセージIDとメッセージ文字列の両方をUnicodeに強制します。
GNUTranslations
は、翻訳カタログからオプションのメタデータを解析します。 空の文字列の変換としてメタデータを含めることは、GNU gettext の慣例です。 このメタデータは RFC 822 スタイルのkey: value
ペアであり、Project-Id-Version
キーが含まれている必要があります。 キーContent-Type
が見つかった場合、charset
プロパティを使用して、「保護された」_charset
インスタンス変数が初期化されます。見つからない場合は、デフォルトでNone
になります。 文字セットエンコーディングが指定されている場合、カタログから読み取られたすべてのメッセージIDとメッセージ文字列は、このエンコーディングを使用してUnicodeに変換されます。 ugettext()
メソッドは常にUnicodeを返しますが、 gettext()はエンコードされた8ビット文字列を返します。 両方のメソッドのメッセージID引数には、Unicode文字列またはUS-ASCII文字のみを含む8ビット文字列のいずれかを使用できます。 メソッドのUnicodeバージョン(つまり、 ugettext()
およびungettext()
)は、国際化されたPythonプログラムに使用するための推奨インターフェースです。
キーと値のペアのセット全体が辞書に配置され、「保護された」_info
インスタンス変数として設定されます。
.mo
ファイルのマジックナンバーが無効な場合、またはファイルの読み取り中に他の問題が発生した場合、GNUTranslations
クラスをインスタンス化するとIOError
が発生する可能性があります。
次のメソッドは、基本クラスの実装からオーバーライドされます。
- GNUTranslations.gettext(message)
- カタログで message idを検索し、対応するメッセージ文字列を、カタログの文字セットエンコーディングでエンコードされた8ビット文字列として返します(わかっている場合)。 message idのエントリがカタログになく、フォールバックが設定されている場合、ルックアップはフォールバックの gettext()メソッドに転送されます。 それ以外の場合は、メッセージ IDが返されます。
- GNUTranslations.lgettext(message)
gettext()と同等ですが、
set_output_charset()
で他のエンコーディングが明示的に設定されていない場合、変換は優先システムエンコーディングで返されます。バージョン2.4の新機能。
- GNUTranslations.ugettext(message)
- カタログで message idを検索し、対応するメッセージ文字列をUnicode文字列として返します。 message idのエントリがカタログになく、フォールバックが設定されている場合、ルックアップはフォールバックの ugettext()メソッドに転送されます。 それ以外の場合は、メッセージ IDが返されます。
- GNUTranslations.ngettext(singular, plural, n)
メッセージIDの複数形のルックアップを実行します。 singular は、カタログで検索するためのメッセージIDとして使用され、 n は、使用する複数形を決定するために使用されます。 返されるメッセージ文字列は、既知の場合、カタログの文字セットエンコーディングでエンコードされた8ビットの文字列です。
メッセージIDがカタログに見つからず、フォールバックが指定されている場合、要求はフォールバックの ngettext()メソッドに転送されます。 それ以外の場合、 n が1の場合、単数が返され、それ以外の場合は複数が返されます。
バージョン2.3の新機能。
- GNUTranslations.lngettext(singular, plural, n)
gettext()と同等ですが、
set_output_charset()
で他のエンコーディングが明示的に設定されていない場合、変換は優先システムエンコーディングで返されます。バージョン2.4の新機能。
- GNUTranslations.ungettext(singular, plural, n)
メッセージIDの複数形のルックアップを実行します。 singular は、カタログで検索するためのメッセージIDとして使用され、 n は、使用する複数形を決定するために使用されます。 返されるメッセージ文字列はUnicode文字列です。
メッセージIDがカタログに見つからず、フォールバックが指定されている場合、要求はフォールバックの ungettext()メソッドに転送されます。 それ以外の場合、 n が1の場合、単数が返され、それ以外の場合は複数が返されます。
次に例を示します。
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の新機能。
22.1.2.3。 Solarisメッセージカタログのサポート
Solarisオペレーティングシステムは、独自のバイナリ.mo
ファイル形式を定義していますが、この形式に関するドキュメントが見つからないため、現時点ではサポートされていません。
22.1.2.4。 カタログコンストラクター
GNOMEはJamesHenstridgeによる gettext モジュールのバージョンを使用しますが、このバージョンにはわずかに異なるAPIがあります。 その文書化された使用法は次のとおりです。
import gettext
cat = gettext.Catalog(domain, localedir)
_ = cat.gettext
print _('hello world')
この古いモジュールとの互換性のために、関数Catalog()
は、上記の translation()関数のエイリアスです。
このモジュールとHenstridgeのモジュールの違いの1つは、彼のカタログオブジェクトはマッピングAPIを介したアクセスをサポートしていましたが、これは使用されていないようで、現在はサポートされていません。
22.1.3。 プログラムとモジュールの国際化
国際化(I18N)とは、プログラムに複数の言語を認識させる操作のことです。 ローカリゼーション(L10N)とは、国際化されたプログラムを、現地の言語や文化的習慣に適応させることを指します。 Pythonプログラムに多言語メッセージを提供するには、次の手順を実行する必要があります。
- 翻訳可能な文字列を特別にマークして、プログラムまたはモジュールを準備します
- マークされたファイルに対して一連のツールを実行して、生のメッセージカタログを生成します
- メッセージカタログの言語固有の翻訳を作成する
- gettext モジュールを使用して、メッセージ文字列が適切に翻訳されるようにします
I18Nのコードを準備するには、ファイル内のすべての文字列を確認する必要があります。 翻訳する必要のある文字列は、_('...')
でラップすることによってマークする必要があります。つまり、関数_()
を呼び出します。 例えば:
filename = 'mylog.txt'
message = _('writing a log message')
fp = open(filename, 'w')
fp.write(message)
fp.close()
この例では、文字列'writing a log message'
は翻訳の候補としてマークされていますが、文字列'mylog.txt'
および'w'
はマークされていません。
Pythonディストリビューションには、ソースコードを準備した後、メッセージカタログを生成するのに役立つ2つのツールが付属しています。 これらは、バイナリディストリビューションから入手できる場合とできない場合がありますが、ソースディストリビューションのTools/i18n
ディレクトリにあります。
pygettext 3 プログラムは、すべてのPythonソースコードをスキャンして、以前に翻訳可能としてマークした文字列を探します。 これは、Pythonソースコードのすべての複雑さを理解することを除いて、GNU gettext プログラムに似ていますが、CまたはC ++ソースコードについては何も知りません。 Cコード(C拡張モジュールなど)も翻訳する場合を除いて、GNU gettext
は必要ありません。
pygettext は、テキストのUniforumスタイルの人間が読めるメッセージカタログ.pot
ファイルを生成します。これは、翻訳文字列のプレースホルダーとともに、ソースコード内のすべてのマークされた文字列を含む本質的に構造化された人間が読めるファイルです。 pygettext は、 xgettext と同様のコマンドラインインターフェイスをサポートするコマンドラインスクリプトです。 その使用法の詳細については、以下を実行してください。
pygettext.py --help
これらの.pot
ファイルのコピーは、サポートされているすべての自然言語の言語固有のバージョンを作成する個々の人間の翻訳者に渡されます。 記入済みの言語固有のバージョンを.po
ファイルとして返送します。 msgfmt.py 4 プログラム(Tools/i18n
ディレクトリ内)を使用して、翻訳者から.po
ファイルを取得し、機械可読形式で生成します。 .mo
バイナリカタログファイル。 .mo
ファイルは、 gettext モジュールが実行時の実際の翻訳処理に使用するものです。
コードで gettext モジュールをどのように使用するかは、単一のモジュールを国際化するのか、アプリケーション全体を国際化するのかによって異なります。 次の2つのセクションでは、それぞれのケースについて説明します。
22.1.3.1。 モジュールのローカライズ
モジュールをローカライズする場合は、グローバルな変更を行わないように注意する必要があります。 組み込みの名前空間に。 GNU gettext
APIを使用するのではなく、クラスベースのAPIを使用する必要があります。
モジュールが「スパム」と呼ばれ、モジュールのさまざまな自然言語翻訳.mo
ファイルがGNU gettext 形式の/usr/share/locale
にあるとします。 モジュールの上部に配置するものは次のとおりです。
import gettext
t = gettext.translation('spam', '/usr/share/locale')
_ = t.lgettext
翻訳者が.po
ファイルでUnicode文字列を提供している場合は、代わりに次のようにします。
import gettext
t = gettext.translation('spam', '/usr/share/locale')
_ = t.ugettext
22.1.3.2。 アプリケーションのローカライズ
アプリケーションをローカライズする場合は、_()
関数を組み込みの名前空間(通常はアプリケーションのメインドライバーファイル)にグローバルにインストールできます。 これにより、すべてのアプリケーション固有のファイルで_('...')
を使用できるようになり、各ファイルに明示的にインストールする必要がなくなります。
単純なケースでは、アプリケーションのメインドライバーファイルに次のコードを追加するだけで済みます。
import gettext
gettext.install('myapplication')
ロケールディレクトリまたは unicode フラグを設定する必要がある場合は、これらを install()関数に渡すことができます。
import gettext
gettext.install('myapplication', '/usr/share/locale', unicode=1)
22.1.3.3。 その場で言語を変更する
プログラムが同時に多くの言語をサポートする必要がある場合は、次のように、複数の翻訳インスタンスを作成してから、それらを明示的に切り替えることができます。
import gettext
lang1 = gettext.translation('myapplication', languages=['en'])
lang2 = gettext.translation('myapplication', languages=['fr'])
lang3 = gettext.translation('myapplication', languages=['de'])
# start by using language1
lang1.install()
# ... time goes by, user selects language 2
lang2.install()
# ... more time goes by, user selects language 3
lang3.install()
22.1.3.4。 延期された翻訳
ほとんどのコーディング状況では、文字列はコーディングされた場所で変換されます。 ただし、場合によっては、翻訳用に文字列をマークする必要がありますが、実際の翻訳は後で実行するまで延期します。 古典的な例は次のとおりです。
animals = ['mollusk',
'albatross',
'rat',
'penguin',
'python', ]
# ...
for a in animals:
print a
ここでは、animals
リストの文字列を翻訳可能としてマークしたいのですが、実際には、印刷されるまで翻訳したくありません。
この状況に対処する1つの方法は次のとおりです。
def _(message): return message
animals = [_('mollusk'),
_('albatross'),
_('rat'),
_('penguin'),
_('python'), ]
del _
# ...
for a in animals:
print _(a)
_()
のダミー定義は単に文字列を変更せずに返すため、これは機能します。 また、このダミー定義は、組み込み名前空間内の_()
の定義を一時的にオーバーライドします( del コマンドまで)。 ただし、ローカル名前空間に_()
の以前の定義がある場合は、注意してください。
_()
の2回目の使用では、「a」は文字列ではないため、 pygettext プログラムに翻訳可能であると識別されないことに注意してください。
これを処理する別の方法は、次の例を使用することです。
def N_(message): return message
animals = [N_('mollusk'),
N_('albatross'),
N_('rat'),
N_('penguin'),
N_('python'), ]
# ...
for a in animals:
print _(a)
この場合、_()
の定義と競合しない、関数N_()
、 5 を使用して翻訳可能な文字列をマークしています。 ただし、N_()
でマークされた翻訳可能な文字列を探すようにメッセージ抽出プログラムを教える必要があります。 pygettext と xpot はどちらも、コマンドラインスイッチを使用してこれをサポートしています。
22.1.3.5。 gettext() 対。 lgettext()
Python 2.4では、 lgettext()ファミリーの関数が導入されました。 これらの関数の目的は、GNUgettextの現在の実装により準拠した代替手段を提供することです。 翻訳ファイルで使用されているのと同じコードセットでエンコードされた文字列を返す gettext()とは異なり、 lgettext()は、によって返される優先システムエンコーディングでエンコードされた文字列を返します。 locale.getpreferredencoding()。 また、Python 2.4には、翻訳された文字列で使用されるコードセットを明示的に選択するための新しい関数が導入されていることに注意してください。 コードセットが明示的に設定されている場合、 lgettext()でさえ、GNU gettext実装で期待されるように、要求されたコードセットで翻訳された文字列を返します。
22.1.4。 謝辞
次の人々は、このモジュールの作成にコード、フィードバック、設計提案、以前の実装、および貴重な経験を提供しました。
- ピーターファンク
- ジェームズ・ヘンストリッジ
- フアン・デビッド・イバニェス・パロマー
- マークアンドレレンブルグ
- マーティン・フォン・レーウィス
- フランソワ・ピナール
- バリーワルシャワ
- グスタボ・ニーマイヤー
脚注
- 1
- デフォルトのロケールディレクトリはシステムに依存します。 たとえば、RedHatLinuxでは
/usr/share/locale
ですが、Solarisでは/usr/lib/locale
です。 gettext モジュールは、これらのシステム依存のデフォルトをサポートしようとしません。 代わりに、デフォルトはsys.prefix/share/locale
です。 このため、アプリケーションの開始時に明示的な絶対パスを使用して bindtextdomain()を呼び出すのが常に最善です。 - 2
- 上記の bindtextdomain()の脚注を参照してください。
- 3
- FrançoisPinardは、同様の仕事をする xpot と呼ばれるプログラムを作成しました。 それは彼の po-utilsパッケージの一部として利用可能です。
- 4
- msgfmt.py はGNU msgfmt とバイナリ互換ですが、より単純なすべてのPython実装を提供する点が異なります。 これと pygettext.py を使用すると、通常、Pythonアプリケーションを国際化するためにGNU gettext パッケージをインストールする必要はありません。
- 5
- ここでの
N_()
の選択は完全に任意です。MarkThisStringForTranslation()
と同じくらい簡単だったかもしれません。