2017-03-01 3 views
1

Ich versuche mein PyQt-Programm zu internationalisieren. Ich habe kein Problem damit, meine eigenen Übersetzungen zu laden, aber ich habe bemerkt, dass Dateidialoge immer noch das Systemgebietsschema verwenden. Antworten wie this schlagen vor, dass ich in der Lage sein sollte, eingebaute Qt-Widgets zu übersetzen, indem ich die mit Qt gelieferten Übersetzungsdateien installiere.Übersetzungen für Qt-Datei-Dialog laden

Ich habe versucht, die deutschen Übersetzungen, die Qt bietet, zu laden, aber mein Dateidialog wird immer noch in Englisch angezeigt. Funktioniert das mit den statischen Funktionen QFileDialog? Mache ich etwas falsch?

from PyQt5 import QtCore, QtWidgets 


class Window(QtWidgets.QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 

     button = QtWidgets.QPushButton('Show dialog') 
     button.clicked.connect(self.showdialog) 
     layout = QtWidgets.QVBoxLayout(self) 
     layout.addWidget(button) 

    def showdialog(self): 
     QtWidgets.QFileDialog.getOpenFileName() 


if __name__ == '__main__': 
    app = QtWidgets.QApplication([]) 

    translator = QtCore.QTranslator() 
    if translator.load('qt_de', QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)): 
     app.installTranslator(translator) 
     print 'qt translations installed' 

    win = Window() 
    win.show() 
    app.exec_() 

Antwort

-1

Graben tiefer in die Dokumentation, fand ich dies:

standardmäßig eine Plattform-native Dateidialog verwendet werden, wenn die Plattform ein hat. In diesem Fall werden die Widgets, die andernfalls verwendet werden würden, um das Dialogfeld zu erstellen, nicht instanziiert, sodass verwandte Accessoren wie layout() und itemDelegate() null zurückgeben. Sie können die Option DontUseNativeDialog festlegen, um sicherzustellen, dass die widgetbasierte -Implementierung anstelle des systemeigenen Dialogfelds verwendet wird.

Also ich denke, der native Dialog wird immer die native Systemsprache verwenden. Mein Beispiel kann durch Erzwingen Qt zu verwenden, um den (hässlich) nicht-native Dialog

def showdialog(self): 
    dialog = QtWidgets.QFileDialog(self) 
    dialog.setOptions(QtWidgets.QFileDialog.DontUseNativeDialog) 
    dialog.exec_() 
+0

Aber sicher für native Dialoge, die Übersetzung bereits behandelt wird durch das Betriebssystem arbeiten gemacht werden, so dass Sie nicht tun müssen, um etwas. Das einzige Mal, dass Sie eine Diskrepanz sehen, ist, wenn Sie Ihre Anwendung zwingen, einen Übersetzer zu verwenden, der nicht mit dem aktuellen Gebietsschema übereinstimmt - und diese Situation sollte niemals für den Endbenutzer entstehen. Wenn Sie die Dinge während der Entwicklung richtig testen möchten, müssen Sie Ihr eigenes Systemgebietsschema ändern und sicherstellen, dass Ihre Anwendung den richtigen Übersetzer erkennt und lädt. – ekhumoro

Verwandte Themen