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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Динамический перевод и возврат к английскому языку  (Прочитано 13540 раз)
cdhappyfuture
Гость
« : Декабрь 22, 2011, 22:04 »

Допустим я создал файл перевода myprog_ru.qm. Сделал так, чтобы при переключении языка в combobox он менялся с en на ru. А как указать qtTranslator->load(/*что здесь?*/) вернуться к тому с чего переводили? Я решил эту проблему создав файл перевода myprog_eng.qm, просто копировав в лингвисте все значения в англ перевод. Подозреваю, что это очень неправильно. Работает ну и ладно.

Но я столкнулся с проблемой, которую таким способом не смог решить. Мне необходимо вместе с динамической сменой перевода приложения переводить не только мои тексты, но и стандартные Qt`шные. Например кнопки в QMessageBox. Где взять qt_en.qm?


login@mypc:~$ ls /usr/share/qt4/translations/
assistant_cs.qm     designer_sl.qm     qt_es.qm          qt_pt.qm
assistant_da.qm     designer_uk.qm     qt_fr.qm          qt_ru.qm
assistant_de.qm     designer_zh_CN.qm  qt_gl.qm          qt_sk.qm
assistant_fr.qm     designer_zh_TW.qm  qt_help_cs.qm     qt_sl.qm
assistant_hu.qm     linguist_cs.qm     qt_help_da.qm     qt_sv.qm
assistant_ja.qm     linguist_de.qm     qt_help_de.qm     qt_uk.qm
assistant_pl.qm     linguist_fr.qm     qt_help_fr.qm     qt_zh_CN.qm
assistant_ru.qm     linguist_hu.qm     qt_help_hu.qm     qt_zh_TW.qm
assistant_sl.qm     linguist_ja.qm     qt_help_ja.qm     qvfb_hu.qm
assistant_uk.qm     linguist_pl.qm     qt_help_pl.qm     qvfb_ja.qm
assistant_zh_CN.qm  linguist_ru.qm     qt_help_ru.qm     qvfb_pl.qm
assistant_zh_TW.qm  linguist_sl.qm     qt_help_sl.qm     qvfb_ru.qm
designer_cs.qm      linguist_uk.qm     qt_help_uk.qm     qvfb_sl.qm
designer_de.qm      linguist_zh_CN.qm  qt_help_zh_CN.qm  qvfb_uk.qm
designer_fr.qm      linguist_zh_TW.qm  qt_help_zh_TW.qm  qvfb_zh_CN.qm
designer_hu.qm      qt_ar.qm           qt_he.qm          qvfb_zh_TW.qm
designer_ja.qm      qt_cs.qm           qt_hu.qm
designer_pl.qm      qt_da.qm           qt_ja.qm
designer_ru.qm      qt_de.qm           qt_pl.qm
Записан
iroln
Гость
« Ответ #1 : Декабрь 22, 2011, 22:09 »

Для этого существует метод retranslateUi. Если создаёшь форму в QtDesigner, такой метод будет по умолчанию. При динамической смене языка, вызываешь его, все переводимые компоненты будут переведены.

А вообще не очень понятно в чём проблема, в файле перевода должны быть все строки, в том числе и строки, которые сидят в твоих виджетах, кнопках и т.д.
Записан
cdhappyfuture
Гость
« Ответ #2 : Декабрь 22, 2011, 22:18 »

С помощью сгенерированной Designer`ом функцией retranslateUi() Qt`шные кнопки не переводились на русский. Только кнопки созданные мной. Они стали переводиться когда я вызвал дополнительно

Код:
    lang = "ru";
    ....
    qtTranslator = new QTranslator;
    qtTranslator->load("qt_" +  lang,
           QLibraryInfo::location(QLibraryInfo::TranslationsPath));
    QCoreApplication::installTranslator(qtTranslator);

А как перевести на английский обратно, не пойму
Записан
iroln
Гость
« Ответ #3 : Декабрь 22, 2011, 22:21 »

Сначала, естественно, надо загрузить в транслятор другой перевод, а затем уже вызывать retranspateUi().
Наверное, ты где-то что-то напутал, потому что с динамической сменой языка проблем обычно не возникает, если всё правильно сделано.

Можешь прочитать главу 18 в книге Бланшета и Симмерфилда "Qt4 Программирование GUI на С++, 2 издание", стр. 425-445. Там всё хорошо и подробно описано.
Записан
cdhappyfuture
Гость
« Ответ #4 : Декабрь 22, 2011, 22:54 »

Можешь прочитать главу 18 в книге Бланшета и Симмерфилда "Qt4 Программирование GUI на С++, 2 издание", стр. 425-445. Там всё хорошо и подробно описано.

Прочитал. там в примерах "для простоты" подразумевается, что есть файл myprog_en.qm. Также там написано, что "можно поступить и по другому и вызывать функцию clear() для объектов QTranslator, когда пользователь выбирает английский язык". В Qt4 нет у QTranslator функции clear(), и если сделать вот так
 
Код:
QCoreApplication::installTranslator(new QTranslator)

то все равно не возвращается к английскому
Записан
iroln
Гость
« Ответ #5 : Декабрь 22, 2011, 23:07 »

Внезапно... можно сгенерировать qm файл для английского языка, но не делать в нём перевод. Чтобы вернуть интерфейс на английский, надо будет загрузить в транслятор этот самый qm файл. Я так и делаю, поэтому до конца не понимаю в чём у тебя проблема заключается. Улыбающийся

Создаёшь файлы перевода для всех своих языков, например, ru_RU.qm и en_US.qm, переводишь ru_RU, en_US не переводишь, динамически загружаешь который нужен, вот и всё. Улыбающийся
Записан
cdhappyfuture
Гость
« Ответ #6 : Декабрь 22, 2011, 23:10 »

Для своих текстов у меня все работает. Речь о текстах, вшитых в библиотеку Qt. Как к ним сгенерировать qm файл?
Записан
cdhappyfuture
Гость
« Ответ #7 : Декабрь 22, 2011, 23:21 »

Плохой вопрос задал я   Крутой
Как вернуться к языку который в tr`ах и в ui файлах без создания для него qm?
Записан
iroln
Гость
« Ответ #8 : Декабрь 22, 2011, 23:28 »

