Перевод приложения на другие языки#
Перевод интерфейса#
Структура файлов словаря#
- свойство объекта - это ключ фразы
- значение - переведенный текст
Ключ может содержать параметры, которые задаются в двойных квадратных скобках (см. пример). Параметры нумеруются слева направо начиная с нуля. В значении перевода параметры также указываются в двойных квадратных скобках, но можно использовать в произвольном порядке.
файл рекомендуется называть используя код языка ISO 639-1 (пример: en.json).
Файлы с переводом можно добавлять в любую npm-библиотеку. В прикладной библиотеке файлы с переводом обязательно необходимо помещать в папку languages (для копирования папки с файлами при сборке библиотеки в исходники). Папку languages необходимо создать в папке, где лежат исходники прикладной библиотеки.
Сборка файлов с переводом#
Чтобы выполнить сборку необходимо в проекте lexema8 добавить файл languages.json (в папку с исходниками).
Пример файла:
Структура объекта:
- Имя свойства - код подключаемого языка (рекомендуется использовать код языка
ISO 639-1)- name - имя языка
- source - массив, который содержит пути к файлам с переводом
Для того, чтобы собрать итоговый файл с переводом необходимо выполнить команду:
npm run build:languages
Собранные файлы доступны в папке build/languages
На данный момент выполнять сборку необходимо только для того, чтобы объединить все файлы с переводом в один файл.
Добавление перевода в приложение#
Добавить файлы с переводом можно через реестр /dev#/view/languageRegistry. Создайте новый документ. В новом документе введите идентификатор языка (в качестве идентификатора необходимо использовать код языка ISO 639-1). Введите отображаемое имя. В поле перевод вставьте содержимое файла с переводом. Сохраните документ.
Как осуществляется перевод интерфейса?#
Перевод осуществляется автоматически:
- выводимого сообщения через сервис dialog
- во всех формах все заголовки контролов (при динамическом создании контролов тоже переводится)
Можно использовать класс Translation, чтобы получить переведенный текст.
Язык пользователя определяется автоматически через браузер (по значению свойства navigator.language), либо используется выбранный пользователем язык в личном кабинете (применяется только после входа в систему).
Перевод справочников#
Перевод справочников используется для локализации данных, хранящихся в базе данных.
Настройка модели#
Для включения локализации колонок таблицы используется свойство translate в файле описания модели.
После изменения модели выполните миграции на форме обновления БД. Для хранения переводов справочника мигратор автоматически создаст отдельную таблицу с тем же именем, что и у исходной таблицы, но с суффиксом _Lang (например, products_Lang). Данные для языка по умолчанию хранятся в исходной таблице.
Наполнение и импорт переводов#
Перевод значений в справочниках не происходит автоматически. Пользователи или администраторы системы должны заполнять языковые версии данных вручную. Для этого предусмотрено два способа:
- Ручной ввод: Данные на разных языках заполняются непосредственно через редактирование документа. Для этого нужно переключить интерфейс на соответствующий язык. При создании нового документа язык интерфейса игнорируется (используется язык по умолчанию) и данные всегда сохраняются в исходную таблицу, а не в таблицу перевода.
- Массовый импорт через excel-файл: Чтобы быстро заполнить переводы для большого объема данных, используйте специальную форму импорта (
Импорт данных) в интерфейсе разработчика (/dev). Она позволяет загрузить структурированный excel-файл, содержащий строки справочника и их переведенные варианты для целевых языков.
Описание excel-файла#
Пример файла.
Excel-файл должен содержать строго определенный набор колонок. Ниже приведено описание назначения каждого поля:
- Справочник — имя схемы и таблицы в БД (разделены точкой), в которую импортируются переводы (например, demo.statuses или demo.products). Позволяет загружать переводы для разных справочников в одном файле.
- Поле — физическое название переводимой колонки в БД, для которой в модели указано свойство "translate": true.
- Язык — идентификатор (код) целевого языка (см. раздел Добавление перевода в приложение), на который осуществляется перевод (например, en, fr, de).
- Значение — исходный текст на языке по умолчанию системы, который выступает в роли ключа для поиска соответствующей строки в исходной таблице.
- Перевод — итоговый переведенный текст на целевом языке, который будет отображаться у пользователя.
Получение текущего языка в sql#
Для получения текущего языка пользователя в запросах используйте sql-функцию lex.getLang или dbo.GetLang в зависимости от используемой СУБД (подробнее в статье).
Язык по умолчанию#
Язык по умолчанию задается в конфигурационном файле в разделе common.defaultLanguage.