Ох уж эти файлы в формате QM
-
Оффлайн
Автор темы
Звание: Ветеран
Команда
Сообщений: 1211
Создано тем: 39
Рейтинг: 8
Репа: (42|41|-1)
Баллы: 86
Был: 2018-12-02 14:30
Лайков: 18
Дальше тему будет вести bellic, ему и слово.Hooman нравится это сообщение.Возможно всё! На невозможное просто требуется больше времени.
Мудрец из Шангри Ла1 июля 2017 - 20:23 / #1 -
Цитата: 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 впервые, а посему прошу не смеяться и не судить строго!...
Для меня эти программы - темные лошадки, которые что-то там делают себе на уме...
А хотелось бы ясности происходящего...
В общем - первую часть своей повести пожалуй закончу!Сообщение отредактировал gazon01 5 июля 2017 - 20:333 июля 2017 - 22:35 / #2 -
В общем решил поглубже капнуть и выяснить - что же такое 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)Сообщение отредактировал bellic 4 июля 2017 - 00:343 июля 2017 - 23:14 / #3 - сигнатура qm-файла;
-
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
Цитата: bellicВ планах - написать программу на Дэлфи, способную производить двухстороннее преобразование: TS <--->QM
Такая программа уже есть — QT Linguist.
Смотрите меню File. По пункту Save as выполняется сохранение файла переводов в указанный формат, в том числе и TS. По пункту Release выполняется компиляция в двоичный формат QM.
Вы с самого начала допустили ошибку. Если нужно изменить готовый файл переводов (будь-то TS или QM), то в качестве целевого языка перевода нужно указывать исходный язык. Например, если вы хотите изменить языковой файл японского (JP), то языком перевода укажите японский, но не русский, как это сделано у вас.
]
Вообще, библиотека Qt является кросплатформенной и файлы переводов имеют совместимость с приложениями сделанных для платформ Windows, Linux, Unix-подобные, Mac OS X, Android и др. независимо от программы и системы, в которой они созданы. Поэтому, если с вашей стороны не будет ошибок, то все должно работать.
По правде сказать мне не совсем понятны ваши действия. Если программа имеет языковую поддержку, то не проще ли в настройках переключить язык, а не создавать фейковый файл переводов?
Если языковой файл производителя содержит больше строк (что и не мудрено), то их можно скопировать в нужный языковой файл и перевести ( на тот же английский, к примеру). Затем этот язык выбрать в меню девайса.Сообщение отредактировал Leserg 4 июля 2017 - 02:224 июля 2017 - 02:19 / #4 -
Вы думаете я не искал в меню магнитолы преключение на другой язык?
На японской магнитоле где то есть параметры - для какого рынка она выпущена и на каком языке, но похоже эти флажки спрятаны от пользователя и настраиваются на этапе производства..
В скриптах запуска найдены даже вызов функций, считывающих регион, язык и прочие настройки, но пока не найдено место, где они хранятся. Возможно в памяти самого процессора.
Так что пока остается вариант подмены языкового пакета.
...
Что касается выбора языка при загрузке Лингвиста - я этому не придаю пока особого значения - похоже это видно только в TS-файлах и в QM не передается!
...
Ну и по поводу Прицепа мне думаю не стоит забывать - вырезать его из QM-файла.
Возможно магнитоле он и не мешает, но в файлах магнитолы этого поля нету!Сообщение отредактировал bellic 4 июля 2017 - 09:084 июля 2017 - 08:52 / #5 -
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
Цитата: bellicНа японской магнитоле где то есть параметры - для какого рынка она выпущена и на каком языке, но похоже эти флажки спрятаны от пользователя и настраиваются на этапе производства.
Тогда, возможно, язык задан жестко, а функция смены заблокирована. В этом случае программно также может выполняться проверка оригинального файла языка (по хешу или CRC). Проведите эксперимент: возьмите оригинальный языковой файл (надеюсь у вас есть его резервная копия), откройте его в НЕХ-редакторе и задайте поиск подстроки "DVD/С" (Unicode) (полная строка "DVD/CD" - видна на экране девайса, как представлено на вашем скриншоте) . Затем измените в ней один или пару символов, например на "DMD". Сохраните изменения и отправьте в девайс. Так мы проверим возможность подмены языкового файла. Если строки отображаются корректно и видны наши изменения, значит подмена возможна, если нет и вместо строк отображаются их идентификаторы, то подмена невозможна. Тогда нужно искать возможность обхода проверки языкового файла. Но без самого устройства или хотя-бы его эмулятора на ПК я затрудняюсь что-либо подсказать.Цитата: bellicНу и по поводу Прицепа
О каком "прицепе" идет речь? Приведите пример (скрины). Например, я взял ваш файл Японской локали, открыл его в QT Linguist (в качестве языка перевода указал "Японский", затем сохранил в формате QM в новом файле. Исходный и новый файлы получились идентичными (размеры и хеши совпадают).Цитата: bellicЧто касается выбора языка при загрузке Лингвиста - я этому не придаю пока особого значения.
Зря, порою небольшой пустяк приводит к большим проблемам.Сообщение отредактировал Leserg 4 июля 2017 - 11:104 июля 2017 - 11:08 / #6 -
Изменить в 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]
На самом верхнем видно, что в шапке немного поменялись данные - ну это и понятно.. - Лингвист при компиляции упорядочил имена кнопок с их текстом...
Потому и в шапке изменились тоже данные..)))
...
Вот мы еще один полезный вывод сделали - элементы управления упорядочиваются по возрастанию...
При этом - сами подписи кнопок - игнорируются ...
Как то так!Сообщение отредактировал gazon01 5 июля 2017 - 20:314 июля 2017 - 13:15 / #7 -
А еще - Магнитола находится на Дальнем Востоке, а я в Ростове-на-Дону...((((4 июля 2017 - 14:17 / #8
-
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
bellic, еще раз:
1) Возьмите оригинальный языковой файл с вашего устройства (насколько я понимаю это файл res_language_jp.qm) и откройте его в НЕХ-редакторе. Не забудьте сделать резервную копию файла. Задайте поиск подстроки "DVD/С":
Теперь в текстовой части редактора, в найденной подстроке, измените один или пару символов на другой. Например, литеру "V" изменить на "M":
Сохраните изменения в файле. Поместите полученный файл на устройство и запустите его. Если никаких проверок языковых файлов разработчик не сделал, то вместо надписи "DVD/СD" будет надпись "DMD/СD":
Если же вместо надписей вы увидите идентификаторы строк, то в программной части девайса идет проверка языковых файлов. Без разбора алгоритма и отключения проверок подменить языковой файл не получится. Возможно есть еще какие-то нюансы, которые без наличия девайса я учесть не могу.
Если же вы увидите изменённую надпись, тогда будем двигаться дальше.Цитата: bellicА еще - Магнитола находится на Дальнем Востоке, а я в Ростове-на-Дону...((((
Ну это вообще класс! Т.е. нет никаких гарантий, что пользователь на той стороне делает все правильно. Печалька....4 июля 2017 - 14:25 / #9 -
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
Попробуйте этот файл : res_language_jp.zip
Распаковать содержимое архива, получите файл res_language_jp.qm. В нем японский заменен на английский. Поместить его на девайс, подтвердив замену. Запустить - результат в студию.Сообщение отредактировал Leserg 4 июля 2017 - 15:074 июля 2017 - 15:02 / #10