При разработке интернациональных решений на платформе 1С:Предприятие разработчики часто сталкиваются с ситуацией, когда необходимо добавить язык, который официально не поддерживается платформой (например, туркменский, монгольский или специфические диалекты). Если перевод объектов метаданных (справочников, документов, реквизитов) выполняется штатными средствами в дереве конфигурации, то стандартные системные команды, такие как Записать, Закрыть, Создать, а также пункты подменю Ещё, вызывают серьезные затруднения. Разберем подробно, почему так происходит и какие существуют методы решения этой задачи.
Для начала проанализируем, как устроена локализация в 1С. Все надписи, которые мы видим в интерфейсе, делятся на две большие группы:
1cv8.exe. К ним относятся стандартные кнопки форм, пункты меню Ещё, заголовки системных диалогов (например, «Объект изменен. Сохранить?»), а также виды сравнения в отборах (Равно, Содержит и т.д.).Проблема заключается в том, что системные ресурсы жестко зашиты в бинарные файлы платформы (динамические библиотеки и файлы ресурсов .res). Если в дистрибутиве 1С нет папки с локализацией для конкретного языка (например, папки tk для туркменского), платформа автоматически откатывается к базовому языку (обычно русскому или английскому) для всех системных надписей.
Рассмотрим самый распространенный способ — централизованное изменение заголовков кнопок при создании формы. Чтобы не писать код в каждой форме вручную, мы воспользуемся механизмом расширений конфигурации. Это позволит нам один раз прописать логику перевода для всех форм системы.
Выполним следующие шаги:
ПриСозданииНаСервере, используя перехват После.Разберем пример кода, который будет обходить элементы формы и заменять стандартные заголовки на нужные нам переводы:
&После("ПриСозданииНаСервере")
Процедура Перевод_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Определяем текущий язык пользователя
ТекущийЯзык = ТекущийЯзыкСистемы();
Если ТекущийЯзык <> "tk" Тогда // Проверяем, что это наш целевой язык
Возврат;
КонецЕсли;
// Рекурсивно обходим все элементы формы
ПеревестиЭлементыФормы(ЭтаФорма.Элементы);
КонецПроцедуры
Процедура ПеревестиЭлементыФормы(Элементы)
Для Каждого Элемент Из Элементы Цикл
// Проверяем кнопки
Если ТипЗнч(Элемент) = Тип("КнопкаФормы") Тогда
Если Элемент.Имя = "ФормаЗаписатьИЗакрыть" Тогда
Элемент.Заголовок = "Ýaz we ýap"; // Пример на туркменском
ИначеЕсли Элемент.Имя = "ФормаСоздать" Тогда
Элемент.Заголовок = "Döretmek";
КонецЕсли;
КонецЕсли;
// Если это группа (подменю), заходим внутрь
Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда
ПеревестиЭлементыФормы(Элемент.ПодчиненныеЭлементы);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Важный нюанс: Этот метод позволяет изменить заголовки кнопок, которые уже добавлены на форму в конфигураторе. Однако он бессилен против динамического меню Ещё, пункты которого платформа формирует в момент отображения формы в зависимости от прав доступа.
Если программная подмена заголовков не дает нужного результата (например, нужно перевести именно пункты системного меню), проанализируем радикальный, но надежный подход: отключение стандартных команд.
Рассмотрим алгоритм действий:
Автозаполнение у командной панели.КомандаЗаписатьИЗакрыть).ЭтаФорма.Записать() или ЭтаФорма.Закрыть().Этот способ гарантирует 100% локализацию видимых кнопок, но требует значительных трудозатрат, так как придется перерабатывать интерфейс каждой формы.
Выясним причину, по которой даже полная переработка форм не решит проблему до конца. Существуют так называемые системные перечисления. Типичный пример — виды сравнения в системе компоновки данных (СКД): Равно, Не равно, В списке, Содержит.
Эти строки не являются элементами формы. Это строковые представления значений системного типа ВидСравненияКомпоновкиДанных. Поскольку они хранятся в ядре платформы, изменить их представление через код 1С невозможно. В отчетах и динамических списках пользователь все равно будет видеть эти элементы на языке локализации платформы (русском или английском).
В этой ситуации у разработчика есть два пути:
Проанализируем ситуацию с точки зрения официальной поддержки. Компания 1С практикует выпуск локализованных версий платформы через региональных партнеров. Если вам требуется полноценный перевод всех системных диалогов, кнопок ОК, Отмена и меню Ещё, правильным шагом будет обращение в отдел локализации фирмы «1С».
Процесс выглядит следующим образом:
.res файлы.Только такой подход обеспечит перевод системных сообщений об ошибках, окон подтверждения удаления и других глубоко зашитых элементов интерфейса.
Подводя итог, можно сказать: если официальной локализации нет, создание качественного интерфейса на редком языке — это всегда компромисс. Мы рекомендуем сочетать несколько подходов:
conf.cfg значение Locale=en. Это выглядит более профессионально, чем смесь русского и туркменского языков.Помните, что попытки самостоятельного редактирования ресурсов платформы с помощью сторонних утилит (Resource Hacker и аналоги) нарушают лицензионное соглашение и могут привести к непредсказуемым ошибкам в работе информационной базы.