2017-03-01 9 views
1

私はPyQtプログラムを国際化しようとしています。私は自分自身の翻訳を読み込むことに問題はありませんが、ファイルダイアログがシステムロケールを使用しているように見えます。 thisのような回答は、Qtに同梱の翻訳ファイルをインストールすることで、組み込みのQtウィジェットを翻訳できるはずであることを示唆しています。Qtファイルダイアログの翻訳をロード中

Qtが提供するドイツ語の翻訳を読み込もうとしましたが、私のファイルダイアログはまだ英語で表示されています。これはQFileDialog静的関数でも使えますか?私は何か間違っているのですか?ドキュメントを深く掘り

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_() 

答えて

-1

は、私はこれが見つかりました:プラットフォーム は1を持っている場合、デフォルトで

を、プラットフォームのネイティブファイルダイアログが使用されます。この場合、ダイアログを構築するのに に使用されるウィジェットはインスタンス化されないので、layout()やitemDelegate()などの関連アクセサ はnullを返します。 DontUseNativeDialogオプションを設定して、ネイティブダイアログの代わりに 実装が使用されるようにすることができます。

だから、ネイティブダイアログは常にネイティブシステム言語を使用していると思います。私の例では、

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

(醜い)非ネイティブダイアログを使用してQtのを強制的に動作させることができ、しかし確実にネイティブダイアログのため、翻訳はすでにOSによって処理されますので、あなたがする必要はありません。何でもアプリケーションが強制的に現在のロケールと一致しないトランスレータを使用するように強制すると、エンドユーザーにはそのような状況は発生しません。開発中に適切にテストしたい場合は、独自のシステムロケールを変更して、アプリケーションが正しいトランスレータを検出して読み込むようにする必要があります。 – ekhumoro

関連する問題