Перейти к основному содержимому

Локализация

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

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

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

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

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

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

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

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

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

  • Строки

    Строки можно использовать в описании компонентов интерфейса и элементов проекта, а также во встроенном языке.

  • Шаблоны

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

Пример:

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

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

Автоматическая генерация локализованных строк

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

    Выбор пункта «Локализовать строки»

  2. «1С:Шина» отобразит диалог Локализовать строки. Данный диалог содержит таблицу ключей и значений локализуемых строк, автоматически сгенерированных для всех свойств объектов, поддерживающих локализацию.

    Диалог «Локализовать строки»

  3. В поле Новые локализованные строки введите имя элемента проекта ЛокализованныеСтроки. Отметьте те строки, которые вы хотите применить к соответствующим свойствам объектов. При необходимости отредактируйте ключи и значения строк.

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

  4. Нажмите Применить. «1С:Шина» создаст элемент проекта ЛокализованныеСтроки с заданным именем. Если для проекта указаны другие языки локализации, «1С:Шина» также добавит раздел локализации.

Создание локализованных строк вручную

  1. Наведите мышку на нужную подсистему и нажмите на знак плюса.

  2. В открывшемся окне выберите элемент проекта Локализованные строки.

    Добавление элемента проекта «Локализованные строки»

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

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

    Диалог создания раздела локализации

  5. Укажите ключи и значения локализуемых строк в панели свойств элемента проекта ЛокализованныеСтроки.

    Создание локализованных строк в панели свойств

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

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

  1. Наведите мышку на элемент проекта ЛокализованныеСтроки и нажмите на знак плюса.

  2. В открывшемся окне выберите язык, на который нужно перевести строки.

    Выбор языка локализации

«1С:Шина» создаст раздел локализации, содержащий пустой элемент локализации. Имя элемента локализации будет совпадать с именем элемента проекта вида ЛокализованныеСтроки.

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

Структура проекта

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

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

Вы можете указать перевод строк в панели свойств элемента локализации:

Добавление перевода строк

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

«1С:Шина» позволяет вам задавать идентификаторы локализованных строк в панели свойств элементов проекта и компонентов интерфейса. Для этого активируйте настройку Использовать локализованное значение Иконка локализации для нужного свойства. В открывшемся меню выберите имя элемента проекта ЛокализованныеСтроки, содержащего нужную строку, и ключ строки.

Выбор локализованной строки

Если необходимо, вы можете отредактировать значение выбранной строки или создать новую строку. Для этого нажмите Создать новую локализованную строку и укажите ключ и значение строки в открывшемся диалоговом окне.

Создание новой строки

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

Пример:

Задачи.yaml
ВидЭлемента: Документ
Ид: c59a5bbd-d917-4efa-b9f5-d51dfc031426
Имя: Задачи
ОбластьВидимости: ВПроекте
Интерфейс:
Объект:
Форма: ЗадачиФормаОбъекта
Представление: $Мероприятия::ЛокализованныеСтроки.Задача
Список:
Форма: ЗадачиФормаСписка
Представление: $Мероприятия::ЛокализованныеСтроки.Задачи
совет

Если вам необходимо задать строку, начинающуюся с символа «$», экранируйте данный символ с помощью еще одного символа «$».

Правила разрешения коллизий

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

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

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

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

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

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

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

@НаСервере @ДоступноСКлиента
статический метод ЯзыкИнтерфейса(): Строка
возврат Язык.Текущий().Код
// Вернет строку "ru", если текущий язык — русский
// Вернет строку "en", если текущий язык — английский
;

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

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

Чтобы проверить, как работает приложение на другом языке локализации, необходимо запустить приложение и указать нужные региональные установки в параметре 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

    Если параметр не указан или не поддерживается «1С:Шиной», то используется следующий пункт.

  • Поддерживаемый приложением язык из списка предпочтительных языков браузера. Список языков браузера берется из значения HTTP-заголовка Accept-Language. В случае неудачи используется следующий пункт. Возможные причины неудачи:

    • В списке языков браузера нет ни одного языка из поддерживаемых «1С:Шиной».
    • Браузер устарел, и у него нельзя узнать предпочтительные языки.
  • Локаль приложения (в панели управления ПриложенияНазвание приложенияНастройкиОбщиеЛокаль), которая задается при создании приложения. Если локаль приложения не указана, тогда используется следующий пункт.

  • ЯзыкПоУмолчанию из файла описания проекта.