Цитировать
Речь о текстах, вшитых в библиотеку Qt. Как к ним сгенерировать qm файл?
А что за тексты вшиты в библиотеку Qt? Это и был "плохой вопрос"? Улыбающийся

Цитировать
Как вернуться к языку который в tr`ах и в ui файлах без создания для него qm?
Так ведь проще всего сгенерировать и скомпилировать qm файл, назвать его en_US и не переводить. Он и будет выполнять роль того самого, который "в tr`ах и в ui файлах".
Записан
cdhappyfuture
Гость
« Ответ #9 : Декабрь 22, 2011, 23:32 »

http://habrahabr.ru/blogs/qt_software/51319/
абзац "Дополнительные текстовые строки"
Записан
iroln
Гость
« Ответ #10 : Декабрь 22, 2011, 23:37 »

Цитировать
Qt содержит внутри около 400 строк, которые так же должны быть переведены на языки которые нам необходимы.
Никогда не было нужды переводить строки в самой Qt. Это какие-то сервисные сообщения, сообщения об ошибках и т.п.? Никогда не заморачивался, а тебе это как раз и надо в дополнение к ui и tr()?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Декабрь 23, 2011, 00:15 »

Код
C++ (Qt)
QTranslator englishTranslator;
englishTranslator.load("dummyname", "dummypath"); // вернет 0
qApp->installTranslator(&englishTranslator);
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
cdhappyfuture
Гость
« Ответ #12 : Декабрь 23, 2011, 12:12 »

Код
C++ (Qt)
QTranslator englishTranslator;
englishTranslator.load("dummyname", "dummypath"); // вернет 0
qApp->installTranslator(&englishTranslator);

Не сработало. Не меняет он на английский таким образом
Записан
Kolobok
Гость
« Ответ #13 : Декабрь 23, 2011, 12:36 »

QCoreApplication::removeTranslator ( QTranslator * translationFile )
Записан
cdhappyfuture
Гость
« Ответ #14 : Декабрь 23, 2011, 15:05 »

QCoreApplication::removeTranslator ( QTranslator * translationFile )
Спасибо большое, это то что нужно
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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