Перевод объектной модели и исходного кода конфигурации

Концепция перевода модели метаданных и исходного кода

Исходным языком конфигурации будем называть язык, из слов которого составляются названия объектов конфигурации и все пользовательские идентификаторы. Он называется Основным языком конфигурации (Default language).

Наряду с ним в конфигурации выбирается Вариант встроенного языка (Script variant). Платформа 1С:Предприятие позволяется использовать два варианта встроенного языка: русский и английский. В силу текущих ограничений основной язык конфигурации должен соответствовать варианту встроенного языка.

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

Инструмент 1C:LanguageTool предоставляет удобный интерфейс и набор инструментов для решения первой задачи и позволяет практически полностью автоматизировать решение второй задачи.

Он способен определять и заменять идентификаторы в текстах исходного кода, основываясь на программной модели конфигураций и расчета типов объектов в коде, которые предоставляет 1C:EDT. Для успешного перевода имен свойств и методов, а также идентификаторов в текстовых литералах необходимо выполнить типизацию кода.

Начальные настройки

В среде 1C:EDT с установленным инструментом 1C:Language Tool развернут проект конфигурации на исходном языке (основной язык конфигурации и язык кода). В этот проект должны быть добавлен язык перевода. Это можно сделать в таблице Languages на закладке Translate формы редактора проекта.

New Translate language

Для языка, на который переводится конфигурация, указывается вариант Model and Interface.

Если язык уже внесен в список и использовался для перевода интерфейса, то для него меняется вариант с Interface only на Model and Interface. В этом случае при переводе конфигурации будут использованы все наработки, которые были сделаны при переводе интерфейса. Например, если был переведен синоним "Реализация товаров и услуг", то перевод будет использован при переводе идентификатора "РеализацияТоваровИУслуг".

Далее необходимо настроить проект перевода в таблице Translated Project на закладке Translate формы редактора проекта. Для проекта указывается основной язык конфигурации (Default language name), язык кода (Script variant), а также один или несколько языков и интерфейса, на которые будет выполнятся перевод.

New Translate language

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

Translations

Перевод идентификаторов

В процессе перевода объектной модели и программного кода производится перевод следующих идентификаторов: - имена объектов метаданных - имена переменных - имена процедур и функций - имена параметров процедур и функций - алиасы таблиц и полей в запросах - параметры в интерфейсных строках - и так далее…

Для указанных идентификаторов нужно задать перевод на языке перевода модели. Для этого необходимо использовать панель Translations.

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

Идентификаторы отмечаются значком Model strings или Key model strings.

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

Также можно использовать дополнительные инструменты перевода: Google Translate, Yandex.Translate, Microsoft Translator.

Перевод строковых литералов

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

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

  1. Запросы. В запросах переводятся только пользовательские объекты (псевдонимы полей, имена временных таблиц). Действия инструмента распространяется только на полные и корректные запросы. Запросы, собираемые по отдельным фрагментам, и некорректные запросы инструментом не распознаются и автоматически не переводятся.

  2. Интерфейсные строки НСтр(). Сами строки на отдельных языках являются элементами интерфейса и переводятся в рамках перевода интерфейса, однако в структуре строк могут быть параметры, которые должны быть написаны на языке кода, и переводе кода также должны переводится на новый язык кода.

Пример:

Исходная строка: СообщениеПользователю = НСтр("ru = 'Текст сообщения пользователю: %Параметр%'");

После перевода интерфейса на английский язык будет выглядеть так: СообщениеПользователю = НСтр("ru = 'Текст сообщения пользователю: %Параметр%'; en = 'Text of message to user: %Параметр%'");

После перевода исходного кода на английский язык будет выглядеть так: UserMessage = НСтр("ru = 'Текст сообщения пользователю: %Param%'; en = 'Text of message to user: %Param%'");

  1. Стандартные строки платформы 1С:Предприятие. В частности это имена типов, имена функциональных опций, имена предопределенны значений. Такие стандартные строки распознаются 1C:EDT и по ним предлагается контекстную подсказка по Ctrl+пробел.

  2. Строка состоящая только из одного идентификатора. В данном случае идентификатором считается любая последовательность, начинающаяся с буквы и состоящая из букв и цифр, удовлетворяющие требования для индентификаторов 1С:Предприятия.

  3. Строка содержащая список идентификаторов через запятую. Под идентификатором, как и в предыдущем пункте понимается любой идентификатор.

  4. Полное имя метаданных. Распознается литералы, обозначающие иерархический путь к объектам метаданных в формате БД 1C или FQN EDT

Приемер: "Справочник.Товары" - используемые для обращения к таблицам БД в запросах или для обращения к объектам метаданных по этим идентификаторам.

  1. Параметры ("&Параметр1", "%Параметр2%", "[Параметр3]")

Пример:

