Переводчик конфигурации (диалоговые формы)

13.09.12

Учетные задачи - Производство готовой продукции (работ, услуг)

Попытки перевести типовую конфигурацию малой кровью. По возможности с сохранением поддержки.

Собственно получил задачу: перевести типовую УТ на КИТАЙСКИЙ (английский). Собственно - результат работы - то что получилось ниже. В файлах ничего выкладывать не буду - если кому интересно перевести конфу на английский - дочитает до конца.

Коротко - алгоритм такой: ПриОткрытии() - перебирать все реквизиты Формы и подставлять значения ПЕРЕВЕДЁННЫЕ.

Еще что стоит отметить - не пинайте сильно - таки первая публикация.

 

Итак: Общий модуль ПереводАнгл:

Функция УстановитьНадписиФормыАнгл(ДокументОбъект="", ФормаДокумента) Экспорт 	
	Если ПараметрыСеанса.ТекущийПользователь.Язык =0 тогда // естественно флаг язык - в спр.пользователи 
		Возврат Истина 	
	КонецЕсли;
	Попытка
		ФормаДокумента.Заголовок=ПереводАнгл.ПереводимЭлемент(ФормаДокумента.Заголовок);
	Исключение
	КонецПопытки;
	Попытка
		Для каждого элемент из ФормаДокумента.ЭлементыФормы цикл 			
			Если СокрЛП(Элемент)="Надпись" тогда
				Элемент.Заголовок=ПереводАнгл.ПереводимЭлемент(Элемент.Заголовок);
			КонецЕсли;
			Если СокрЛП(Элемент)="РамкаГруппы" тогда 
				Элемент.Заголовок=ПереводАнгл.ПереводимЭлемент(Элемент.Заголовок);
			КонецЕсли;
			Если СокрЛП(Элемент)="Кнопка" тогда 	
				ЧтоПолучилось = Элемент.Заголовок;
				ЧтоПолучилось = ПереводАнгл.ПереводимЭлемент(Элемент.Заголовок);
				Элемент.Заголовок = ЧтоПолучилось;
			КонецЕсли;
			Если СокрЛП(Элемент)="КоманднаяПанель" тогда 	
				Для Каждого Кнопка из Элемент.Кнопки Цикл 	
					ЧтоПолучилось = Кнопка.Текст;
					ЧтоПолучилось = ПереводАнгл.ПереводимЭлемент(Кнопка.Текст);
					Кнопка.Подсказка = ЧтоПолучилось;
					Кнопка.Пояснение = ЧтоПолучилось;
					Кнопка.Текст = ЧтоПолучилось;
					Для Каждого Кнопа из Кнопка.Кнопки Цикл 
						ЧтоПолучилось = Кнопа.Текст;
						ЧтоПолучилось = ПереводАнгл.ПереводимЭлемент(Кнопа.Текст);
						Кнопа.Подсказка = ЧтоПолучилось;
						Кнопа.Пояснение = ЧтоПолучилось;
						Кнопа.Текст = ЧтоПолучилось;
					КонецЦИкла;
				КонецЦикла;
			КонецЕсли;
			Если СокрЛП(Элемент)="Панель" тогда 
				Для Каждого страница из Элемент.Страницы Цикл 
					страница.Заголовок = ПереводАнгл.ПереводимЭлемент(страница.Заголовок);
				КонецЦикла;
			ИначеЕсли СокрЛП(Элемент)="ТабличноеПоле" тогда 
				Для каждого колонка из Элемент.Колонки цикл 	
					Колонка.ТекстШапки = ПереводАнгл.ПереводимЭлемент(Колонка.ТекстШапки);
				КонецЦикла;
			ИначеЕсли СОкрЛП(Элемент)="Флажок" тогда 		
				Элемент.Заголовок = ПереводАнгл.ПереводимЭлемент(Элемент.Заголовок);
			КонецЕсли;
		КонецЦикла;
	Исключение
	КонецПопытки;
	Попытка
		Для Каждого КолонкаСправочника из ФормаДокумента.ЭлементыФормы.СправочникСписок.Колонки Цикл
			КолонкаСправочника.ТекстШапки = ПереводАнгл.ПереводимЭлемент(КолонкаСправочника.ТекстШапки);
		КонецЦикла;
	Исключение
	КонецПопытки;
	Попытка
		Для Каждого панель из ФормаДокумента.ЭлементыФормы.ПанельФормы.Страницы Цикл
			панель.Заголовок = ПереводАнгл.ПереводимЭлемент(панель.Заголовок);
		КонецЦикла;
	Исключение 
	КонецПопытки;
	Попытка
		Для каждого кнопка из ФормаДокумента.ЭлементыФормы.ДействияФормы.Кнопки Цикл
			кнопка.Текст=ПереводАнгл.ПереводимЭлемент(кнопка.Текст);
			Если Лев(кнопка.Имя,8)="Действие" тогда
				ЧтоПолучилось=кнопка.Текст;
				ЧтоПолучилось = ПереводАнгл.ПереводимЭлемент(кнопка.Текст);
				кнопка.Текст=ЧтоПолучилось;
				кнопка.Пояснение=ЧтоПолучилось;
			КонецЕсли;
		КонецЦикла;
	Исключение
	КонецПопытки;
	Попытка
		Для каждого кнопка из ФормаДокумента.ЭлементыФормы.ОсновныеДействияФормы.Кнопки Цикл
			Если Лев(кнопка.Имя,8)="Действие" тогда 
				кнопка.Текст=ПереводАнгл.ПереводимЭлемент(кнопка.Текст);
			КонецЕсли;
		КонецЦикла;
	Исключение
	КонецПопытки;
	Попытка
		Для каждого колонка из ФормаДокумента.ЭлементыФормы.ДокументСписок.Колонки Цикл
			Колонка.ТекстШапки = ПереводАнгл.ПереводимЭлемент(Колонка.ТекстШапки); 
		КонецЦИкла;
	Исключение
	КонецПопытки;
	Возврат истина;
