Смена языка интерфейса
Вопрос следующий
Необходимо сменить язык интерфейса во время работы с программой без её перезапуска
Слоты смены языка выглядят следующим образом:
Код:
void SettingsForm::ChangeToRus() {
//меняем язык на русский
QTranslator translator;
translator.load("main_ru.qm", ".");
qApp->installTranslator(&translator);
}
void SettingsForm::ChangeToEng() {
//меняем язык на английский
QTranslator translator;
translator.load("main_ru.qm", ".");
qApp->removeTranslator(&translator);
}
//меняем язык на русский
QTranslator translator;
translator.load("main_ru.qm", ".");
qApp->installTranslator(&translator);
}
void SettingsForm::ChangeToEng() {
//меняем язык на английский
QTranslator translator;
translator.load("main_ru.qm", ".");
qApp->removeTranslator(&translator);
}
Но, на интерфейсе это никаким образом не сказывается
Вопрос - динамическая смена языка интерфейса возможна и выполняется так, как я написал, и ошибка где-то у меня, либо нужны какие-то дополнительные действия?
буду благодарен за любые ответы!
ну как минимум код методов должен быть неодинаковым
Поменяйте в SettingsForm::ChangeToEng() "main_ru.qm" на "main_en.qm" для начала. :)
Loading and installing a new translator is rather straigthforward, but already existent widgets will not react anyhow unless they have been made aware of possible dynamic language changes.
У дизайнер-форм есть св-во ui.retranslateUi(this);
Для виджетов, кнопок, менюшек и пр., добавленного ручками надо самому вызывать setText(tr("blah-blah-blah"));
Можно конечно какую-нибудь ф-ю написать для быстрого перевода типа
Код:
void retranslate(QObject * parent)
{
QList<QPushButton *> buttons = parent.findChildren<QPushButton *>();
for(int x=0;x<buttons.size;x+=1)
{
buttons[x]->setText(tr(buttons[x]->text());
retranslate(buttons[x]);
}
//И так для всех классов что у тебя в gui используются
}
{
QList<QPushButton *> buttons = parent.findChildren<QPushButton *>();
for(int x=0;x<buttons.size;x+=1)
{
buttons[x]->setText(tr(buttons[x]->text());
retranslate(buttons[x]);
}
//И так для всех классов что у тебя в gui используются
}
с англицкого на русский она переведет, а вот назад - хз :)
Спасибо, буду пробовать! :)
Цитата: Alexander92
Поменяйте в SettingsForm::ChangeToEng() "main_ru.qm" на "main_en.qm" для начала. :)
ну main_en.qm у меня нет, ибо английский - это язык по умолчанию