Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: __Heaven__ от Февраль 03, 2015, 17:53



Название: Смена языка приложения на лету между исходными текстами и _ru.qm
Отправлено: __Heaven__ от Февраль 03, 2015, 17:53
Привет всем. Вычитал, что для переключения языка без перезагрузки приложения необходимо сделать:
Код
C++ (Qt)
void MainWindow::SwitchLanguage()
{
   QTranslator translator;
   translator.load("rus.qm",".");
   qApp->installTranslator(&translator);
   ui.retranslateUi(this);
}
Всё круто, но что делать, если я хочу английский?


Название: Re: Смена языка приложения на лету между исходными текстами и _ru.qm
Отправлено: Old от Февраль 03, 2015, 18:06
А что, так работает?
Не должно. :)


Название: Re: Смена языка приложения на лету между исходными текстами и _ru.qm
Отправлено: __Heaven__ от Февраль 03, 2015, 18:15
Не проверял. У меня работает мой код:
Код
C++ (Qt)
       QTranslator translator;
       translator.load("master_ru");
       qApp->installTranslator(&translator);
       ui->retranslateUi(this);
 


Название: Re: Смена языка приложения на лету между исходными текстами и _ru.qm
Отправлено: __Heaven__ от Февраль 03, 2015, 18:17
Вообще мне не нравится вызов деструктора для translator.
Правильно ли будет вынести в глобальные переменные указатель на translator?


Название: Re: Смена языка приложения на лету между исходными текстами и _ru.qm
Отправлено: Old от Февраль 03, 2015, 18:21
Вообще мне не нравится вызов деструктора для translator.
Правильно ли будет вынести в глобальные переменные указатель на translator?
Почему не нравится?
Вроде все логично: удалили старый транслятор, создали и загрузили новый, обновили ui.


Название: Re: Смена языка приложения на лету между исходными текстами и _ru.qm
Отправлено: __Heaven__ от Февраль 03, 2015, 18:29
В моём коде нет действия "удалили старый транслятор"

Я имел в виду, что после ui->retranslateUi(this); следует деструктор для QTranslator translator неявно. Это же получается, что у меня стандартные диалоги, вызванные в будущем переведены не будут.


Название: Re: Смена языка приложения на лету между исходными текстами и _ru.qm
Отправлено: Old от Февраль 03, 2015, 18:33
В моём коде нет действия "удалили старый транслятор"

Я имел в виду, что после ui->retranslateUi(this); следует деструктор для QTranslator translator неявно. Это же получается, что у меня стандартные диалоги, вызванные в будущем переведены не будут.
Да, поэтому я и предлагаю создавать его динамически.


Название: Re: Смена языка приложения на лету между исходными текстами и _ru.qm
Отправлено: __Heaven__ от Февраль 03, 2015, 18:38
Думал об этом.
Получается, нет необходимости создавать транслятор в main.cpp? Почему-то меня заклинило, что он там должен быть.


Название: Re: Смена языка приложения на лету между исходными текстами и _ru.qm
Отправлено: Alex Custov от Февраль 03, 2015, 18:39
Всё круто, но что делать, если я хочу английский?

Удалить старый транслятор и не устанавливать новый? Текст на формах станет оригинальным, т.е. английским.


Название: Re: Смена языка приложения на лету между исходными текстами и _ru.qm
Отправлено: Alex Custov от Февраль 03, 2015, 18:40
Получается, нет необходимости создавать транслятор в main.cpp? Почему-то меня заклинило, что он там должен быть.

Конечно. Нужно только где-нибудь хранить указатель на него когда потребуется сделать removeTranslator().


Название: Re: Смена языка приложения на лету между исходными текстами и _ru.qm
Отправлено: __Heaven__ от Февраль 03, 2015, 19:10
Спасибо. Что-то смутил пример из доков...

Создаю в конструкторе класса транслятор, далее только дергаю removeTranslator и installTranslator