Локализация стандартных текстов интерфейсов в управляемом приложении

Частичное решение задачи

Локализация стандартных текстов интерфейсов в управляемом приложении

 

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если Не ОбщийМодульСервер.ЯзыкПриложения() = Метаданные.Языки.Русский Тогда
       
// Локализация заголовков кнопок
       
ОбщийМодульСервер.ЛокализацияЗаголовковВОбъекте(ЭтаФорма, Объект);
       
ОбщийМодульСервер.ЛокализацияЗаголовковТабличныхЧастей(ЭтаФорма, ЭтаФорма.Элементы.Таблица1);
       
ОбщийМодульСервер.ЛокализацияЗаголовковТабличныхЧастей(ЭтаФорма, ЭтаФорма.Элементы.Таблица2);
    КонецЕсли;

КонецПроцедуры

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если ОбщийМодульСервер.ЯзыкПриложения() = Метаданные.Языки.Русский Тогда
       
ОбщийМодульСервер.ЛокализацияЗаголовковВСписке(ЭтаФорма);
    КонецЕсли;

КонецПроцедуры

2. Отчеты. Локализация отчетов предусматривает изменение заголовков стандартных действий и отборов СКД. К сожалению без решения остается локализация контекстного меню табличного документа.

 

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если ОбщийМодульСервер.ЯзыкПриложения() = Метаданные.Языки.Русский Тогда
       
ОбщийМодульСервер.ЛокализацияЗаголовковВОтчете(ЭтаФорма);
       
ОбщийМодульСервер.ЛокализацияЗаголовковОтбораСКД(ЭтаФорма);
    КонецЕсли;

КонецПроцедуры


Описание общего модуля ОбщийМодульСервер (Сервер, Вызов сервера):

&НаСервере
Процедура ЛокализацияЗаголовковВОбъекте(Форма, Объект) Экспорт

    Если ЯзыкПриложения() = Метаданные.Языки.Русский Тогда
        Возврат;
    КонецЕсли;

    ВидОбъектаМетаданных = ПолучитьВидОбъектаМетаданных(Объект.Ссылка);

    // Командная панель табличной части
    // Кнопки для всех объектов — документы и справочники
   
СтруктураКнопок = Новый Структура;
   
