Как программно переключить язык интерфейса в 1С:Предприятие 8.3?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке интернациональных решений на платформе 1С:Предприятие 8.3 часто возникает задача локализации интерфейса. Разберем ситуацию, когда в самописную конфигурацию уже добавлен новый язык (например, английский с кодом en), заполнены синонимы для объектов метаданных, и теперь необходимо понять, как заставить систему отображаться на этом языке. Вместе мы проанализируем доступные механизмы платформы и выясним, как управлять языковыми настройками программно и через параметры запуска.

Основные механизмы переключения языка в 1С

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

  1. Параметры командной строки при запуске. Это самый надежный способ принудительно задать язык для конкретного сеанса. Используется ключ /L. Например, для запуска на английском языке строка запуска будет выглядеть так: 1cv8.exe ENTERPRISE /F "ПутьКБазе" /L en.
  2. Свойства пользователя. В информационной базе для каждого пользователя в его настройках (через «Администрирование» — «Пользователи») можно жестко задать язык интерфейса. Это приоритетный метод, если в базе работают разные люди с разными языковыми предпочтениями.
  3. Свойство конфигурации «Основной язык». Если в системе нет пользователей или язык у пользователя не задан, платформа ориентируется на основной язык, указанный в корневом узле метаданных конфигурации.

Разграничение языка интерфейса и региональных настроек

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

Параметр /L (Language): отвечает исключительно за строковые ресурсы — заголовки кнопок, меню, синонимы объектов. Например, /L en включит английские заголовки.

Параметр /VL (Locale): отвечает за региональные настройки (локаль). Это форматы представления чисел (точка или запятая как разделитель), даты и времени. Если нам нужно, чтобы система не только писала «Date», но и выводила её в формате MM/DD/YYYY, нам следует использовать оба параметра:

/L en /VL en_US

Программная работа с многоязычными строками (НСтр)

Для того чтобы ваши собственные сообщения, предупреждения и уведомления отображались на языке пользователя, мы должны использовать встроенную функцию НСтр(). Рассмотрим на примере, как правильно оформлять строковые литералы в коде:


// Пример вывода уведомления на двух языках
ТекстСообщения = НСтр("ru = 'Операция завершена успешно'; en = 'Operation completed successfully'");
ПоказатьПредупреждение(, ТекстСообщения);

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

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

Если ваша конфигурация используется через браузер, мы можем управлять языком прямо через URL-адрес. Это очень удобно для создания ссылок под разные регионы. Для этого в конец адреса добавляется параметр L. Посмотрим на пример структуры ссылки:

http://server/base_name?L=en — принудительный английский интерфейс.

http://server/base_name?L=ru&VL=ru_RU — принудительный русский интерфейс с российскими форматами чисел и дат.

Программное определение текущего языка сеанса

Иногда логика кода должна зависеть от того, какой язык сейчас активен. Для этого мы можем использовать функцию ТекущийЯзык(). Она возвращает объект метаданных. Чтобы получить краткий код (например, "en"), используем следующее выражение:


КодАктивногоЯзыка = ТекущийЯзык().КодЯзыка;
Если КодАктивногоЯзыка = "en" Тогда
    // Выполняем логику специфичную для англоязычного интерфейса
КонецЕсли;

Динамическое изменение заголовков (имитация переключения «на лету»)

Хотя платформенного метода смены языка без перезагрузки нет, мы можем реализовать его программно для конкретной формы. Разберем, как это сделать. Мы можем создать на форме кнопку «Switch to English», при нажатии на которую будет вызываться процедура обхода элементов формы:


Процедура ПереключитьИнтерфейсФормыНаEnglish()
    
    // Перебираем элементы формы и меняем их заголовки
    Элементы.ГруппаДанные.Заголовок = "Data Group";
    Элементы.КнопкаВыполнить.Заголовок = "Execute";
    
    // Можно также использовать НСтр, чтобы не хардкодить строки
    ЭтаФорма.Заголовок = НСтр("en = 'Customer Card'", "en");
    
КонецПроцедуры

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

Особенности мобильной платформы 1С

В мобильных приложениях 1С ситуация несколько иная. По умолчанию мобильный клиент или автономное приложение подтягивают язык из настроек операционной системы смартфона (iOS или Android). Если в ОС стоит английский, 1С попытается найти английский язык в метаданных и применить его. Разработчик может управлять этим поведением при сборке приложения в «Сборщике мобильных приложений», жестко ограничив список доступных языков.

Хранение данных на разных языках в базе данных

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

  1. Дополнительные реквизиты: создать в справочнике поля НаименованиеАнглийское, НаименованиеКитайское и т.д.
  2. Регистр сведений: создать периодический или непериодический регистр «ИнтернациональныеНаименования», где измерениями будут «Объект» и «Язык», а ресурсом — «Значение».

Проанализировав все вышеперечисленные методы, мы видим, что 1С предоставляет гибкие инструменты для локализации. Выбор конкретного метода зависит от типа клиента (тонкий, веб или мобильный) и конкретных бизнес-задач вашего проекта.

← На главную