QTranslator 没有在 PyQt5 中持久安装

Posted

技术标签:

【中文标题】QTranslator 没有在 PyQt5 中持久安装【英文标题】:QTranslator not installing persistently in PyQt5 【发布时间】:2018-03-17 11:32:50 【问题描述】:

我正在使用 PyQt5 开发一个应用程序,我遇到了与框架的 i18n 函数相关的问题,特别是所有与 QTranslator 相关的代码。

正如文档所说,我正在使用 QTranslator 对象来加载已编译的 .qm 文件,如下所示:

tr_object = QTranslator()
tr_object.load(current, "lang")
QCoreApplication.installTranslator(tr_object)

问题在于它似乎只是“临时”安装它,即如果我在之后立即调用 translate() 它可以工作,但是就好像翻译器被立即卸载了。

我目前(丑陋的)解决方法是用包装器替换 QCoreApplication 中的 translate() 函数,该包装器每次都重新安装翻译器,但这会产生非常大的开销,从而减慢一切。

我也尝试过使用我的 QApplication 实例而不是静态 QCoreApplication,同样的问题。 QT_TR_NOOP 宏也不起作用。

【问题讨论】:

@ekhumoro 哦。好。哈哈。我觉得我好笨。你能把你的评论放在答案中吗?这样我就可以接受了 【参考方案1】:

Qt 不拥有翻译器的所有权,因此您需要在 python 端保留对它的引用以阻止它被垃圾收集。

【讨论】:

以上是关于QTranslator 没有在 PyQt5 中持久安装的主要内容,如果未能解决你的问题,请参考以下文章

QTranslator 在 if 语句中使用时不起作用

为啥我需要一个 QTranslator 来在 Windows 上的 QMessageBox 中本地化按钮文本?

如何从应用程序中删除所有 QTranslator?

具有真实 QLocale 的 Canonical QTranslator 示例

QTranslator 如何处理语言环境修饰符 PyQT?

QTranslator 仅适用于我的程序的某些部分