СтруктураКнопок.Вставить(«Записать»     , НСтр(«Ukr = ‘Записати'»));
   
СтруктураКнопок.Вставить(«Перечитать»   , НСтр(«Ukr = ‘Перечитати'»));
   
СтруктураКнопок.Вставить(«Скопировать»  , НСтр(«Ukr = ‘Скопіювати'»));
   
СтруктураКнопок.Вставить(«ИзменитьФорму», НСтр(«Ukr = ‘Змінити форму'»));
   
СтруктураКнопок.Вставить(«Справка»      , НСтр(«Ukr = ‘Довідка'»));
   
СтруктураКнопок.Вставить(«Удалить»      , НСтр(«Ukr = ‘Видалити'»));
   
СтруктураКнопок.Вставить(«УстановитьПометкуУдаления», НСтр(«Ukr = ‘Встановити помітку видаленя'»));

    // Кнопки документов
   
Если ВидОбъектаМетаданных = «Документ» Или ВидОбъектаМетаданных = Неопределено Тогда
       
СтруктураКнопок.Вставить(«Проведение»       , НСтр(«Ukr = ‘Проведення'»));
       
СтруктураКнопок.Вставить(«Провести»         , НСтр(«Ukr = ‘Провести'»));
       
СтруктураКнопок.Вставить(«ПровестиИЗакрыть» , НСтр(«Ukr = ‘Провести та закрити'»));
       
СтруктураКнопок.Вставить(«ОтменаПроведения» , НСтр(«Ukr = ‘Відміна проведення'»));
       
СтруктураКнопок.Вставить(«СоздатьНаОсновании», НСтр(«Ukr = ‘Створити на підставі'»));
    КонецЕсли;

    // Кнопки справочников
   
Если ВидОбъектаМетаданных = «Справочник» Или ВидОбъектаМетаданных = Неопределено Тогда
       
СтруктураКнопок.Вставить(«ЗаписатьИЗакрыть» , НСтр(«Ukr = ‘Записати та закрити'»));
    КонецЕсли;

    // Установка заголовков
   
Для Каждого Кнопка Из СтруктураКнопок Цикл
       
ЛокализацияЗаголовка(Форма.Элементы, «Форма»+Кнопка.Ключ, Кнопка.Значение);
    КонецЦикла;

КонецПроцедуры

&НаСервере
Процедура ЛокализацияЗаголовковТабличныхЧастей(Форма, ТабличнаяЧасть) Экспорт

    Если ЯзыкПриложения() = Метаданные.Языки.Русский Тогда
        Возврат;
    КонецЕсли;

    // Командная панель табличной части
   
СтруктураКнопок = Новый Структура;
   
СтруктураКнопок.Вставить(«Добавить»     ,НСтр(«Ukr = ‘Додати'»));
   
СтруктураКнопок.Вставить(«Скопировать»  ,НСтр(«Ukr = ‘Скопіювати'»));
   
СтруктураКнопок.Вставить(«Изменить»     ,НСтр(«Ukr = ‘Змінити'»));
   
СтруктураКнопок.Вставить(«Удалить»      ,НСтр(«Ukr = ‘Видалити'»));
   
СтруктураКнопок.Вставить(«Найти»        ,НСтр(«Ukr = ‘Знайти'»));
   
СтруктураКнопок.Вставить(«ОтменитьПоиск»,НСтр(«Ukr = ‘Відмінити пошук'»));
   
СтруктураКнопок.Вставить(«Переместить»  ,НСтр(«Ukr = ‘Перемістити'»)); //Группа
   
СтруктураКнопок.Вставить(«Сортировка»   ,НСтр(«Ukr = ‘Сортування'»)); // Группа
   
СтруктураКнопок.Вставить(«ВывестиСписок»,НСтр(«Ukr = ‘Вивести список…'»));
   
СтруктураКнопок.Вставить(«ПереместитьВниз»,НСтр(«Ukr = ‘Перемістити вниз'»));
   
СтруктураКнопок.Вставить(«ПереместитьВверх»,НСтр(«Ukr = ‘Перемістити вгору'»));
   
СтруктураКнопок.Вставить(«ЗакончитьРедактирование»,НСтр(«Ukr = ‘Закінчить редагування'»));
   
СтруктураКнопок.Вставить(«СортироватьСписокПоУбыванию»,НСтр(«Ukr = ‘Сортувати за зменшенням'»));
   
СтруктураКнопок.Вставить(«СортироватьСписокПоВозрастанию»,НСтр(«Ukr = ‘Сортувати за збільшенням'»));

    Для Каждого Кнопка Из СтруктураКнопок Цикл
       
ЛокализацияЗаголовка(Форма.Элементы, ТабличнаяЧасть.Имя+Кнопка.Ключ, Кнопка.Значение);
    КонецЦикла;

    // Контекстное меню табличной части
   
СтруктураКнопок = Новый Структура;
   
СтруктураКнопок.Вставить(«Добавить»     ,НСтр(«Ukr = ‘Додати'»));
   
СтруктураКнопок.Вставить(«Изменить»     ,НСтр(«Ukr = ‘Змінити'»));
   
СтруктураКнопок.Вставить(«ВыделитьВсе»  ,НСтр(«Ukr = ‘Копіювати все'»));
   
СтруктураКнопок.Вставить(«Переместить»  ,НСтр(«Ukr = ‘Перемістити'»)); //Группа
   
СтруктураКнопок.Вставить(«Скопировать»  ,НСтр(«Ukr = ‘Скопіювати'»));
   
СтруктураКнопок.Вставить(«Удалить»      ,НСтр(«Ukr = ‘Видалити'»));
   
СтруктураКнопок.Вставить(«ПереместитьВниз»,НСтр(«Ukr = ‘Перемістити вниз'»));
   
СтруктураКнопок.Вставить(«ПереместитьВверх»,НСтр(«Ukr = ‘Перемістити вгору'»));
   
СтруктураКнопок.Вставить(«КопированиеИВыделение»,НСтр(«Ukr = ‘Копіювання та видалення'»)); // Группа
   
СтруктураКнопок.Вставить(«КопироватьВБуферОбмена»,НСтр(«Ukr = ‘Копіювати в буфер обімну'»));

    Для Каждого Кнопка Из СтруктураКнопок Цикл
       
ЛокализацияЗаголовка(Форма.Элементы, ТабличнаяЧасть.Имя+«КонтекстноеМеню»+Кнопка.Ключ, Кнопка.Значение);
    КонецЦикла;

КонецПроцедуры

&НаСервере
Процедура ЛокализацияЗаголовка(Элементы, ИмяЭлемента, Заголовок) Экспорт

    ТекущийЭлемент = Элементы.Найти(ИмяЭлемента);
    Если Не
ТекущийЭлемент = Неопределено Тогда
       
ТекущийЭлемент.Заголовок = Заголовок;
        Если
ТипЗнч(Элементы.Найти(ИмяЭлемента)) = Тип(«ГруппаФормы») Тогда
           
ТекущийЭлемент.Подсказка = Заголовок;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

&НаСервере
Функция ПолучитьВидОбъектаМетаданных(Ссылка) Экспорт

    Перем ВидОбъектаМетаданных;

    ИмяОбъектаМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).Имя;

    Если Не Метаданные.Документы.Найти(ИмяОбъектаМетаданных) = Неопределено Тогда
       
ВидОбъектаМетаданных = «Документ»;
    ИначеЕсли Не
Метаданные.Справочники.Найти(ИмяОбъектаМетаданных) = Неопределено Тогда
       
ВидОбъектаМетаданных = «Справочник»;
    КонецЕсли;

    Возврат ВидОбъектаМетаданных;

КонецФункции

&НаСервере
Функция ЯзыкПриложения() Экспорт;

    ПользовательИнформационнойБазы = ПользователиИнформационнойБазы.ТекущийПользователь();

    Возврат ПользовательИнформационнойБазы.Язык;

КонецФункции


http://kostias.blogspot.com/2012/05/blog-post.html

2 Comments

  1. serg_gres

    Зачем у Вас так много всего — я не понял.

    Локализацию стандартных текстов можно установить при запуске 1С (например в ярлычке) через параметр «ln».

    Reply
  2. kostia.ck

    Надписи кнопок передаются с сервера а устанавливаются на клиенте.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *