我正在使用Qt语言学家翻译我的应用程序(ui文件和其余代码)。 一切顺利,问题是所有翻译(在ui中)工作正常,除了一个不是从设计师添加的元素,这里是我的代码进一步解释:
tableWidget = new MyDropTableWidget(ui->verticalLayoutWidget_2);
if (tableWidget->columnCount() < 1)
tableWidget->setColumnCount(1);
tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("My non translated text"))); if (tableWidget->rowCount() < 21)
tableWidget->setRowCount(21);
...
ui->verticalLayout_2->addWidget(tableWidget);
...
ui 中的所有文字都被翻译得很好,只有“我的非翻译文本”没有。 * .ts文件正常(检测并检查了“我的非翻译文本”),.qm文件放置得很好,我重建 lupdate 重新 lrelease 我的应用程序但是在徒劳:在执行我的申请时,所有文本都被翻译,期望“我的非翻译文本”仍然是源语言。
任何帮助将不胜感激。
编辑:
在主文件中:
QTranslator Translator ;
qDebug()<<"Translator->load( lang)"<< Translator.load(":/"+language);
app.installTranslator( &Translator );
主窗口构造函数中的:
ui->retranslateUi(this);
答案 0 :(得分:4)
Qt GUI中的非翻译文本通常是由代码中的错误订单引起的。
如果不阅读整个代码,就无法准确回答。我建议你阅读Ui::retranslateUi()
方法的内容。您将看到许多代码,如:
button->setText(QApplication::translate("MainWindow", "Import", 0));
在编译* .ui文件时会为您生成retranslateUi
元文件,但它只是在小部件上调用setText()
,setToolTip()
或其他setXXX()方法的列表你在ui文件中定义的。调用setText()
方法时(例如),参数必须为tr("my text")
,此tr()将在您调用时替换为相应的翻译。因此,您应该检查初始化表格小部件项目时是否正确安装了转换程序。
例如,如果您在MainWindow构造函数中创建项目,并且您有一个主函数,如:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow w;
QTranslator Translator ;
qDebug()<<"Translator->load( lang)"<< Translator.load(":/"+language);
app.installTranslator( &Translator );
w.show();
return app.exec();
}
它不起作用,因为翻译器是在MainWindow构造函数调用之后安装的,所以当初始化项目时,不会设置翻译器。
要在您的情况下找到问题,我建议您在某些时候调用qDebug()来检查调用的顺序。
答案 1 :(得分:2)
您的.qm
是否与二进制文件位于同一文件夹中?
当您使用tr()
函数时,应该翻译文本。我在我的程序中使用这种语法,翻译工作正常:
QTranslator translator;
if (QLocale::system().language() == QLocale::French)
translator.load("fr_lang", QCoreApplication::applicationDirPath());
else
translator.load("en_lang", QCoreApplication::applicationDirPath());
app.installTranslator(&translator);
我的翻译文件是fr_lang.qm
和en_lang.qm