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