Новый язык в конфигурации 1С: от объекта «Язык» до печатных форм

· 9 мин

Содержание

Язык добавляется в Конфигураторе: в дереве метаданных откройте ветку Общие → Языки, создайте новый объект и задайте ему код языка, например en. После этого синонимы, подсказки и строки интерфейса можно хранить на нескольких языках, а пользователю — назначить нужный язык работы.

Работа делится на пять частей: завести объект «Язык», заполнить переводы в метаданных, перевести строки в коде и макетах, выбрать язык для сеанса и проверить результат под пользователем. Ниже — все пять по порядку, с подводными камнями.

Все действия выполняются в Конфигураторе над конфигурацией. Если база типовая и стоит на поддержке, сначала включите возможность изменения. Перед правками сделайте выгрузку базы в .dt или сохраните копию конфигурации.

Подготовка: что проверить до добавления языка

Прежде чем открывать Конфигуратор, ответьте на три вопроса. От них зависит объём работы.

  • 🌍 Что именно переводим. Только интерфейс и подписи полей, или ещё и печатные формы, сообщения пользователю, справочники с наименованиями на двух языках.
  • 👥 Кто будет работать на новом языке. Если один-два человека, часто хватает перевода синонимов. Если целый отдел, нужен полный перевод.
  • 🛠 Можно ли менять конфигурацию. Для типовых решений на поддержке каждая правка усложняет обновление. Для своей разработки ограничений нет.

Что понадобится технически:

  1. Доступ к базе в режиме Конфигуратора (роль с правом администрирования).
  2. Список языковых кодов. Для английского это en, для украинского uk, для казахского kk. Русский — ru.
  3. Тексты перевода. Лучше иметь их заранее в таблице: название объекта, русский вариант, перевод.

Если база файловая, закройте остальные сеансы. Для серверной базы изменения конфигурации видны другим пользователям только после обновления конфигурации базы данных.

Шаг 1. Создаём объект «Язык» в дереве метаданных

Откройте конфигурацию: Конфигурация → Открыть конфигурацию. В дереве найдите ветку Общие и раскройте Языки. Если конфигурация однолингвальная, там один элемент — русский.

Добавление языка

  1. Правой кнопкой по ветке Языки, пункт Добавить.
  2. В палитре свойств задайте Имя. Обычно его делают латиницей или по-русски без пробелов: Английский, English.
  3. В поле Синоним напишите, как язык будет называться в интерфейсе.
  4. В поле Код языка укажите короткий код: en, uk, de. Именно по нему платформа сопоставляет переводы.
  5. Сохраните конфигурацию (F7 или кнопка обновления конфигурации базы данных).

Код языка — главное свойство. Если вы ошибётесь в нём, переводы не подтянутся, хотя объект «Язык» в дереве будет выглядеть правильно. Проверяйте код по списку, а не по памяти.

Основной язык конфигурации

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

Если для строки перевод не задан, пользователь увидит основной язык. Ошибки это не вызовет: просто часть полей останется по-русски.

Что задаёмГдеДля чего
Объект «Язык»Общие → ЯзыкиРегистрирует язык в конфигурации
Код языкаСвойство объекта «Язык»Связывает переводы с языком
Основной языкСвойства конфигурацииЗапасной вариант при отсутствии перевода

Шаг 2. Многоязычные синонимы и подсказки в метаданных

Как только в конфигурации появился второй язык, поля Синоним, Подсказка, Комментарий у объектов метаданных становятся многоязычными. Рядом с полем появляется кнопка выбора языка.

Как вписать перевод синонима

  1. Откройте объект: справочник, документ, реквизит, команду.
  2. В палитре свойств найдите Синоним и нажмите кнопку с многоточием.
  3. В открывшемся окне выберите язык строки и впишите перевод.
  4. Повторите для каждого языка, который нужен.

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

Подсказки и всплывающие тексты

Подсказка (ToolTip) переводится так же. Обычно её забывают, а пользователь видит русский текст поверх английского интерфейса. Пройдите по ключевым формам и откройте их в режиме предприятия под новым языком: это быстрее, чем искать пропуски по дереву.

Начинайте с того, что видно сразу: главное меню, разделы, команды панели навигации, часто используемые справочники и документы. Редко открываемое переводите потом.

Шаг 3. Массовый перевод: таблица переводов и выгрузка строк

Вручную переводить синонимы объект за объектом можно, пока их десятки. На конфигурации с тысячами объектов это нереально. Для этого в платформе есть механизм работы с переводами в виде таблицы: строки конфигурации выгружаются, переводятся во внешнем файле и загружаются обратно.

Типичный порядок такой:

  1. Выгрузить из конфигурации строки, которые нужно перевести. Платформа создаёт файл, где рядом стоят исходный текст и поле для перевода.
  2. Передать файл переводчику или обработать в редакторе таблиц. Исходные тексты и служебные идентификаторы не трогайте.
  3. Загрузить файл обратно в конфигурацию.
  4. Проверить, что строки встали на место, и открыть несколько форм в режиме предприятия.

Где именно находятся команды выгрузки и загрузки, зависит от версии платформы. В актуальных релизах 8.3 ищите их в меню Конфигуратора Конфигурация, а при сомнениях откройте справку по слову «перевод».

Что делать, если перевод нужен и в коде

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

