残念ながら、この質問は以前に尋ねられましたが、私はここで気が狂います。私の Qt アプリケーションでは、ユーザーは言語を動的に変更することができ、それは私自身のすべての翻訳に最適です。私の QFileDialog への呼び出しでは機能しません。それぞれのコード:
void myapp::change_language(std::string& lang_str){
// my own translations works
qApp->removeTranslator(&this->app_lang);
this->app_lang.load(QString::fromStdString(lang_str));
qApp->installTranslator(&this->app_lang);
// system translations, works not for qfiledialog
qApp->removeTranslator(&this->app_lang_qt);
bool test = this->app_lang_qt.load("qt_fr.qm"); // returns true
qApp->installTranslator(&this->app_lang_qt);
}
と
void myapp::changeEvent(QEvent* event){
if(event->type() == QEvent::LanguageChange){
this->ui.retranslateUi(this);
}
QMainWindow::changeEvent(event);
}
と
QTranslator app_lang;
QTranslator app_lang_qt;
フランス語は簡単に検出できるため、固定文字列 "qt_fr.qm" はテスト用です。
私が望むのは、QFileDialog と QMessageBox への静的呼び出しで言語を変更することですが、言語は QFileDialog ではなく QMessageBox でのみ変更されます。両方のクラスについて、私は静的メンバーを呼び出しているだけで、問題になることはありません。また、このトランスレータを main.cpp にインストールしようとしましたが、結果は同じでした。