avatar_gazon01

Ох уж эти файлы в формате QM

Автор gazon01, 01 июля 2017, 20:23:12

« QT приложения и методы их модификации | Прячем элементы управления »

gazon01Автор темы

Дальше тему будет вести bellic, ему и слово.
Возможно всё! На невозможное просто требуется больше времени.
 Мудрец из Шангри Ла

bellic

Цитата: gazon01Дальше тему будет вести bellic, ему и слово.

Доброго Всем Лета!
В общем - пробую Локализовать интерфейс чисто-японской магнитолы, работающей на OS Linux...
|1]
Имеем кучу QM-файлов для различных языков... Интересует прежде всего JP, US, ну и возможно RU
Ссылки на скачивания архивов QM-файлов:
Войдите на сайт для перехода по ссылке
Войдите на сайт для перехода по ссылке
Войдите на сайт для перехода по ссылке
Я не приверженец Русского интерфейса, поэтому беру JP и US QM-файлы, открываю их в двух окнах QT Linguist и начинаю копи-пасту с  JP в US.
(почему так? - идея была не изменяя самого файла - получить на выходе японский файл, но с переводом кнопок на английском. Простое переименовывание файла US в JP не дало положительного результата...)
|2]
Таким макаром прошелся по всем 1021-й кнопке Японца.. (у Американца кстати было только 929)...
|3]
А в левом окошке - эти желтенькие вопросики и даже красные восклицательные знаки..)))
Сохраняю файл в формате TS, и открыв его затем в текстовом редакторе - вижу  почти сполшняком:
Цитировать

Делаю тут же по всему тексту замену на , получил "чистенький" TS-файлик, который QT Linguist преобразовал в QM-файл.
(это потом я увидел в меню Готов и Далее (Ctrl+Return))
Подсовываю полученную псевдо-японскую (на самом деле подписи к кнопкам там на Английском) локаль магнитоле и получаю облом..((( - вместо японских или английских подписей - названия элементов управления!
|4]
P.S. парни, прошу прощения, я понимаю, что делал некоторые элементарные ошибки, но вижу QT Linguist и тем более Radialix впервые, а посему прошу не смеяться и не судить строго!...
Для меня эти программы - темные лошадки, которые что-то там делают себе на уме...
А хотелось бы ясности происходящего...
В общем - первую часть своей повести пожалуй закончу!

bellic

03 июля 2017, 23:14:30 #2 Последнее редактирование: 04 июля 2017, 00:34:01 от bellic
В общем решил поглубже капнуть и выяснить - что же такое TS- и QM-файлы...

Если с первым все было понятно, то "шифрацию" второго предстояла выяснить...

Может быть я зря так подробно расписываю свои шаги и результаты?
На сегодняшний день много чего изменилось, и я лучше тогда сразу сформулирую не решенный пока вопрос:
"Знает ли кто Алгоритм преобразования TS-файлов в QM?"

Ну и то что сделано:
- найдена консольная утилита "Lrealise.exe" и к ней прикручен оконный интерфейс(Программа названа WLRelease);
- выяснен примерный формат QM-файлов (наименования чисто свои):
  • сигнатура qm-файла;
    таблица ссылок(индексов) на элементы управления (имя элемента и подпись кнопки);
    сами элементы управления (Имя и Текст);
  • Кроме всего этого - в файле присутствуют поля с длинной и прочими атрибутами...
    ...
    Это конечно набросок на "скорую руку"...
    ...
    Самое важное - в
QM-файлах, полученных после работы QT Linguist наблюдается еще одно ПОЛЕ, которого нету в файлах магнитолы!
Это ПОЛЕ завершает сам QM-файл... Я бы назвал его "Прицепом", ибо он всегда имеет одно и тоже количество байт и их значение.
(нужно в WLRelease предусмотреть - дописывать в конце файла ПРИЦЕП или удалить его!)
...
Найдены в Инете исходники "qt-embedded-free-3.0.0"(скачал спецом самую старую версию) в которых есть СИ-шные исходники программ преобразования TS в QM... и обратно!!!!
НО я к сожалению в СИ еще не шибко силен...(((
...
Найдена консольная программа "qm2ts.exe", способная преобразовать QM-файлы в  TS.
...
В планах - написать программу на Дэлфи, способную производить двухстороннее преобразование: TS <--->QM.
...
Вот вроде и все... Писал кое где тезисно, но думаю кто в теме - поняли меня?!))

P.S. Вопросы:
- по форуму - чегой то у меня картинки получились огромными? - как избежать этого? какой размер оптимальный?
- БиБиСод  - можно ли его тут применять? Ну например "CODE"?
- сколько минут остается доступен для редактирования Пост и возможно ли активировать его повторно через Администратора?
Спасибо!

Еще раз - мысль по теме....
Открывать QM-файлы можно конечно с помощью "QT Linguist" и компилирует он исходные TS-файлы обратно в QM исправно. Но у меня симметричного преобразования - не получилось!
Представьте, когда я сравниваю два двоичных файла - оригинал и компил-версию, полученную после перевода в исходник, а потом заново откомпилированную... Вижу конечно что длина файлов разная, но все равно сравниваю...)))
Тотал Коммандер выдал следующую фразу - типа Файлы идентичные, но имеют разную длину!))))
Это все из-за ПРИЦЕПА!..

