Название: Динамическая смена языка прораммы Отправлено: Admin от Июль 27, 2005, 10:40 Кто нибуть делал следущее:
В меню программы можно менять язык менюшек, диалогов но все это не перезапуская программу? Название: Динамическая смена языка прораммы Отправлено: lepsai от Июль 27, 2005, 11:23 делал - я :)
смена языка происxодит за счёт смены транслятора: qApp->removeTranslator( m_pTranslator ); fOK = m_pTranslator->load( apppath + QString("ipes_de.qm")); qApp->installTranslator( m_pTranslator ); Название: Динамическая смена языка прораммы Отправлено: Sergeich от Июль 27, 2005, 11:45 Цитата: "lepsai" делал - я :) смена языка происxодит за счёт смены транслятора: А потом ничего апдейтить не надо? Название: Динамическая смена языка прораммы Отправлено: lepsai от Июль 27, 2005, 11:46 не, не надо
Название: Динамическая смена языка прораммы Отправлено: Admin от Июль 27, 2005, 12:57 спасибо :)
Название: Динамическая смена языка прораммы Отправлено: Admin от Июль 27, 2005, 22:46 сделал как ты написал
был english сделал russian а вот как вернуть обратно в english не понятно ведь файла то нет english как бы в формах сидит Название: Динамическая смена языка прораммы Отправлено: lepsai от Июль 27, 2005, 22:48 :
if(pAction->text() == "English") { qApp->removeTranslator( m_pTranslator ); qApp->removeTranslator( &defru ); qApp->removeTranslator( &defde ); m_pTranslator->clear(); } Название: Динамическая смена языка прораммы Отправлено: Admin от Июль 28, 2005, 07:54 m_pTranslator->clear();
во наверно то что нужно Название: Динамическая смена языка прораммы Отправлено: DenKa от Апрель 09, 2007, 20:49 Цитата: "Admin" m_pTranslator->clear(); во наверно то что нужно А как быть в QT4? Название: Динамическая смена языка прораммы Отправлено: noosooth от Апрель 09, 2007, 21:33 Судя по исходникам, метод clear() теперь живет в классе QTranslatorPrivate, и вызывается внутри QTranslator::load(...).
Для перехода обратно на английский можно попробовать тупо загрузить заведомо несуществующий файл перевода. SLiDER уже писал об этом "кривом" способе вот здесь (http://prog.org.ru/forum/htopic_3731_translator.html). (Последнее сообщение в ветке) Название: Динамическая смена языка прораммы Отправлено: DenKa от Апрель 09, 2007, 22:09 Код:
Также не помогает Название: Динамическая смена языка прораммы Отправлено: QCasper от Апрель 09, 2007, 23:59 Книга Бланшета, глава 17, Dynamic Language switching.
Название: Re: Динамическая смена языка прораммы Отправлено: victor.yacovlev от Март 07, 2008, 17:12 После этого нужно заново пересоздать формы и пр.
Вариант решения: вынести установку текстов в отдельные методы типа updateLanguage() для всех классов и вызывать эти методы при смене языка. Название: Re: Динамическая смена языка прораммы Отправлено: Delphin от Октябрь 21, 2008, 09:38 В главном окне все ок работает, но например есть класс от Qbject в нем я пытаюсь поймать событие и сделать смену языка.
void RecentsManager::changeEvent(QEvent *event) { if (event->type() == QEvent::LanguageChange) retranslateUi(); } не тут то было. такое чувство что событие LanguageChange, не генерируется при вызове метода load QTranslator. В чем может быть загвоздка??? Название: Re: Динамическая смена языка прораммы Отправлено: lit-uriy от Октябрь 21, 2008, 10:12 2 Delphin, а почему ты решил, что при вызове метода load QTranslator должно генерироватся событие?
Название: Re: Динамическая смена языка прораммы Отправлено: Delphin от Октябрь 21, 2008, 10:25 Так сказано в книге Жасмин Бланшет, Марк Саммерфилд "Qt4 программирование GUI на С++"
Qt генерирует собитие LanguageChage при изменении содержимого объекта QTranslator так там сказано. а оно видемо нифига не генирирует. Вот в том то и вопрос, как сделать динамическое переключение языков не только в главном окне, но и в других классах. Название: Re: Динамическая смена языка прораммы Отправлено: lit-uriy от Октябрь 21, 2008, 10:38 а если просто удалить переводчик? Перевод к исходному состоянию не возвращается?
Название: Re: Динамическая смена языка прораммы Отправлено: ритт от Октябрь 21, 2008, 10:44 вроде бы LocaleChange/LanguageChange раздаётся только виджетам...помню, я ещё удивлялся этому, когда код листал, но специально я не проверял...
Название: Re: Динамическая смена языка прораммы Отправлено: Delphin от Октябрь 21, 2008, 10:46 У меня в главном окне сделана менюшка с языками, так вот все если выбираешь язык (неважно какой), то все менюшки заголовки переводятся. кроме этого класса. в этом классе свои менюшки как были на английском так они и остаются на английском. Хотя если тупо менять в методе перевода, на русский язык, менюшки пишутся на русском.
один вывод либо не генрируется событие LanguageChange или обработчик событий RecentsManager::changeEvent(QEvent *event) не работает как положено Название: Re: Динамическая смена языка прораммы Отправлено: Delphin от Октябрь 21, 2008, 10:48 ага а этот класс у меня собственно от QObject
Название: Re: Динамическая смена языка прораммы Отправлено: Delphin от Октябрь 21, 2008, 10:51 Вот блин,сделал класс предком от QWidget и все заработало. Огромный пасиб. Вег живи век учись :)
Название: Re: Динамическая смена языка прораммы Отправлено: ритт от Октябрь 21, 2008, 12:19 я считаю, что это - недочёт, т.к. в консольном приложении вообще не будет виджетов, но installTranslator задекларирован как раз в QCoreApplication...и получается, что нет возможности динамически менять языки, не изобретая велосипеда...
ещё кто-нибудь так считает? скорее всего, позже создам таску по поводу в трекере троллей... Название: Re: Динамическая смена языка прораммы Отправлено: Delphin от Октябрь 21, 2008, 12:27 в консоли может быть другая политика :) Зачем там динамически переключать языки.
Даже не могу представить задачи в которая была бы реализована с помощью консольного приложения и в нем бы нужно было менять динамически языки. Хотя как знать как знать. Название: Re: Динамическая смена языка прораммы Отправлено: ритт от Октябрь 21, 2008, 12:43 навскидку мне сразу приходит на ум sgd (super grub disk) - там очень удобно, что можно выбрать любой из поддерживаемых языков и не угадывать потом что за кнопочку ты нажал и почему бут-сектор сдох :)
Название: Re: Динамическая смена языка прораммы Отправлено: bebe от Октябрь 24, 2008, 15:49 есть у меня похожая заморочка -
создал командой:Lupdate xx.pro файл перевода с переводами сразу для нескольких классов. подключаю к приложению - перевод срабатывает только для класса, котороый является дочерним от QMainWindow, в остальных классах нет, хотя они предки от других классов QT - где промахнулся? Название: Re: Динамическая смена языка прораммы Отправлено: ритт от Октябрь 24, 2008, 15:58 покажи как подключаешь и что за классы...
Название: Re: Динамическая смена языка прораммы Отправлено: bebe от Октябрь 24, 2008, 17:03 QApplication *pSApp; - указатель на объект приложения pTranslator->load("trans_en.qm",".") - файл грузится, что проверил на работающих переводах pSApp->installTranslator(pTranslator); больше ничего не делаю, я почитал книжку и вразумел, что все команды интерфейса после этого еще надо перевызвать чтобы они обновили перевод.. Название: Re: Динамическая смена языка прораммы Отправлено: ритт от Октябрь 24, 2008, 17:23 создавай объекты после установки транслятора
Название: Re: Динамическая смена языка прораммы Отправлено: ритт от Октябрь 27, 2008, 11:10 я считаю, что это - недочёт, т.к. в консольном приложении вообще не будет виджетов, но installTranslator задекларирован как раз в QCoreApplication...и получается, что нет возможности динамически менять языки, не изобретая велосипеда... ещё кто-нибудь так считает? скорее всего, позже создам таску по поводу в трекере троллей... Цитировать Also, I don't see the need to update translations т.е., попросту говоря, всегда делайте cout << tr(...) и не канифольте моск.(QEvent::LanguageChange) in a console application. There are no strings that are persistently visible to the user, everything the user sees is printed again to the screen when it becomes relevant next time, in which case tr() is called again with a newly installed or changed QTranslator. между тем, это не решает задачу, где в гуёвом приложении имеется группа QObject'ов, желающих перевести что-то на опр.событие (например, плагины). ну, режект - есть режект. Название: Re: Динамическая смена языка прораммы Отправлено: bebe от Октябрь 27, 2008, 12:07 спасибо ! подумаю - наверно в show() буду перевызывать все сообщения, что требуется переводить или создам аналогичный свой метод
Название: Re: Динамическая смена языка прораммы Отправлено: crossly от Январь 06, 2009, 15:30 дабы не создавать отдельную тему.... при смене языка обновляем надписи и все ок... вот только как быть с QMessageBox... ??
Название: Re: Динамическая смена языка прораммы Отправлено: Dendy от Январь 06, 2009, 16:16 Таки лучше бы новую тему создал.
Таскать за собой не только переводы собственной программы, а и самой Qt. При смене языка вызывать несколько раз installTranslator() - по разудля каждого модуля. Сама Qt в контексте перевода - отдельный модуль, ts/qm файлы для которого (под каждый язык) лежат в $QTDIR/translations. Название: Re: Динамическая смена языка прораммы Отправлено: crossly от Январь 06, 2009, 16:45 а зачем мне перевод qt... я же в месагу свой текст вставляю... просто проблема в том что месбокс создается в функции.... и заново установить текст в нем нет возможности(до его создания)....
Название: Re: Динамическая смена языка прораммы Отправлено: BRE от Январь 06, 2009, 17:17 После смены языка (installTranslator), при следующем вызове этой функции, все сообщения заключенные в tr...() будут транслироваться в нужном языке.
Название: Re: Динамическая смена языка прораммы Отправлено: Dendy от Январь 06, 2009, 17:59 Как сказ
а зачем мне перевод qt... я же в месагу свой текст вставляю... просто проблема в том что месбокс создается в функции.... и заново установить текст в нем нет возможности(до его создания).... Как заметил BRE, типичный случай вызова QMessageBox - подставляя в него строки каждый раз из текущего словаря через tr(). Чаще через его статические методы. Я думал вас не устраивают надписи на кнопках, вроде: "Cancel". Если программа не пересоздаёт строки автоматом при визуализации, а хранит их - то она должна этот свой кеш локализированных данных обновить реагируя на событие QEvent::LanguageChanged. Или у вас висит некий QMessageBox, а параллельно меняется язык? Ну тут уж этот бокс понятия не имеет как ему строку обновить. Можете расценивать этот бокс как ещё один элемент в кеше локализированных ресурсов - и пусть родительсткое окно для этого бокса само по событию QEvent::LanguageChanged подставит ему новую строку. |