0

Тема: Поиск ключей для текстовых файлов перевода

Перевожу программу My Notes Keeper китайского творчества. Программа как бы имеет русский перевод, но разработчики с обновлениями умудряются испортить перевод для всех языков. Файл локализации сделан по принципу: Ключ = Значение (например: FmtApplyStyle = Применить стиль). Разработчики частенько изменяют эти ключи, и вследствие чего перевод ломается для всех языков.
Большинство ключей я восстановил из английского файла локализации, еще немного ключей я нашел с помощью Radialix через поиск английского текста и просмотр на вкладке ресурсов колонки Компоненты/Свойства. Но этот метод не всегда работает. Бывает, что найденный текст с английским значением присутствует только в жёстко закодированных строках.

Есть ли какие способы узнать ключ для нужной строки перевода?

Рейтинг поста: 0

Re: Поиск ключей для текстовых файлов перевода

Приветствую!

Языковой файл представлен в формате INI, где
- имена секций (первая не в счёт) сопоставлены с названиями ресурсов приложения (строки - Strings и формы - RCData);
- имена ключей представляют собой уникальные идентификаторы строк для ресурсов приложения;
- значения ключей - это собственно строки для локализации.

Для форм (раздел ресурсов RCData) имена ключей совпадают с именами объектов на этой форме. Например, посмотрим форму TFRMITEMPROP (инструмент MiTeC DFM Editor).

Скрин 1

Поиск ключей для текстовых файлов перевода

В списке слева показаны имена всех объектов на этой форме. Объект, который имеет свойство Caption (Заголовок, Надпись - в общем строка), может быть использован для локализации приложения.

Теперь посмотрим в языковом файле секцию этой формы и сопоставим имена ключей с объектами (инструменты AkelPad и Restorator).

Скрин 2

Поиск ключей для текстовых файлов перевода

Здесь первый ключ с именем Caption (1) относится к самой форме (это тоже объект) и соответствует одноименному свойству, значение которого является значением ключа (строка Item Propperties) в языковом файле. Второй ключ lblCaption (2) является именем объекта TLabel. А значение ключа (2) соответствует значению свойства Caption у данного объекта (строка Caption:). И так далее (3) для всех объектов, у которых есть строки.

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

Но вот, например, строковый ресурс (секция Strings) в языковом файле представлен собственными именами ключей (в ресурсах программы этих имен нет, только сами строки). Поэтому дополнить перевод не получится. Это также относится и к строкам в коде (жестко кодированные). Если разработчик не предусмотрел перевод какой-то строки (забыл, упустил, пропустил) и не добавил для неё в код программы соответствующий ключ и его инициализацию, то у нас нет никаких возможностей сделать это за него. В этом случае нужно вести активную переписку с автором программы, показывать ему скрины окон приложения, где отсутствует перевод, и просить его дополнить языковой файл. Других вариантов нету.

Рейтинг поста: 2

2

(25-11-2019 23:53:30 отредактировано Йота)

Re: Поиск ключей для текстовых файлов перевода

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 откуда взялся?
 

Рейтинг поста: 0

Re: Поиск ключей для текстовых файлов перевода

Приветствую!

Йота пишет:

В ресурсах стоит другой ключ, который нерабочий. А TBXItem31 откуда взялся?

Давай разберемся. Поищем объект TBXItem31 в ресурсах. Он найдется в ресурсах RCData главной формы TFM. Объект является элементом подменю и не содержит свойства с текстом. Но у него есть другое свойство - Action (т.е. действие) со значением actTreeAddAfter.

Скрин 1

Поиск ключей для текстовых файлов перевода

Поищем в ресурсах объект именем actTreeAddAfter. Есть такой, в той же форме TFM. И у этого объекта есть текстовое свойство Caption со значением Add Item &After.

Скрин 2

Поиск ключей для текстовых файлов перевода

Как видишь, объект TBXItem31 имеет вложенный подобъект actTreeAddAfter. Таким образом привязка строки выполняется на основной объект, т.е. в языковом файле записывается как TBXItem31 = Add Item &After.

Теперь по аналогии добавляем недостающие строки в языковой файл. Берем, к примеру, строку Align &Left и ищем её в ресурсах. Она находится в ресурсах главной формы TFM, в объекте с именем actFormatAlignLeft. Также обрати внимание, что объект еще имеет свойство Hint (Подсказка) со значением Align Left|Align lines to the left, которое также можно перевести.

Скрин 3

Поиск ключей для текстовых файлов перевода

