перевод не работает при выполнении приложения

Я использую Qt-лингвист для перевода своего приложения (файл пользовательского интерфейса и остальной код). Все идет хорошо, проблема в том, что все переводы (в пользовательском интерфейсе) работают нормально, за исключением элемента, добавленного не из дизайнера, вот мой код для дальнейшего объяснения:

 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 хорошо расположен, я перестраиваю re lupdate re lrelease мое приложение, но в напрасно: при выполнении моего приложения все тексты переводятся, за исключением «Мой непереведенный текст», все еще на исходном языке.

Любая помощь будет оценена.

Редактировать:

в основном файле:

QTranslator  Translator ;
qDebug()<<"Translator->load( lang)"<< Translator.load(":/"+language);
app.installTranslator( &Translator );

в конструкторе главного окна:

ui->retranslateUi(this);

person Oumaya    schedule 04.12.2013    source источник
comment
Вы установили переводчик в main?   -  person ratchet freak    schedule 04.12.2013
comment
Да, я отредактировал свой вопрос для этого   -  person Oumaya    schedule 04.12.2013


Ответы (2)


Непереведенный текст в графическом интерфейсе Qt часто вызван неправильным порядком в вашем коде.

Невозможно точно ответить, не прочитав весь код. Я предлагаю вам прочитать содержание метода Ui::retranslateUi(). Вы увидите много кода, например:

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

Метод retranslateUi генерируется для вас при компиляции файла *.ui, но это всего лишь список вызовов методов 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(), чтобы проверить порядок вызовов.

person Antwane    schedule 05.12.2013
comment
Я действительно очень ценю это, большое спасибо, это правда, что мой переводчик был установлен после вызова конструктора главного окна, поэтому я думаю поставить wind.tableWidget-›horizontalHeaderItem(0)-›setText(QObject::tr(My non- переведенный текст)); после установки перевода, не знаю, плохо ли это, но работает :) - person Oumaya; 06.12.2013

Ваш .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

person Kévin Renella    schedule 04.12.2013
comment
мои файлы .qm загружаются из файла .qrc, перевод в порядке, моя проблема в том, что переведены все тексты, кроме текста tablewidget horizontalheader !!!! - person Oumaya; 04.12.2013