Вопросы о интернационализации Qt

У меня проблемы с выяснением, как использовать Qt для создания файлов перевода для приложения на Python.

Я использую Python 2.7, Qt версии 5.9.1 и PyQt4 4.12.1 для создания моего GUI на OSX 10.11.6.

Сейчас я просто хотел перевести несколько слов в моем коде.

Для того, что я понимаю, я должен использовать QtLinguist, чтобы открыть файл.ts, перевести слова и создать файл.qm, который затем будет использоваться python.

Со страницы Qt Linguist я узнал, что мне нужно использовать файл проекта.pro, который будет прочитан pylupdate4, так далее...

Теперь я могу создать файл.pro?

Я пробовал бегать:

$ qmake -project myfile.py
$ pylupdate4 myfile.pro -ts file.ts

но полученный.pro файл не может быть прочитан pylupdate4 (XML error: Parse error at line 1, column 1 [...])

Из этого урока я попробовал:

$ pylupdate4 myfile.py -ts file.ts

Который создает пустой файл.ts, который Qt Linguist не может открыть.

Может кто-нибудь дать мне какой-нибудь совет, что может быть не так, 15 вкладок, которые я открыл в своем браузере, не помогают.

Вот мой код Python, если вам это нужно:

import sys
import os.path as osp
import os
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QWidget):

    def __init__(self):
        super(MainWindow,self).__init__()

        # Set MainWindow geometry, use settings of last session. If it's first session,
        # use defaulted settings
        self.settings = QtCore.QSettings('Paul',QtCore.QSettings.NativeFormat)
        self.resize(self.settings.value("size", QtCore.QSize(500, 300)).toSize())
        self.move(self.settings.value("pos", QtCore.QPoint(5, 5)).toPoint());

        self.initUI()


    def closeEvent(self, e):
        #Save MainWindow geometry session when closing the window
        self.settings.setValue("size",self.size())
        self.settings.setValue("pos",self.pos())
        e.accept()

    def initUI(self):

        self.hbox = QtGui.QVBoxLayout(self) # Create Vertival box layout to put the buttons
        self.myButtons = QtGui.QPushButton('button',self) #create push button
        self.myButtons.setStyleSheet("""QPushButton { background-color: red; font:bold 20px}""")
        self.myButtons.setToolTip('Push this button')
        self.myButtons.setText(self.tr(QtCore.QString('yes')))
        comboBox=QtGui.QComboBox(self) #create drop down menu
        comboBox.addItem('Portugues')
        comboBox.addItem('English')
        self.hbox.addWidget(comboBox,1,QtCore.Qt.AlignRight) #add drop down menu to box layout
        self.hbox.addStretch(3)      # set separation between buttons
        self.myButtons.clicked.connect(self.buttonClicked) # what should the button do
        self.hbox.addWidget(self.myButtons,1,QtCore.Qt.AlignRight) #add button to box layout


        self.setWindowTitle('Test2')


        self.show()


    def buttonClicked(self):

        msbox= QtGui.QMessageBox()
        choice=msbox.warning(self,'ok',"This button doesn't do anything!!!")


        if choice == QtGui.QMessageBox.No:
            print('nanan')
        else:
            print('Bye')
            self.settings.setValue("size",self.size());
            self.settings.setValue("pos",self.pos());
            sys.exit()

def main():

    app = QtGui.QApplication(sys.argv)
    translator = QtCore.QTranslator()
    translator.load("~/basefiles/translations/qt_pt.qm")
    app.installTranslator(translator)
    ex = MainWindow()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()  

1 ответ

Решение

Когда вы используете self.tr, вы должны передать строку, а не переменную QString, в вашем случае она меняется:

self.myButtons.setText(self.tr(QtCore.QString('yes')))

в

self.myButtons.setText(self.tr("yes"))

И запустить все снова.

Другие вопросы по тегам