QT приложения и методы их модификации
-
QT приложения и методы их модификации
Эта тема создана для желающих узнать что и как делать с QT библиотеками при их капризной работе с русскими строками. Ветка временная, потому как у меня нету сейчас времени писать полноценные руководства по разборке этих библиотек. Поэтому буду просто выкладывать скрины кода и краткие пояснения к ним что и как нужно делать, все это буду делать постепенно и будем обсуждать здесь все ньюансы этой головной боли русификаторщиков. Получается что-то типа блога или живого журнала :D Со временем возможно и напишу полноценный мануал.
Благодарю за понимание.
Приводится пример модификации QT библиотеки версии 4.4.3.0
Итак, имеется библиотека QtCore4.dll. Вся беда в ней. Грузим этот объект в отладчик Olly Debugger 2.01, кто не знает - для анализа кода жмем Ctrl+A, или выбираем через контекстное меню Analysis -> Analyse code.
После через контекстное меню выбираем Search for -> Names, или Ctrl+N. Вывалится список функций, которые экспортирует данная библиотека. То есть, будут показаны имена функций, которые находятся внутри библиотеки и которые могут быть использованы другими компонентами программы. Для постановления списка по алфавиту щелкнем на столбик Name.
Далее ищем функцию fromLatin1_helper. Прикол в том, что в разных версиях QT библиотек это название функции может содержать разные дополнительные символы. Например, в версии библиотеки 4.4.3.0, которую я использую для этого примера, полное название будет как ?fromLatin1_helper@QString@@CAPAUData@1@PBDH@Z.
Чтобы узнать в любой библиотеке разных версий полное имя функции, можно через HEX редактор искать строку fromLatin1_helper, в результате найдется строка с полным именем функции.
Итак, в списке нашли эту функцию. Переходим в ее код, щелкая по ее названию.
Мы попадаем в код функции, куда приходят все текстовые строки, которые при переводе отображаются крякозяблями. На скрине весь ее код выделен серым цветом.
Так вот, данная функция, точнее, эта процедура под названием fromLatin1_helper как раз и мешает переводчикам локализовать QT приложения. Если быть точным, то мешает не сама процедура, а небольшой кусочек ее кода, который выделен на рисунке серым цветом.Сообщение отредактировал WYLEK 4 ноября 2024 - 13:1610 сентября 2014 - 21:52 / #1 -
Оффлайн
Участники
Сообщений: 1
Создано тем: 0
Репа:
Баллы: 51
Страна: не указана!
Был: 2014-09-15 16:36
Наверное всё-таки стоит начать с начала. А именно со стандартного способа перевода.
Переводы у Qt хранятся в двух типах файлов с суффиксом .ts и .qm. Если вам повезло и есть файлы с суффиксом .ts, то всё очень хорошо -- это исходные файлы для перевода. А вот если есть только файлы с суффиксом .qm, то тоже расстраиваться не надо -- их тоже можно использовать.
Для правки переводов нам понадобится Qt Linguist. Это прога есть в Qt SDK, который проще всего взять из своего репа. Если вы -- такой неудачник, что репа у вас нет, то идите на сайт Qt и берите там. Бесплатно.
Теперь ищем подходящий файл для перевода. Если есть файл с суффиксом _ru (например, texmaker_ru.qm), а лучше _ru_RU (например, texmaker_ru_RU.qm), то он нам и нужен.
Если такого нет, то устроит и любой другой. Только не забудьте переименовать его суффикс на нужный и исправить язык перевода в свойствах.
Интерфейс Qt Linguist очень прост, да ещё русскому обучен -- сами разберётесь. Только сделаю пометку, что такое контекст: это условно говоря, то окно к которому относится перевод.
Полученный перевод надо не просто сохранить в файл с суффиксом .ts, а скомпилировать!
Сам формат файлов QM можно посмотреть в сырцах lrelease по ключу -qm.Сообщение отредактировал gazon01 15 сентября 2014 - 22:0415 сентября 2014 - 20:55 / #2 -
Оффлайн
Звание: Легенда
Админ
Сообщений: 2196
Создано тем: 317
Рейтинг: 10
Репа: (245|245|0)
Баллы: 3585
Был: 2025-01-02 21:26
Лайков: 206
Наверное всё-таки стоит начать с начала. А именно со стандартного способа перевода.
Тут речь будет идти не за перевод, а за кодировку исполняемых файлов Qt
Перевод файлов с расширением .ts и .qm не составляет труда.16 сентября 2014 - 11:29 / #3 -
Вот, вот! перевести та мы могем, а вот настроить кодировку в Qt библиотеке(для корректного отображения текста) вот это и ждем16 сентября 2014 - 13:43 / #4
-
Цитата: scikodПереводы у Qt хранятся в двух типах файлов с суффиксом .ts и .qm.
Далеко не все QT программы поддерживают QM и TS локали, это уже как автор проги задумал. Тут речь идет о прогах, которым даже Радиаликс со своим патчингом не поможет.Цитата: scikodДля правки переводов нам понадобится Qt Linguist. Это прога есть в Qt SDK, который проще всего взять из своего репа. Если вы -- такой неудачник, что репа у вас нет, то идите на сайт Qt и берите там. Бесплатно.
У нас на сайте есть в разделе Инструменты. Да и Радиаликс может их редактировать.Цитата: scikodТеперь ищем подходящий файл для перевода. Если есть файл с суффиксом _ru (например, texmaker_ru.qm), а лучше _ru_RU (например, texmaker_ru_RU.qm), то он нам и нужен. Если такого нет, то устроит и любой другой. Только не забудьте переименовать его суффикс на нужный и исправить язык перевода в свойствах.
Тут есть один специфический ньюанс. Если программа поддерживает .qm файлы, то сначала ищет эти файлы с суффиксом, которое соответствует региональным настройкам системы, проще говроря, если у системы язык Русский, то ищет name_ru.qm, если же стоит язык английский, то ищет name_en.qm. Ну а если не находятся файлы с нужным суффиксом, то программа на крайняк ищет стандартный QM языковый файл без каких-то суффиксов - name.qm. Так заложен механизм работы QT программ. Поэтому для русификации всегда предпочтительно делать QM файлы без суффиксов, так как прога вегда будет отображать русский текст на системах с любыми языковыми параметрами.18 сентября 2014 - 00:08 / #5 -
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 951
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1706
Был: 2024-12-30 22:08
Лайков: 174
Еще один вариант нахождения проблемного участка кода. Обратите внимание на константу FFE0h (65504d). Она встречается в файле QtCore4.dll всего два раза! Задаем её поиск и рядом с одной из них будет проблемный участок кода.24 сентября 2014 - 23:25 / #6 -
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 951
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1706
Был: 2024-12-30 22:08
Лайков: 174
Пока что данную тему развивать не буду из-за того, что начал писать полноценное руководство. Когда его закончу - хрен его ведает...
Но данная ветка скорее всего была недальновидной глупостью.
Во как?!
Почему глупость? Программ QT становится все больше и больше, а проблема с кодировками никуда не девается. Ясно, что вопрос очень сложный, но хоть вот такие конкретные решения давали бы пищу для самостоятельного изучения. Надеюсь, ты найдешь в себе силы поделиться с нами хоть малой долей информации. Желаю удачи в осуществлении поставленных целей.1 ноября 2014 - 16:58 / #7 -
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 951
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1706
Был: 2024-12-30 22:08
Лайков: 174
я строчу статью в Ворде
Семен Семёныч!
Я тут скачал исходники QT и хотел найти в них это проблемное место. А-га, не тут-то было. Там сам чорт ногу сломит. Такая каша и мешанина... Бросил я это дело, не потяну.1 ноября 2014 - 22:33 / #8 -
Leserg, а причем здесь исходники? Я же в уже скомпилированном ковыряюсь? Исходники QT библиотек позователи не потянут1 ноября 2014 - 22:47 / #9
-
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 951
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1706
Был: 2024-12-30 22:08
Лайков: 174
Да я хотел посмотреть, как там и чего со шрифтом выполняется. Потом исправить как надо и скомпилировать. Тогда не нужно было бы лазить и чего-то исправлять в готовых файлах (я имею в виду файл QtCore4.dll).1 ноября 2014 - 22:57 / #10