创建一个配置项目文件
文本文件mul.pro,文件名和后缀名随意
文件配置格式要求
FORMS = mul.ui \
mulDialog.ui
SOURCES += Mul.py \
mulDialog.py
TRANSLATIONS = mul_zh_CN1.ts \
mul_en-US1.ts
CODECFORTR = UTF-8
CODECFORSRC = UTF-8
- FORMS 窗口ui文件
- SOURCES 自己创建的文件(不是qt设计师转换的UI代码文件,有个坑)
- TRANSLATIONS 对应的翻译文件名
- CODECFORTR 翻译文件的编码
- CODECFORSRC 不清楚
以下未验证:
- DESTDIR = translations
DESTDIR
: 指定生成翻译文件的输出目录。
- CONFIG += source_location
CONFIG
: 指定配置选项,如是否在翻译文件中包含源码行号。
- DEFINES += QT_DEPRECATED_WARNINGS
DEFINES
: 定义预处理宏,用于条件编译相关的内容。
- INCLUDEPATH += include
INCLUDEPATH
: 指定额外的包含目录。
生成语言文件ts
pyside2-lupdate.exe 文件在PySide2的安装包目录,以及Python的Script目录
pyside2-lupdate.exe -verbose mul.pro -noobsolete
pyside2-lupdate.exe 参数
Usage:
pyside2-lupdate [options] project-file
pyside2-lupdate [options] source-files -ts ts-files
Options:
-help Display this information and exit
-noobsolete
Drop all obsolete strings
-verbose
Explain what is being done
-version
Display the version of pyside2-lupdate and exit
默认ts文件状态:
<context encoding="UTF-8">
<name>MulDialog</name>
<message encoding="UTF-8">
<location filename="mulDialog.py" line="22"/>
<source>经过了多少 %d 秒</source>
<comment>备注</comment>
<translation type="unfinished"></translation>
</message>
</context>
小提示:
在变更UI控件或者自己的py文件后需要重新生成ts文件。但是ts文件会覆盖Qt语言专家以前编辑好的ts文件(导致翻译好的文件变成了默认状态。。。)。所以需要变更配置文件里面的ts文件名,这下知道为什么我的ts文件名后面有个1了吧。
使用Qt语言专家打开对应的ts文件
linguist.exe 文件在PySide2的安装包目录
使用快捷键Ctrl+b输入源信息
启动文件后,菜单栏文件打开可以多选ts文件
Qt语言专家
编辑好后点击菜单栏文件,然后选择发布全部,就能生成对应的qm文件了。
翻译好保存的ts文件状态:
<context encoding="UTF-8">
<name>MulDialog</name>
<message encoding="UTF-8">
<location filename="mulDialog.py" line="22"/>
<source>软件已运行时长 %d 秒</source>
<comment>备注</comment>
<translation type="unfinished">The software has been running for %d seconds</translation>
</message>
</context>
tr与QCoreApplication.translate
QObject.tr的用法:
QString QObject::tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1)
sourceText 文本信息
disambiguation 备注
n 不知道怎么用
self.ui.label.setText(self.tr('经过了多少 %d 秒', '备注') % (self._count))
QCoreApplication.translate 我用这个会乱码。
应用语言文件
应用大了以后动态切换语言很费力,建议重启变更。
程序启动加载语言文件:
try:
with APPCONFIG.open('r') as f:
config = json.load(f)
except:
config = {}
language = config.get('Language')
app = QApplication()
trans = QTranslator(app)
if language == 'en_us':
trans.load('mul_en-US.qm')
else:
trans.load('mul_zh-CN.qm')
app.installTranslator(trans)
动态切换语言文件:
每个UI文件对应生成的Python代码都有一个retranslateUi方法,
当变更语言后(调用app.installTranslator(trans))需要调用全部窗口的retranslateUi方法更新窗口