Забыл еще пожалуй сказать - в японской локали кодировка Подписей к клавишам, сделана на UNICODE, да еще с реверсом байт (LittleEndian)

Leserg

04 июля 2017, 02:19:40 #3 Последнее редактирование: 04 июля 2017, 02:22:46 от Leserg
Цитата: bellicВ планах - написать программу на Дэлфи, способную производить двухстороннее преобразование: TS <--->QM

Такая программа уже есть — QT Linguist.

Смотрите меню File. По пункту Save as выполняется сохранение файла переводов в указанный формат, в том числе и TS. По пункту Release выполняется компиляция в двоичный формат QM.

Вы с самого начала допустили ошибку. Если нужно изменить готовый файл переводов (будь-то TS или QM), то в качестве целевого языка перевода нужно указывать исходный язык. Например, если вы хотите изменить языковой файл японского (JP), то языком перевода укажите японский, но не русский, как это сделано у вас.

]

Вообще, библиотека Qt является кросплатформенной и файлы переводов имеют совместимость с приложениями сделанных для платформ Windows, Linux, Unix-подобные, Mac OS X, Android и др. независимо от программы и системы, в которой они созданы. Поэтому, если с вашей стороны не будет ошибок, то все должно работать.

По правде сказать мне не совсем понятны ваши действия. Если программа имеет языковую поддержку, то не проще ли в настройках переключить язык, а не создавать фейковый файл переводов?

Если языковой файл производителя содержит больше строк (что и не мудрено), то их можно скопировать в нужный языковой файл и перевести ( на тот же английский, к примеру). Затем этот язык выбрать в меню девайса.
Кто ищет, тот всегда найдет!

bellic

04 июля 2017, 08:52:32 #4 Последнее редактирование: 04 июля 2017, 09:08:44 от bellic
Вы думаете я не искал в меню магнитолы преключение на другой язык?
На японской магнитоле где то есть параметры - для какого рынка она выпущена и на каком языке, но похоже эти флажки спрятаны от пользователя и настраиваются на этапе производства..
В скриптах запуска найдены даже вызов функций, считывающих регион, язык и прочие настройки, но пока не найдено место, где они хранятся. Возможно в памяти самого процессора.
Так что пока остается вариант подмены языкового пакета.
...
Что касается выбора языка при загрузке Лингвиста - я этому не придаю пока особого значения - похоже это видно только в TS-файлах и в QM не передается!
...
Ну и по поводу Прицепа мне думаю не стоит забывать - вырезать его из QM-файла.
Возможно магнитоле он и не мешает, но в файлах магнитолы этого поля нету!