Значение1 = "%Параметр1%"; Значение2 = "%Параметр2%";

Результат = Вычислить1(Значение1) + Вычислить2(ЗНачение2);

  1. Полное имя метода Справочники.Товары.МойМетод, ОбщегоНазначения.ЗначениеРеквизитаОбъекта

  2. Литерал содержащий термиты БД

  3. литералы содержащие любые спец-символы (без алфавита)

11.Все остальные литералы - по умолчанию переводить необходимо "символ-в-символ".

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

Определение типа строкового литерала

Типы строковых литералов вычисляются автоматически. Поддерживается обработка следующих типов:

Аннотации типов строковых литералов в коде

Для уточнения типа стрового литерала можно использовать аннотации в коде в комментариях. Аннотирующий коментарий в общем случае должен располагаться на строке выше строкового литерала, если семантическческий элемент языка "утверждение" (statement), заканчивающийся точкой с запятой ; расположен на одной строке с литералом.

// @NStr-1 - передается универсальную интерфейсную функцию
// @Non-NLS-2 - текст не локализируется
Текст = МультиязычнаяФункция("ru ='Первый литерал';") + "Второй литерал";

В случае сложного форматирования кода (различные переносы частей кода на новую строку) допускается расположение аннотирующего комментария в конце строки кода.

Поддерживается нумерация литералов в строке (для многострочных литералов - расчитывается по последней строке), нумерация начинается с 1. Следует указывать номер позиции литерала через дефис: // @NStr-1 @NStr-2. Если у аннотации отсутствует номер, аннотация относится к первому строковому литералу.

Например:

// @Non-NLS - текст не локализируется по причине...
Текст = Текст + "Многострочный
    |многострочный текст";
Текст = Текст + "Многострочный
    |многострочный текст" + "Второй литерал"; // @Non-NLS - первый (многострочный) литерал не локализируется по причине...
Текст = Текст + "Второй литерал" + "Многострочный
    |многострочный текст"; // @Non-NLS - аннотация должна быть на последнейе строке

Поддерживаемые аннотации литералов

Авто-вычисление перевода

В ряде случаев система задает переводы элементов автоматически: 1. Перевод элементов формы - на основе базовых полей 2. Перевод имен переменных если они совпадают с типами объектов создаваемых конструктором

Запрос = Новый Запрос;

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

Виды авто-вычислимых переводов

Объекты метаданных: - Имя метода регламентного задания - Имя обработчика подписки на событие - Имя метода HTTP-сервиса - Имя метода операции Web-сервиса - Ссылки на имена стилей в различных свойствах метаданных

Формы: - Имя ссылки параметра выбора - вычисляется по доступным полям объекта метаданных - Имя параметра выбора - вычисляется по доступным полям объекта метаданных - Имя обработчика команды - по имени команды - Имя обработчика элемента формы - по имени элемента формы + имя события - Имя элемента формы - по пути к данным, если совпадает с частью пути, и/или вышестоящему элементу формы - Имя элемента формы - если совпадает со стандартным именем, авто-генерируемым Платформой

Язык модулй: - динамические фичи (при обращении к объекту через точку) - Строковый литерал, содержащий только спец-сивомлы - Имена процедур обработчиков схемы БП - по именам элементов + имя событаия - имена процедур в общем модуле, являющиеся обарботчиками подписок на события или регаментного задания - по имени подписки/регламентного задания - Имена параметров обработчиков событий элементов формы или других событий - по зарезервированным именам в Платформе - Имена переменных - по операторам Новый, по именам присваеваемых свойств или возврата функции - Имена процедур обработчиков стандартных событий объекта - по зарезервированным словам в Платформе - Строковые литералы - переводятся отдельной подсистемой на основе типов литералов.

Язык запросов: - алиас таблицы по имени базовой таблицы - алиас поля по имени поля или имя поля + имя алиаса таблицы - Строковый литерал, содержащий только спец-сивомлы - возвращаются спец.символы

СКД: - Имна полей в различных элементах схемы - по полям выборки наборов - Пути к данным в элементах схемы - Тексты выражений СКД - переводятся по объектной модели - Имя параметра - по имени параметра в запросе - Текст запроса - переводится объектно - Имена полей - по именам полей текста запроса

Рашсринеия: - Имена объектов метаданных, заимствованных из базовой конфигурации - по переводам объектов базовой конфигурации

Роли - имя шаблона, содержащее названия параметров - Текст ограничений RLS - переводится объектно - Текст шаблона - переводится объектно

Синхронизация проекта перевода

Для создания переведенной конфигурации запустите команду контекстного меню по проекту Translations - Translate configuration. При этом если конфигурация уже была создана она будет обновлена.

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

Следует учитывать, что при изменении переводов идентификаторов в общем словаре переводов - следует выполнять полную синхронизацию (перевод) проекта.