前面几篇把工作台的开发流程基本学习完,本篇仅对多语言进行一个补充;
FreeCAD
本身是基于多语言的,界面使用 Qt
的多语言实现,所以工作台的多语言实现也基本遵循 Qt
的多语言方案。
一、准备工作
- 增加一个
translations
目录,用于保存.ts
文件(“源”翻译文件)和.qm
文件(编译的翻译文件); - 安装
lupdate
、lconvert
、lrelease
和pylupdate
工具,他们用于提取和生成语言包;- 在 Linux 里,他们包含在
pyside-tools
或pyside2-tools
的包中; - 在 Windows 里,需要安装
PySide5
或PySide6
,可使用:python -m pip install PySide5
进行安装;
- 在 Linux 里,他们包含在
二、修改 .py 文件
- 首先需要定义:
- translate():
- 可以直接引用 FreeCAD 里的函数
import FreeCAD translate = FreeCAD.Qt.translate
- 该函数会在运行时使用当前语言替换字符串;
- 可以直接引用 FreeCAD 里的函数
- QT_TRANSLATE_NOOP():
- 可以定义为
def QT_TRANSLATE_NOOP(context, text): return text
- 本函数不会在运行执行任何操作,仅作为提取字符串用,它需要和
translate
配合使用,比如当在translate
函数调用时使用了变量时; - 本篇暂时不使用该函数;
- 可以定义为
- translate():
- 用法:
# 原语句 print("My text") # 修改为: print(translate("context", "My text"))
-
context
: 表示上下文,可以理解为分组,相同的分组会在语言文件被放到一起; -
My text
: 表示需要被翻译的字符串
-
- 将所有需要被翻译的地方,用
translate
函数来代替; - 在工作台初始化时增加以下代码:
FreeCADGui.addLanguagePath("translations目录的绝对路径") FreeCADGui.updateLocale()
三、提取和编译翻译文件
-
收集和提取字符串
pylupdate *.py -ts translations/myproject.ts
-
如果有多个 ts 文件,先把他们合并成一个
lconvert -i translations/a.ts translations/b.ts -o translations/one.ts
生成
ts
文件后,可以将他们上传到 Crowdin 或 Transifex 等翻译平台,等翻译完成后,即可下载翻译完成的文件,通常为zip
文件,包含一个或多个已翻译的ts
文件;-
将这些
ts
文件放到translations
,然后执行以下脚本进行编译lrelease "translations/Maze_zh-CN.ts"
编译完成后,将产生一个同名的
.qm
文件,如Maze_zh-CN.qm
,这个文件会被FreeCAD
读取和使用。
小结
本节仅简单介绍了多语言需要的工具和函数,实际应用过程中通常可以将他们编写成自动化脚本进行操作,这里不再展开。
原始内容请参考:https://github.com/ronggang/study-freecad