Особенности динамических национальных интерфейсов

Крупным недостатком 1С:Предприятия 7.7 считается "единоязычие" – невозможность гибкой смены языкового интерфейса пользователя системы. Часто возникает необходимость обеспечить комфортную работу как исключительно русскоговорящих пользователей, так и исключительно англоговорящих (или любой другой язык, по ситуации).

автор статьи: Андрей Куклин

Источник: http://www.kuklin.com/

Крупным недостатком 1С:Предприятия 7.7 считается "единоязычие" – невозможность гибкой смены языкового интерфейса пользователя системы. Часто возникает необходимость обеспечить комфортную работу как исключительно русскоговорящих пользователей, так и исключительно англоговорящих (или любой другой язык, по ситуации).

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

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

  • Идентификатор (идентификатор элемента на форме)
  • АнглийскоеНаименование
  • РусскоеНаименование
Все реквизиты, конечно же, строковые.

При помощи внешней компоненты Алекса Фёдорова (aka АльФ) FormEx этот справочник заполняется данными (через обработку ЗаполнениеИнтерфейсов, которая действует в режиме правки, то есть уже внесенные переводы не будут затронуты).

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

В итоге вся работа по локализации перекладывается на пользователя (который может даже "кастомизировать" систему по своему вкусу: скажем, вместо "Закрыть" повесить на кпопку "Свалить" или "Выйти"). Задача же программиста заключается в том, чтобы после модификации форм объектов конфигурации не забывать запустить обработку "ЗаполнениеИнтерфейсов".

Чтобы несколько облегчить работы по локализации, можно создать дополнительный служебный справочник "СловарьЭлементовФорм", который будет содержать перевод часто встречающихся элементов форм (кнопки "Закрыть", "ОК", "Сформировать", "Печать", "Расчет", etc.). В приложенном к статье архиве также содержится простая обработка, позволяющая назначать заголовки в справочнике "Интерфейсы" на основании словаря из справочника "СловарьЭлементовФорм".

Конечно, у этого метода (как и у любого другого) есть свои недостатки.

  1. Каждый элемент формы, заголовок которого нужно переводить, должен иметь идентификатор. А учитывая, что V7 по умолчанию идентификаторов элементам форм не присваивает, и многие программисты на это внимания не обращают, присвоение идентификаторов всем элементам всех форм конфигурации может стать серьезной задачей, требующей недюжинной сосредоточенности и усидчивости.
  2. Элементы интерфейса, создаваемые динамически – ("псевдоменю" на основе списков значений, etc.), придется переводить в исходном коде. Или же придумывать дополнительный механизм унификации и централизованного хранения таких данных для разных языков интерфейса.
  3. Обработка по заполнению справочника "Интерфейсы" не работает с формами, устанавливающими нулевой СтатусВозврата при открытии), а также не работает с внешними отчетами.
  4. Обработка по заполнению справочника "Интерфейсы" открывает в цикле несколько десятков форм (точное количество зависит, конечно, от конфигурации), и на слабых машинах обработка конфигурации с большим количеством форм может идти довольно долго.
  5. Методика (в приложенном примере) работает только с двумя языками. Но её можно расширитьна любое количество языков, сделав подчиненный справочник к "Интерфейсам".

Идея и реализация: Аккужин Юлай, Калюжин Антон, Куклин Андрей. ООО "Практика", Бишкек, Кыргызстан.

Начать дискуссию