【发布时间】:2012-11-23 14:04:33
【问题描述】:
我正在尝试动态更改我的应用程序语言:
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")); 未设置适当的文本
我在 main 函数中试过了,它也不起作用:
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");
我总是得到英文的“我的英文文本”。
任何帮助将不胜感激。
【问题讨论】:
-
你能显示你的 .qm 文件的内容吗?至少包含“我的英文文本”翻译的行以及周围的行
-
其实.ts文件会更有帮助
-
我认为我错过了理解方法:我认为 .qm 文件就像字典一样为我完成所有工作:(,.qm 文件应该包含我所有的翻译字符串,对吗?
标签: c++ qt translation