私のプロジェクトのメインスクリプトでは、gettext
は他のモジュールで翻訳用に使用される関数_()
をインストールします(print(_('Something to translate'))
など)。
ドキュメント で述べられているように:
_()関数はPythonの組み込み名前空間にインストールされているため、アプリケーションのすべてのモジュールから簡単にアクセスできます。
したがって、すべてが正常に実行されます。
問題のみ:_flake8
_はエラーを示します(実際にはPyFlakesによって返されます):
_$ flake8 *.py
lib.py:2:12: F821 undefined name '_'
main_script.py:8:7: F821 undefined name '_'
_
__
_は実際にはmain_script.pyでもlib.pyでも定義されていないため、これは正常です。
_.
├── lib.py
├── locale
│ └── de
│ └── LC_MESSAGES
│ ├── myapp.mo
│ └── myapp.po
└── main_script.py
_
Lib.pyにこれが含まれている場合:
_def fct(sentence):
return _(sentence)
_
およびmain_script.pythis:
_#!/usr/bin/env python3
import gettext
import lib
gettext.translation('myapp', 'locale', ['de']).install()
print(_('A sentence'))
print(lib.fct('A sentence'))
_
myapp.poには次のものが含まれています。
_msgid ""
msgstr ""
"Project-Id-Version: myapp\n"
msgid "A sentence"
msgstr "Ein Satz"
_
(moファイルを生成するためにpoeditによってコンパイルされました)。
上記のように、メインスクリプトは機能します。
_$ ./main_script.py
Ein Satz
Ein Satz
_
重要な注意:gettext.install()
が呼び出されるスクリプトと他のすべてのモジュールの両方で機能するソリューションを探していますthatを呼び出す必要はありませんgettext.install()
。そうでなければ、_()
from main_script.pyは、F821をトリガーするのに十分です。
_()
を使用して、各行の最後に_# noqa
_コメントを追加します--ignore
_ F821(これは他の状況で役立つのでそれをしたくない)--builtins="_"
よりも具体的な--ignore F821
を指定できます。
コマンドライン引数が気に入らない場合は、構成ファイルでもこれを指定できるはずです。