我如何使用 gettext 翻译第三方 python 模块的字符串
How I can translate the strings of third-party python modules using gettext
在分配时,我需要一个本地化的 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 extractor while passing additional paths to it - like that (I did it with 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
或 运行 命令时,环境变量赋值语法可能会有所不同
在分配时,我需要一个本地化的 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 extractor while passing additional paths to it - like that (I did it with 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
或 运行 命令时,环境变量赋值语法可能会有所不同