PyQt5:强制特定语言翻译

2024-10-03 13:26:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试翻译成一种特定的语言,不管在应用程序中选择哪种语言。我试图不改变应用程序的语言,所以即使知道我所使用的应用程序,我也不认为这对我有帮助。下面我有一个alwaysTranslate()方法,我总是希望返回翻译后的文本,即使我在应用程序中卸载翻译程序(或在这种情况下,我只是没有一个)。在

import sys
from os import getcwd
from PyQt5.QtWidgets import QApplication
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(556, 362)
        self.verticalLayout = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout.setObjectName("verticalLayout")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.label = QtWidgets.QLabel()
        self.verticalLayout.addWidget(self.label)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        self.label.setText(_translate("Ui_Form", "something"))

    # this is what I want to come back with a local translation
    def alwaysTranslate(self):
        qt_translator = QtCore.QTranslator()
        m_langPath = getcwd()
        qt_translator.load("test.qm", m_langPath)
        _translate = QtCore.QCoreApplication.translate
        print("should NOT be 'something': " + _translate("Ui_Form", "something"))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    qt_translator = QtCore.QTranslator(app)

    m_langPath = getcwd()
    _translate = QtCore.QCoreApplication.translate

    qt_translator.load("test.qm", m_langPath)
    app.installTranslator(qt_translator)
    print("should NOT be 'something': " + _translate("Ui_Form", "something"))

    qt_translator.load("en.qm", m_langPath)
    app.installTranslator(qt_translator)
    print("should be 'something': " + _translate("Ui_Form", "something"))

    ex =  Ui_Form()
    ex.alwaysTranslate()
    sys.exit(app.exec_())

我的测试.ts文件外观

^{pr2}$

当我运行它时,我得到以下结果

should NOT be 'something': matters not
should be 'something': something
should NOT be 'something': something

最后一个我想成为“无关紧要”的人。在


Tags: selfformapp应用程序uibeqtsomething
1条回答
网友
1楼 · 发布于 2024-10-03 13:26:15

我没试过,但我觉得这应该行得通:

def alwaysTranslate(self):
    qt_translator = QtCore.QTranslator()
    m_langPath = getcwd()
    qt_translator.load("test.qm", m_langPath)
    # use local translator
    _translate = qt_translator.translate
    print("should NOT be 'something': " + _translate("Ui_Form", "something"))

相关问题 更多 >