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

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. Решить вопрос со связанной информацией (кнопочка перейти) - вообще подобным методом возможно?

 

 

См. также

SALE! 50%

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

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

70000 35000 руб.

30.11.2022    13417    20    24    

23

Зарплата Производство готовой продукции (работ, услуг) Учет рабочего времени Рабочее место Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 1С:Управление торговлей 10 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Торговля и склад 7.7 Бытовые услуги, сервис Оптовая торговля, дистрибуция, логистика Электротехника и микроэлектроника Управленческий учет Платные (руб)

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

14800 руб.

01.11.2012    93078    108    1    

116

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

Разработка “Пульт управления производством для 1С:УНФ” содержит цифровые инструменты и средства для производственного и технологического программного обеспечения автоматизации производства - подсистему Технологического контроля с АРМ Контролёра, Учет рекламации, АРМ Начальника производства, АРМ Рабочего цеха

36000 руб.

22.02.2022    17695    7    1    

20

SALE! 50%

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

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

70000 35000 руб.

08.12.2021    26159    21    73    

32

Печатные формы Взаиморасчеты Оптовая торговля Производство готовой продукции (работ, услуг) Акт сверки Бухгалтер Пользователь Оперативный учет Управляемые формы 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

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

14400 руб.

13.03.2018    59472    201    76    

120

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

Откройте для себя заполнение КС-2 и КС-3 в "1С:Бухгалтерия 3.0". Вы получаете удобство, скорость и систему, чтобы заполнить, распечатать и сохранить формы КС-2 и КС-3 из документов "Оказание производственных услуг" или "Реализация товаров услуг". Вы можете заполнить дополнительную информацию о материалах из документов "Требование-накладная" и указать сведения, которые не предусмотрены типовой конфигурацией "1С:Бухгалтерия 3.0". Так же доступно множество настроек для формирования КС-2 и КС-3.

3600 руб.

13.02.2019    94193    430    44    

412
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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С вставлял иероглифы? Реально интересно : полетит - не полетит ?..
10. sony_net 25.06.24 11:50 Сейчас в теме
Оставьте свое сообщение