КонецФункции 

//В СИСТЕМЕ ДОЛЖЕН БЫТЬ СПРАВОЧНИК ПЕРЕВОД, ГДЕ НАИМЕНОВАНИЕ - ЧТО НУЖНО ПЕРЕВЕСТИ, 
//А СТРОКОВЫЙ РЕКВИЗИТ АнглПеревод В НЕМ - ПЕРЕВОД. 
Функция ПереводимЭлемент(Объект) Экспорт 
	Результат = Объект;
	Если Объект="" тогда
	Иначе
		ССылкаЗаголовка=(Справочники.Перевод.НайтиПоНаименованию(Лев(СОкрЛП(Объект),100))) ;
		Если ССылкаЗаголовка = Справочники.Перевод.ПустаяСсылка() тогда
			Если (ПараметрыСеанса.ТекущийПользователь.ВводитПеревод =1) и //ФЛАГ ЧТО ТЕКУЩИЙ ПОЛЬЗОВАТЕЛЬ - ПЕРЕВОДЧИК
				((Число(КодСимвола(Объект))>100)) тогда//ПОПЫТКА ВЫКИНУТЬ АНГЛИЙСКИЕ НАДПИСИ (И СПЕЦСИМВОЛЫ) 
				//ДАБЫ ИХ НЕ ПЕРЕВОДИТЬ
				Сообщить(СОкрЛП(Объект)); //ДЛЯ СПИСКА ЧТО НУЖНО ПЕРЕВОДИТЬ.
			КонецЕсли;
		Иначе
			Результат = ССылкаЗаголовка.АнглПеревод;
		КонецЕсли;
	КонецЕсли;
	Возврат Результат;
КонецФункции 

