Готовишься к экзамену?
Полнофункциональный тренажер @bot_1cnik_bot с полноценным обучением, режимом экзамена и подробной статистикой.
Количество языков для конструктора строк на разных языках:
задается настройками конфигуратора
Неправильно: Настройки Конфигуратора могут влиять на язык редактирования/отображения текстов, но не определяют список языков, для которых хранится перевод. Набор «языков конфигурации» задаётся в самой конфигурации, а мастер работает именно с этим набором и с кодами, указанными в редактируемом наборе строк.
предопределено в платформе и неизменно
Неправильно: Платформа предоставляет механизм работы с многоязычными строками, но конкретные «языки конфигурации» выбирает разработчик в конфигурации. Кроме того, мастер позволяет вводить строки и для других языковых кодов, если эти коды присутствуют в редактируемом наборе.
определяется в конфигурации и может расширяться программно
Правильно: Конструктор показывает все языки, объявленные в конфигурации, и позволяет редактировать дополнительные языки, если их коды уже присутствуют в редактируемом наборе строк (например, в параметре для НСтр()). Это даёт возможность «расширить» набор без добавления языка в конфигурацию - просто добавив пару "код=строка" в многоязычную строку.
определяется в конфигурации и ограничено набором языков
Неправильно: Хотя базовый набор берётся из «языков конфигурации», мастер также поддерживает редактирование языков, которых нет в конфигурации, если их коды встречаются в редактируемом наборе. Поэтому ограничение только языками конфигурации не является строгим.
Пояснение
Конструктор строк на разных языках используется для подготовки многоязычной строки, которую затем удобно передавать в НСтр(). Обычно он показывает поля для всех языков, которые разработчик добавил в конфигурации (в ветке «Общие → Языки»), например ru и en. Эти языки считаются «языками конфигурации», и для них мастер всегда даст отдельные поля.
При этом у конструктора есть важная особенность: он умеет работать не только с языками, объявленными в конфигурации, но и с любыми дополнительными кодами, если они уже присутствуют в редактируемом наборе строк. То есть если вы редактируете строку вида "ru='Оплата';en='Payment';kk='Төлем'", то мастер покажет и kk, даже если язык с кодом kk не добавлен в конфигурацию. Формально конфигурация не «содержит язык kk», но сам набор переводов хранится прямо в строке и может включать любые коды.
Практический пример:
1) В конфигурации включены языки ru и en.
2) Нужно разово добавить перевод для пользователей с языковым кодом uk, не меняя состав языков конфигурации.
3) В модуле или ресурсе формируют строку: "ru='Склад';en='Warehouse';uk='Склад'" и используют НСтр() для получения текста на текущем языке.
4) Если позже потребуется еще один язык, его можно добавить программно - дописав пару "код='перевод'" в многоязычную строку.
Полезные нюансы:
- Если для текущего языка нет соответствующей пары "код=строка", обычно используется значение языка по умолчанию/первого доступного перевода (в зависимости от контекста), поэтому важно заполнять хотя бы базовый перевод.
- «Расширение программно» в данном контексте означает расширение набора переводов внутри самой многоязычной строки (добавление новых кодов и текстов), а не обязательное добавление нового объекта «Язык» в конфигурацию.
- Для крупных проектов лучше все-таки поддерживать единый список языков конфигурации и централизованный процесс перевода, а дополнительные коды использовать осознанно - чтобы не получить разрозненные переводы в разных местах.