localization · git:20261104.de7e24b · 2026-11-04 · sha256 03fd66cb201ebd10

localization git:20261104.de7e24bA

Immutable. This exact content never changes and is served at /api/v1/blob/03fd66cb201ebd10.

---
name: localization
description: "Локализация конфигурации 1С: НСтр/NStr, языки, переводы интерфейса и форматирование. Используй для подготовки к другому языку или проверки многоязычного кода и метаданных."
---

# Локализация 1С

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

## Языки и представления

`Language.Name` — имя объекта, `LanguageCode` — код вроде `ru` или `en`.
`Configuration.DefaultLanguage` ссылается на объект языка; например,
`Language.Русский` само по себе не сообщает его код. `ScriptVariant` выбирает
язык BSL, а не язык интерфейса. `LocaleCode` региональных настроек управляет
форматами чисел, дат и Булево отдельно от выбора текста через НСтр.

Начни с `unica.view {}` и выданного корня конфигурации. В его свойствах
`properties.defaultLanguage` и ветви `Language` проверь основной язык и состав.
Если деталь языка показывает только `kind`, а `LanguageCode` не выдаётся,
проверь другие доступные исходные данные задачи, затем уточни недостающие
коды у пользователя. Не выводи код из имени объекта или языка переписки.
Расширение имеет собственный языковой профиль; внешние
обработки и отчёты при выполнении используют языки открывшей их конфигурации.
Для скалярных многоязычных значений внешнего артефакта writer Unica выбирает
явный `ru` по умолчанию: собственного `DefaultLanguage` у такого набора нет.
Это не выбирает язык выполняющей базы.

Для подготовки к английскому составь перечень существующих и целевых кодов,
основного языка, доступных переводов и пробелов. Добавление языка предполагает
уникальный код, регистрацию в конфигурации и заполнение интерфейсных текстов.
Выполняй его только при наличии соответствующей операции в текущем `Can`.
Отсутствующая операция остаётся незавершённым шагом подготовки.

Полнота переводов по выбранным языкам — проверка качества проекта. Для НСтр
и интерфейсных строк нет общего требования равенства всех наборов кодов:
в интерфейсных текстах могут остаться переводы удалённых языков.
Не удаляй их без поручения.
Объявленные языковые страницы макетов проверяй по отдельным правилам ресурса.

## НСтр в коде

`НСтр(ИсходнаяСтрока, КодЯзыка)` / `NStr` возвращает строку. Второй аргумент —
необязательная строка с кодом языка, не числовой индекс; массива переводов
функция не возвращает. Без второго аргумента выбирается язык пользователя;
справка описывает результат на языке пользователя либо основном языке
конфигурации. Не используй непроверенный fallback вместо проверки полноты.

```bsl
Текст = НСтр("ru = 'Документ %1 не найден';
    |en = 'Document %1 was not found'");
Сообщить(СтрШаблон(Текст, ПредставлениеДокумента));

Ответ = НСтр("ru = 'Да'; en = 'Yes'", "en");
```

Записи разделяются `;`, код и текст — `=`. В примере текст каждой записи
заключён в одинарные кавычки внутри строкового литерала BSL. `|` продолжает
многострочный литерал: физический перенос попадает в строку. Здесь перенос
разделяет записи языков; перенос внутри кавычек перевода станет частью
пользовательского текста. Не разрывай подпись ради ширины исходника.

Локализуй подписи, подсказки, команды, сообщения и показываемые пользователю
исключения. Для составного сообщения переводи целую фразу и подставляй
значения через `%1`, `%2` и `СтрШаблон`; склейка переведённых слов ломает
порядок слов. Именованные `%Параметр%` не являются синтаксисом СтрШаблон.
Используй подходящие представления метаданных, когда они уже решают задачу.

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

## Переводы метаданных через MCP

Многоязычные `Synonym`, `ToolTip` и заголовки хранят пары код → текст.
Семантический пример `Synonym`, сверенный с Designer XML 2.20 УТ:

```xml
<Synonym xmlns="http://v8.1c.ru/8.3/MDClasses"
         xmlns:v8="http://v8.1c.ru/8.1/data/core">
  <v8:item>
    <v8:lang>ru</v8:lang>
    <v8:content>Валюты</v8:content>
  </v8:item>
</Synonym>
```

