语之屋

国际化开发的经验

2024-12-20
技术python
5分钟
893字

耗时一个晚上,从七点到十点终于研究差不多了,开始写总结。

Python中自带一个进行多语言翻译的模块,名字是gettext,我在哔哩哔哩和博客中搜到了很多关于它的使用教程,但很繁琐,还要用到一个不怎么好用的开源程序easypo或是需要付费的poedit,事实上后者会好用一些,但并没有减轻我开发的繁琐程度,于是研究了一下怎么用Python程序自动化这一过程,我发现了模块babel

关于gettext的基本使用参考上一段的哔哩哔哩链接,本篇文章重点不在于此。

babel 介绍

他的自我介绍是:Babel 是一个用于国际化 Python 应用的工具集合。

它的功能有:

  • 用于构建和使用 gettext 消息目录
  • 用于 CLDR(通用区域数据存储库)的 Python 接口,提供对各种区域显示名称、本地化数字和日期格式等的访问。

我主要使用第一个功能,后面的视程序开发进度决定。

我的自动化程序及使用方式

源代码

./babel_use.py

1
import os
2
import subprocess
3
4
# 配置变量
5
POT_FILE = 'messages.pot'
6
LOCALES_DIR = 'locales'
7
SRC_DIR = 'src'
8
9
def run_command(command):
10
"""运行系统命令"""
11
try:
12
subprocess.check_call(command, shell=True)
13
except subprocess.CalledProcessError as e:
14
print(f"执行时出错 {' '.join(command)}: {e}")
15
39 collapsed lines
16
def get_babel_cfg():
17
18
command = f"pybabel extract -F babel.cfg -o messages.pot ."
19
def extract_pot_file():
20
"""提取可翻译的文本生成.pot文件"""
21
command = f"pybabel extract -F babel.cfg -o {POT_FILE} {SRC_DIR}"
22
run_command(command)
23
24
def init_po_file(lang_code):
25
"""初始化翻译文件生成.po文件"""
26
po_file = os.path.join(LOCALES_DIR, lang_code, 'LC_MESSAGES', 'messages.po')
27
command = f"pybabel init -i {POT_FILE} -d {LOCALES_DIR} -l {lang_code}"
28
run_command(command)
29
30
def update_po_files():
31
"""更新翻译文件"""
32
command = f"pybabel update -i {POT_FILE} -d {LOCALES_DIR}"
33
run_command(command)
34
35
def compile_po_files():
36
"""编译.po文件生成.mo文件"""
37
command = f"pybabel compile -d {LOCALES_DIR}"
38
run_command(command)
39
40
def main():
41
# 提取.pot文件
42
extract_pot_file()
43
#
44
# # 初始化.po文件,这里以中文为例
45
# init_po_file('zh_CN')
46
#
47
# 更新.po文件
48
update_po_files()
49
50
# 编译.po文件
51
compile_po_files()
52
53
if __name__ == '__main__':
54
main()

程序文件的树结构

1
root:.
2
│ babel.cfg
3
│ babel_use.py
4
5
├──src
6
│ main.py
7
│ setup.py
8
9
├───assets
10
│ └───dark_ui
11
12
├───functions
13
└───uis

其中,src文件夹放置应用的主要程序,所有的_()都在里面。

程序初始化

第一次运行时,需要生成相应的po语言模块,调用函数的顺序为:

1
# 提取.pot文件
2
extract_pot_file()
3
#
4
# 初始化.po文件,这里以中文为例
5
init_po_file('zh_CN')

生成po文件后到locales/zh_CN/LC_MESSAGES/messages.po进行自己的翻译工作,翻译完成后构建mo文件:

1
# 编译.po文件
2
compile_po_files()

翻译文件更新

当程序内的字符串发生了变化,需要冲洗进行提取.pot文件,不需要冲洗生成po文件,而是使用更新原始po文件的命令(这样不会丢失以前的翻译好的文件)

1
# 提取.pot文件
2
extract_pot_file()
3
4
# 更新.po文件
5
update_po_files()

进行更新后的字符串的翻译,完成后编译为po文件,大功告成。

程序运行结束后的树结构

1
root:.
2
│ babel.cfg
3
│ babel_use.py
4
│ messages.pot
5
6
7
├───locales
8
│ └───zh_CN
9
│ └───LC_MESSAGES
10
│ messages.mo
11
│ messages.po
12
13
├───src
14
│ │ main.py
15
│ │ setup.py
8 collapsed lines
16
│ │
17
│ ├───assets
18
│ │ └───dark_ui
19
│ │
20
│ ├───functions
21
│ └───uis
22
23
└───__pycache__

一些有的没的

powersheel中展示树结构:

Terminal window
1
tree /f

视频链接参数

参数说明
high_quality1 最高画质 0 最低画质
danmaku1 打开弹幕 0 关闭弹幕
autoplay1 打开自动播放 0 关闭自动播放

iframe 参数

参数说明
allowfullscreentrue 允许全屏 false 不允许
sandboxallow-top-navigation allow-same-origin allow-forms allow-scripts 禁止弹出
width宽度
height高度
本文标题:国际化开发的经验
文章作者:公子语
发布时间:2024-12-20
总访问量
总访客数人次