QT приложения и методы их модификации

QT приложения и методы их модификацииЭта тема создана для желающих узнать что и как делать
  1. Оффлайн

    Автор темы

    Nexus

    Забанен

    Сообщений: 611

    Создано тем: 20

    Репа: 0

    Баллы: 0

    Был: 2022-07-03 23:07

    Лайков: 7

    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 приложения. Если быть точным, то мешает не сама процедура, а небольшой кусочек ее кода, который выделен на рисунке серым цветом.

    10 сентября 2014 - 21:52 / #1
  2. Оффлайн

    scikod

    Участники

    Сообщений: 1

    Создано тем: 0

    Репа: 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:04
    15 сентября 2014 - 20:55 / #2
  3. Оффлайн

    WYLEK

    Звание: Легенда

    Админ

    Сообщений: 2178

    Создано тем: 315

    Рейтинг: 10

    Репа: (245|245|0)

    Баллы: 3400

    Был: 2024-04-08 16:00

    Лайков: 196

    Наверное всё-таки стоит начать с начала. А именно со стандартного способа перевода.

    Тут речь будет идти не за перевод, а за кодировку исполняемых файлов  Qtbiggrin
    Перевод файлов с расширением .ts и .qm не составляет труда.

    16 сентября 2014 - 11:29 / #3
  4. Оффлайн

    Sergey_Malkov

    Звание: Прибывший

    Участники

    Сообщений: 14

    Создано тем: 0

    Рейтинг: 1

    Репа: (1|1|0)

    Баллы: 51

    Страна: не указана!

    Был: 2015-05-18 15:34

    Вот, вот! перевести та мы могем, а вот настроить кодировку в Qt библиотеке(для корректного отображения текста) вот это и ждемwow2
    16 сентября 2014 - 13:43 / #4
  5. Оффлайн

    Автор темы

    Nexus

    Забанен

    Сообщений: 611

    Создано тем: 20

    Репа: 0

    Баллы: 0

    Был: 2022-07-03 23:07

    Лайков: 7

    Цитата: 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 файлы без суффиксов, так как прога вегда будет отображать русский текст на системах с любыми языковыми параметрами.
    Сообщение отредактировал 13 февраля 2017 - 16:09
    18 сентября 2014 - 00:08 / #5
  6. Оффлайн

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 927

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1586

    Был: 2024-04-23 22:51

    Лайков: 132

    Еще один вариант нахождения проблемного участка кода. Обратите внимание на константу FFE0h (65504d). Она встречается в файле QtCore4.dll всего два раза! Задаем её поиск и рядом с одной из них будет проблемный участок кода.

    Сообщение отредактировал 13 февраля 2017 - 16:12

    Кто ищет, тот всегда найдет!

    24 сентября 2014 - 23:25 / #6
  7. Оффлайн

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 927

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1586

    Был: 2024-04-23 22:51

    Лайков: 132

    Пока что данную тему развивать не буду из-за того, что начал писать полноценное руководство. Когда его закончу - хрен его ведает...
    Но данная ветка скорее всего была недальновидной глупостью.

    Во как?!surprised
    Почему глупость? Программ QT становится все больше и больше, а проблема с кодировками никуда не девается. Ясно, что вопрос очень сложный, но хоть вот такие конкретные решения давали бы пищу для самостоятельного изучения. Надеюсь, ты найдешь в себе силы поделиться с нами хоть малой долей информации. Желаю удачи в осуществлении поставленных целей.wink

    Кто ищет, тот всегда найдет!

    1 ноября 2014 - 16:58 / #7
  8. Оффлайн

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 927

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1586

    Был: 2024-04-23 22:51

    Лайков: 132

    я строчу статью в Ворде

    Семен Семёныч!biggrin

    Я тут скачал исходники QT и хотел найти в них это проблемное место. А-га, не тут-то было. Там сам чорт ногу сломит. Такая каша и мешанина...wacko Бросил я это дело, не потяну.

    Кто ищет, тот всегда найдет!

    1 ноября 2014 - 22:33 / #8
  9. Оффлайн

    Автор темы

    Nexus

    Забанен

    Сообщений: 611

    Создано тем: 20

    Репа: 0

    Баллы: 0

    Был: 2022-07-03 23:07

    Лайков: 7

    Leserg, а причем здесь исходники? Я же в уже скомпилированном ковыряюсь? Исходники QT библиотек позователи не потянутbiggrin
    1 ноября 2014 - 22:47 / #9
  10. Оффлайн

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 927

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1586

    Был: 2024-04-23 22:51

    Лайков: 132

    Да я хотел посмотреть, как там и чего со шрифтом выполняется. Потом исправить как надо и скомпилировать. Тогда не нужно было бы лазить и чего-то исправлять в готовых файлах (я имею в виду файл QtCore4.dll).

    Кто ищет, тот всегда найдет!

    1 ноября 2014 - 22:57 / #10

Статистика форума, пользователей онлайн: 1 (за последние 20 минут)

Создано тем
1176
Всего сообщений
15326
Пользователей
17847
Новый участник
dikfer