Основные форумы > RusMe - РусМи!

Смещение строк при переводе

(1/4) > >>

миха04:
Всем здоровья! И опять я с очередным затыком от iZotop RX7 версия X64. С таким сталкиваюсь впервые. Оригинальное окно настроек (1) и после перевода (2). Строки смещаются со своего места влево вверх, независимо от кодировки и языка локали, даже если заменена одна буква. Часть кода со строкой Keyboard (3). При замене, например, буквы "b" на "B" у перехода jns меняется адрес, выводящий на строчку, начинающуюся с "Show commands containing" (4). Смена вызова строки с нового адреса приводит к одинаковому результату - смещение строки. В случае с кириллицей в UTF-8, видна только половина. Подскажите, если кто сталкивался с подобной заморочкой.

leserg73:
И вам здоровья!

Обычно  такое происходит, когда разработчик приложения организует выбор вкладок не по индексу, а по имени. Имена вкладок являются ключевыми. Изменение имени вкладки буквально на одну букву, делает её неизвестной. В итоге программа добавляет её в качестве новой. Что вы и наблюдаете при попытке их перевода. В таких случаях нужно искать такие "ключи" по всему файлу программы. Если произвести поиск, например, строки-ключа "Keyboard", то она будет найдена в ресурсах программы, элементе с именем "IZRESEMBED -> RESTORATIONRESEMBED".

Рис. 1


Он является бинарным (двоичным) и содержит графические и текстовые данные с описанием компоновки элементов интерфейса программы. Достанем его из файла, разберем и увидим, что в одном их файлов в формате XML, где встречается искомая строка "Keyboard", описана компоновка диалога с настройками приложения. Причем строка "Keyboard" встречается дважды и является частью строк вида "Keyboard OptionTab (Index 2) Button" и "Option Tab Keyboard". А эти строки в свою очередь являются именами элементов интерфейса. Аналогично и для других заголовков на вкладках.

Рис. 2


На рисунке 2 я выделил цветом ключевые строки, строки, в которые эти ключевые строки входят, а также координаты и размеры кнопок, на которых размещаются ключевые строки. Это важно при локализации, т.к. переведенная строка может быть или длиннее или короче исходной, соответственно также нужно будет под неё корректировать размеры элемента управления. Ниже приведен пример перевода ключевых строк и изменения координат и положения кнопок.

Рис. 3


Документ должен быть в кодировке UTF-8 без BOM (оригинальный документ имеет кодировку ANSI). Также следует добиться исходного размера документа после перевода, иначе вы не сможете выполнить его замену в двоичном ресурсе RESTORATIONRESEMBED.

После изменения документа и замены его в ресурсе приложения нужно перевести ключевые строки в коде программы. Вы уже знаете, что имена вкладок (ключевые строки) являются жестко-кодированными строками. Инструменты перевода жестких строк могут быть какими угодно, важно другое. Все эти ключевые строки имеют указатель длины. Например, строка-ключ "Keyboard" имеет длину 8 байт, что соответствует количеству символов в строке, и эта длина явно устанавливается в коде программе.

Рис. 4


Я перевел эту строку-ключ как "Клавиатура". Длина строки 10 символов, но так как мы использовали кодировку UTF-8, то длина этой строки в байтах будет составлять 20 (или 14 в формате НЕХ). Вот это значение и следует указывать в коде.

Рис. 5


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

Рис. 6


При работе над переводом вам следует обратить внимание на то, что многие строки интерфейса находятся в ресурсе  RESTORATIONRESEMBED в таких же документах XML. Для них, возможно, также могут быть применены "ключи" и указатели длин, поэтому вам предстоит быть предельно внимательным. Еще вы можете настраивать положение и размеры элементов управления, редактируя значения тегов "X",  "Y", "Width" и "Height".

Удачи!

миха04:
Спасибо за информацию, а то уже всю голову сломал. Остался последний вопрос - как извлечь XML из ресурса и затем обратно вставить? Я пробовал, и у меня вышло большое количество файлов XML. Извлечь получилось, а вот вернуть - с этим проблема.

leserg73:
Вставить обратно можно в НЕХ редакторе. После перевода в XML файле подгоните его размер в размер оригинального. Например, рассматриваемый нами файл  (см. рис. 2 из предыдущего поста) имеет исходный размер 24404 байта. После моих модификаций его размер получился уже 24489 байт. Я уменьшил его размер  до исходного размера за счет удаления символов пробелов, которые выполняет роль форматирования и показывают структуру документа. Это видно на рис. 3 по сравнению с рис. 2 (строки 1-18). После этого открываем файл программы iZotope RX 7 Audio Editor.exe и наш измененный XML файл в НЕХ редакторе, находим массив оригинальных данных файла и выполняем его замещение новыми данными.

миха04:
Спасибо, буду пробовать.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии