Исходным языком конфигурации будем называть язык, из слов которого составляются названия объектов конфигурации и все пользовательские идентификаторы. Он называется Основным языком конфигурации (Default language).
Наряду с ним в конфигурации выбирается Вариант встроенного языка (Script variant). Платформа 1С:Предприятие позволяется использовать два варианта встроенного языка: русский и английский. В силу текущих ограничений основной язык конфигурации должен соответствовать варианту встроенного языка.
Выпуск конфигурации на другом языке предполагает одновременно изменение варианта встроенного языка и перевод всех пользовательских идентификаторов во всех местах их использования. Если первое действие практически не представляет проблем и не требует усилий со стороны разработчика конфигурации, то второе представляет основную сложность при выпуске конфигурации и требует решения следующих задач:
Инструмент 1C:LanguageTool предоставляет удобный интерфейс и набор инструментов для решения первой задачи и позволяет практически полностью автоматизировать решение второй задачи.
Он способен определять и заменять идентификаторы в текстах исходного кода, основываясь на программной модели конфигураций и расчета типов объектов в коде, которые предоставляет 1C:EDT. Для успешного перевода имен свойств и методов, а также идентификаторов в текстовых литералах необходимо выполнить типизацию кода.
В среде 1C:EDT с установленным инструментом 1C:Language Tool развернут проект конфигурации на исходном языке (основной язык конфигурации и язык кода). В этот проект должны быть добавлен язык перевода. Это можно сделать в таблице Languages на закладке Translate формы редактора проекта.
Для языка, на который переводится конфигурация, указывается вариант Model and Interface.
Если язык уже внесен в список и использовался для перевода интерфейса, то для него меняется вариант с Interface only на Model and Interface. В этом случае при переводе конфигурации будут использованы все наработки, которые были сделаны при переводе интерфейса. Например, если был переведен синоним "Реализация товаров и услуг", то перевод будет использован при переводе идентификатора "РеализацияТоваровИУслуг".
Далее необходимо настроить проект перевода в таблице Translated Project на закладке Translate формы редактора проекта. Для проекта указывается основной язык конфигурации (Default language name), язык кода (Script variant), а также один или несколько языков и интерфейса, на которые будет выполнятся перевод.
После настройки языков можно приступать к пероеводам объектов метаданных и элементов программного кода.
В процессе перевода объектной модели и программного кода производится перевод следующих идентификаторов: - имена объектов метаданных - имена переменных - имена процедур и функций - имена параметров процедур и функций - алиасы таблиц и полей в запросах - параметры в интерфейсных строках - и так далее…
Для указанных идентификаторов нужно задать перевод на языке перевода модели. Для этого необходимо использовать панель Translations.
Перевод задается в контексте места их определения, в частности: - для идентификаторов объектов метаданных - в дереве метаданных; - для идентификаторов процедур и функций и их локальных переменных - в модуле где они объявляются; - для запросов - в контексте строки запроса.
Идентификаторы отмечаются значком или
.
Панель translation в зависимости от установленного режима выводит идентификатор только для выделенного объекта или для выделенного и подчиненных (см. настройки)
Также можно использовать дополнительные инструменты перевода: Google Translate, Yandex.Translate, Microsoft Translator.
В исходном коде имена идентификаторов могут встречаться внутри строк (строковых литералов). Для перевода идентификаторов в составе строковых литералов необходимо определить их тип, разобрать структуру и выделить элементы, которые должны быть переведены явно или могут быть переведены автоматически.
В языке платформы 1С:Предприятия нет явной типизации строковых литералов, однако инструмент 1C:Language Tool по котексту применения или по контенту строки может вычислять типы строковых литералов. Для каждого типа строкового литерала применяется специфический процессор (обработчик текста, преводчик) учитывающий тип литерала, программную-логику и форматирование контента.
Запросы. В запросах переводятся только пользовательские объекты (псевдонимы полей, имена временных таблиц). Действия инструмента распространяется только на полные и корректные запросы. Запросы, собираемые по отдельным фрагментам, и некорректные запросы инструментом не распознаются и автоматически не переводятся.
Интерфейсные строки НСтр()
. Сами строки на отдельных языках являются элементами интерфейса и переводятся в рамках перевода интерфейса, однако в структуре строк могут быть параметры, которые должны быть написаны на языке кода, и переводе кода также должны переводится на новый язык кода.
Пример:
Исходная строка: СообщениеПользователю = НСтр("ru = 'Текст сообщения пользователю: %Параметр%'");
После перевода интерфейса на английский язык будет выглядеть так: СообщениеПользователю = НСтр("ru = 'Текст сообщения пользователю: %Параметр%'; en = 'Text of message to user: %Параметр%'");
После перевода исходного кода на английский язык будет выглядеть так: UserMessage = НСтр("ru = 'Текст сообщения пользователю: %Param%'; en = 'Text of message to user: %Param%'");
Стандартные строки платформы 1С:Предприятие. В частности это имена типов, имена функциональных опций, имена предопределенны значений. Такие стандартные строки распознаются 1C:EDT и по ним предлагается контекстную подсказка по Ctrl+пробел.
Строка состоящая только из одного идентификатора. В данном случае идентификатором считается любая последовательность, начинающаяся с буквы и состоящая из букв и цифр, удовлетворяющие требования для индентификаторов 1С:Предприятия.
Строка содержащая список идентификаторов через запятую. Под идентификатором, как и в предыдущем пункте понимается любой идентификатор.
Полное имя метаданных. Распознается литералы, обозначающие иерархический путь к объектам метаданных в формате БД 1C или FQN EDT
Приемер: "Справочник.Товары" - используемые для обращения к таблицам БД в запросах или для обращения к объектам метаданных по этим идентификаторам.
Пример:
Значение1 = "%Параметр1%"; Значение2 = "%Параметр2%";
Результат = Вычислить1(Значение1) + Вычислить2(ЗНачение2);
Полное имя метода Справочники.Товары.МойМетод
, ОбщегоНазначения.ЗначениеРеквизитаОбъекта
Литерал содержащий термиты БД
литералы содержащие любые спец-символы (без алфавита)
11.Все остальные литералы - по умолчанию переводить необходимо "символ-в-символ".
При переводе многострочных литералов без специализированного типа следует учитывать, что перевод должен содержать равное количество строк.
Типы строковых литералов вычисляются автоматически. Поддерживается обработка следующих типов:
NStr
, НСтр
- строка является локализируемоей строкой и имеет соответствующий формат.Query
- текст валидного запроса, без синтаксических ошибок, без использования расширений языка для СКД или ограничений доступа. Текст должен начинатся со слова ВЫБРАТЬ
(SELECT
), пустые строчки или комментарии в начале текста запроса не учитываютсяQuery-DCS
- текст валидного запроса с расширением СКДQuery-param
- литерал является параметром запроса, устанавливаемый в объект Запрос
Query-part
- литерал содержащий часть текста запроса, используемый для програмной обработки текста запроса в рантаймеUnion-Query
- текст запроса, содержащий вначале ключевые слова ОБЪЕДИНИТЬ или ОБЪЕДИНИТЬ ВСЕ, в остальном текст является валидным запросом, открываемым в коонструктореPackage-Query
- текст запроса, содержащий в начале разделитель пакета запросво ;
, в остальном текст является валидным запросом, открываемым в конструтореKey
- литерал, содержащий один программный идентификатор/ключ, удовлетворяющий условиям имен в 1С:ПредприятииKeys
- список ключей, с разделителем ,
(запятая). Ключи должны удовлетворять условиями имен идентификаторов в 1С:Предприятии.Full-name
- полное имя объекта метаданного или полное имя таблицы базы данны объекта метаданного.FQN
- полное квалифицированное имя (Full Quallified Name) - описывает идентификаторы с сегментами, разделенными .
(точка).Method
- имя локального метода текущего модуля, имеющее один сегментили полное имя метода в общем модуле или модуле менеджера с 2 или 3 сегментами.Standard
- литералы, стандартно распознаваемые 1C:EDT в параметрах методов и конструкторов функций 1С:Предприятия, при условии корректной типизации кода. Например:
Дейсвие
модуля формыНайтиПоРеквизиту()
НайтиПоПолю()
Новый()
Тип()
ПравоДоступа()
ПредставлениеПрава()
УстановитьЗначениеПараметра()
ЗначениеВРеквизитФормы()
и РеквизитФормыВЗначение()
Sort-Columns
- поля сортировки таблицы значений или табличной части, разделенные ,
(запятая), после имени поля может быть указано направление сортировки ВОЗР (ASC) или УБЫВ (DESC).
Non-NLS
- константная строка, не подлежащая изменению при переводе, поддерживаются аннотации к комментариях кода //@Non-NLS
Replace-param
- параметр замены, содержащий один ключ (идентификатор), обрамленный спец.символами [Парам1]
и %Парам2%
, используемый для подстановки в шаблонFormat
- строка, описывающая параметры формата для функции Формат()
или аналогичных в языке 1С:ПредприятияUUID
- строка содержащая значение уникального идентификатора в специальном форматеArea
- Имена областей, получаемых через фукцнию Область()
по пересечению, разделенных |
(вертикальная черта), содержат 2 ключа (идентификатора)QL-Union
- однострочный или многострочный итерал, содержащий часть языка запроса с единственным ключевым словом ОБЪЕДИНИТЬ
QL-Union-all
- однострочный или многострочный итерал, содержащий часть языка запроса с единственным ключевым словом ОБЪЕДИНИТЬ ВСЕ
Для уточнения типа стрового литерала можно использовать аннотации в коде в комментариях. Аннотирующий коментарий в общем случае должен располагаться на строке выше строкового литерала, если семантическческий элемент языка "утверждение" (statement), заканчивающийся точкой с запятой ;
расположен на одной строке с литералом.
// @NStr-1 - передается универсальную интерфейсную функцию
// @Non-NLS-2 - текст не локализируется
Текст = МультиязычнаяФункция("ru ='Первый литерал';") + "Второй литерал";
В случае сложного форматирования кода (различные переносы частей кода на новую строку) допускается расположение аннотирующего комментария в конце строки кода.
Поддерживается нумерация литералов в строке (для многострочных литералов - расчитывается по последней строке), нумерация начинается с 1
. Следует указывать номер позиции литерала через дефис: // @NStr-1 @NStr-2
. Если у аннотации отсутствует номер, аннотация относится к первому строковому литералу.
Например:
// @Non-NLS - текст не локализируется по причине...
Текст = Текст + "Многострочный
|многострочный текст";
Текст = Текст + "Многострочный
|многострочный текст" + "Второй литерал"; // @Non-NLS - первый (многострочный) литерал не локализируется по причине...
Текст = Текст + "Второй литерал" + "Многострочный
|многострочный текст"; // @Non-NLS - аннотация должна быть на последнейе строке
// @НСтр-1
// @NStr
- интерфейсные строки, передаваемые в поледующих вызовах в функцию НСтр()
;// @Non-NLS
- константная строка, не подлежащая изменению при переводеВ ряде случаев система задает переводы элементов автоматически: 1. Перевод элементов формы - на основе базовых полей 2. Перевод имен переменных если они совпадают с типами объектов создаваемых конструктором
Запрос = Новый Запрос;
Автоматические переводы можно увидеть в контекстной панели Переводы при включенном режиме отображения автоматических переводов.
Объекты метаданных: - Имя метода регламентного задания - Имя обработчика подписки на событие - Имя метода HTTP-сервиса - Имя метода операции Web-сервиса - Ссылки на имена стилей в различных свойствах метаданных
Формы: - Имя ссылки параметра выбора - вычисляется по доступным полям объекта метаданных - Имя параметра выбора - вычисляется по доступным полям объекта метаданных - Имя обработчика команды - по имени команды - Имя обработчика элемента формы - по имени элемента формы + имя события - Имя элемента формы - по пути к данным, если совпадает с частью пути, и/или вышестоящему элементу формы - Имя элемента формы - если совпадает со стандартным именем, авто-генерируемым Платформой
Язык модулй: - динамические фичи (при обращении к объекту через точку) - Строковый литерал, содержащий только спец-сивомлы - Имена процедур обработчиков схемы БП - по именам элементов + имя событаия - имена процедур в общем модуле, являющиеся обарботчиками подписок на события или регаментного задания - по имени подписки/регламентного задания - Имена параметров обработчиков событий элементов формы или других событий - по зарезервированным именам в Платформе - Имена переменных - по операторам Новый, по именам присваеваемых свойств или возврата функции - Имена процедур обработчиков стандартных событий объекта - по зарезервированным словам в Платформе - Строковые литералы - переводятся отдельной подсистемой на основе типов литералов.
Язык запросов: - алиас таблицы по имени базовой таблицы - алиас поля по имени поля или имя поля + имя алиаса таблицы - Строковый литерал, содержащий только спец-сивомлы - возвращаются спец.символы
СКД: - Имна полей в различных элементах схемы - по полям выборки наборов - Пути к данным в элементах схемы - Тексты выражений СКД - переводятся по объектной модели - Имя параметра - по имени параметра в запросе - Текст запроса - переводится объектно - Имена полей - по именам полей текста запроса
Рашсринеия: - Имена объектов метаданных, заимствованных из базовой конфигурации - по переводам объектов базовой конфигурации
Роли - имя шаблона, содержащее названия параметров - Текст ограничений RLS - переводится объектно - Текст шаблона - переводится объектно
Для создания переведенной конфигурации запустите команду контекстного меню по проекту Translations - Translate configuration. При этом если конфигурация уже была создана она будет обновлена.
При повторном запуске синхроназиации исходного и переведенного проекта будет выполнено инкрементальное обновление.
Следует учитывать, что при изменении переводов идентификаторов в общем словаре переводов - следует выполнять полную синхронизацию (перевод) проекта.