При необходимости внедрения английских синонимов или локализации интерфейса в типовых конфигурациях, таких как УТ11, разработчики часто сталкиваются с дилеммой: менять каждый вызов функции НСтр вручную или искать альтернативные пути. Изменение модулей «напрямую» усложняет процесс обновления конфигурации в будущем. Рассмотрим, как решить эту задачу грамотно, используя встроенные инструменты платформы 1С.
Вместо того чтобы вручную переписывать тысячи строк кода, воспользуемся функционалом «Редактирование текстов интерфейса». Этот инструмент позволяет выгрузить все строковые литералы, участвующие в локализации, во внешний файл, перевести их и загрузить обратно.
Excel97. Важно сохранить форматирование, так как именно оно критично для корректной работы НСтр.После выгрузки данных в Excel необходимо правильно подготовить структуру файла для последующей загрузки:
ru для русского и en для английского).mxl через конфигуратор.Теперь выполните команду «Действия» -> «Заполнить тексты», укажите ваш файл, выберите языковую пару и примените изменения. Платформа автоматически свяжет переводы с соответствующими вызовами.
Когда вы используете этот метод, вызов функции в коде автоматически становится локализованным. Платформа сама определяет, какой текст отобразить пользователю, основываясь на настройках его сеанса. Пример того, как это выглядит в модуле:
// До локализации:
Сообщить(НСтр("ru = 'О, привет!' "));
// После применения механизма локализации через конфигуратор:
Сообщить(НСтр("ru = 'О, привет!'; en = 'Oh, hello!' "));
Преимущество этого подхода заключается в том, что вам не нужно снимать модули с поддержки и вносить изменения в каждый вызов функции вручную. Вы работаете через метаданные, что сохраняет конфигурацию «чистой» и готовой к штатному обновлению.
Если задача требует не просто перевода текста, а подмены логики вывода, и штатные методы не подходят, разработчики часто обсуждают создание собственной «обертки».
Рассмотрим вариант с созданием собственной функции в общем модуле:
// В общем модуле (например, ОбщегоНазначения):
Функция МояНСтр(СтрокаНСтр) Экспорт
// Здесь можно реализовать логику парсинга или получения текста из регистра
Возврат НСтр(СтрокаНСтр);
КонецФункции
Однако помните, что при использовании глобальной замены НСтр на ОбщегоНазначения.МояНСтр, вы неизбежно модифицируете все модули. Это лишает вас возможности простого обновления через «Поддержку — Обновить конфигурацию». Мы рекомендуем прибегать к такому методу только в крайнем случае, когда логика сообщений требует динамического формирования, выходящего за рамки стандартных возможностей НСтр.
Для масштабных проектов, где планируется частая смена текстов без вмешательства в конфигуратор, оптимальным решением является паттерн «Справочник сообщений»:
Сообщения, где ключом будет уникальный код сообщения.НСтр на функцию ПолучитьСообщение(Код).Этот метод считается архитектурно более правильным для Enterprise-систем, так как он полностью исключает конфликты при обновлении типовой конфигурации и позволяет управлять текстами интерфейса через пользовательский режим.