Leserg

04 июля 2017, 11:08:38 #5 Последнее редактирование: 04 июля 2017, 11:10:20 от Leserg
Цитата: bellicНа японской магнитоле где то есть параметры - для какого рынка она выпущена и на каком языке, но похоже эти флажки спрятаны от пользователя и настраиваются на этапе производства.

Тогда, возможно, язык задан жестко, а функция смены заблокирована. В этом случае программно также может выполняться проверка оригинального файла языка (по хешу или CRC). Проведите эксперимент: возьмите оригинальный языковой файл (надеюсь у вас есть его резервная копия), откройте его в НЕХ-редакторе и задайте поиск подстроки "DVD/С" (Unicode) (полная строка "DVD/CD" - видна на экране девайса, как представлено на вашем скриншоте) . Затем измените в ней один или пару символов, например на "DMD". Сохраните изменения и отправьте в девайс. Так мы проверим возможность подмены языкового файла. Если строки отображаются корректно и видны наши изменения, значит подмена возможна, если нет и вместо строк отображаются их идентификаторы, то подмена невозможна. Тогда нужно искать возможность обхода проверки языкового файла. Но без самого устройства или хотя-бы его эмулятора на ПК я затрудняюсь что-либо подсказать.

Цитата: bellicНу и по поводу Прицепа

