gifts2017

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

Опубликовал Константин Пономаренко (kostia.ck) в раздел Программирование - Практика программирования

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

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

 

В рабочей базе существуют русскоязычные пользователи (восточный и южный регион) и украиноязычные (западный регион и тру украинцы). При украинизации текстов интерфейсов столкнулся с проблемою редактирования надписей на стандартных элементах интерфейсов форм (Записать и закрыть, сохранить, сформировать и т.д.). Нашел 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

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей Начина (serg_gres) 14.05.12 17:44
Зачем у Вас так много всего - я не понял.
Локализацию стандартных текстов можно установить при запуске 1С (например в ярлычке) через параметр "ln".
2. Константин Пономаренко (kostia.ck) 15.05.12 10:34
Надписи кнопок передаются с сервера а устанавливаются на клиенте.