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

Дальше тему будет вести bellic, ему и слово.
  1. Оффлайн

    Автор темы

    gazon01

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

    Команда

    Сообщений: 1212

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

    Рейтинг: 8

    Репа: (42|41|-1)

    Баллы: 66

    Был: 2018-12-02 14:30

    Лайков: 17

    Дальше тему будет вести bellic, ему и слово.
    Hooman нравится это сообщение.
    Сообщение отредактировал 5 февраля 2021 - 02:08

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

    1 июля 2017 - 20:23 / #1
  2. Оффлайн

    bellic

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

    Участники

    Сообщений: 19

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

    Рейтинг: 1

    Репа: 0

    Баллы: 51

    Был: 2021-03-15 18:14

    Цитата: 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:33
    3 июля 2017 - 22:35 / #2
  3. Оффлайн

    bellic

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

    Участники

    Сообщений: 19

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

    Рейтинг: 1

    Репа: 0

    Баллы: 51

    Был: 2021-03-15 18:14

    В общем решил поглубже капнуть и выяснить - что же такое TS- и QM-файлы...

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

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

    Ну и то что сделано:
    - найдена консольная утилита "Lrealise.exe" и к ней прикручен оконный интерфейс(Программа названа WLRelease);
    - выяснен примерный формат QM-файлов (наименования чисто свои):
    1. сигнатура qm-файла;
      таблица ссылок(индексов) на элементы управления (имя элемента и подпись кнопки);
      сами элементы управления (Имя и Текст);

    2. Кроме всего этого - в файле присутствуют поля с длинной и прочими атрибутами...
      ...
      Это конечно набросок на "скорую руку"...
      ...
      Самое важное - в 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:34
    3 июля 2017 - 23:14 / #3
  4. Оффлайн

    Leserg

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

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

    Сообщений: 929

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

    Рейтинг: 8

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

    Баллы: 1596

    Был: 2024-04-28 00:36

    Лайков: 140

    Цитата: 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:22

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

    4 июля 2017 - 02:19 / #4
  5. Оффлайн

    bellic

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

    Участники

    Сообщений: 19

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

    Рейтинг: 1

    Репа: 0

    Баллы: 51

    Был: 2021-03-15 18:14

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

    Leserg

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

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

    Сообщений: 929

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

    Рейтинг: 8

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

    Баллы: 1596

    Был: 2024-04-28 00:36

    Лайков: 140

    Цитата: bellic
    На японской магнитоле где то есть параметры - для какого рынка она выпущена и на каком языке, но похоже эти флажки спрятаны от пользователя и настраиваются на этапе производства.



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

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



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

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



    Зря, порою небольшой пустяк приводит к большим проблемам.
    Сообщение отредактировал Leserg 4 июля 2017 - 11:10

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

    4 июля 2017 - 11:08 / #6
  7. Оффлайн

    bellic

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

    Участники

    Сообщений: 19

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

    Рейтинг: 1

    Репа: 0

    Баллы: 51

    Был: 2021-03-15 18:14

    Изменить в 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:31
    4 июля 2017 - 13:15 / #7
  8. Оффлайн

    bellic

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

    Участники

    Сообщений: 19

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

    Рейтинг: 1

    Репа: 0

    Баллы: 51

    Был: 2021-03-15 18:14

    А еще - Магнитола находится на Дальнем Востоке, а я в Ростове-на-Дону...((((
    4 июля 2017 - 14:17 / #8
  9. Оффлайн

    Leserg

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

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

    Сообщений: 929

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

    Рейтинг: 8

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

    Баллы: 1596

    Был: 2024-04-28 00:36

    Лайков: 140

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

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

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

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

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

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



    Ну это вообще класс! Т.е. нет никаких гарантий, что пользователь на той стороне делает все правильно. Печалька....
    Сообщение отредактировал 30 января 2021 - 18:28

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

    4 июля 2017 - 14:25 / #9
  10. Оффлайн

    Leserg

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

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

    Сообщений: 929

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

    Рейтинг: 8

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

    Баллы: 1596

    Был: 2024-04-28 00:36

    Лайков: 140

    Попробуйте этот файл : res_language_jp.zip

    Распаковать содержимое архива, получите файл res_language_jp.qm. В нем японский заменен на английский. Поместить его на девайс, подтвердив замену. Запустить - результат в студию.
    Сообщение отредактировал Leserg 4 июля 2017 - 15:07

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

    4 июля 2017 - 15:02 / #10

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

---
Создано тем
1179
Всего сообщений
15367
Пользователей
17859
Новый участник
Leongsm