При разработке интернациональных решений на платформе 1С:Предприятие 8.3 часто возникает задача локализации интерфейса. Разберем ситуацию, когда в самописную конфигурацию уже добавлен новый язык (например, английский с кодом en), заполнены синонимы для объектов метаданных, и теперь необходимо понять, как заставить систему отображаться на этом языке. Вместе мы проанализируем доступные механизмы платформы и выясним, как управлять языковыми настройками программно и через параметры запуска.
Важно сразу уяснить архитектурную особенность платформы: переключить язык интерфейса «на лету» (без перезапуска сеанса) для всей системы невозможно. Язык интерфейса определяется в момент инициализации клиентского приложения. Рассмотрим основные способы, которыми мы можем управлять этим процессом.
/L. Например, для запуска на английском языке строка запуска будет выглядеть так: 1cv8.exe ENTERPRISE /F "ПутьКБазе" /L en.Проанализируем тонкий момент, который часто упускают разработчики: разницу между переводом текстов (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С ситуация несколько иная. По умолчанию мобильный клиент или автономное приложение подтягивают язык из настроек операционной системы смартфона (iOS или Android). Если в ОС стоит английский, 1С попытается найти английский язык в метаданных и применить его. Разработчик может управлять этим поведением при сборке приложения в «Сборщике мобильных приложений», жестко ограничив список доступных языков.
Важно различать язык интерфейса и язык данных. Если нам нужно хранить наименования товаров в справочнике «Номенклатура» на нескольких языках, стандартный механизм синонимов 1С нам не поможет. В этом случае мы должны продумать структуру хранения самостоятельно. Рассмотрим два способа:
НаименованиеАнглийское, НаименованиеКитайское и т.д.Проанализировав все вышеперечисленные методы, мы видим, что 1С предоставляет гибкие инструменты для локализации. Выбор конкретного метода зависит от типа клиента (тонкий, веб или мобильный) и конкретных бизнес-задач вашего проекта.