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
- 
  ОффлайнЗвание: Легенда Админ Сообщений: 2237 Создано тем: 323 Рейтинг: 10 Репа:  (246|246|0) (246|246|0) Баллы: 4035 Был: 2025-08-30 08:05 Лайков: 220 Наверное всё-таки стоит начать с начала. А именно со стандартного способа перевода.
 Тут речь будет идти не за перевод, а за кодировку исполняемых файлов Qt  
 Перевод файлов с расширением .ts и .qm не составляет труда.16 сентября 2014 - 11:29 / #3
- 
  Вот, вот! перевести та мы могем, а вот настроить кодировку в Qt библиотеке(для корректного отображения текста) вот это и ждем 16 сентября 2014 - 13:43 / #4 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
- 
  ОффлайнЗвание: Ветеран Команда сайта Сообщений: 1003 Создано тем: 79 Рейтинг: 8 Репа:  (133|133|0) (133|133|0) Баллы: 1971 Был: 2025-09-11 22:24 Лайков: 216 Еще один вариант нахождения проблемного участка кода. Обратите внимание на константу FFE0h (65504d). Она встречается в файле QtCore4.dll всего два раза! Задаем её поиск и рядом с одной из них будет проблемный участок кода.Кто ищет, тот всегда найдет! 
 24 сентября 2014 - 23:25 / #6
- 
  ОффлайнЗвание: Ветеран Команда сайта Сообщений: 1003 Создано тем: 79 Рейтинг: 8 Репа:  (133|133|0) (133|133|0) Баллы: 1971 Был: 2025-09-11 22:24 Лайков: 216 Пока что данную тему развивать не буду из-за того, что начал писать полноценное руководство. Когда его закончу - хрен его ведает...
 Но данная ветка скорее всего была недальновидной глупостью.
 Во как?!  
 Почему глупость? Программ QT становится все больше и больше, а проблема с кодировками никуда не девается. Ясно, что вопрос очень сложный, но хоть вот такие конкретные решения давали бы пищу для самостоятельного изучения. Надеюсь, ты найдешь в себе силы поделиться с нами хоть малой долей информации. Желаю удачи в осуществлении поставленных целей. Кто ищет, тот всегда найдет! 
 1 ноября 2014 - 16:58 / #7
- 
  ОффлайнЗвание: Ветеран Команда сайта Сообщений: 1003 Создано тем: 79 Рейтинг: 8 Репа:  (133|133|0) (133|133|0) Баллы: 1971 Был: 2025-09-11 22:24 Лайков: 216 я строчу статью в Ворде
 Семен Семёныч!  
 Я тут скачал исходники QT и хотел найти в них это проблемное место. А-га, не тут-то было. Там сам чорт ногу сломит. Такая каша и мешанина... Бросил я это дело, не потяну. Бросил я это дело, не потяну.Кто ищет, тот всегда найдет! 
 1 ноября 2014 - 22:33 / #8
- 
  Leserg, а причем здесь исходники? Я же в уже скомпилированном ковыряюсь? Исходники QT библиотек позователи не потянут 1 ноября 2014 - 22:47 / #9 1 ноября 2014 - 22:47 / #9
- 
  ОффлайнЗвание: Ветеран Команда сайта Сообщений: 1003 Создано тем: 79 Рейтинг: 8 Репа:  (133|133|0) (133|133|0) Баллы: 1971 Был: 2025-09-11 22:24 Лайков: 216 Да я хотел посмотреть, как там и чего со шрифтом выполняется. Потом исправить как надо и скомпилировать. Тогда не нужно было бы лазить и чего-то исправлять в готовых файлах (я имею в виду файл QtCore4.dll).Кто ищет, тот всегда найдет! 
 1 ноября 2014 - 22:57 / #10
Статистика форума, пользователей онлайн: 0 (за последние 20 минут)
- Создано тем
- 1223
- Всего сообщений
- 16486
- Пользователей
- 18270
- Новый участник
- poligus
 Гость
Гость









 
       
       
      