执行应用程序时,转换不起作用

时间:2013-12-04 12:23:37

标签: qt user-interface translation linguistics

我正在使用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);

2 个答案:

答案 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.qmen_lang.qm