Локализация

Локализация приложения позволяет пользователю видеть надписи в интерфейсе приложения на том языке, который он использует для работы (порядок определения языка локализации). Подобные надписи могут располагаться на таких элементах, как:

  • команды меню;
  • заголовки кнопок, полей, переключателей и т. д.;
  • строки, формируемые алгоритмами на встроенном языке.

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

Языки локализации и язык по умолчанию

Чтобы локализация приложения стала возможной, в описании проекта должны быть заданы языки локализации и один из них должен быть указан как язык по умолчанию. Например:

Ид: 64d5452a-9771-4623-b589-c440739364a4
РежимСовместимости: 5.0
Поставщик: e1c
Имя: DemoProject
Версия: 1.0
Представление: "Demo CRM"
ЯзыкиЛокализации:
    - Русский
    - Английский
ЯзыкПоУмолчанию: Русский

Если не указать ни одного языка, это будет означать, что проект не нуждается в локализации. В качестве языков локализации можно выбрать только те, которые являются значениями перечисления Язык.

Элемент проекта вида «ЛокализованныеСтроки»

Используйте элемент проекта вида ЛокализованныеСтроки для хранения строк, которые должны быть переведены на другие языки. Эти строки могут использоваться в различных элементах и модулях проекта.

Чтобы создать элемент проекта вида ЛокализованныеСтроки, выполните следующие действия:
  1. Щелкните правой кнопкой мыши по имени нужной подсистемы и выберите Новый > Элемент проекта в контекстном меню.

  2. В открывшемся меню нажмите Локализованные Строки.

  3. Введите имя создаваемого элемента проекта.

  4. предложит вам добавить файлы локализации на других языках. Нажмите Создать, чтобы автоматически добавить раздел локализации к проекту. Если вы хотите создать этот раздел позднее, нажмите Закрыть.

Элемент проекта вида ЛокализованныеСтроки содержит имена локализуемых строк и их значения на языке по умолчанию. Блоки идентификаторов разделены на две секции:

Строки
Строки можно использовать в описании элементов проекта и во встроенном языке.
Шаблоны
Шаблоны можно использовать только во встроенном языке. В них можно подставлять значения переменных.

Пример:

ВидЭлемента: ЛокализованныеСтроки
Ид: d0adc076-d030-4546-bd1a-8b497668b0fc
Имя: ЛокализованныеСтроки
ОбластьВидимости: ВПроекте
Строки:
    Мероприятия: Мероприятия
    Задачи: Задачи
    События: События
    Событие: Событие
    Роль: Роль
Шаблоны:
    ТекущееВремя: "Текущее время: %0"
    СозданаЗадача: "Создана задача \"$0\""
    СозданоСобытие: "Создано событие \"$0\""

Вы можете указать нужные строки как в YAML-файле, так и в палитре свойств элемента проекта вида ЛокализованныеСтроки.

Раздел проекта «Локализация»

Строки, которые должны быть локализованы, указываются в элементе проекта ЛокализованныеСтроки. Чтобы сохранить в проекте их значения на другом языке (язык может быть только тот, который вы указали в описании проекта в свойстве ЯзыкиЛокализации), вы должны добавить к проекту раздел Локализация. Если вы не сделали этого при создании элемента проекта вида ЛокализованныеСтроки, вы можете добавить этот раздел следующим образом:

  1. Щелкните правой кнопкой мыши по имени нужной подсистемы и выберите Новый > Локализации в контекстном меню.

  2. Добавьте язык локализации, на который нужно перевести строки. Для этого щелкните правой кнопкой мыши по разделу Локализация и нажмите Новый > Язык локализации.

  3. Выберите язык локализации в открывшемся меню.

  4. Создайте новый элемент локализации. Щелкните правой кнопкой мыши по разделу с языком локализации и выберите Новый > Элемент локализации.

  5. Введите имя элемента локализации. Оно должно совпадать с именем элемента проекта вида ЛокализованныеСтроки. отобразит список существующих элементов проекта типа Локализованные Строки, из которого вы можете выбрать нужное имя.

В результате структура проекта будет выглядеть следующим образом:

Элемент локализации должен содержать только секции с именами и значениями локализуемых строк. Например:

Строки:
    Мероприятия: Activities
    Задачи: Tasks
    События: Events
    Событие: Event
    Роль: Role
Шаблоны:
    ТекущееВремя: "Current time: %0"
    СозданаЗадача: "Task \"$0\" created"
    СозданоСобытие: "Event \"$0\" created"
