Поиск ключей для текстовых файлов перевода
Перевожу программу My Notes Keeper китайского творчества. Программа как бы имеет русский перевод, но разработчики
-
Перевожу программу My Notes Keeper китайского творчества. Программа как бы имеет русский перевод, но разработчики с обновлениями умудряются испортить перевод для всех языков. Файл локализации сделан по принципу: Ключ = Значение (например:FmtApplyStyle = Применить стиль). Разработчики частенько изменяют эти ключи, и вследствие чего перевод ломается для всех языков.
Большинство ключей я восстановил из английского файла локализации, еще немного ключей я нашел с помощью Radialix через поиск английского текста и просмотр на вкладке ресурсов колонки Компоненты/Свойства. Но этот метод не всегда работает. Бывает, что найденный текст с английским значением присутствует только в жёстко закодированных строках.
Есть ли какие способы узнать ключ для нужной строки перевода?25 ноября 2019 - 19:23 / #1 -
Приветствую!
Языковой файл представлен в формате INI, где
- имена секций (первая не в счёт) сопоставлены с названиями ресурсов приложения (строки - Strings и формы - RCData);
- имена ключей представляют собой уникальные идентификаторы строк для ресурсов приложения;
- значения ключей - это собственно строки для локализации.
Для форм (раздел ресурсов RCData) имена ключей совпадают с именами объектов на этой форме. Например, посмотрим форму TFRMITEMPROP (инструмент MiTeC DFM Editor).
В списке слева показаны имена всех объектов на этой форме. Объект, который имеет свойство "Caption" ("Заголовок", "Надпись" - в общем строка), может быть использован для локализации приложения.
Теперь посмотрим в языковом файле секцию этой формы и сопоставим имена ключей с объектами (инструменты AkelPad и Restorator).
Здесь первый ключ с именем "Caption" (1) относится к самой форме (это тоже объект) и соответствует одноименному свойству, значение которого является значением ключа (строка "Item Propperties") в языковом файле. Второй ключ "lblCaption" (2) является именем объекта TLabel. А значение ключа (2) соответствует значению свойства "Caption" у данного объекта (строка "Caption:"). И так далее (3) для всех объектов, у которых есть строки.
Таким образом, если в языковом файле отсутствует перевод какого-то объекта в какой-то форме, то таким способом можно его дополнить и перевести. По идее программа должна подхватить его автоматически.
Но вот, например, строковый ресурс (секция Strings) в языковом файле представлен собственными именами ключей (в ресурсах программы этих имен нет, только сами строки). Поэтому дополнить перевод не получится. Это также относится и к строкам в коде (жестко кодированные). Если разработчик не предусмотрел перевод какой-то строки (забыл, упустил, пропустил) и не добавил для неё в код программы соответствующий ключ и его инициализацию, то у нас нет никаких возможностей сделать это за него. В этом случае нужно вести активную переписку с автором программы, показывать ему скрины окон приложения, где отсутствует перевод, и просить его дополнить языковой файл. Других вариантов нету.26 ноября 2019 - 01:56 / #2 -
Krig
Спасибо, что откликнулись.
У меня не получается найти ключи к некоторым пунктам меню. Например:Manage Templates... Paragraph &Borders and Background... Manage Styles... &Increase Indent &Decrease Indent Text &Color Text Bac&kground Color Align &Left Align &Right Align &Center Align &Center
И вот еще интересный пример работающей строки:TBXItem31 = Add Item &After
В ресурсах стоит другой ключ, который нерабочий. А TBXItem31 откуда взялся?26 ноября 2019 - 02:27 / #3 -
Приветствую!Цитата: ЙотаВ ресурсах стоит другой ключ, который нерабочий. А TBXItem31 откуда взялся?
Давай разберемся. Поищем объект TBXItem31 в ресурсах. Он найдется в ресурсах RCData главной формы TFM. Объект является элементом подменю и не содержит свойства с текстом. Но у него есть другое свойство - Action (т.е. действие) со значением actTreeAddAfter.
Поищем в ресурсах объект именем actTreeAddAfter. Есть такой, в той же форме TFM. И у этого объекта есть текстовое свойство "Caption" со значением "Add Item &After".
Как видишь, объект TBXItem31 имеет вложенный подобъект actTreeAddAfter. Таким образом привязка строки выполняется на основной объект, т.е. в языковом файле записывается как TBXItem31 = Add Item &After.
Теперь по аналогии добавляем недостающие строки в языковой файл. Берем, к примеру, строку "Align &Left" и ищем её в ресурсах. Она находится в ресурсах главной формы TFM, в объекте с именем actFormatAlignLeft. Также обрати внимание, что объект еще имеет свойство Hint (Подсказка) со значением "Align Left|Align lines to the left", которое также можно перевести.
Теперь поищем объекты, в которых есть свойство Action со значением actFormatAlignLeft. В той же форме найдется два таких объекта. Первый с именем biAlignLeft, а второй miAlignLeft.
Так как объекта два и различаются они только приставкой "bi" и "mi", а строковое значение они имеют одно и то же, возможно, в языковом файле будет использоваться только один ключ, с основным именем AlignLeft (на самом деле это так есть, как показала практика). Для подсказки (Hint) к имени ключа необходимо добавить суффикс _Hint.
В языковом файле, в секции главной формы [Main], нужно добавить две строки :AlignLeft = Выровнять по левому краю AlignLeft_Hint = Выровнять по левому краю|Выравнивание строк по левому краю
Сохраняем изменения и проверяем в программе.
Пункт меню
Подсказка
По остальным строкам действуй по аналогии.
Строк "Manage Templates..." и "Manage Styles..." в ресурсах нет. Это строки в коде и сделать для них перевод в языковом файле нет никакой возможности.
Йота нравится это сообщение.26 ноября 2019 - 14:30 / #4 -
Цитата: KrigПо остальным строкам действуй по аналогии.

