0

アプリケーション言語を動的に変更しようとしています:

void MainWindow::ChangeEvent(QEvent *event, QString *language)
{
    if (event->type() == QEvent::LanguageChange) {
        RetranslateInterface(language);
        //ui.retranslateUi(this);
    }
    QWidget::changeEvent(event);
}

void MainWindow::RetranslateInterface(QString *language) {

    QString lang = language->remove(2, language->length());
    lang = lang.toLower();
    qDebug()<<"lang"<<lang;

    lang = "qt_" + lang + ".qm";
    qDebug()<<"lang"<<lang;

    if ( Translator )
        qApp->removeTranslator( Translator );

    qDebug()<<"Translator->load( lang)"<< Translator->load( QApplication::applicationDirPath()+"/"+ lang);
    qApp->installTranslator( Translator );

    //qDebug()<<"tr >>>>"<<qApp->translate("MainWindow","my english text");
    setWindowTitle(tr("my english text"));


}

void MainWindow::Slot_ChLangue(QAction* Trigaction)
{

    QString Selectedlanguage = Trigaction->text();
    qDebug()<<"selected language"<<Selectedlanguage;

    if (!Selectedlanguage.isEmpty()) {

        QEvent *translate = new QEvent(QEvent::LanguageChange);
        ChangeEvent(translate, &Selectedlanguage);
    }
}

「qt_*.qm」が読み込まれましたがsetWindowTitle(tr("my english text"));、適切なテキストが設定されませんでした

メイン関数でこれを試しましたが、どちらも機能しませんでした:

QTranslator translator;
       if(QFile::exists(QApplication::applicationDirPath()+"/qt_fr.qm"))
       qDebug()<<"loaded"<<translator.load(QApplication::applicationDirPath()+"/qt_fr.qm");
       app.installTranslator(&translator);
       qDebug()<<"out en français"<<app.tr("my english text");

私はいつも「私の英語のテキスト」を英語で受け取ります。

どんな助けでも大歓迎です。

4

1 に答える 1

3

あなたの最新のコメントについて:

定義済みの辞書はありません。文字列を自分で翻訳する必要があります (または他の人に翻訳してもらう必要があります)。

これを行うには、次の手順が必要です。

  • コードで tr() 呼び出しを行う
  • TRANSLATIONS += qt_fr.ts.pro ファイルに次のようなものを追加します
  • lupdate -verbose <yourprofile>.pro翻訳するテキストを含む XML 構造の .ts ファイルを作成するために呼び出します
  • linguist qt_fr.tsQt Linguist を起動して文字列を簡単に翻訳するために呼び出す
  • Qt Linguist から、または次を使用して .qm ファイルを生成します。lupdate
  • アプリケーションを実行する

ここに翻訳の使用に関するチュートリアルがあります。

于 2012-11-23T14:48:43.160 に答える