【问题标题】:translation doesn't work when executing application执行应用程序时翻译不起作用
【发布时间】:2013-12-04 12:23:37
【问题描述】:

我正在使用 Qt linguist 翻译我的应用程序(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);

【问题讨论】:

  • 你在main中安装了翻译器吗?
  • 是的,我为此编辑了我的问题

标签: qt user-interface translation linguistics


【解决方案1】:

Qt GUI 中的非翻译文本通常是由代码中的错误顺序引起的。

如果不阅读整个代码,就不可能准确回答。我建议你阅读Ui::retranslateUi()方法的内容。你会看到很多类似的代码:

button->setText(QApplication::translate("MainWindow", "Import", 0));

retranslateUi 方法是在编译 *.ui 文件时为您生成的,但它只是对您在 ui 文件中定义的小部件上的 setText()、setToolTip() 或其他 setXXX() 方法的调用列表.当调用setText() 方法时(例如),参数必须是tr("my text"),这个tr() 被替换为对应的翻译在你调用它的那一刻。因此,您应该在初始化表格小部件项目时检查您的翻译器是否已正确安装。

例如,如果您在 MainWindow 构造函数中创建您的项目,并且如果您有一个 main 函数,例如:

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() 来检查调用的顺序。

【讨论】:

  • 我真的真的很感激,非常感谢你,确实我的翻译器是在主窗口构造函数调用之后设置的,所以我想把“wind.tableWidget->horizo​​ntalHeaderItem(0)->setText (QObject::tr("我的非翻译文本"));"在翻译集之后,我不知道它是否不好,但它可以工作:)
【解决方案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

【讨论】:

  • 我的 .qm 文件是从 .qrc 文件加载的,翻译很好,我的问题是除了 tablewidget 水平标题文本之外的所有文本都被翻译了!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 2013-10-09
  • 2015-06-23
  • 2014-04-20
相关资源
最近更新 更多