Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: TrimS от Июль 13, 2012, 12:19



Название: Проблема с переводом интерефейса.QTranslator.
Отправлено: TrimS от Июль 13, 2012, 12:19
Подскажи те как правильно работать с QTranslator.
Нарисовал форму, сделал логику. Сделал файл перевода. Установил через QTranslator требуемое направление перевода.
Проблема - все статические надписи переводятся хорошо. Но есть несколько надписей, где текст меняется в зависимости от условий. Так вот этот текст не переводится. Текст хранится в виде таких строк:
Код:
const QString start_txt			( QObject::tr("Start") );


Почему не происходит перевод? Как добится перевода динамически изменяемого текста?


Название: Re: Проблема с переводом интерефейса.QTranslator.
Отправлено: Пантер от Июль 13, 2012, 12:25
Покажи код подгрузки и установки перевода.


Название: Re: Проблема с переводом интерефейса.QTranslator.
Отправлено: TrimS от Июль 13, 2012, 12:39
Код
C++ (Qt)
QApplication a(argc, argv);
 
TurnOffer w;
w.show();
 
QTranslator translator(&w);
translator.load(ru_localised_file);
a.installTranslator(&translator);
 
return a.exec();


Название: Re: Проблема с переводом интерефейса.QTranslator.
Отправлено: Пантер от Июль 13, 2012, 13:07
Хм. А в самом файле перевода есть строки, которые у тебя не переводятся? Наверное, проще тебе минимальный компилябельный пример приложить, чтобы мы тут в телепатов не играли.


Название: Re: Проблема с переводом интерефейса.QTranslator.
Отправлено: Странник от Июль 13, 2012, 13:41
Код
C++ (Qt)
       QApplication a(argc, argv);
 
QTranslator translator(&w);
translator.load(ru_localised_file);
a.installTranslator(&translator);
 
       TurnOffer w;
       w.show();
 
return a.exec();
 
нэ?


Название: Re: Проблема с переводом интерефейса.QTranslator.
Отправлено: TrimS от Июль 13, 2012, 15:36
Пока не заработало. Теперь другая проблема - перевод вообще не работает.
Минимальный тестовый проект во вложении.


Название: Re: Проблема с переводом интерефейса.QTranslator.
Отправлено: Пантер от Июль 13, 2012, 15:44
Так низя
Код
C++ (Qt)
namespace // local
{
const QString start_txt ( QObject::tr("Start") );
const QString stop_txt ( QObject::tr("Stop") );
 
} // namespace
 
void UITranslationTests::ResetText()
{
static bool is_start = true;
is_start = !is_start;
 
ui.pushButton->setText(is_start ? start_txt : stop_txt);
}
 
делай
Код
C++ (Qt)
void UITranslationTests::ResetText()
{
static bool is_start = true;
is_start = !is_start;
 
ui.pushButton->setText(is_start ? QObject::tr("Start") : QObject::tr("Stop"));
}
 

И указывай полный путь к файлу перевода. Путь к исполняемому файлу можешь получить через QCoreApplication::applicationDirPath ().


Название: Re: Проблема с переводом интерефейса.QTranslator.
Отправлено: TrimS от Июль 13, 2012, 15:55
Печаль. Тоесть строки должны задаваться статически по месту пользования :(. Есть ли какой-нибудь способ избежать этого? (Чтоб был глобальный реестр строк)

И вопрос - почему начальное значение caption остаётся без перевода при запуске?


Название: Re: Проблема с переводом интерефейса.QTranslator.
Отправлено: Пантер от Июль 13, 2012, 15:58
Почитай внимательно в ассистенте раздел про интернационализацию.


Название: Re: Проблема с переводом интерефейса.QTranslator.
Отправлено: pastor от Июль 13, 2012, 16:36
См. QT_TRANSLATE_NOOP

Также обрати внимание на комментарий Странник.

Цитировать
Note that the translator must be created before the application's widgets.