在我的项目主脚本中,gettext
安装在其他模块中用于翻译的函数_()
(如print(_('Something to translate'))
)。
如the doc所述:
the _() function [is] installed in Python’s builtins namespace, so it is easily accessible in all modules of your application.
所以,一切都很顺利。
只有问题: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.py这个:
#!/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"
(由poedit编译以生成mo文件)。
如上所述,主脚本确实有效:
$ ./main_script.py
Ein Satz
Ein Satz
重要提示:我正在寻找一个既适用于脚本的解决方案,其中gettext.install()
称为又适用于所有其他不需要调用gettext.install()
的模块。否则,结构可能会更简单,因为从main\script.py调用_()
就足以触发F821。
_()
在每行末尾添加一个# noqa
注释--ignore
F821(不想这样做,因为这在其他情况下很有用)
您可以指定比
--ignore F821
更具体的--builtins="_"
。如果不喜欢命令行参数,也可以在配置文件中指定此参数。
相关问题 更多 >
编程相关推荐