Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: cdhappyfuture от Декабрь 22, 2011, 22:04



Название: Динамический перевод и возврат к английскому языку
Отправлено: 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


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

А вообще не очень понятно в чём проблема, в файле перевода должны быть все строки, в том числе и строки, которые сидят в твоих виджетах, кнопках и т.д.


Название: Re: Динамический перевод и возврат к английскому языку
Отправлено: cdhappyfuture от Декабрь 22, 2011, 22:18
С помощью сгенерированной Designer`ом функцией retranslateUi() Qt`шные кнопки не переводились на русский. Только кнопки созданные мной. Они стали переводиться когда я вызвал дополнительно

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

А как перевести на английский обратно, не пойму


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

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


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

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

то все равно не возвращается к английскому


Название: Re: Динамический перевод и возврат к английскому языку
Отправлено: iroln от Декабрь 22, 2011, 23:07
Внезапно... можно сгенерировать qm файл для английского языка, но не делать в нём перевод. Чтобы вернуть интерфейс на английский, надо будет загрузить в транслятор этот самый qm файл. Я так и делаю, поэтому до конца не понимаю в чём у тебя проблема заключается. :)

Создаёшь файлы перевода для всех своих языков, например, ru_RU.qm и en_US.qm, переводишь ru_RU, en_US не переводишь, динамически загружаешь который нужен, вот и всё. :)


Название: Re: Динамический перевод и возврат к английскому языку
Отправлено: cdhappyfuture от Декабрь 22, 2011, 23:10
Для своих текстов у меня все работает. Речь о текстах, вшитых в библиотеку Qt. Как к ним сгенерировать qm файл?


Название: Re: Динамический перевод и возврат к английскому языку
Отправлено: cdhappyfuture от Декабрь 22, 2011, 23:21
Плохой вопрос задал я   8)
Как вернуться к языку который в tr`ах и в ui файлах без создания для него qm?


Название: Re: Динамический перевод и возврат к английскому языку
Отправлено: iroln от Декабрь 22, 2011, 23:28
Цитировать
Речь о текстах, вшитых в библиотеку Qt. Как к ним сгенерировать qm файл?
А что за тексты вшиты в библиотеку Qt? Это и был "плохой вопрос"? :)

Цитировать
Как вернуться к языку который в tr`ах и в ui файлах без создания для него qm?
Так ведь проще всего сгенерировать и скомпилировать qm файл, назвать его en_US и не переводить. Он и будет выполнять роль того самого, который "в tr`ах и в ui файлах".


Название: Re: Динамический перевод и возврат к английскому языку
Отправлено: cdhappyfuture от Декабрь 22, 2011, 23:32
http://habrahabr.ru/blogs/qt_software/51319/
абзац "Дополнительные текстовые строки"


Название: Re: Динамический перевод и возврат к английскому языку
Отправлено: iroln от Декабрь 22, 2011, 23:37
Цитировать
Qt содержит внутри около 400 строк, которые так же должны быть переведены на языки которые нам необходимы.
Никогда не было нужды переводить строки в самой Qt. Это какие-то сервисные сообщения, сообщения об ошибках и т.п.? Никогда не заморачивался, а тебе это как раз и надо в дополнение к ui и tr()?


Название: Re: Динамический перевод и возврат к английскому языку
Отправлено: kambala от Декабрь 23, 2011, 00:15
Код
C++ (Qt)
QTranslator englishTranslator;
englishTranslator.load("dummyname", "dummypath"); // вернет 0
qApp->installTranslator(&englishTranslator);


Название: Re: Динамический перевод и возврат к английскому языку
Отправлено: cdhappyfuture от Декабрь 23, 2011, 12:12
Код
C++ (Qt)
QTranslator englishTranslator;
englishTranslator.load("dummyname", "dummypath"); // вернет 0
qApp->installTranslator(&englishTranslator);

Не сработало. Не меняет он на английский таким образом


Название: Re: Динамический перевод и возврат к английскому языку
Отправлено: Kolobok от Декабрь 23, 2011, 12:36
QCoreApplication::removeTranslator ( QTranslator * translationFile )


Название: Re: Динамический перевод и возврат к английскому языку
Отправлено: cdhappyfuture от Декабрь 23, 2011, 15:05
QCoreApplication::removeTranslator ( QTranslator * translationFile )
Спасибо большое, это то что нужно