2013-12-04 3 views
1

Я использую 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); 
      ... 

всех текстов в ще переводится хорошо, только «Мой не переведенный текст» не был. * .ts файл в порядке («Мой не переведенный текст» был обнаружен и проверен), .qm-файл хорошо размещен, я перестраиваю re lupdate re lrelease мое приложение, но напрасно: при выполнении моего приложения все тексты переводятся в ожидании «Мой не переведенный текст», все еще на исходном языке.

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

Edit:

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

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

в MainWindow конструктор:

ui->retranslateUi(this); 
+0

Вы установили переводчика в основном? –

+0

Да, я отредактировал мой вопрос для этого – Oumaya

ответ

4

нетранслируемую текста в Qt GUI часто вызывается плохой порядок в коде ,

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

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

retranslateUi Metod создается для вас при компиляции * .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(), чтобы проверить порядок вызовов.

+0

Я действительно очень ценю это, большое спасибо, это правда, что мой переводчик был настроен после вызова конструктора mainwindow, поэтому я думаю, чтобы поставить «wind.tableWidget-> horizontalHeaderItem (0) -> setText (QObject :: tr (" Мой нетранслируемый текст "));" после набора перевода я не знаю, плохо ли это, но он работает :) – Oumaya

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

+0

. Мои файлы .qm загружаются из файла .qrc, перевод в порядке, моя проблема в том, что все тексты переведены, за исключением tablewidget horizontalheader text !!!! – Oumaya

Смежные вопросы