Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: xelax от Ноябрь 30, 2009, 23:39



Название: РЕШЕНО: Непонятное поведение при смене контекста
Отправлено: xelax от Ноябрь 30, 2009, 23:39
Здравствуйте.
Я в ауте... Вводные:
Имеется приложение, оно работает  ;) Возник вопрос интернационализации. Имеется файл ts, все строки, выдающиеся пользователю обернуты в tr. Реализовал динамическую смену языка по требованию пользователя.
Проблема:
В классе, насленике QMainWindow, в одном из методов ругаемся пользователю вот так:
Код:
QMessageBox::question(this, "MapConvertor"
               ,tr("Do you really want to quit?")
               ,QMessageBox::Yes | QMessageBox::No
               ,QMessageBox::No)

Запускаем в аглицком варианте перевода - все хорошо. Сменяем на русский - сообщение Do you really want to quit? выдается на аглицком. Хотя в лингвисте переведен. Даже в ts заглянул. При дальнейших раскопках видно, что это происходит со ВСЕМИ подобными вызовами. А теперь внимание: если написать так
Код:
QMessageBox::question(this, "MapConvertor"
               ,QObject::tr("Do you really want to quit?") // <----
               ,QMessageBox::Yes | QMessageBox::No
               ,QMessageBox::No)
то все работает как надо, переводится. Ощущение что дело где то контексте.
Весь день пытался понять в чем дело. Если кто сталкивался, пожалуйста, подскажите, где я дурак.


Название: Re: Непонятное поведение при смене контекста локализации
Отправлено: lit-uriy от Декабрь 01, 2009, 04:17
а при таких изменениях, в лингвисте положение данной строки меняется (из одного контекста в другой)?


Название: Re: Непонятное поведение при смене контекста локализации
Отправлено: xelax от Декабрь 01, 2009, 11:07
Да, положение строки меняется в лингвисте, переходит из MainWindow в QObject и обратно. И даже помечается как obsolete, т.е. для ее удаления запускаю lupdate -no-obsolete.
Запускаю и компилю в Kubuntu 9.10. Надо будет в винде попробовать сегодня.


Название: Re: Непонятное поведение при смене контекста локализации
Отправлено: xelax от Декабрь 01, 2009, 21:57
Интереса ради попробую сегодня в Qt 4.6


Название: Re: Непонятное поведение при смене контекста локализации
Отправлено: lit-uriy от Декабрь 01, 2009, 22:50
проверил на 4.4.3, оба варианта работают.

Ты не забыл указать кодировку? (хотя при этом видел бы просто лажу)


Название: Re: Непонятное поведение при смене контекста локализации
Отправлено: xelax от Декабрь 01, 2009, 22:58
Нет, с кодировкой я ничего не делал, т.к. в остальных диалогах то работает. Тупизм появляется только в наследнике QMainWindow.


Название: Re: Непонятное поведение при смене контекста
Отправлено: xelax от Декабрь 03, 2009, 14:32
Все разрешилось путем сборки в Qt 4.6
Я ничего не меняя сравнил работу в 4.5 и в 4.6. В 4.6. как надо все.


Название: Re: РЕШЕНО: Непонятное поведение при смене контекста
Отправлено: Dendy от Декабрь 10, 2009, 01:49
Уж не знаю в чём была причина, но первая мысль - в наследнике QMainWindow был забыт макрос Q_OBJECT. Следовательно - при переводе брался контекст QMainWindow, а не MainWindow.


Название: Re: РЕШЕНО: Непонятное поведение при смене контекста
Отправлено: xelax от Декабрь 10, 2009, 17:20
Насчет макроса - это первое что я посмотрел. Он был. В принципе, бог с ним, сейчас проблема пропала.