Как перевести стандартные команды формы и меню Еще на неподдерживаемый язык в 1С

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

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

Причина проблемы: Разделение ресурсов конфигурации и платформы

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

  1. Ресурсы конфигурации: Это заголовки объектов, полей, команд, которые создал сам разработчик. Они хранятся в метаданных и легко переводятся через механизм «Языки конфигурации».
  2. Ресурсы платформы: Это элементы, которые генерируются самой платформой 1cv8.exe. К ним относятся стандартные кнопки форм, пункты меню Ещё, заголовки системных диалогов (например, «Объект изменен. Сохранить?»), а также виды сравнения в отборах (Равно, Содержит и т.д.).

Проблема заключается в том, что системные ресурсы жестко зашиты в бинарные файлы платформы (динамические библиотеки и файлы ресурсов .res). Если в дистрибутиве 1С нет папки с локализацией для конкретного языка (например, папки tk для туркменского), платформа автоматически откатывается к базовому языку (обычно русскому или английскому) для всех системных надписей.

Метод 1. Программное изменение элементов формы через расширение

Рассмотрим самый распространенный способ — централизованное изменение заголовков кнопок при создании формы. Чтобы не писать код в каждой форме вручную, мы воспользуемся механизмом расширений конфигурации. Это позволит нам один раз прописать логику перевода для всех форм системы.

Выполним следующие шаги:

  1. Создадим новое расширение конфигурации.
  2. Добавим в него общий модуль (серверный).
  3. Создадим в этом модуле обработчик события ПриСозданииНаСервере, используя перехват После.

Разберем пример кода, который будет обходить элементы формы и заменять стандартные заголовки на нужные нам переводы:


&После("ПриСозданииНаСервере")
Процедура Перевод_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Определяем текущий язык пользователя
    ТекущийЯзык = ТекущийЯзыкСистемы();
    Если ТекущийЯзык <> "tk" Тогда // Проверяем, что это наш целевой язык
        Возврат;
    КонецЕсли;

    // Рекурсивно обходим все элементы формы
    ПеревестиЭлементыФормы(ЭтаФорма.Элементы);
    
КонецПроцедуры

Процедура ПеревестиЭлементыФормы(Элементы)
    
    Для Каждого Элемент Из Элементы Цикл
        
        // Проверяем кнопки
        Если ТипЗнч(Элемент) = Тип("КнопкаФормы") Тогда
            Если Элемент.Имя = "ФормаЗаписатьИЗакрыть" Тогда
                Элемент.Заголовок = "Ýaz we ýap"; // Пример на туркменском
            ИначеЕсли Элемент.Имя = "ФормаСоздать" Тогда
                Элемент.Заголовок = "Döretmek";
            КонецЕсли;
        КонецЕсли;
        
        // Если это группа (подменю), заходим внутрь
        Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда
            ПеревестиЭлементыФормы(Элемент.ПодчиненныеЭлементы);
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

Важный нюанс: Этот метод позволяет изменить заголовки кнопок, которые уже добавлены на форму в конфигураторе. Однако он бессилен против динамического меню Ещё, пункты которого платформа формирует в момент отображения формы в зависимости от прав доступа.

Метод 2. Полная замена стандартных команд на пользовательские

Если программная подмена заголовков не дает нужного результата (например, нужно перевести именно пункты системного меню), проанализируем радикальный, но надежный подход: отключение стандартных команд.

Рассмотрим алгоритм действий:

  1. В свойствах формы снимем галочку Автозаполнение у командной панели.
  2. Создадим собственные команды формы (например, КомандаЗаписатьИЗакрыть).
  3. Добавим эти команды на форму и вручную пропишем их заголовки на нужном языке в свойствах или программно.
  4. В обработчике команды вызовем стандартные методы объекта: ЭтаФорма.Записать() или ЭтаФорма.Закрыть().

Этот способ гарантирует 100% локализацию видимых кнопок, но требует значительных трудозатрат, так как придется перерабатывать интерфейс каждой формы.

Проблема системных перечислений и отборов

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

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

В этой ситуации у разработчика есть два пути:

Официальный путь решения: Локализация платформы

Проанализируем ситуацию с точки зрения официальной поддержки. Компания 1С практикует выпуск локализованных версий платформы через региональных партнеров. Если вам требуется полноценный перевод всех системных диалогов, кнопок ОК, Отмена и меню Ещё, правильным шагом будет обращение в отдел локализации фирмы «1С».

Процесс выглядит следующим образом:

  1. Инициируется запрос на создание новой локали.
  2. Разработчик (или партнер) получает от 1С файл глоссария (обычно это огромная таблица, содержащая более 15 000 строк интерфейса платформы).
  3. После перевода глоссария фирма «1С» компилирует официальную сборку платформы, в которую добавляются соответствующие .res файлы.

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

Резюме и практические советы

Подводя итог, можно сказать: если официальной локализации нет, создание качественного интерфейса на редком языке — это всегда компромисс. Мы рекомендуем сочетать несколько подходов:

  1. Используйте расширения для автоматического перевода заголовков стандартных кнопок там, где это возможно.
  2. Создавайте собственные командные панели для наиболее важных форм (карточки ключевых справочников, основные документы), чтобы полностью контролировать перевод.
  3. Оставляйте системные диалоги на английском, установив в параметрах запуска или в файле conf.cfg значение Locale=en. Это выглядит более профессионально, чем смесь русского и туркменского языков.
  4. Свяжитесь с представительством 1С, чтобы узнать о планах по выпуску официальной локализации для вашего региона.

Помните, что попытки самостоятельного редактирования ресурсов платформы с помощью сторонних утилит (Resource Hacker и аналоги) нарушают лицензионное соглашение и могут привести к непредсказуемым ошибкам в работе информационной базы.

← На главную