英語とアラビア語の2つの言語のプログラムがapp_enとapp_arというファイルにあります。 QApplicationのinstallTranslatorを使用して、メインのプログラムを最初に翻訳することができます。私の質問は、QActionを押してプログラムの言語を変更するにはどうすればいいですか?私は私の言語QActionは、その後、選択したユーザの言語を取得し、それを保存し、翻訳をインストールするには、別の関数に行くのスロットに接続されているqtアプリケーションを動的に翻訳する方法は?
:
は、ここに私の試みです。これはすべてQMainWindowの外で発生します。
void MainCore::GetAndSaveLanguage(bool){
//Getting the language the users wants.
bool OKPressed;
QString Language = QInputDialog::getItem(NULL, InputDialogString, InputDialogString + ":", Languages, 0, false, &OKPressed)
.remove(QRegExp("*(", Qt::CaseSensitive, QRegExp::Wildcard)).remove(')');
//Checking if ok button was pressed.
if(OKPressed){
//Saving the languages.
Settings->beginGroup("Settings");
Settings->setValue("Language", Language);
Settings->endGroup();
//Update language.
UpdateTranslations(Language);
}
}
void MainCore::UpdateTranslations(QString Language){
//Setting the translation for the qt widgets.
QTranslator QtTranslator;
QtTranslator.load("qt_" + Language, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
QApplication::instance()->installTranslator(&QtTranslator);
//Setting the translation for the program.
QTranslator AppTranslator;
AppTranslator.load("app_" + Language, ":/translations");
QApplication::instance()->installTranslator(&AppTranslator);
}
私もQMainWindowに、このような画面のすべてのテキストを設定する関数を持っている
:
void Window::SetText(){
Menu->setTitle(tr("File"));
...
}
これは、ウィンドウが作成されたときに呼び出されるとChangeEventの機能にあります。
void Window::changeEvent(QEvent *event){
if(event->type() == QEvent::LanguageChange){
SetText();
}else{
QWidget::changeEvent(event);
}
}
...後でそれを削除できるようにするQtTranslatorへの参照を保持する必要がありますQApplicationインスタンスの子にすることを生涯制御します。 –