耗时一个晚上,从七点到十点终于研究差不多了,开始写总结。
Python中自带一个进行多语言翻译的模块,名字是gettext
,我在哔哩哔哩和博客中搜到了很多关于它的使用教程,但很繁琐,还要用到一个不怎么好用的开源程序easypo或是需要付费的poedit,事实上后者会好用一些,但并没有减轻我开发的繁琐程度,于是研究了一下怎么用Python程序自动化这一过程,我发现了模块babel。
关于gettext
的基本使用参考上一段的哔哩哔哩链接,本篇文章重点不在于此。
babel 介绍
他的自我介绍是:Babel 是一个用于国际化 Python 应用的工具集合。
它的功能有:
- 用于构建和使用
gettext
消息目录
- 用于 CLDR(通用区域数据存储库)的 Python 接口,提供对各种区域显示名称、本地化数字和日期格式等的访问。
我主要使用第一个功能,后面的视程序开发进度决定。
我的自动化程序及使用方式
源代码
./babel_use.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| import os import subprocess
POT_FILE = 'messages.pot' LOCALES_DIR = 'locales' SRC_DIR = 'src'
def run_command(command): """运行系统命令""" try: subprocess.check_call(command, shell=True) except subprocess.CalledProcessError as e: print(f"执行时出错 {' '.join(command)}: {e}")
def get_babel_cfg():
command = f"pybabel extract -F babel.cfg -o messages.pot ." def extract_pot_file(): """提取可翻译的文本生成.pot文件""" command = f"pybabel extract -F babel.cfg -o {POT_FILE} {SRC_DIR}" run_command(command)
def init_po_file(lang_code): """初始化翻译文件生成.po文件""" po_file = os.path.join(LOCALES_DIR, lang_code, 'LC_MESSAGES', 'messages.po') command = f"pybabel init -i {POT_FILE} -d {LOCALES_DIR} -l {lang_code}" run_command(command)
def update_po_files(): """更新翻译文件""" command = f"pybabel update -i {POT_FILE} -d {LOCALES_DIR}" run_command(command)
def compile_po_files(): """编译.po文件生成.mo文件""" command = f"pybabel compile -d {LOCALES_DIR}" run_command(command)
def main(): extract_pot_file() update_po_files()
compile_po_files()
if __name__ == '__main__': main()
|
程序文件的树结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| root:. │ babel.cfg │ babel_use.py │ ├──src │ main.py │ setup.py │ ├───assets │ └───dark_ui │ ├───functions └───uis
|
其中,src文件夹放置应用的主要程序,所有的_()
都在里面。
程序初始化
第一次运行时,需要生成相应的po语言模块,调用函数的顺序为:
1 2 3 4 5
| extract_pot_file()
init_po_file('zh_CN')
|
生成po文件后到locales/zh_CN/LC_MESSAGES/messages.po
进行自己的翻译工作,翻译完成后构建mo文件:
翻译文件更新
当程序内的字符串发生了变化,需要冲洗进行提取.pot文件,不需要冲洗生成po文件,而是使用更新原始po文件的命令(这样不会丢失以前的翻译好的文件)
1 2 3 4 5 6
| extract_pot_file()
update_po_files()
|
进行更新后的字符串的翻译,完成后编译为po文件,大功告成。
程序运行结束后的树结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| root:. │ babel.cfg │ babel_use.py │ messages.pot │ │ ├───locales │ └───zh_CN │ └───LC_MESSAGES │ messages.mo │ messages.po │ ├───src │ │ main.py │ │ setup.py │ │ │ ├───assets │ │ └───dark_ui │ │ │ ├───functions │ └───uis
└───__pycache__
|
一些有的没的
在powersheel
中展示树结构:
视频链接参数
参数 |
说明 |
|
high_quality |
1 最高画质 0 最低画质 |
|
danmaku |
1 打开弹幕 0 关闭弹幕 |
|
autoplay |
1 打开自动播放 0 关闭自动播放 |
|
iframe 参数
参数 |
说明 |
allowfullscreen |
true 允许全屏 false 不允许 |
sandbox |
allow-top-navigation allow-same-origin allow-forms allow-scripts 禁止弹出 |
width |
宽度 |
height |
高度 |