PySide2多国语言
本帖最后由 Cool_Breeze 于 2024-3-21 11:44 编辑## 创建一个配置项目文件
文本文件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目录
```bash
pyside2-lupdate.exe -verbose mul.pro -noobsolete
```
pyside2-lupdate.exe参数
```
Usage:
pyside2-lupdate project-file
pyside2-lupdate source-files -ts ts-files
Options:
-helpDisplay 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文件状态:
```html
<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文件
编辑好后点击菜单栏文件,然后选择发布全部,就能生成对应的qm文件了。
翻译好保存的ts文件状态:
```html
<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的用法:
### (https://doc.qt.io/qt-6/qstring.html) QObject::tr(const char **sourceText*, const char **disambiguation* = nullptr, int *n* = -1)
sourceText 文本信息
disambiguation 备注
n 不知道怎么用
```python
self.ui.label.setText(self.tr('经过了多少 %d 秒', '备注') % (self._count))
```
QCoreApplication.translate 我用这个会乱码。
## 应用语言文件
应用大了以后动态切换语言很费力,建议重启变更。
程序启动加载语言文件:
```python
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**方法更新窗口 挺好的教程 参考了学废了 {:1_893:}
页:
[1]