#std766

Макеты: требования по локализации и поддержке разных языков интерфейса

1.

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

Такие макеты помечайте постфиксом в имени: _кодЯзыка, где код совпадает со свойством Код языка в метаданных. Для русского языка это _ru.

Неправильно

Макет ПФ_ODT_СчетНаОплату

Правильно

Макет ПФ_ODT_СчетНаОплату_ru

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

Неправильно

... = ПолучитьОбщийМакет("ПФ_ODT_СчетНаОплату");

Правильно

... = ПолучитьОбщийМакет("ПФ_ODT_СчетНаОплату" + "_" + ТекущийЯзык());

Чтобы снизить риск ошибок при частичном переводе, получайте макет в три этапа:

  • сначала по ИмяМакета + "_" + ТекущийЯзык();
  • если не найден, по ИмяМакета + "_" + Метаданные.ОсновнойЯзык.КодЯзыка;
  • если не найден, по исходному имени ИмяМакета;
  • затем устанавливайте КодЯзыка (для табличного документа) или КодЯзыкаМакета (для текстового документа и HTML-макета), как в п. 2.
2.

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

Для получения данных из табличного, текстового или HTML-макета на заданном языке используйте:

  • КодЯзыка у табличного документа;
  • КодЯзыкаМакета у текстового документа и HTML-макета.

Правильно

Макет = ПолучитьОбщийМакет("ПечатнаяФорма");
Макет.КодЯзыкаМакета = "ru";
HTMLДокумент = Макет.ПолучитьДокументHTML();
3.

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

Для табличных и HTML-макетов такого типа:

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

Такие макеты не переводите на другие языки интерфейса. При программном формировании текстов для заполнения макета явно задавайте второй параметр в НСтр(), чтобы строки были на том же языке, что и макет.

Неправильно

Макет = ПолучитьМакет("ПФ_MXL_СчетФактура");
...
Область.Текст = НСтр("ru='Заголовок печати';");

Правильно

Макет = ПолучитьМакет("ПФ_MXL_СчетФактура_ru");
Макет.КодЯзыка = Метаданные.Языки.Русский.КодЯзыка;
...
Область.Текст = НСтр("ru='Заголовок печати';", Метаданные.Языки.Русский.КодЯзыка);

При использовании БСП и подсистемы Печать получение макета через УправлениеПечатью.МакетПечатнойФормы("ПФ_MXL_СчетФактура") возвращает форму ПФ_MXL_СчетФактура_ru и устанавливает у макета свойство КодЯзыка.

4.

Если в текстах макетов используются именованные параметры подстановки, соблюдайте требования #std761: Интерфейсные тексты в коде: требования по локализации.

5.

Используйте в макетах кодировку UTF-8.

6.

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

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

Неправильно

Несколько однотипных макетов

Макет = Обработки.ПереключениеРежимов.ПолучитьМакет("Сообщение");

Правильно

Один макет для однотипных сообщений

Макет = Обработки.ПереключениеРежимов.ПолучитьМакет(
    СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
        "Сообщения_%1",
        ОбщегоНазначения.КодОсновногоЯзыка()));
7.

Внешние компоненты размещайте в макетах с типом внешняя компонента.

При разработке внешней компоненты обрабатывайте метод SetLocale для локализации по полученному коду локали. Подробнее: #metod3221: Технология создания внешних компонент.

Если полученный код локали не поддерживается, компонент должен настроить свое окружение на использование английского языка.

Проверки

#acc:450 #acc:497 #acc:1361

Источник

https://its.1c.ru/db/v8std#content:766