吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 711|回复: 2
收起左侧

[学习记录] PySide2多国语言

[复制链接]
Cool_Breeze 发表于 2024-3-21 11:39
本帖最后由 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目录

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语言专家

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方法更新窗口

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
v.n.lee + 3 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

v.n.lee 发表于 2024-3-21 13:23
挺好的教程
lvhaiqiang 发表于 2024-3-21 15:05
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表