Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: GraninDm от Ноябрь 16, 2015, 11:03



Название: Translator не переводит один исходник
Отправлено: GraninDm от Ноябрь 16, 2015, 11:03
Добрый день!

Проблема в том, что не переводится один cpp.
Файл переводов подгружается.
В linguist перевод виден и переведен.

Код:
BaseEditDocWidget *w = new BaseEditDocWidget(); // Переводится
FPEditor *ew = new FPEditor(); // Не переводится

w->setParent(this,Qt::Window);
ew->loadDocumentById(rId);
w->setEditorWidget(ew);
w->show();

Куда рыть?


Название: Re: Translator не переводит один исходник
Отправлено: gil9red от Ноябрь 16, 2015, 11:23
Переводятся ведь строки в tr() а так вообще не понятно, что у вас там внутри и переведено ли вообще для FPEditor


Название: Re: Translator не переводит один исходник
Отправлено: GraninDm от Ноябрь 16, 2015, 11:29
Все там в tr.
Я же написал: "В linguist перевод виден и переведен."

Цитировать
void FPEditor::setupWidgets()
{
    QGridLayout *lay = new QGridLayout();
    QLabel *label = new QLabel(tr("Number"));


Название: Re: Translator не переводит один исходник
Отправлено: Bepec от Ноябрь 16, 2015, 11:47
Всё там правильно написано, ошибок нет, я идеален, зачем вам код, сами догадайтесь обо всём, наверно это Qt багает!!!

PS сарказм


Название: Re: Translator не переводит один исходник
Отправлено: GraninDm от Ноябрь 16, 2015, 12:14
Какой код еще нужен? Я выложу...

Сейчас удалил весь перевод.
Запустил lupdate
Перевел две строки из FPEditor
Запустил lrelease
Файл qm создался
Эти две строки там есть.
translator.load возвращает true.


Название: Re: Translator не переводит один исходник
Отправлено: GraninDm от Ноябрь 16, 2015, 13:06
Код:
QLabel *label = new QLabel(QApplication::translate("test", "Number"));
Вот так заработало.

Код:
QLabel *label = new QLabel(QObject::tr("Number"));
И так тоже.

Код:
QLabel *label = new QLabel(tr("Number"));
А так нет.

Наследование такое
FPEditor::FPEditor(QWidget *parent) : BaseDocEditor(parent)
BaseDocEditor::BaseDocEditor(QWidget *parent) : QWidget(parent)

А так подозреваю, что это происходит из-за того что FPEditor не унаследован напрямую от класса qt.
Что в этом случае делать?

Дополню...
Даже так работает
Код:
QLabel *label = new QLabel(BaseDocEditor::tr("Number"));


Название: Re: Translator не переводит один исходник
Отправлено: gil9red от Ноябрь 16, 2015, 14:30
А как выглядит FPEditor.h?


Название: Re: Translator не переводит один исходник
Отправлено: GraninDm от Ноябрь 16, 2015, 14:47
Я понял в чем была моя проблема.

В объявлении FPEditor не было Q_OBJECT
Из-за этого this->metaObject()->className() не устанавливался.

Вывод в конструкторах без Q_OBJECT
BaseDocEditor::BaseDocEditor(QWidget*) this->metaObject()->className() BaseDocEditor
FPEditor::FPEditor(QWidget*) this->metaObject()->className() BaseDocEditor
Соответственно транслятор искал другой контекст

А с Q_OBJECT
BaseDocEditor::BaseDocEditor(QWidget*) this->metaObject()->className() BaseDocEditor
FPEditor::FPEditor(QWidget*) this->metaObject()->className() FPEditor

Все заработало.


Название: Re: Translator не переводит один исходник
Отправлено: Bepec от Ноябрь 16, 2015, 14:53
А ответ на ваш вопрос -
Цитировать
"Какой код еще нужен?"
ВЕСЬ! :D


Название: Re: Translator не переводит один исходник
Отправлено: gil9red от Ноябрь 16, 2015, 15:39
Я понял в чем была моя проблема.

В объявлении FPEditor не было Q_OBJECT
Из-за этого this->metaObject()->className() не устанавливался.

Вывод в конструкторах без Q_OBJECT
BaseDocEditor::BaseDocEditor(QWidget*) this->metaObject()->className() BaseDocEditor
FPEditor::FPEditor(QWidget*) this->metaObject()->className() BaseDocEditor
Соответственно транслятор искал другой контекст

А с Q_OBJECT
BaseDocEditor::BaseDocEditor(QWidget*) this->metaObject()->className() BaseDocEditor
FPEditor::FPEditor(QWidget*) this->metaObject()->className() FPEditor

Все заработало.

А я вот и засомневался влияет ли наличие Q_OBJECT кроме сигналов/слотов на на трансляцию или нет :)


Название: Re: Translator не переводит один исходник
Отправлено: GraninDm от Ноябрь 16, 2015, 16:41
А так понял Q_OBJECT влияет на metaObject.
А QTranslator берет контекст перевода из metaObject()->className().


Название: Re: Translator не переводит один исходник
Отправлено: lit-uriy от Ноябрь 18, 2015, 07:24
GraninDm, теоретически, ты это должен был заметить в Лингвисте, он же там по контекстам группирует. Теоретически - потому что я твою ситуацию не проверял.


Название: Re: Translator не переводит один исходник
Отправлено: GraninDm от Ноябрь 18, 2015, 12:59
В Лингвисте контекст был правильный.