Вы можете указать перевод строк как в YAML-файле, так и в палитре свойств элемента локализации.

Использование в значениях свойств элементов

В случае использования локализованной строки в значениях свойств элементов, описанных в YAML, необходимо указать идентификатор локализованной строки, начиная с символа $. Идентификатор локализованной строки состоит из трех частей и выглядит следующим образом: $<Имя подсистемы>::<Имя элемента проекта локализованных строк>.<Имя локализованной строки в данном элементе>.

Примеры:
  1. Свойство Представление у элемента проекта НавигационнаяКоманда:
    Тип: НавигационнаяКоманда 
    Представление: $Мероприятия::ЛокализованныеСтроки.Задачи
    ТипФормы: ЗадачиФормаСписка
  2. Группа свойств Интерфейс у элемента проекта Справочник:
    ВидЭлемента: Справочник
    Имя: События
    Ид: 17c884df-fd27-48d8-a6c5-75c87bf0e20f
    ОбластьВидимости: ВПроекте
    Интерфейс:
       Объект:
          Форма: СобытияФормаОбъекта
          Представление: $Мероприятия::ЛокализованныеСтроки.Событие
       Список:
          Форма: СобытияФормаСписка
          Представление: $Мероприятия::ЛокализованныеСтроки.События
    Реквизиты:
        -
            Имя: Код
            Тип: Строка
  3. Свойство Заголовок у компонента ПолеВвода:
    Тип: ПолеВвода<РолиУчастниковМероприятия?>
    Заголовок: $Мероприятия::ЛокализованныеСтроки.Роль
    Имя: ПолеВводаРоли
    РастягиватьПоГоризонтали: Истина
    СообщениеОшибка: Выберите роль
Совет: Если вам необходимо задать строку, начинающуюся с символа «$», экранируйте данный символ с помощью еще одного символа «$». Пример:
Представление: $$Нелокализованное представление

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

Правила разрешения коллизий такие же, как и при обращениях к другим объектам встроенного языка:

  • Если локализованные строки находятся в той же подсистеме, где и вызываются, то указание подсистемы после «$» необязательно.
  • Если подсистема с нужными локализованными строками импортируется, то указание подсистемы после «$» необязательно.
  • Коллизии локализованных строк с текущей и импортируемыми подсистемами разрешается в пользу локальных локализованных строк.
  • Необходимо указывать нелокальную подсистему в идентификаторе локализованных строк, если подсистема используется, но не импортируется.

Использование во встроенном языке

Во встроенном языке можно обратиться к локализованной строке, указав имя элемента проекта вида ЛокализованныеСтроки и, через точку, имя локализованной строки. Если это строка-шаблон, то подставляемое значение можно передать в виде аргумента:

Сообщить(ЛокализованныеСтроки.ТекущееВремя("${Время.Сейчас()|ч:мм}"))

В этом примере используется строка-шаблон с именем ТекущееВремя, в которую подставляется отформатированное представление текущего времени:

"${Время.Сейчас()|ч:мм}"

Как запустить приложение с другим языком

Существует порядок, по которому определяет, какой язык нужно выбрать для конкретного пользователя. Этот порядок описан в следующем разделе.

Чтобы проверить, как работает приложение на другом языке локализации, необходимо запустить приложение и указать нужные региональные установки в параметре URL. Например, для английского языка:

http://localhost:9090/applications/DEMO?locale=en_EN
В результате пример с методом Сообщить(), показанный выше, при запуске с русскими региональными установками выведет строку на языке по умолчанию (русском):
Текущее время: 5:37

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

Current time: 5:38

Порядок определения текущих региональных установок при подключении пользователя

  • Параметр locale, передаваемый в URL. Например:
    http://localhost:9090/applications/DEMO?locale=en_EN
    Если параметр не указан или не поддерживается , то используется следующий пункт.
  • Поддерживаемый приложением язык из списка предпочтительных языков браузера. Список языков браузера берется из значения HTTP-заголовка Accept-Language. В случае неудачи используется следующий пункт. Возможные причины неудачи:
    • В списке языков браузера нет ни одного языка из поддерживаемых .
    • Браузер устарел, и у него нельзя узнать предпочтительные языки.
  • Локаль приложения (в панели управления Приложения > нужное приложение > Настройки > Общие > Локаль), которая задается при создании приложения. Если локаль приложения не указана, тогда используется следующий пункт.
  • ЯзыкПоУмолчанию из файла описания проекта.