Название: TranslationManager Отправлено: ритт от Октябрь 16, 2008, 04:21 TranslationManager - попытка создать удобный механизм для смены языка интерфейса без перезапуска программы.
это пока только техническая версия - надеюсь будут комментарии и пожелания... сейчас под лжпл2, но запускать планирую под жпл2 и/или пивной лицензией. в проекте имеется простенький примерчик для наглядности. документации пока что нет. * currentLanguage/setCurrentLanguage - текущий язык интерфейса. * untranslatedLanguage/setUntranslatedLanguage - язык по умолчанию для программы (если не подгружать файлы переводов). * languages/isLanguageAvailable - список языков (генерируется из списка найденных файлов перевода). * translationPaths/setTranslationPaths/addTranslationPath/removeTranslationPath - пути, в которых следует искать файлы перевода. используются в прямой последовательности. по умолчанию включаются пути {appDirPath}/translations ({appDirPath}/../share/{appName}/translations для юнихов) и путь к переводам Qt из QLibraryInfo. * nameFilters/setNameFilter/setNameFilters/addNameFilter/removeNameFilter - маски файлов перевода в виде "myapp_*.qm", где звёздочка заменяет название языка для локали в формате ru_RU либо в кратком - ru. используются в обратной последовательности. по умолчанию включаются "{appName}_*.qm" и "qt_*.qm". при "перекрытии" строк перевода важно соблюдать последовательность путей и масок файлов! принцип работы стандартный - установка QTranslator'ов и реакция на QEvent::LanguageChange в собственных виджетах. для перевода форм дизайнера (да-да, именно "форм", т.к. в дизайнере производные виджеты так и называются :) ) нужно вызывать retranslateUi соответствующей формы. ругайте :) Название: Re: TranslationManager Отправлено: lit-uriy от Октябрь 16, 2008, 05:32 поругаем конечно, но для начала - СПАСИБО.
Название: Re: TranslationManager Отправлено: ритт от Октябрь 20, 2008, 17:25 ну, что, никому не надо? я один пользую переводы плагинов отдельно от переводов ядра? :)
Название: Re: TranslationManager Отправлено: pastor от Октябрь 20, 2008, 17:29 ну, что, никому не надо? я один пользую переводы плагинов отдельно от переводов ядра? :) вещь нужная, но потестить совершенно времени нет Название: Re: TranslationManager Отправлено: IGHOR от Октябрь 22, 2008, 15:58 Ща потестим
Название: Re: TranslationManager Отправлено: Hort от Октябрь 29, 2008, 00:19 большое спасибо!! прикрутил к своему проекту - все работает олично.
хотелось бы иметь возможность работать с языками не только в формате "ru" и "ru_RU" но и "russian" (напрмер передавать в setCurrentLanguage()) Название: Re: TranslationManager Отправлено: ритт от Октябрь 29, 2008, 00:35 о, первый тестер :)
> хотелось бы иметь возможность работать с языками не только в формате "ru" и "ru_RU" но и "russian" хорошо, на досуге посмотрю что можно сделать... Название: Re: TranslationManager Отправлено: ритт от Ноябрь 07, 2008, 03:57 выделил сегодня немного времени - к поддержке языковых кодов добавил поддержку названий языков...
и вроде бы всё неплохо, НО...если имеются файлы переводов, например, qt_ru.qm и myapp_russian.qm, то в списке языков имеем "Russian (ru_RU)" и "Russian (russian)" - околесица, не правда ли? :) планирую добавить ещё систему алиасов, где ru_RU и russian автоматически распознаются как один и тот же язык... и по этому поводу вопрос: имеет ли смысл давать возможность назначать произвольные алиасы? например, russian_padonak назначить алиасом языка ru_RU/russian - т.о. при наличии соотстветвующих фалов для русского языка подгрузятся файлы переводов qt_ru.qm и myapp_russian_padonak.qm...это может быть кому-то полезным? Hort, в первую очередь вопрос адресован тебе, т.к. в данном случае ты - инициатор :) и ещё: как смотришь на регистрозависимость как то myapp_Russian.qm? если алиасы окажутся никому не нужны, мне будет проще сделать именно так... Название: Re: TranslationManager Отправлено: Hort от Ноябрь 09, 2008, 23:25 выделил сегодня немного времени - к поддержке языковых кодов добавил поддержку названий языков... о большое спасибо! я так понимаю теперь возвращает язык в виде "Russian (russian)"? хотелось бы чтобы это можно было изменить, т.к. я заполняю QComboBox для выбора языка чемто вроде:и вроде бы всё неплохо, НО...если имеются файлы переводов, например, qt_ru.qm и myapp_russian.qm, то в списке языков имеем "Russian (ru_RU)" и "Russian (russian)" - околесица, не правда ли? :) планирую добавить ещё систему алиасов, где ru_RU и russian автоматически распознаются как один и тот же язык... и по этому поводу вопрос: имеет ли смысл давать возможность назначать произвольные алиасы? например, russian_padonak назначить алиасом языка ru_RU/russian - т.о. при наличии соотстветвующих фалов для русского языка подгрузятся файлы переводов qt_ru.qm и myapp_russian_padonak.qm...это может быть кому-то полезным? Hort, в первую очередь вопрос адресован тебе, т.к. в данном случае ты - инициатор :) и ещё: как смотришь на регистрозависимость как то myapp_Russian.qm? если алиасы окажутся никому не нужны, мне будет проще сделать именно так... Код: QStringList languages=TranslationManager::languages(); и переходить на какойто другой вид не хотелось бы (я имею ввиду внешний вид). думаю можно было бы сделать или 2 разные функции, или 1 в которую передавать небходимый ключ. Насчет "padonak" мысль конечно интерестная но я думаю она будет не сильно востребована, так что такое можно конечно добавить но не в первую очередь. для среднестатист >> околесица, не правда ли? помоему вполне нормально. у меня в Опере когдато было 2 языка "Русский" и "russian" ps забыл спросить если в setCurrentLanguage() передать "Russian" он выберет мой myapp_ru.qm? т.к. мне приходилось шаманить похожим перебором чтобы это сделать Название: Re: TranslationManager Отправлено: ритт от Ноябрь 10, 2008, 00:38 да, добавлю алиасы - в setCurrentLanguage можно будет передавать хоть Russian, хоть ru, хоть ru_RU...
TranslationManager::languages() будет возвращать список языков (выбранный из найденных файлов переводов) в виде "Russian, English, ..." TranslationManager::locales() будет возвращать список локалей (опять же, из найденных файлов переводов) в виде "ru_RU, en_EN, en_GB, ..." "padonak" тогда идёт лесом - только путаницы добавит... новый код пока не выкладываю - ещё понаждачу. зы: благодарствую за комменты. Название: Re: TranslationManager Отправлено: Вячеслав от Ноябрь 10, 2008, 19:40 Кость , попробывал сегодня в лоб собрать 2008 - обломался ;) собираеться только релиз либы ...
решение в лоб в src.pro TARGET = $$qtLibraryTarget($$TRANSLATIONMANAGER_LIBNAME) и телемаркет ;) PS а чего с плагами делать при таком подходе ? причем у разных плагов может-ведь быть(теоретически) разный набор переводов ;) Название: Re: TranslationManager Отправлено: ритт от Ноябрь 10, 2008, 21:30 про таргет корректива принята :) - будет в следующей версии
> и телемаркет ??? PS если в код заглядывал - список языков генерится из названий всего набора найденных файлов переводов. т.е. в случае разного набора переводов, скажем, ru_RU+en_GB для аппы, en_GB+de_DE для плуга #1 и en_GB+tw для плуга #2 полноценно переведённой аппа будет только для untransllated (если исходный язык один - предполагается, что всегда верно) и для en_GB. для остальных же вариантов будут смеси типа ru_RU+untransllated/de_DE+untransllated и т.д. можно пойти иначе - определить "важные" маски, только по которым будет строиться список языков. но тогда придётся как-то классифицировать маски на "системные" (qt_*.qm), "важные" и "всякий бред", что сделает программный интерфейс довольно запутанным... если есть идеи, с удовольствием послушаю :) Название: Re: TranslationManager Отправлено: Hort от Ноябрь 12, 2008, 19:41 в линуксе при установке изменил имя исполняемого файла с editor на tceditor чтобы не было конфликтов при вызове из командной строки. и теперь он не кушает файлы перевода editor_ru.qm =(. хотя в программе я явно прописал setApplicationName("editor") - думал он берет название из этой переменной, а оказывается наверно из имени файла. если можно - поправьте плз!
заранее благодарен. :) Название: Re: TranslationManager Отправлено: ритт от Ноябрь 12, 2008, 20:07 однозначно, из имени файла, т.к. applicationName может быть в произвольной кодировке и даже с пробелами и символами маски, что неприемлемо. но appName под линухом практически всегда будет в латин1 и 100% не может содержать символы маски.
если требуется задать совершенно произвольный набор масок (и не включать маски по умолчанию), пользуйся setTranslationPaths Название: Re: TranslationManager Отправлено: Hort от Ноябрь 12, 2008, 20:11 т.е. в моем случае можно задать "editor_*.qm"? в этом случае нормально будет работать с qt_ru.qm или для него тоже прописывать маску?
Название: Re: TranslationManager Отправлено: ритт от Ноябрь 12, 2008, 20:37 в этой версии - нет. в следующей версии qt_*.qm будет вынесен в разряд "автоматических опциональных" масок.
распознавание по названи языка уже добавил, мб сегодня добавлю ещё хэш и выложу на посмотреть... Название: Re: TranslationManager Отправлено: lit-uriy от Ноябрь 12, 2008, 21:20 2 Hort, стоило поступить так:
имя своего бинаря знаешь ( QCoreApplication::arguments ().at(0) ), пытайся загрузить <имя бинаря>_ru.qm Название: Re: TranslationManager Отправлено: ритт от Ноябрь 12, 2008, 21:28 appName() вернёт то же самое, <имя бинаря>_ru.qm и так включается автоматически
здесь вопрос в изменении имени программы без изменения маски поиска - этого делать я не буду ибо бессмысленно... Название: Re: TranslationManager Отправлено: Hort от Ноябрь 14, 2008, 14:56 Нашел такой баг:
вот состав папки с переводами Код: qt_ru.qm Название: Re: TranslationManager Отправлено: pastor от Ноябрь 14, 2008, 15:04 офтоп:
UK - United Kingdom UA - Ukrainian Название: Re: TranslationManager Отправлено: Hort от Ноябрь 14, 2008, 15:11 офтоп: uk - ukrainianUK - United Kingdom UA - Ukrainian UA - Ukraine сам удивился когда узнал проверял дебагом QLocale("uk") определяет как uk_UA language=Ukranian Country=Ukraine Название: Re: TranslationManager Отправлено: pastor от Ноябрь 14, 2008, 15:23 uk - ukrainian UA - Ukraine сам удивился когда узнал проверял дебагом QLocale("uk") определяет как uk_UA language=Ukranian Country=Ukraine Интересно :) Название: Re: TranslationManager Отправлено: lit-uriy от Ноябрь 14, 2008, 15:36 2 pastor, английский:
en_AU - Австралия en_CA - Канада en_GB - Великобритания en_NZ - Новая зеландия en_US - США Вроде больше нету Название: Re: TranslationManager Отправлено: lit-uriy от Ноябрь 14, 2008, 15:39 ага есть еще:
en_ZA - английский (Южная африка) ну и uk_UA - украинский (Украина) (не забывайте что в таких обозначениях, первый - язык, второй - государство; в отличие от просто en или ru) Название: Re: TranslationManager Отправлено: pastor от Ноябрь 14, 2008, 15:45 Ну я руководствовался не тем что в папке QTDIR/translations, а меджународным буквенным обозначение стран согласно ISO 3166
Название: Re: TranslationManager Отправлено: lit-uriy от Ноябрь 14, 2008, 21:09 а я подглядел в инструментах для переводчика и Aspell, одинаково.
Название: Re: TranslationManager Отправлено: lit-uriy от Ноябрь 14, 2008, 21:15 вот в украинской вики нашел http://uk.wikipedia.org/wiki/ISO_639
Название: Re: TranslationManager Отправлено: pastor от Ноябрь 14, 2008, 21:46 вот в украинской вики нашел http://uk.wikipedia.org/wiki/ISO_639 Век живи, век учись, а дураком помрешь ))) Спасибо за линк ) |