Спасибо большое за подсказки.
А что можете сказать за такие вот пункты меню:Apply Style, и подменю на изображении:Object и Edit Picture...pmiEditObject = Object TBXItem1 = Edit Picture... TBXSubmenuItem2 = &Apply Style
Одноименные подменю для вставленного в документ (EditObject = Объект и EditPic = Редактировать изображение) я перевёл и они работают, но с дублями в подменю не получается. Вроде в ресурсах есть...26 ноября 2019 - 15:37 / #5 -
Цитата: Йотая перевёл и они работают, но с дублями в подменю не получается. Вроде в ресурсах есть...
Да, в ресурсах есть, но в файле локализации программа их не видит. Похоже автор накосячил (забыл, пропустил, отложил). Возможно в следующей версии исправит, если ему сообщить. Сами мы ничего не сделаем. Разве только переводить в ресурсах, но тогда пропадает смысл языкового файла. В общем, если есть интерес поддерживать локализацию этой программы, свяжись с автором.
26 ноября 2019 - 22:07 / #6 -
Закончил с менюшками и перешёл к локализации диалоговых окон.
Но тут оказалось ещё труднее.
1) В файле локализации диалоговые окна разбиты на секции, что в квадратных скобках. Откуда брать название нужных секций если для некоторых окон они вообще отсутствуют? Например к Настройке панели инструментов (Toolbar Customize); Просмотрщика (Viewer) и так далее...
2) Как прописывать ключи и перевод для менюшек из выпадающего списка? Что, например, можно взять из этого блочка:object cmbTBIconSize:TComboBox Left = 291 Top = 340 Width = 65 Height = 21 Style = csDropDownList ItemIndex = 0 TabOrder = 8 Text = 'Small' Items.Strings = ( 'Small' 'Large') end
3) Как прописать название цвета текста "По умолчанию" в окне Стили:
object cmbTextColor: TRVColorCombo Left = 112 Top = 17 Width = 105 Height = 26 Indeterminate = False OnColorChange = cmbTextColorColorChange DefaultCaption = 'Default' TabOrder = 1 Caption = 'cmbTextColor' end26 ноября 2019 - 23:07 / #7 -
По логике в языковой файл нужно добавлять имена объектов из ресурсов по следующему принципу: имена форм - имена секций, имена объектов на форме - имена ключей. Как мы уже убедились, такой принцип работает. Но для некоторых диалогов, как показывает практика, нет. Полагаю, что автор не предусмотрел их локализацию и не подключил к ним модуль локализации. Такое бывает, когда программа активно развивается.
Вот берем диалог настройки панели инструментов. Форма называется "frmToolbarCustomize". В языковом файле есть секция с именем "ToolbarEditor" для этой формы, но перевод для неё не работает. Если изменить имя секции на "ToolbarCustomize", приставка "frm" отбрасывается (это видно из моего первого сообщения). Но перевод так и не работает. Или автор обозвал секцию как-то по-другому и привязал это имя к данному диалогу, или забыл для этой формы включить механизм локализации. Выводы делайте сами.27 ноября 2019 - 00:53 / #8 -
Как можно прописать несколько абзацев переведённого текста в файле локализации одной строкой, но в переводе чтобы выглядело как несколько абзацев? Какой символ нужно поставить между абзацами?
Если разбить его абзацем, то в переводе будет отображаться только первый абзац.Сообщение отредактировал Йота 27 ноября 2019 - 16:0827 ноября 2019 - 02:45 / #9 -
Попробуй использовать символы или или или
Короче пробуй разные варианты. Может быть .28 ноября 2019 - 22:51 / #10
Статистика форума, пользователей онлайн: 0 (за последние 20 минут)
---
- Создано тем
- 1223
- Всего сообщений
- 16492
- Пользователей
- 18276
- Новый участник
- emadwizard
Powered by Bullet Energy Forum