Теперь поищем объекты, в которых есть свойство Action со значением actFormatAlignLeft. В той же форме найдется два таких объекта. Первый с именем biAlignLeft, а второй miAlignLeft.

Скрин 4

Поиск ключей для текстовых файлов перевода

Скрин 5

Поиск ключей для текстовых файлов перевода

Так как объекта два и различаются они только приставкой bi и mi, а строковое значение они имеют одно и то же, возможно, в языковом файле будет использоваться только один ключ, с основным именем AlignLeft (на самом деле это так есть, как показала практика). Для подсказки (Hint) к имени ключа необходимо добавить суффикс _Hint.

В языковом файле, в секции главной формы [Main], нужно добавить две строки :

AlignLeft = Выровнять по левому краю

AlignLeft_Hint = Выровнять по левому краю|Выравнивание строк по левому краю

Сохраняем изменения и проверяем в программе.

Пункт меню

Скрин 6

Поиск ключей для текстовых файлов перевода

Подсказка

Скрин 7

Поиск ключей для текстовых файлов перевода

ura

По остальным строкам действуй по аналогии.  yes

Строк Manage Templates... и Manage Styles... в ресурсах нет. Это строки в коде и сделать для них перевод в языковом файле нет никакой возможности.  dontknow

Рейтинг поста: 1

1

(26-11-2019 12:46:36 отредактировано Йота)

Re: Поиск ключей для текстовых файлов перевода

Krig пишет:

По остальным строкам действуй по аналогии.  [img alt=:yes: title=yes]https://wylek.ru/Smileys/emoticons/yes.gif[/img]

Спасибо большое за подсказки.

А что можете сказать за такие вот пункты меню: Apply Style, и подменю на изображении: Object и Edit Picture...

pmiEditObject = Object

TBXItem1 = Edit Picture...

TBXSubmenuItem2 = &Apply Style

Одноименные подменю для вставленного в документ (EditObject = Объект и EditPic = Редактировать изображение) я перевёл и они работают, но с дублями в подменю не получается. Вроде в ресурсах есть...

Рейтинг поста: 0

Re: Поиск ключей для текстовых файлов перевода

Йота пишет:

я перевёл и они работают, но с дублями в подменю не получается. Вроде в ресурсах есть...

Да, в ресурсах есть, но в файле локализации программа их не видит. Похоже автор накосячил (забыл, пропустил, отложил). Возможно в следующей версии исправит, если ему сообщить. Сами мы ничего не сделаем. Разве только переводить в ресурсах, но тогда пропадает смысл языкового файла. В общем, если есть интерес поддерживать локализацию этой программы, свяжись с автором.  yes 

Рейтинг поста: 0

(26-11-2019 20:12:45 отредактировано Йота)

Re: Поиск ключей для текстовых файлов перевода

Закончил с менюшками и перешёл к локализации диалоговых окон.  poll Но тут оказалось ещё труднее. wacko_mini2

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'

    end

Рейтинг поста: 0

Re: Поиск ключей для текстовых файлов перевода

По логике в языковой файл нужно добавлять имена объектов из ресурсов по следующему принципу: имена форм - имена секций, имена объектов на форме - имена ключей. Как мы уже убедились, такой принцип работает. Но для некоторых диалогов, как показывает практика, нет. Полагаю, что автор не предусмотрел их локализацию и не подключил к ним модуль локализации. Такое бывает, когда программа активно развивается.

Вот берем диалог настройки панели инструментов. Форма называется frmToolbarCustomize. В языковом файле есть секция с именем ToolbarEditor для этой формы, но перевод для неё не работает. Если изменить имя секции на ToolbarCustomize, приставка frm отбрасывается (это видно из моего первого сообщения). Но перевод так и не работает. Или автор обозвал секцию как-то по-другому и привязал это имя к данному диалогу, или забыл для этой формы включить механизм локализации. Выводы делайте сами.

Рейтинг поста: 0

(27-11-2019 13:08:11 отредактировано Йота)

Re: Поиск ключей для текстовых файлов перевода

Как можно прописать несколько абзацев переведённого текста в файле локализации одной строкой, но в переводе чтобы выглядело как несколько абзацев? Какой символ нужно поставить между абзацами?
Если разбить его абзацем, то в переводе будет отображаться только первый абзац.

Рейтинг поста: 0

Re: Поиск ключей для текстовых файлов перевода

Попробуй использовать символы \r\n или \r\r или \r или \n
Короче пробуй разные варианты. Может быть \r\n\r\n. 

Рейтинг поста: 0