В контексте этого фрагмента `v8` связан с
`http://v8.1c.ru/8.1/data/core`. Другой перевод — отдельный `v8:item`.
`Comment` — обычная строка, а не такой набор. `Name` также остаётся
идентификатором. НСтр применяется в BSL; её вызов, записанный текстом в
`Synonym`, не создаёт переводы. XML здесь иллюстрирует формат; изменяет его
публичный `unica.apply`.

Читай цель и её `Can.<операция>` по адресам из `view`/`search`. Формы
аргументов различаются:

- `props.set` метаданных принимает `values.Synonym` строкой; член метаданных
  использует свой `attribute.set` и опубликованное поле `synonym`.
  Скаляр относится к основному языку набора, не к языку текущего пользователя.
  Английская строка при основном `ru` не добавляет перевод `en`.
- `props.set` корня формы принимает `values.Title` непустой строкой основного языка
  с сохранением других переводов или полной картой переводов.
  Пустая строка удаляет весь заголовок со всеми переводами. Для удаления
  только одного перевода передай полную непустую карту с остальными языками
  и непустыми текстами. Последний перевод удаляется пустой строкой `Title`.
  Поддержку карты проверяй в `Can` этой формы.
- При создании `Label` через `item.add` его `title` также принимает карту
  языков. Это отдельный контракт создания: поддержку карты для изменения
  существующего элемента, других видов элементов или команд проверяй
  в соответствующем `Can`, не переноси её с корня формы или нового `Label`.
- Одна строка `title`/`Synonym` в ответе не доказывает отсутствия других
  переводов. Если полный набор не наблюдается, получи его из разрешённых
  исходных данных задачи до замены карты. Не собирай её из единственной подписи.

Например, когда полный набор заголовка состоит из `ru` и `en`, правка формы
может выглядеть так; подставь выданный адрес и проверенные переводы:

```json
{"at":"<адрес>","ops":[{"op":"props.set","args":{"values":{"Title":{"ru":"Товар","en":"Product"}}}}]}
```

Карта задаёт весь заголовок: сохрани в ней остальные существующие языки.
`AutoTitle` проверяй отдельно — автоматический заголовок может брать
представление из метаданных. Для одного перевода не меняй способ формирования
заголовка без необходимости.

Сначала получи preview `unica.apply` с `at` и `ops`; проверь состав изменения
и сохранность других переводов. При порученной записи исполни только
возвращённый `executionToken`, затем перечитай цель. При недостаточном
наблюдении не заявляй проверку всех языков. Не выдавай scalar-контракт за
адресную запись произвольного языка: назови недоступный шаг. Не переключай
`DefaultLanguage` ради выбора языка записи и не обходи ограничение правкой XML.

Изменения BSL выполняй через [code-patch](../code-patch/SKILL.md).
Контекст метаданных и формы уточняют
[meta-edit](../meta-edit/SKILL.md) и [form-edit](../form-edit/SKILL.md).

## Проверка результата

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

Для дат предпочитай локальные форматы `ДЛФ`; собственные форматы дат,
подписи чисел и Булево также требуют локализации. Не фиксируй `L=`/`Л=`
в пользовательском представлении без требования задачи. Для обмена используй
оговорённую сериализацию XML/JSON, а не пользовательскую строку `Формат`.

В отчёте раздели изменённые и проверенные части, непроверенный интерфейс и
недоступные операции. Добавленный `en` в НСтр не доказывает готовности всей
конфигурации к английскому.

## Источники

[Описание языков и DefaultLanguage в XML](../../references/specs/1c-configuration-spec.md#5-языки-languages).
Сигнатура и механика сверены со справкой платформы 8.3.27 через `unica.docs`:
НСтр, `DefaultLanguage`, `LanguageCode`, `LocaleCode` региональных настроек.
Для другой установки уточняй её справку по [platform-help](../platform-help/SKILL.md).

Первичные стандарты 1Ci:
[интерфейсные строки](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Localization_requirements/Localization_guidelines_____Interface_strings_in_modules/?language=en),
[строковые константы](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Localization_requirements/Localization_guidelines_____String_constants_in_modules/?language=en),
[журнал регистрации](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Code_conventions/Using_1C_Enterprise_language_structures/Event_log/?language=en),
[даты, числа и Булево](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Localization_requirements/Localization_guidelines_____Dates__numbers__and_Boolean/?language=en).