Сообщение = НСтр("ru = 'Документ проведён'; en = 'Document posted'");

Платформа выберет вариант под текущий язык. Если нужного языка в строке нет, возьмётся основной. Следите, чтобы код языка внутри строки совпадал с кодом, который вы указали в объекте «Язык»: en там и тут.

Чтобы строки с параметрами не ломались при переводе, подставляйте значения через СтрШаблон:

Текст = СтрШаблон(НСтр("ru = 'Загружено %1 строк'; en = '%1 rows imported'"), Количество);

Не склеивайте фразу из кусков через +. В другом языке порядок слов другой, и перевод получится кривым. Одна фраза — одна строка НСтр с параметрами.

Шаг 4. Печатные формы и отчёты на новом языке

С макетами сложнее, чем с метаданными: язык подставляется не сам. Есть два рабочих подхода.

Подход 1. Отдельный макет под язык

Создайте копию макета и переведите подписи: заголовки таблицы, названия реквизитов, подвал. В коде печати выбирайте макет в зависимости от языка:

ИмяМакета = ?(ТекущийЯзык() = "en", "СчетEn", "Счёт");
Макет = Документы.СчетНаОплату.ПолучитьМакет(ИмяМакета);

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

Подход 2. Один макет, подписи берутся из кода

В макете остаются области с параметрами, а подписи подставляются из НСтр. Макет один, перевод живёт рядом с логикой. Подходит, когда формы сложные и менять вёрстку часто.

ПодходКогда выбиратьРиск
Отдельный макетПечатные формы строгого вида, нужен полный контроль над версткойРасхождение копий
Один макет и НСтрМного форм, подписи короткиеУсложняется код формирования

Отчёты и СКД

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

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

Шаг 5. Язык сеанса и настройки пользователя

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

  • 🖥 Язык интерфейса платформы. Меню, диалоги самой платформы. Задаётся параметром запуска /L, например /L en.
  • 🌐 Язык сеанса (локализация). Определяет, какие переводы метаданных увидит пользователь. Задаётся параметром запуска /VL с кодом языка.
  • 👤 Язык пользователя. В карточке пользователя информационной базы можно выбрать язык, под которым он работает по умолчанию.

Запуск с нужным языком

Для проверки удобно добавить отдельный ярлык, где язык задан параметром:

"C:\Program Files\1cv8\<версия>\bin\1cv8.exe" ENTERPRISE /F "D:\Bases\Demo" /VL en

Путь к платформе и каталог базы подставьте свои. Для серверной базы вместо /F используется /S сервер\база.

Назначение языка пользователю

В режиме Конфигуратора откройте Администрирование → Пользователи, дважды щёлкните по пользователю и найдите поле выбора языка на вкладке с основными свойствами. Выберите из списка нужный. Если языка в списке нет, значит, он не создан в метаданных или конфигурация базы не обновлена.

В самом коде текущий язык сеанса доступен через встроенные функции платформы, и его можно использовать для выбора макета или текста. Полный список смотрите в синтакс-помощнике по слову «язык».

Смена языка в параметре запуска не меняет данные. Она лишь выбирает, какие переводы показывать. Если для объекта перевода нет, пользователь увидит основной язык.

Проверка после добавления языка
Выполнено: 0 / 5

Типичные ошибки и как их избежать

Большинство проблем при добавлении языка однотипны.

Язык добавлен, а перевода не видно

  • Конфигурация не обновлена в базе данных. Нажмите обновление конфигурации базы данных.
  • Сеанс запущен без нужного языка. Проверьте параметр /VL или язык у пользователя.
  • Код языка в объекте «Язык» не совпадает с кодом в строках перевода.

Часть интерфейса осталась по-русски

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

Кракозябры и вопросительные знаки в выгруженных файлах

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

Советы по оптимизации

  • 📌 Переводите по приоритетам: сначала разделы и самые частые формы.
  • 📌 Заводите единый словарь терминов. «Контрагент» — всегда одно слово, а не три.
  • 📌 Все новые тексты в коде сразу пишите через НСтр, иначе переводить придётся потом.
  • 📌 Для типовой конфигурации храните список изменений: пригодится при обновлении релиза.
Диагностика: выберите симптом

Частые вопросы

Можно ли добавить язык в типовую конфигурацию на поддержке?
Да, но потребуется включить возможность изменения, и при обновлении релиза придётся сопоставлять правки. Для нескольких переведённых синонимов это терпимо, для полного перевода лучше планировать отдельный проект.
Сколько языков можно добавить?
Жёсткого малого предела нет: сколько нужно, столько объектов «Язык» создаёте. Нагрузка растёт на объём переводов, а не на число языков как таковое.
Переведутся ли сами данные: наименования номенклатуры и контрагентов?
Нет. Многоязычность метаданных относится к интерфейсу. Данные справочников остаются такими, как введены. Для двух вариантов наименования нужен отдельный реквизит.
Нужно ли переводить, если пользователь работает только по-русски?
Нет. Пока язык не выбран в сеансе, платформа показывает основной язык. Добавление нового языка существующих пользователей не затрагивает.
Как удалить язык, если он больше не нужен?
Удалите объект из ветки Общие → Языки, предварительно проверив, что он не назначен пользователям и не указан основным. Переводы этого языка пропадут вместе с ним.