在分配时,我需要一个本地化的 CLI 应用程序,出于这些目的,我决定使用gettext
,但遇到了本地化click
模块的标准输出的问题。有没有办法本地化第三方模块的字符串?
下面我介绍了click
模块的典型代码以及gettext
。
import click
import gettext
ru = gettext.translation('app', localedir='locale', languages=['ru'])
ru.install()
@click.command()
def main():
pass
if __name__ == "__main__":
main()
创建 .pot 文件时,可以只本地化我的代码,但我也对第三方模块的本地化感兴趣。
如果有人需要这样做,在本地翻译第三方库的相对干净和简单的方法是使用 Babel 提取器,同时向其传递其他路径 - 就像那样(我用 zxcvbn 做到了,其中所需的字符串已经标记为可翻译:
ZXCVBN_DIR=`python -c "import zxcvbn; import pathlib; print(pathlib.Path(zxcvbn.__file__).parent, end='')"`
pybabel extract -F babel.cfg -o locale/messages.pot my_module_dir ${ZXCVBN_DIR}
在 Docker 中使用make
或运行命令的情况下,Env 变量赋值语法可能会有所不同。
没有简单的方法,所以我将不得不自己搜索和更改单击模块中的字符串。