Russian Qt Forum
Ноябрь 22, 2024, 20:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Динамический перевод  (Прочитано 8552 раз)
daimon
Гость
« : Январь 17, 2012, 16:50 »

как перевести динамически приложение, если текст от виджета я знаю только так

Код
C++ (Qt)
QString str = ui.labelStatus->text();

такой вариант не прокатит
Код
C++ (Qt)
[15:46:27] Дима Корниец: void MyWidget::changeEvent(QEvent *event)
{
  if (e->type() == QEvent::LanguageChange) {
    titleLabel->setText(tr("Document Title"));
    ...
    okPushButton->setText(tr("&OK"));
  } else
    QWidget::changeEvent(event);
}

так происходит ещё и дублирование набивание виджета текстом
сначала в одном месте, потом ещё и здесь и к примеру лейбла на статусе - статусов может быть несколько, откуда я буду знать явно какой именно сейчас нужно заново писать в функции retranslate()!!!!!!!!

кстати ещё может быть проблема и с диалогом, который вызывается по слоту или он после вызова уже будет переведён?
я просто хотел сказать про другие виджеты

можно конечно создать для каждого класса виджетов функцию retranslate(), но тут может потеряться именно тот текст, который я установил в какой-то функции шаблонным образом (с аргументами)
« Последнее редактирование: Январь 18, 2012, 00:08 от daimon » Записан
Bepec
Гость
« Ответ #1 : Январь 19, 2012, 21:22 »

Эм. вопрос какой то странный. Из темы, я незнаю что хочу, но зато могу извратиться...

Ты не можешь динамически переводить приложение, если текст виджетов меняется произвольно.

Точнее это можно, но нужен какой либо переводчик.

А чем ненравится перевод в tr("")?
Записан
daimon
Гость
« Ответ #2 : Январь 19, 2012, 23:35 »

Эм. вопрос какой то странный. Из темы, я незнаю что хочу, но зато могу извратиться...

Ты не можешь динамически переводить приложение, если текст виджетов меняется произвольно.

Точнее это можно, но нужен какой либо переводчик.

А чем ненравится перевод в tr("")?

всё просто есть несколько статусов, например "сделано", "сохранено" и т.д., это всё вешается на лейбл (всё к примеру)
так вот после динамической смены языка, я на данный момент не знаю буквально какой у меня текст в лейбле (ведь он ставился по сигналу-слоту) и получается я не могу просто так написать ui.label->setText(tr("ok")) в функции retranslate()
Записан
Bepec
Гость
« Ответ #3 : Январь 20, 2012, 06:56 »

Я так и не решил эту проблему, в своей программе.

Или в changeEvent, использовать словарь (список перевода), с рус/анг значениями... по другому не вижу выходов.
Со словарем в принципе неплохо. Забил все статусы, все переводы, а потом лишь определяй язык и переустанавливай на виджет.

PS тоже интересует данный вопрос... Возможно есть более изящное решение?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Январь 20, 2012, 07:34 »

Я когда-то реализовывал динамическую смену языка. Может, что дельное найдете.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
daimon
Гость
« Ответ #5 : Январь 20, 2012, 14:26 »

Я так и не решил эту проблему, в своей программе.

Или в changeEvent, использовать словарь (список перевода), с рус/анг значениями... по другому не вижу выходов.
Со словарем в принципе неплохо. Забил все статусы, все переводы, а потом лишь определяй язык и переустанавливай на виджет.

PS тоже интересует данный вопрос... Возможно есть более изящное решение?


подробнее про словарь, пожлуйста
Записан
daimon
Гость
« Ответ #6 : Январь 20, 2012, 14:37 »

Я когда-то реализовывал динамическую смену языка. Может, что дельное найдете.
там всё через retranslate() - не то, а диалог перевода нужная штука
Записан
Bepec
Гость
« Ответ #7 : Январь 20, 2012, 14:46 »

ну словарь аля
Код:
QMap <QString, QString> engRu;
...
//changeLang
ui.label->setText(engRu[ui.label->text()]);

но тогда нид будет делать словари по количеству языков.
Записан
andrew.k
Гость
« Ответ #8 : Январь 20, 2012, 14:57 »

Где-то же у тебя хранится реальный статус? Енум какой-нибудь.
Или ты статус хранишь в QLabel? )))

Тогда в чем проблемы? После смены языка, вызови еще раз слот который заполняет UI.
Записан
Bepec
Гость
« Ответ #9 : Январь 20, 2012, 18:47 »

При смене языка, лейбл будет сменен на стандартный статус, находящийся на ui.

А кому хочется, чтобы надпись "Через 5 минут ваш комп взорвётся", сменилась на "Please wait".

Автор собственно и пишет, что у него с этим проблема Подмигивающий
Записан
daimon
Гость
« Ответ #10 : Январь 21, 2012, 05:02 »

Где-то же у тебя хранится реальный статус? Енум какой-нибудь.
Или ты статус хранишь в QLabel? )))

Тогда в чем проблемы? После смены языка, вызови еще раз слот который заполняет UI.

лейбл, просто пример, может быть любой виджет, хранящий текст
Записан
daimon
Гость
« Ответ #11 : Январь 21, 2012, 05:04 »

ну словарь аля
Код:
QMap <QString, QString> engRu;
...
//changeLang
ui.label->setText(engRu[ui.label->text()]);

но тогда нид будет делать словари по количеству языков.

не покатит, после retranslate должны быть только строки с tr(), тогда перевод сработает для виджета
Записан
Bepec
Гость
« Ответ #12 : Январь 21, 2012, 11:37 »

Сигнал ChangeLang (не помню) посылается при смене языка. И там уже вступает в действие спокойная схема с мапом.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.153 секунд. Запросов: 23.