О каком "прицепе" идет речь? Приведите пример (скрины). Например, я взял ваш файл Японской локали, открыл его в QT Linguist (в качестве языка перевода указал "Японский", затем сохранил в формате QM в новом файле. Исходный и новый файлы получились идентичными (размеры и хеши совпадают).

Цитата: bellicЧто касается выбора языка при загрузке Лингвиста - я этому не придаю пока особого значения.

Зря, порою небольшой пустяк приводит к большим проблемам.
Кто ищет, тот всегда найдет!

bellic

Изменить в HEX-редакторе я конечно могу пару символов, но тогда данные в Шапке не будут корректными... и итоговый QM-файл окажется тоже некорректным!
Пробовал на тестовом файле из 2-3-х записей... - меняю в подписи 1 байт, и в результате в QM-файле идет изменение в подписи + в шапке...
Вот такой вот файлик:
|5]
Компилируем его:
|6]
А вот в нем то как раз и появился ПРИЦЕП..((( - начиная с адреса 00BF и до конца файла..
...
Теперь меняем во второй подписи всего один байт - двойку на восьмерку:
|7]
И снова компилируем:
|8]
...Ммммм... мда... шапка вроде осталась той же...(((
Прям дэжавю какое то у меня сегодня!
...Может быть я прошлый раз изменил один байт названия кнопки, и это повлекло изменения в шапке?
... ладно - поэкспериментирую позже..
Вот так лучше наверное сравнивать шапки двух файлов:
|9]
Ну а вот т.н. ПРИЦЕП очень хорошо видно - попробуйте сравнить например с концовкой Японской локали!?
В Японской - файл заканчивается названием кнопки "TEL_POP_89", затем 4 нулевых байта и байт 01.
А в моих тестовых - сразу же после ожидаемого байта конца файла 01, идут постоянно одна и та же последовательность байт:
"88 00 00 00 0D 11 01 FD 29 0B FF 14 02 04 FD 2C 0A 13"
Это и есть "ПРИЦЕП" в моей терминологии...
Вот поэтому то и хочется перетрусить обе процедуры для TS <---> QM... Да и люблю я это дело - небольшие полезные программки писать!..
...
Я внимательно отношусь к всяким пустякам, просто с кодировкой было не совсем понятно - вот и оставил ее на потом..(((

А вот тут  - картинка с тремя файлами:
- в самом низу - оригинал
- по средине - измененный текст кнопки
- вверху - измененный текст кнопки + измененное название самой кнопки.
|10]
На самом верхнем видно, что в шапке немного поменялись данные - ну это и понятно.. - Лингвист при компиляции упорядочил имена кнопок с их текстом...
Потому и в шапке изменились тоже данные..)))
...
Вот мы еще один полезный вывод сделали - элементы управления упорядочиваются по возрастанию...
При этом  - сами подписи кнопок - игнорируются ...
Как то так!

bellic

А еще - Магнитола находится на Дальнем Востоке, а я в Ростове-на-Дону...((((

Leserg

bellic, еще раз:
1) Возьмите оригинальный языковой файл с вашего устройства (насколько я понимаю это файл res_language_jp.qm) и откройте его в НЕХ-редакторе. Не забудьте сделать резервную копию файла. Задайте поиск подстроки "DVD/С":

Теперь в текстовой части редактора, в найденной подстроке, измените один или пару символов на другой. Например, литеру "V" изменить на "M":

Сохраните изменения в файле. Поместите полученный файл на устройство и запустите его. Если никаких проверок языковых файлов разработчик не сделал, то вместо надписи "DVD/СD" будет надпись "DMD/СD":

Если же вместо надписей вы увидите идентификаторы строк, то в программной части девайса идет проверка языковых файлов. Без разбора алгоритма и отключения проверок подменить языковой файл не получится. Возможно есть еще какие-то нюансы, которые без наличия девайса я учесть не могу.

Если же вы увидите изменённую надпись, тогда будем двигаться дальше.

Цитата: bellicА еще - Магнитола находится на Дальнем Востоке, а я в Ростове-на-Дону...((((

Ну это вообще класс! Т.е. нет никаких гарантий, что пользователь на той стороне делает все правильно. Печалька....
Кто ищет, тот всегда найдет!

Leserg

04 июля 2017, 15:02:10 #9 Последнее редактирование: 04 июля 2017, 15:07:29 от Leserg
Попробуйте этот файл : Войдите на сайт для перехода по ссылке

Распаковать содержимое архива, получите файл res_language_jp.qm. В нем японский заменен на английский. Поместить его на девайс, подтвердив замену. Запустить - результат в студию.
Кто ищет, тот всегда найдет!

bellic

Leserg, я извиняюсь, но еще немного раньше выслал хозяину другой файлик, в котором заменил несколько байт одной подписи к кнопке - соблидая оригинальную длину сообщения...
Вот только что получил ответ:
|11]
Т.е. все корректно получилось!!!
Сразу же в догонку отправил Ваш измененный файл - с заменой японского на английский...
Ждем результата...
ЦитироватьРаспаковать содержимое архива, получите файл res_language_jp.qm. В нем японский заменен на английский.

Подскажите - а как получен этот файл? - Просто переименованием или же заменой японских слов на английские из Американской локали? Дело в том, что у этих локалей - разное количество используемых кнопок!
Открыл Ваш файл в Радиалликсе - вижу, что 1021 кнопка - значит файл на основе японской локали - вопрос по происхождению снимается... хотя...
Как Вам так быстро удалось произвести замену?))))
Кстати - там в некоторых местах я встречал - у некоторых кнопок в Японской, нет подписей, а в аналогичных Английских - они есть...
И еще - т.к. Операционка делалась универсальной - под разные типы магнитол  - в плане Рынка сбыта и языка...
А само железо - все ж отличается на разных Рынках, то и кнопки могут быть в некоторых местах разные...
...
А мы имеем чисто японскую, значит правильней - нужно брать Японскую локаль и желательно сверяясь с Гуглом-переводчиком, корректировать ее, заимствуя подходящие тексты с Американской и Английской локалей.
Пришел ответ... с Вашим файлом...
|12]
|13]
Не пошло..(((
ЗЫ: сейчас уезжаю на пару-тройку часов - посему не смогу пока активно общаться...
Да мы и так сегодня много сделали - увидели Английские буквы!...
Товарищь написал, что попробует с файлом еще раз...

Leserg

Цитата: bellicНе пошло..(((

Плохо. Скорее всего проверяется размер файла. Без вмешательства в код ничего не сделаешь. Остается вариант править файл в НЕХ-редакторе. Другой вариант - подгонять перевод так, чтобы после создания бинарного формата размер файла остался неизменным. Это сложнее. Как ни крути, но строки на японском намного короче англоязычного варианта.

Цитата: bellicКак Вам так быстро удалось произвести замену?

Сохранил файлы переводов в формат TS, потом в Total Commader сравнил их и в режиме редактирования скопировал недостающие строки в файл английской локали, лишние строки (которых нет в японской локали) удалил. После открыл его в текстовом редакторе и изменил локаль на японскую. Сохранил. Открыл в Qt Linquist и скомпилировал в формат QM. Полученный файл переименовал в res_language_jp.qm. Все.
Кто ищет, тот всегда найдет!

bellic

04 июля 2017, 20:32:42 #12 Последнее редактирование: 04 июля 2017, 20:39:16 от bellic
Пообщался я с товарищем - то ли у него с Загрузочным Убунту на флешке проблемы, толи Магнитола некоторое время помнит свои какие то файлики...
В общем получилась каша, испорченный телефон или игра Верю-Неверю...
...
Не думаю, что в его системе файлы локалей как-то проверяются на длину или контрольную сумму... Ибо видел загрузочные скрипты - загружающие Локали в зависимости от Региона и т.п.
...
В любом случае - главный инструмент МАГНИТОЛА и SD-карточка в его руках и только он ответственен за правильность записи наших вариантов!
А у него раз-на-раз не выходит - то все Ок, то Bad...
...
А вот тут все равно не совсем понятно:
ЦитироватьСохранил файлы переводов в формат TS, потом в Total Commader сравнил их и в режиме редактирования скопировал недостающие строки в файл английской локали, лишние строки (которых нет в японской локали) удалил. После открыл его в текстовом редакторе и изменил локаль на японскую. Сохранил. Открыл в Qt Linquist и скомпилировал в формат QM. Полученный файл переименовал в res_language_jp.qm.

...
1. Сохранить JP, US, GB в формате TS - понятно...
2. ... не совсем согласен, с тем что за основу был взят файл Английской Локали!? - я понимаю что скопировать в Английский - проще...
Все, отбой - примерную мысль понял..)))))
...
Ну а меня собственно зацепило разгадывание алгоритма шифрования QM-файлов из TS... Может займемся?
Есть куча исходников, но я повторюсь - практически не читаю СИ-шные..
...
Ну а я пока покумекаю - как написать утилиту на Дэлфи, помогающую создать правильный TS-файл на основе двух других и помощи Гугла...
Есть некоторая идея по этому поводу...

mishem

Цитата: LesergСкорее всего проверяется размер файла.

Похоже на то что не может файл прочитать. У вас с кодировкой там все правильно? Может быть файл компилируется не в той кодировке и магнитола просто не понимает?

bellic

Цитата: mishemПохоже на то что не может файл прочитать. У вас с кодировкой там все правильно? Может быть файл компилируется не в той кодировке и магнитола просто не понимает?
mishem, да вроде с кодировкой все правильно...
У товарища там не всегда получается вроде файлик записать...
Сейчас на Д.Востоке ночь - подождем, когда человек разберется с записью..
Может все прояснится!

* Ваши права на сайте

    Light Portal

  • Вы можете просматривать элементы портала
  • Вы не можете управлять блоками
  • Вы не можете управлять своими страницами
  • Вы не можете размещать свои страницы без модерации

    Simple Machines

  • Вы не можете удалять темы.
  • Вы не можете создавать темы.
  • Вы не можете отвечать на сообщения.
  • Вы не можете прикреплять файлы.
  • Вы не можете изменять свои сообщения.
  • Вы не можете удалять свои сообщения.

Яндекс.Метрика Каталог@MAIL.RU - каталог ресурсов интернет