1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-23 02:06:12 +02:00
OpenIntegrations/.github/workflows/os/opi_translate.os

252 lines
12 KiB
Plaintext
Raw Normal View History

2024-05-31 21:19:13 +02:00
Перем ТаблицаСловаря;
Перем СоответствиеИсключаемых;
2024-05-31 21:19:13 +02:00
Процедура ПриСозданииОбъекта()
2024-06-01 16:05:17 +02:00
Сообщить("Начало создания локализации...");
2024-05-31 21:19:13 +02:00
КаталогСловарей = "./service/dictionaries";
ФайлыСловарей = НайтиФайлы(КаталогСловарей, "*.json");
СоответствиеИсключаемых = Новый Соответствие();
СоответствиеИсключаемых.Вставить("packagedef", Истина);
2024-05-31 21:19:13 +02:00
ТаблицаСловаря = Новый ТаблицаЗначений();
ТаблицаСловаря.Колонки.Добавить("Ключ");
ТаблицаСловаря.Колонки.Добавить("Значение");
ТаблицаСловаря.Колонки.Добавить("Длина");
ТаблицаСловаря.Колонки.Добавить("ИмяМодуля");
Для Каждого Словарь Из ФайлыСловарей Цикл
2024-06-03 07:56:33 +02:00
Если СтрНайти(Словарь.ИмяБезРасширения, "_") <> 0 Тогда
Продолжить;
КонецЕсли;
2024-05-31 21:19:13 +02:00
СоздатьЛокализацию(Словарь);
КонецЦикла;
КонецПроцедуры
Процедура СоздатьЛокализацию(Знач Словарь)
ПутьКСловарю = Словарь.ПолноеИмя;
Язык = Словарь.ИмяБезРасширения;
2024-06-01 16:05:17 +02:00
Сообщить("Создание локализации " + Язык);
2024-05-31 21:19:13 +02:00
ПолучитьТаблицуСловаря(ПутьКСловарю);
2024-06-01 16:20:39 +02:00
КаталогИсточник = Новый Файл("./src/ru");
КаталогПриемник = Новый Файл("./src/" + Язык + "");
2024-05-31 21:19:13 +02:00
Если КаталогПриемник.Существует() Тогда
УдалитьФайлы(КаталогПриемник.ПолноеИмя);
КонецЕсли;
2024-06-01 16:15:06 +02:00
Сообщить("Копирование Начало");
СкопироватьФайлы(КаталогИсточник.ПолноеИмя, КаталогПриемник.ПолноеИмя);
2024-06-01 16:15:06 +02:00
Сообщить("Копирование Окончание");
Сообщить("Поиск модулей");
2024-06-01 16:20:39 +02:00
ФайлыМодулей = НайтиФайлы("./src/" + Язык + "/", "*", Истина);
2024-06-01 16:15:06 +02:00
Сообщить("Найдено модулей: " + Строка(ФайлыМодулей.Количество()));
2024-05-31 21:19:13 +02:00
Для Каждого ФайлМодуля Из ФайлыМодулей Цикл
Если ФайлМодуля.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
2024-06-01 16:05:17 +02:00
Сообщить("Перевод модуля " + ФайлМодуля.Имя);
2024-05-31 21:19:13 +02:00
ПеревестиМодуль(ФайлМодуля.ПолноеИмя);
КонецЦикла;
2024-06-01 16:20:39 +02:00
ВсеФайлыЛокализации = НайтиФайлы("./src/" + Язык, "*", Истина);
2024-05-31 21:19:13 +02:00
ОтборИменМодулей = Новый Структура("ИмяМодуля", Истина);
СтрокиИмен = ТаблицаСловаря.НайтиСтроки(ОтборИменМодулей);
УдаляемыеКаталоги = Новый Массив;
Для Каждого ФайлЛокализации Из ВсеФайлыЛокализации Цикл
Если Не ФайлЛокализации.ЭтоКаталог() Или СоответствиеИсключаемых[ФайлЛокализации.Имя] <> Неопределено Тогда
2024-05-31 21:19:13 +02:00
Продолжить;
КонецЕсли;
ТекущийПуть = ФайлЛокализации.ПолноеИмя;
НовыйПуть = ТекущийПуть;
Для Каждого Имя Из СтрокиИмен Цикл
НовыйПуть = СтрЗаменить(НовыйПуть, Имя.Ключ, Имя.Значение);
КонецЦикла;
ФайлНовогоПути = Новый Файл(НовыйПуть);
Если Не ФайлНовогоПути.Существует() Тогда
УдаляемыеКаталоги.Добавить(ТекущийПуть);
СоздатьКаталог(НовыйПуть);
КонецЕсли;
КонецЦикла;
2024-05-31 21:19:13 +02:00
Для Каждого ФайлЛокализации Из ВсеФайлыЛокализации Цикл
Если ФайлЛокализации.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
ТекущийПуть = ФайлЛокализации.ПолноеИмя;
НовыйПуть = ТекущийПуть;
Для Каждого Имя Из СтрокиИмен Цикл
НовыйПуть = СтрЗаменить(НовыйПуть, Имя.Ключ, Имя.Значение);
КонецЦикла;
ФайлНовогоПути = Новый Файл(НовыйПуть);
Если Не ФайлНовогоПути.Существует() Тогда
ПереместитьФайл(ТекущийПуть, НовыйПуть);
КонецЕсли;
КонецЦикла;
Для Каждого Каталог Из УдаляемыеКаталоги Цикл
УдалитьФайлы(Каталог);
КонецЦикла;
КонецПроцедуры
Процедура ПеревестиМодуль(ПутьКМодулю)
2024-06-01 15:34:09 +02:00
Если СтрНайти(ПутьКМодулю, "packagedef") <> 0 Тогда
Возврат;
КонецЕсли;
2024-06-01 15:43:52 +02:00
2024-05-31 21:19:13 +02:00
ДокументМодуля = Новый ТекстовыйДокумент();
ДокументМодуля.Прочитать(ПутьКМодулю, "UTF-8");
Для Н = 1 По ДокументМодуля.КоличествоСтрок() Цикл
ТекущаяСтрока = СокрЛП(ДокументМодуля.ПолучитьСтроку(Н));
Если Не ЗначениеЗаполнено(ТекущаяСтрока) Тогда
Продолжить;
КонецЕсли;
Пока СтрНайти(ТекущаяСтрока, " ") <> 0 Цикл
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, " ", " ");
КонецЦикла;
ВыводимаяСтрока = СтрЗаменить(ДокументМодуля.ПолучитьСтроку(Н), СокрЛП(ДокументМодуля.ПолучитьСтроку(Н)), ТекущаяСтрока);
ДокументМодуля.ЗаменитьСтроку(Н, ВыводимаяСтрока);
КонецЦикла;
2024-05-31 21:19:13 +02:00
ТекстМодуля = ДокументМодуля.ПолучитьТекст();
Для Каждого Элемент Из ТаблицаСловаря Цикл
ТекущееЗначение = Элемент.Значение;
Пока СтрДлина(ТекущееЗначение) < Элемент.Длина Цикл
ТекущееЗначение = ТекущееЗначение + " ";
КонецЦикла;
ТекстМодуля = СтрЗаменить(ТекстМодуля, Элемент.Ключ, Элемент.Значение);
КонецЦикла;
ОбработатьНесовпаденияOneScript(ТекстМодуля, ПутьКМодулю);
2024-05-31 21:19:13 +02:00
ДокументМодуля.УстановитьТекст(ТекстМодуля);
ДокументМодуля.Записать(ПутьКМодулю);
КонецПроцедуры
Процедура ПолучитьТаблицуСловаря(ПутьКСловарю)
2024-06-01 16:15:06 +02:00
Сообщить("Чтение словаря " + ПутьКСловарю);
2024-05-31 21:19:13 +02:00
ТаблицаСловаря.Очистить();
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьКСловарю);
ДанныеСловаря = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Для Каждого Элемент Из ДанныеСловаря Цикл
НоваяСтрокаСловаря = ТаблицаСловаря.Добавить();
НоваяСтрокаСловаря.Ключ = Элемент.Ключ;
НоваяСтрокаСловаря.Значение = Элемент.Значение;
НоваяСтрокаСловаря.Длина = СтрДлина(Элемент.Ключ);
НоваяСтрокаСловаря.ИмяМодуля = СтрНайти(Элемент.Ключ, "OPI_") <> 0;
КонецЦикла;
ТаблицаСловаря.Сортировать("Длина УБЫВ");
2024-06-03 07:56:33 +02:00
ПутьКСловарюКлючевыхСлов = "./service/dictionaries/en_post.json";
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьКСловарюКлючевыхСлов);
СоответствиеКС = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Для Каждого КлючевоеСлово Из СоответствиеКС Цикл
2024-06-01 19:49:57 +02:00
НоваяСтрокаСловаря = ТаблицаСловаря.Добавить();
НоваяСтрокаСловаря.Ключ = КлючевоеСлово.Ключ;
НоваяСтрокаСловаря.Значение = КлючевоеСлово.Значение;
НоваяСтрокаСловаря.Длина = СтрДлина(КлючевоеСлово.Ключ);
НоваяСтрокаСловаря.ИмяМодуля = Ложь;
КонецЦикла;
КонецПроцедуры
Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)
2024-06-01 16:09:42 +02:00
Сообщить("Каталог источник: " + КаталогИсточник);
Сообщить("Каталог приемника: " + КаталогПриемник);
2024-06-01 16:09:42 +02:00
Сообщить("Создание каталога " + КаталогПриемник);
СоздатьКаталог(КаталогПриемник);
МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);
Для Каждого Файл Из МассивФайлов Цикл
2024-06-01 16:18:27 +02:00
Если СтрНайти(Файл.ПолноеИмя, "cli") <> 0 Тогда
Продолжить;
КонецЕсли;
ПолноеИмяИсточник = Файл.ПолноеИмя;
ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");
Если Файл.ЭтоКаталог() Тогда
СоздатьКаталог(ПолноеИмяПриемник);
2024-06-01 16:09:42 +02:00
Сообщить("Создание каталога " + ПолноеИмяПриемник);
Иначе
КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
2024-06-01 16:09:42 +02:00
Сообщить("Копирование файла" + ПолноеИмяИсточник + " в " + ПолноеИмяПриемник);
КонецЕсли;
КонецЦикла;
2024-05-31 21:19:13 +02:00
КонецПроцедуры
Процедура ОбработатьНесовпаденияOneScript(ТекстМодуля, ПутьКМодулю)
СоответствиеОшибок = Новый Соответствие();
2024-06-02 15:41:12 +02:00
СоответствиеОшибок.Вставить("ConcatBinaryData" , "ConcatenateBinaryData");
СоответствиеОшибок.Вставить("GetTestList" , "ПолучитьСписокТестов");
СоответствиеОшибок.Вставить("Exists" , "Exist");
СоответствиеОшибок.Вставить("SetBodyFromBinaryData", "SetBodyFromBinary");
2024-06-02 17:06:46 +02:00
СоответствиеОшибок.Вставить("GetBodyAsBinaryData" , "ПолучитьТелоКакДвоичныеДанные");
2024-06-08 14:15:45 +02:00
СоответствиеОшибок.Вставить("FileCopy" , "CopyFile");
ФайлМодуля = Новый Файл(ПутьКМодулю);
Если СтрНайти(ФайлМодуля.Имя, ".os") <> 0 Тогда
Для Каждого Ошибка Из СоответствиеОшибок Цикл
ТекстМодуля = СтрЗаменить(ТекстМодуля, Ошибка.Ключ, Ошибка.Значение);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
2024-06-01 16:09:42 +02:00
//ПриСозданииОбъекта();