//ПОПЫТКА ЧЕРЕЗ СПРАВОЧНИК ПЕРЕВОД - ПЕРЕВЕСТИ ИНТЕРАКТИВНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ 
Функция АнглВопрос(перем1="",перем2="",перем3="",перем4="",перем5="",перем6="") Экспорт
	Если ПараметрыСеанса.ТекущийПользователь.Язык = 0 тогда
		Если перем3=""тогда
			результат = Вопрос(перем1,перем2)
		ИначеЕсли перем4 = "" тогда
			результат = Вопрос(перем1,перем2,перем3);
		ИначеЕсли перем5 = "" тогда
			результат = Вопрос(перем1,перем2,перем3,перем4);
		ИначеЕсли перем6 = "" тогда
			результат = Вопрос(перем1,перем2,перем3,перем4,перем5);
		Иначе
			результат = Вопрос(перем1,перем2,перем3,перем4,перем5,перем6);
		КонецЕсли;
	Иначе
		ТекстВОпроса=ПереводАнгл.ПереводимЭлемент(перем1);
		Если перем3="" тогда
			результат = Вопрос(ТекстВОпроса,перем2)
		ИначеЕсли перем4 = "" тогда
			результат = Вопрос(ТекстВОпроса,перем2,перем3);
		ИначеЕсли перем5 = "" тогда
			результат = Вопрос(ТекстВОпроса,перем2,перем3,перем4);
		ИначеЕсли перем6 = "" тогда
			результат = Вопрос(ТекстВОпроса,перем2,перем3,перем4,перем5);
		Иначе
			результат = Вопрос(ТекстВОпроса,перем2,перем3,перем4,перем5,перем6);
		КонецЕсли;
	КонецЕсли;
	ВОзврат результат;
КонецФункции 

Функция АнглСообщить(перем1="",перем2="") Экспорт 	результат="";
	Если ПараметрыСеанса.ТекущийПользователь.Язык = 0 тогда
		Если перем2="" тогда
			Сообщить(Перем1);
		Иначе
			Сообщить(Перем1,Перем2);
		КонецЕсли;
	Иначе
		ТекстСообщения=ПереводАнгл.ПереводимЭлемент(Перем1);
		Если перем2=""тогда
			Сообщить(ТекстСообщения);
		Иначе
			Сообщить(ТекстСообщения,Перем2);
		КонецЕсли;
	КонецЕсли;
	ВОзврат результат;
КонецФункции

Функция АнглПредупреждение(перем1="",перем2="",перем3="") Экспорт
	результат="";
	Если ПараметрыСеанса.ТекущийПользователь.Язык = 0 тогда
		Если перем2=""тогда
			Предупреждение(Перем1);
		ИначеЕсли перем3="" тогда
			Предупреждение(Перем1,Перем2);
		Иначе
			Предупреждение(Перем1,Перем2,Перем3);
		КонецЕсли;
	Иначе
		ТекстСообщения=ПереводАнгл.ПереводимЭлемент(Перем1);
		Если перем2="" тогда
			Предупреждение(ТекстСообщения);
		ИначеЕсли перем3="" тогда
			Предупреждение(ТекстСообщения,Перем2);
		Иначе
			Предупреждение(ТекстСообщения,Перем2,Перем3);
		КонецЕсли;
	КонецЕсли;
	ВОзврат результат;
КонецФункции

 

И собственно самое интересное:

ДЛЯ ПЕРЕВОДА ФОРМЫ (ЛЮБОЙ): 

В ПриОткрытии() необходимых для перевода форм дописать:

ПереводАнгл.УстановитьНадписиФормыАнгл(, ЭтаФорма);

ДЛЯ ПЕРЕВОДА СООБЩЕНИЙ, ПРЕДУПРЕЖДЕНИЙ, ВОПРОСОВ:

НУЖНО ПО КОНФИГУРАЦИИ СДЕЛАТЬ ГЛОБАЛЬНУЮ ЗАМЕНУ:

Сообщить("    на    ПереводАнгл.АнглСообщить("

Вопрос("    на    ПереводАнгл.АнглВопрос("

Предупреждение("    на   ПереводАнгл.АнглПредупреждение("

По факту в одной из конфигураций пришлось допилить функцию ЧтототамВОПРОС() по факту замены.

А далее - вручаем  ключи от перевода (флаги Язык и ВводитПеревод)- пользователю 1С и кратко инструктируем.

Собственно все.

Не нужно писать про ОбновлениеОтображения() - Действительно не вписывается в "перевести в конфигурацию за пол часа." Вообще типовые это что-то.

 

Если кто дочитал до конца, и есть мысли по поводу - есть пара вопросов.

1. Хочу научить конфу не английскому, а китайскому. Подскажите что нить по вопросу кодировок. (хочу в диалоговую форму

вставить иероглиф).

2. Решить вопрос со связанной информацией (кнопочка перейти) - вообще подобным методом возможно?

 

 

См. также

Обмен с системой Меркурий через Web + Ветис.API для любых конфигураций (универсальная конфигурация Хамелеон Меркурий)

Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Обмен с ГосИС Платформа 1С v8.3 Конфигурации 1cv8 Сельское хозяйство и рыболовство Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Пищевая промышленность Россия Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная конфигурация Хамелеон Меркурий для взаимодействия с системой Меркурий(тестовый+рабочий+демо контур) может использоваться для интеграции в любую конфигурацию на базе 1С, версии ПРОФ и выше. Основное отличие от других решений - работа через веб-интерфейс и API 2.0(API 2.1). Для удобства реализован общий интерфейс в виде обработки, схожей с интерфейсом Меркурий, но возможностей гораздо больше, т.к. при интеграции в Вашу учетную систему, можно на основании Ваших справочников и документов, создавать соответствующие документы и справочники в системе Меркурий и наоборот.

104000 руб.

08.11.2017    120858    296    138    

392

АРМ Начальника производства и АРМ Рабочего цеха для 1С:УНФ. Цифровое производство малого и среднего бизнеса

Рабочее место Производство готовой продукции (работ, услуг) Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Управленческий учет Платные (руб)

Расширение для 1С:УНФ с комплектом из двух АРМ: «АРМ для начальника производства» и «АРМ для рабочего цеха». «АРМ Начальника производства» позволяет анализировать общую картину состояния заказов покупателей и наличие конечных комплектующих и сырья для производства заказанной продукции. Есть возможность направлять заказы в производственную работу (в случае, если заказанную продукцию нужно произвести), резервировать и отгружать готовую продукцию. «АРМ рабочего цеха» позволяет обычным работникам оперативно закрывать производственные задания (оформлять документы выпуска) сразу в программе 1С.

14400 руб.

15.09.2017    48931    79    41    

85

SALE! 50%

Отчет "Полный анализ себестоимости реализованной продукции" для 1С:ERP (ЕРП), 1С:КА, 1С:ERP УХ

Производство готовой продукции (работ, услуг) Учет доходов и расходов Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Бухгалтерский учет Налоговый учет Платные (руб)

Данный отчет показывает себестоимость реализованной продукции в разузлованном виде, как с выделением входящих в нее полуфабрикатов любых уровней, так и свернутый до статей затрат и материалов, видов работ. Отчет работает независимо от метода оценки стоимости товаров и подходит для любых производственных компаний с многопередельным производством. Отчет можно использовать как в типовой 1С:ERP, так и в отраслевых решениях на ее базе (например, 1С:ERP Управление птицеводческим предприятием, Молокозавод и т.д.).Отчет подходит для анализа затрат на гособоронзаказы ГОЗ.

70000 35000 руб.

30.11.2022    11389    10    22    

15

SALE! 50%

Отчет "Полный анализ себестоимости выпущенной продукции" для 1С:ERP (ЕРП), 1С:КА, 1С:ERP УХ

Производство готовой продукции (работ, услуг) Учет доходов и расходов Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Бухгалтерский учет Управленческий учет Платные (руб)

Данный отчет показывает себестоимость выпущенной продукции с разузлованием полуфабрикатов любых уровней, входящих в ее состав, до статей затрат и материалов. Отчет работает независимо от метода оценки стоимости товаров и подходит для любых производственных компаний с многопередельным производством. Отчет можно использовать как в типовой 1С:ERP, так и в отраслевых решениях на ее базе (например, 1С:ERP Управление птицеводческим предприятием и т.д.). Отчет подходит для анализа затрат на гособоронзаказы ГОЗ.

70000 35000 руб.

08.12.2021    23749    16    72    

23
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Serj1C 483 11.09.12 07:18 Сейчас в теме
Что-то подобное (с перебором элементов на форме) делал в своей http://infostart.ru/public/123258/
Изначально тоже хотел перевести на болгарский, например, но потом решил остановиться на транслитерации.
Rad90210; +1 Ответить
2. Rad90210 13 11.09.12 21:22 Сейчас в теме
Как бы на модуль глянуть? можно на gala1442@gmail.com ?
Вообще, хочу на базе идеи, сделать конечный продукт. Очень хочу китайский ... Только блин кодировки...
3. www2000 58 12.09.12 11:09 Сейчас в теме
Можете использовать следующую бесплатную разукрашку
Rad90210; +1 Ответить
4. kostia.ck 61 13.09.12 16:18 Сейчас в теме
Да, идея неплохая, автору плюс.
Хочется только чтобы выборка значений справочника перевода вызывалась один раз - перебор элементов формы проходит быстрее чем поиск нужного справочника.

P.S. При большой загруженности сервера 1С (китайцев много) форма будет тупить при открытии что будет наводить тоску на конечных пользователей. Правильнее будет править синонимы на нужном языке. Отличный способ описывается в статье Редактирование текстов интерфейса … - быстро и обходится малой кровью. Переведутся все кроме стандартных текстов. Пример перевода стандартных текстов можно посмотреть в статье Локализация стандартных текстов интерфейсов.
Rad90210; +1 Ответить
8. Rad90210 13 20.09.12 18:02 Сейчас в теме
(4) kostia.ck, ***Хочется только чтобы выборка значений справочника перевода вызывалась один раз*** - как показывает практика - перевод нужен больше для того чтобы он БЫЛ. И теоретически пользователь англоязычный мог бы зайти и ВСЕ очень быстро ПРОВЕРИТЬ. На практике - если туда кто-то и заходит - то 1 раз в пол года, и то случайно. Приехать в другую страну, и там работать? Достаточно того, что теоретически возможность проверить работу местных сотрудников есть - этого оказалось достаточно.
Да, действительно, можно и кешировать необходимое в временной тз, для ускорения работы.
Как только станет вопрос в необходимости - этим без проблем займусь. Но судя по сказанному выше - вероятно это никому не нужно )).
Кстати - для отчетов, основанных на УниверсальномОтчете - перевести заголовки - дело тоже 5 минут. Причем используя тот же алгоритм.
А по надписям на кнопках, особенно програмно генерируемых - так у меня - вообще самый красивый вариант ))
5. AlexO 135 13.09.12 16:27 Сейчас в теме
Сергей Радченко - родственник Максима Радченко?
6. Rad90210 13 16.09.12 23:09 Сейчас в теме
(5) AlexO, Не. Однофамильцы.
7. babnik1990 20.09.12 15:18 Сейчас в теме
Добрый день! Нужна Ваша помощь, мне нужно перевести конфу Документооборот на английский, хотелось бы посоветоваться. Очень буду благодарен если свяжитесь со мной (babiy_m_v@mail.ru), нужна помощь.
9. Rad90210 13 20.09.12 18:03 Сейчас в теме
Ребят, есть реально кто-нить который в 1С вставлял иероглифы? Реально интересно : полетит - не полетит ?..
Оставьте свое сообщение