qApp->installTranslator() 和 tr 没有翻译?
qApp->installTranslator() and tr didn't translate?
我正在尝试动态更改我的应用程序语言:
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");
我总是得到英文的"我的英文文本"。
任何帮助将不胜感激。
关于您的最新评论:
没有预定义的字典,您需要自己翻译字符串(或让其他人翻译它们)。
为此,您需要执行以下步骤:
- 在代码中调用 tr()
- 将类似
TRANSLATIONS += qt_fr.ts
的内容添加到您的 .pro 文件中 - 调用
lupdate -verbose <yourprofile>.pro
以创建一个XML结构的.ts文件,其中包含应翻译的文本 - 调用
linguist qt_fr.ts
以启动Qt Linguist并轻松翻译字符串 - 从Qt Linguist或使用
lupdate
生成.qm文件 - 运行应用程序
这里有一个关于使用翻译的教程。
相关文章:
- 不同翻译单元中不可重载的非内联函数定义
- 需要将一行代码从C++ Qt翻译成PyQt
- 为什么未命名的结构内联变量在每个翻译单元中没有相同的地址?
- 在没有 API 的情况下使用谷歌翻译文本
- 如何执行 cppcheck 交叉翻译单元 (CTU) 静态分析?
- 模板变量是否允许在多个翻译单元中并有效合并?
- 在"template"和函数声明之间使用:template<typename trait> using tr = base_trait<trait> void fn(tr::t
- 是否允许类在程序中的不同翻译单元之间具有不同的定义?
- 我怎样才能代替使用新的使用malloc翻译
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 如何将 'in' 关键字从 python 翻译成 c++?
- 为什么不同的翻译单元没有独立和沙盒的内存空间?
- 如何用c语言翻译openssl命令pbkdf2
- 为什么编译器不在同一翻译单元中警告 ODR 违规
- 静态变量在同一个翻译单元中被静态方法使用时是否保证被初始化?
- 如何翻译这个给定代码中的 ::* 运算符和member_fn?
- 来自不同翻译单元的函数会干扰吗?
- 在 opengl 中翻译相机时遇到问题
- 如何记录QObject::tr的原始字符串,并仍然向GUI显示翻译
- qApp->installTranslator() 和 tr 没有翻译?