You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2026-06-20 09:19:27 +02:00
354 lines
16 KiB
Plaintext
354 lines
16 KiB
Plaintext
#Использовать lyna
|
|
#Использовать "./internal"
|
|
|
|
Перем ТаблицаСловаря;
|
|
Перем КаталогОригинала;
|
|
Перем Lua;
|
|
Перем СимволыСВыравниванием;
|
|
|
|
Процедура ПриСозданииОбъекта(Знач ДанныеПроекта_ = Неопределено)
|
|
|
|
Если ДанныеПроекта_ = Неопределено Тогда
|
|
ДанныеПроекта = Новый ProjectData;
|
|
Иначе
|
|
ДанныеПроекта = ДанныеПроекта_;
|
|
КонецЕсли;
|
|
|
|
КаталогСловарей = ДанныеПроекта.ПолучитьЗначениеНастройки("paths.dictionariesSrc");
|
|
Корень = ДанныеПроекта.ПолучитьЗначениеНастройки("paths.root");
|
|
ОсновнойЯзык = ДанныеПроекта.ПолучитьЗначениеНастройки("localization.mainLang");
|
|
Языки = ДанныеПроекта.ПолучитьЗначениеНастройки("localization.langs");
|
|
ФайлыПеревода = ОпределитьНаборФайловПеревода(Корень + ОсновнойЯзык);
|
|
|
|
CommonTools.СообщитьПроцесс("Code base localization");
|
|
|
|
Lua = Новый Lua();
|
|
Lua.ВыполнитьБайтКодФайла("./ci/lua/translate_scanner.luac");
|
|
|
|
ТаблицаСловаря = Новый ТаблицаЗначений();
|
|
ТаблицаСловаря.Колонки.Добавить("Ключ");
|
|
ТаблицаСловаря.Колонки.Добавить("Значение");
|
|
ТаблицаСловаря.Колонки.Добавить("Длина");
|
|
ТаблицаСловаря.Колонки.Добавить("ИмяМодуля");
|
|
|
|
ПутьОригинала = Корень + ОсновнойЯзык;
|
|
КаталогОригинала = Новый Файл(ПутьОригинала);
|
|
КаталогОригинала = КаталогОригинала.ПолноеИмя;
|
|
|
|
Для Каждого Язык Из Языки Цикл
|
|
|
|
Если Язык = ОсновнойЯзык Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
|
|
СловарьИсключений = КаталогСловарей + Язык + "_post.json";
|
|
|
|
ПеревестиПоСловарю(КаталогСловарей, Язык, ФайлыПеревода, Корень);
|
|
ПроверитьПеревод(Корень + Язык + "/OInt", СловарьИсключений);
|
|
ПроверитьПеревод(Корень + Язык + "/cli", СловарьИсключений);
|
|
ПроверитьПеревод(Корень + Язык + "/BSL/Tests", СловарьИсключений);
|
|
ПроверитьПеревод(Корень + Язык + "/BSL/OpenIntegrations", СловарьИсключений);
|
|
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПеревестиПоСловарю(Знач КаталогСловарей, Знач Язык, Знач Файлы, Знач Корень);
|
|
|
|
ПутьПеревода = Корень + Язык;
|
|
ПутьСловаря = КаталогСловарей + Язык + ".json";
|
|
Словарь = Новый Файл(ПутьСловаря);
|
|
|
|
Если Не Словарь.Существует() Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
КаталогПриемник = Новый Файл(ПутьПеревода);
|
|
ПутьКСловарю = Словарь.ПолноеИмя;
|
|
Язык = Словарь.ИмяБезРасширения;
|
|
|
|
ПолучитьТаблицуСловаря(ПутьКСловарю);
|
|
|
|
СкопироватьФайлы(Файлы, КаталогПриемник);
|
|
|
|
ФайлыМодулей = НайтиФайлы(ПутьПеревода, "*", Истина);
|
|
|
|
Для Каждого ФайлМодуля Из ФайлыМодулей Цикл
|
|
|
|
Если ФайлМодуля.ЭтоКаталог()
|
|
Или ФайлМодуля.Имя = "packagedef"
|
|
Или СтрНайти(ФайлМодуля.Путь, "addins") <> 0
|
|
Или ФайлМодуля.Расширение = ".addin"
|
|
Или ФайлМодуля.Расширение = ".zip"
|
|
Или ФайлМодуля.Расширение = ".png"
|
|
Или СтрНайти(ФайлМодуля.ПолноеИмя, ".metadata") <> 0
|
|
Или СтрНайти(ФайлМодуля.ПолноеИмя, ".sonarlint") <> 0
|
|
Или СтрНайти(ФайлМодуля.ПолноеИмя, "TestIB") <> 0
|
|
Или СтрНайти(ФайлМодуля.ПолноеИмя, "YAXUNIT") <> 0 Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
|
|
ПеревестиМодуль(ФайлМодуля.ПолноеИмя);
|
|
|
|
КонецЦикла;
|
|
|
|
ПеревестиИменаФайлов(ФайлыМодулей);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПеревестиИменаФайлов(ВсеФайлыЛокализации)
|
|
|
|
ОтборИменМодулей = Новый Структура("ИмяМодуля", Истина);
|
|
СтрокиИмен = ТаблицаСловаря.НайтиСтроки(ОтборИменМодулей);
|
|
УдаляемыеКаталоги = Новый Массив;
|
|
|
|
Для Каждого ФайлЛокализации Из ВсеФайлыЛокализации Цикл
|
|
|
|
Если Не ФайлЛокализации.ЭтоКаталог() Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
|
|
ТекущийПуть = ФайлЛокализации.ПолноеИмя;
|
|
НовыйПуть = ТекущийПуть;
|
|
|
|
Для Каждого Имя Из СтрокиИмен Цикл
|
|
НовыйПуть = СтрЗаменить(НовыйПуть, Имя.Ключ, Имя.Значение);
|
|
КонецЦикла;
|
|
|
|
ФайлНовогоПути = Новый Файл(НовыйПуть);
|
|
|
|
Если Не ФайлНовогоПути.Существует() Тогда
|
|
УдаляемыеКаталоги.Добавить(ТекущийПуть);
|
|
|
|
СоздатьКаталог(НовыйПуть);
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
Для Каждого ФайлЛокализации Из ВсеФайлыЛокализации Цикл
|
|
|
|
Если ФайлЛокализации.ЭтоКаталог() Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
|
|
ТекущийПуть = ФайлЛокализации.ПолноеИмя;
|
|
НовыйПуть = ТекущийПуть;
|
|
|
|
Для Каждого Имя Из СтрокиИмен Цикл
|
|
НовыйПуть = СтрЗаменить(НовыйПуть, Имя.Ключ, Имя.Значение);
|
|
КонецЦикла;
|
|
|
|
ФайлНовогоПути = Новый Файл(НовыйПуть);
|
|
|
|
Если Не ФайлНовогоПути.Существует() Тогда
|
|
ПереместитьФайл(ТекущийПуть, НовыйПуть);
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
Для Каждого Каталог Из УдаляемыеКаталоги Цикл
|
|
|
|
Попытка
|
|
УдалитьФайлы(Каталог);
|
|
Исключение КонецПопытки;
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПеревестиМодуль(ПутьКМодулю)
|
|
|
|
ДокументМодуля = Новый ТекстовыйДокумент();
|
|
ДокументМодуля.Прочитать(ПутьКМодулю, "UTF-8");
|
|
|
|
Для Н = 1 По ДокументМодуля.КоличествоСтрок() Цикл
|
|
|
|
ТекущаяСтрока = СокрЛП(ДокументМодуля.ПолучитьСтроку(Н));
|
|
|
|
Если Не ЗначениеЗаполнено(ТекущаяСтрока) Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
|
|
Если Не СтрНачинаетсяС(ТекущаяСтрока, "|") Тогда
|
|
МассивПодстрок = СтрРазделить(ТекущаяСтрока, """", Истина);
|
|
|
|
Для М = 0 По МассивПодстрок.ВГраница() Цикл
|
|
|
|
Если М % 2 = 0 Тогда
|
|
Пока СтрНайти(МассивПодстрок[М], " ") <> 0 Цикл
|
|
МассивПодстрок[М] = СтрЗаменить(МассивПодстрок[М], " ", " ");
|
|
КонецЦикла;
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
ТекущаяСтрока = СтрСоединить(МассивПодстрок, """");
|
|
КонецЕсли;
|
|
|
|
ВыводимаяСтрока = СтрЗаменить(ДокументМодуля.ПолучитьСтроку(Н), СокрЛП(ДокументМодуля.ПолучитьСтроку(Н)), ТекущаяСтрока);
|
|
ДокументМодуля.ЗаменитьСтроку(Н, ВыводимаяСтрока);
|
|
|
|
КонецЦикла;
|
|
|
|
ТекстМодуля = ДокументМодуля.ПолучитьТекст();
|
|
|
|
Для Каждого Элемент Из ТаблицаСловаря Цикл
|
|
ТекстМодуля = СтрЗаменить(ТекстМодуля, Элемент.Ключ, Элемент.Значение);
|
|
КонецЦикла;
|
|
|
|
ОбработатьНесовпаденияOneScript(ТекстМодуля, ПутьКМодулю);
|
|
|
|
CommonTools.ЗаписатьТекст(ТекстМодуля, ПутьКМодулю);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПолучитьТаблицуСловаря(ПутьКСловарю)
|
|
|
|
ТаблицаСловаря.Очистить();
|
|
|
|
ЧтениеJSON = Новый ЧтениеJSON();
|
|
ЧтениеJSON.ОткрытьФайл(ПутьКСловарю);
|
|
ДанныеСловаря = ПрочитатьJSON(ЧтениеJSON, Истина);
|
|
ЧтениеJSON.Закрыть();
|
|
|
|
Для Каждого Элемент Из ДанныеСловаря Цикл
|
|
|
|
НоваяСтрокаСловаря = ТаблицаСловаря.Добавить();
|
|
НоваяСтрокаСловаря.Ключ = Элемент.Ключ;
|
|
НоваяСтрокаСловаря.Значение = Элемент.Значение;
|
|
НоваяСтрокаСловаря.Длина = СтрДлина(Элемент.Ключ);
|
|
НоваяСтрокаСловаря.ИмяМодуля = СтрНайти(Элемент.Ключ, "OPI_") <> 0
|
|
Или СтрНачинаетсяС(Элемент.Ключ, "Форма")
|
|
Или Элемент.Ключ = "ОбъектКлиентскогоВызова";
|
|
|
|
КонецЦикла;
|
|
|
|
ТаблицаСловаря.Сортировать("Длина УБЫВ");
|
|
|
|
ПутьКСловарюКлючевыхСлов = "./service/dictionaries/en_post.json";
|
|
ЧтениеJSON = Новый ЧтениеJSON();
|
|
ЧтениеJSON.ОткрытьФайл(ПутьКСловарюКлючевыхСлов);
|
|
СоответствиеКС = ПрочитатьJSON(ЧтениеJSON, Истина);
|
|
ЧтениеJSON.Закрыть();
|
|
|
|
Для Каждого КлючевоеСлово Из СоответствиеКС Цикл
|
|
НоваяСтрокаСловаря = ТаблицаСловаря.Добавить();
|
|
НоваяСтрокаСловаря.Ключ = КлючевоеСлово.Ключ;
|
|
НоваяСтрокаСловаря.Значение = КлючевоеСлово.Значение;
|
|
НоваяСтрокаСловаря.Длина = СтрДлина(КлючевоеСлово.Ключ);
|
|
НоваяСтрокаСловаря.ИмяМодуля = Ложь;
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура СкопироватьФайлы(Знач МассивФайлов, Знач КаталогПриемник)
|
|
|
|
ПутьПриемник = КаталогПриемник.ПолноеИмя;
|
|
|
|
Если КаталогПриемник.Существует() Тогда
|
|
УдалитьФайлы(ПутьПриемник);
|
|
КонецЕсли;
|
|
|
|
СоздатьКаталог(ПутьПриемник);
|
|
|
|
Для Каждого Файл Из МассивФайлов Цикл
|
|
Если Файл.ЭтоКаталог() Тогда
|
|
|
|
ПолноеИмяИсточник = Файл.ПолноеИмя;
|
|
ПолноеИмяПриемник = ПутьПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогОригинала, "");
|
|
|
|
СоздатьКаталог(ПолноеИмяПриемник);
|
|
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
Для Каждого Файл Из МассивФайлов Цикл
|
|
Если Не Файл.ЭтоКаталог() Тогда
|
|
|
|
ПолноеИмяИсточник = Файл.ПолноеИмя;
|
|
ПолноеИмяПриемник = ПутьПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогОригинала, "");
|
|
|
|
КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
|
|
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ОбработатьНесовпаденияOneScript(ТекстМодуля, ПутьКМодулю)
|
|
|
|
СоответствиеОшибок = Новый Соответствие();
|
|
СоответствиеОшибок.Вставить("FileCopy" , "CopyFile"); // Вопрос разных имен в 8.15 и более новых версиях
|
|
СоответствиеОшибок.Вставить("WeekDay" , "DayOfWeek"); // Не исправлено
|
|
СоответствиеОшибок.Вставить("ThisObject" , "ЭтотОбъект");
|
|
СоответствиеОшибок.Вставить("MakeCopyFile" , "MakeFileCopy");
|
|
СоответствиеОшибок.Вставить("StrStartWith" , "StrStartsWith");
|
|
|
|
ФайлМодуля = Новый Файл(ПутьКМодулю);
|
|
|
|
Если СтрНайти(ФайлМодуля.Имя, ".os") <> 0 Тогда
|
|
Для Каждого Ошибка Из СоответствиеОшибок Цикл
|
|
ТекстМодуля = СтрЗаменить(ТекстМодуля, Ошибка.Ключ, Ошибка.Значение);
|
|
КонецЦикла;
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПроверитьПеревод(Знач Путь, Знач СловарьИсключений)
|
|
|
|
МассивРасширений = Новый Массив;
|
|
МассивРасширений.Добавить("os");
|
|
МассивРасширений.Добавить("bsl");
|
|
МассивРасширений.Добавить("mdo");
|
|
МассивРасширений.Добавить("xml");
|
|
|
|
МассивАргументов = Новый Массив;
|
|
МассивАргументов.Добавить(Путь);
|
|
МассивАргументов.Добавить(МассивРасширений);
|
|
МассивАргументов.Добавить(СловарьИсключений);
|
|
|
|
Результат = Lua.ВызватьФункцию("scan_directory_for_cyrillic", МассивАргументов);
|
|
|
|
Счетчик = 0;
|
|
Для Каждого ОшибкаПеревода Из Результат Цикл
|
|
|
|
Если СтрНайти(ОшибкаПеревода.Значение, "Module.ОжидаетЧто(Value)") > 0 Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
|
|
Сообщить(СтрШаблон("
|
|
| Ошибка перевода!
|
|
| Файл: %1
|
|
| Строка: %2
|
|
|", ОшибкаПеревода.Ключ, ОшибкаПеревода.Значение));
|
|
|
|
Счетчик = Счетчик + 1;
|
|
|
|
КонецЦикла;
|
|
|
|
Если Счетчик > 0 Тогда
|
|
ВызватьИсключение "Перевод не выполнен!"
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция ОпределитьНаборФайловПеревода(Знач ОсновнойПутьИсходников)
|
|
|
|
// Наборы файлов
|
|
ВсеФайлы = НайтиФайлы(ОсновнойПутьИсходников, "*", Истина);
|
|
МассивФайлов = Новый Массив;
|
|
|
|
Для Каждого ФайлПроекта Из ВсеФайлы Цикл
|
|
|
|
Признак = СтрНайти(ФайлПроекта.ПолноеИмя, "index") = 0;
|
|
|
|
Если Признак Тогда
|
|
МассивФайлов.Добавить(ФайлПроекта);
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
Возврат МассивФайлов;
|
|
|
|
КонецФункции
|
|
|
|
//ПриСозданииОбъекта(); |