mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2024-12-23 02:06:12 +02:00
335 lines
14 KiB
Plaintext
335 lines
14 KiB
Plaintext
Перем СписокЯзыков;
|
|
Перем ОбщийМассивСлов;
|
|
Перем Алфавит;
|
|
Перем МассивСимволов;
|
|
|
|
Процедура ПолучитьСписокЯзыков() Экспорт
|
|
|
|
СписокЯзыков = Новый Массив();
|
|
СписокЯзыков.Добавить("en");
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура СоздатьСловари()
|
|
|
|
ПолучитьСписокЯзыков();
|
|
ПолучитьАлфавит();
|
|
ПолучитьМассивСимволов();
|
|
|
|
Для Каждого Язык Из СписокЯзыков Цикл
|
|
СоздатьСловарь(Язык);
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура СоздатьСловарь(Знач Язык)
|
|
|
|
ФайлыМодулей = НайтиФайлы("./src/ru/", "*", Истина);
|
|
|
|
СписокСлов = Новый СписокЗначений();
|
|
|
|
Для Каждого Модуль Из ФайлыМодулей Цикл
|
|
|
|
Если Модуль.ЭтоКаталог() Или Не Модуль.Существует() Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
|
|
Если СтрНайти(Модуль.ПолноеИмя, "cli\data") <> 0 Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
ПолучитьМассивСловОригинала(Модуль.ПолноеИмя, СписокСлов);
|
|
КонецЦикла;
|
|
|
|
МассивМодулейДляПеревода = Новый Массив;
|
|
МассивМодулейДляПеревода.Добавить(Новый Файл("./src/ru/cli/tools/Modules/Утилиты.os"));
|
|
|
|
Для Каждого ФайлУтилит Из МассивМодулейДляПеревода Цикл
|
|
ПолучитьМассивСловОригинала(ФайлУтилит.ПолноеИмя, СписокСлов);
|
|
КонецЦикла;
|
|
|
|
ПутьСловаря = "./service/dictionaries/" + Язык + ".json";
|
|
ФайлСловаря = Новый Файл(ПутьСловаря);
|
|
|
|
СоответствиеСловаря = Новый Соответствие();
|
|
СоответствиеСуществующегоСловаря = Новый Соответствие();
|
|
|
|
Если ФайлСловаря.Существует() Тогда
|
|
|
|
ЧтениеJSON = Новый ЧтениеJSON();
|
|
ЧтениеJSON.ОткрытьФайл(ПутьСловаря);
|
|
СоответствиеСуществующегоСловаря = ПрочитатьJSON(ЧтениеJSON, Истина);
|
|
ЧтениеJSON.Закрыть();
|
|
|
|
КонецЕсли;
|
|
|
|
//СписокСлов.СортироватьПоПредставлению(НаправлениеСортировки.Убыв);
|
|
|
|
Для Каждого Слово Из СписокСлов Цикл
|
|
|
|
Значение = Слово.Значение;
|
|
СоответствиеСловаря.Вставить(Значение, "");
|
|
|
|
КонецЦикла;
|
|
|
|
Для Каждого Существующее Из СоответствиеСуществующегоСловаря Цикл
|
|
|
|
СоответствиеСловаря.Вставить(Существующее.Ключ, Существующее.Значение);
|
|
|
|
КонецЦикла;
|
|
|
|
ЗаписатьJSONСловаря(СоответствиеСловаря, ПутьСловаря);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ЗаписатьJSONСловаря(СоответствиеСловаря, ПутьСловаря)
|
|
|
|
ТекстовыйДок = Новый ТекстовыйДокумент();
|
|
ТекстовыйДок.ДобавитьСтроку("{");
|
|
|
|
ТЗ = Новый ТаблицаЗначений();
|
|
ТЗ.Колонки.Добавить("Ключ");
|
|
ТЗ.Колонки.Добавить("Значение");
|
|
ТЗ.Колонки.Добавить("ДлинаКлюча");
|
|
ТЗ.Колонки.Добавить("Заполнено");
|
|
|
|
Для Каждого Элемент Из СоответствиеСловаря Цикл
|
|
|
|
НоваяСтрока = ТЗ.Добавить();
|
|
НоваяСтрока.Ключ = Элемент.Ключ;
|
|
НоваяСтрока.Значение = Элемент.Значение;
|
|
НоваяСтрока.ДлинаКлюча = СтрДлина(Элемент.Ключ);
|
|
НоваяСтрока.Заполнено = ЗначениеЗаполнено(Элемент.Значение);
|
|
|
|
КонецЦикла;
|
|
|
|
ТЗ.Сортировать("Заполнено УБЫВ, ДлинаКлюча");
|
|
|
|
Для Каждого СтрокаТЗ Из ТЗ Цикл
|
|
Значение = СтрокаТЗ.Значение;
|
|
Значение = СтрЗаменить(Значение, "\", "\\");
|
|
Значение = СтрЗаменить(Значение, "/", "\/");
|
|
Значение = СтрЗаменить(Значение, """", "\""");
|
|
|
|
Ключ = СтрокаТЗ.Ключ;
|
|
Ключ = СтрЗаменить(Ключ, "\", "\\");
|
|
Ключ = СтрЗаменить(Ключ, "/", "\/");
|
|
Ключ = СтрЗаменить(Ключ, """", "\""");
|
|
|
|
ТекстовыйДок.ДобавитьСтроку("""" + Ключ + """: """ + Значение + """,");
|
|
КонецЦикла;
|
|
|
|
ПоследняяСтрока = ТекстовыйДок.ПолучитьСтроку(ТекстовыйДок.КоличествоСтрок());
|
|
ПоследняяСтрока = Лев(ПоследняяСтрока, СтрДлина(ПоследняяСтрока) - 1);
|
|
ТекстовыйДок.ЗаменитьСтроку(ТекстовыйДок.КоличествоСтрок(), ПоследняяСтрока);
|
|
|
|
ТекстовыйДок.ДобавитьСтроку("}");
|
|
ТекстовыйДок.Записать(ПутьСловаря);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПолучитьМассивСловОригинала(Знач ПутьКФайлу, СписокСлов)
|
|
|
|
Документ = Новый ТекстовыйДокумент();
|
|
Документ.Прочитать(ПутьКФайлу, "UTF-8");
|
|
|
|
Для Н = 1 По Документ.КоличествоСтрок() Цикл
|
|
|
|
ТекущаяСтрока = СокрЛП(Документ.ПолучитьСтроку(Н));
|
|
|
|
Если СтрНачинаетсяС(ТекущаяСтрока, "//") Тогда
|
|
ТекущаяСтрока = СокрЛП(СтрЗаменить(ТекущаяСтрока, "//", ""));
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, " - ", "$");
|
|
МассивСтроки = СтрРазделить(ТекущаяСтрока, "$", Ложь);
|
|
|
|
Для Г = 0 По МассивСтроки.ВГраница() Цикл
|
|
ДобавитьСлово(СписокСлов, МассивСтроки[Г]);
|
|
КонецЦикла;
|
|
|
|
Продолжить;
|
|
КонецЕсли;
|
|
|
|
Если СтрНайти(ТекущаяСтрока, """") <> 0
|
|
Или СтрНайти(ТекущаяСтрока, "|") <> 0
|
|
Или СтрНайти(ТекущаяСтрока, "<") <> 0
|
|
Или СтрНайти(ТекущаяСтрока, ">") <> 0 Тогда
|
|
|
|
ТекущаяСтрока = " " + ТекущаяСтрока;
|
|
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, """", "$");
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "|", "$");
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "<", "$");
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, ">", "$");
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "$$", """""");
|
|
|
|
МассивСтроки = СтрРазделить(ТекущаяСтрока, "$", Истина);
|
|
|
|
Цельный = Ложь;
|
|
Для Каждого Элемент Из МассивСтроки Цикл
|
|
|
|
Если Не ЗначениеЗаполнено(СокрЛП(Элемент)) Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
|
|
Если Цельный Тогда
|
|
ДобавитьСлово(СписокСлов, Элемент);
|
|
Иначе
|
|
РазобратьОбычнуюСтроку(Элемент, СписокСлов);
|
|
КонецЕсли;
|
|
|
|
Цельный = Не Цельный;
|
|
КонецЦикла;
|
|
|
|
Иначе
|
|
РазобратьОбычнуюСтроку(ТекущаяСтрока, СписокСлов);
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура РазобратьОбычнуюСтроку(Элемент, СписокСлов)
|
|
|
|
Для Каждого Символ Из МассивСимволов Цикл
|
|
Элемент = СтрЗаменить(Элемент, Символ, "$");
|
|
КонецЦикла;
|
|
|
|
Пока СтрНайти(Элемент, "$$") <> 0 Цикл
|
|
Элемент = СтрЗаменить(Элемент, "$$", "$");
|
|
КонецЦикла;
|
|
|
|
МассивЭлемента = СтрРазделить(Элемент, "$", Ложь);
|
|
Для Каждого Дробный Из МассивЭлемента Цикл
|
|
ДобавитьСлово(СписокСлов, Дробный);
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ДобавитьСлово(Список, Слово)
|
|
|
|
Слово = СокрЛП(Слово);
|
|
|
|
Нормализовано = Ложь;
|
|
|
|
Пока Не Нормализовано Цикл
|
|
|
|
ПервыйСимвол = Ложь;
|
|
ПоследнийСимвол = Ложь;
|
|
|
|
Для Каждого Символ Из МассивСимволов Цикл
|
|
|
|
ПервыйСимвол = СтрНачинаетсяС(Слово, Символ);
|
|
ПоследнийСимвол = СтрЗаканчиваетсяНа(Слово, Символ);
|
|
|
|
Если ПервыйСимвол Или ПоследнийСимвол Тогда
|
|
Прервать;
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
Если ПервыйСимвол Тогда
|
|
Слово = Прав(Слово, СтрДлина(Слово) - 1);
|
|
КонецЕсли;
|
|
|
|
Если ПоследнийСимвол Тогда
|
|
Слово = Лев(Слово, СтрДлина(Слово) - 1);
|
|
КонецЕсли;
|
|
|
|
Если Не ПервыйСимвол И Не ПоследнийСимвол Тогда
|
|
Нормализовано = Истина;
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
Слово = СокрЛП(Слово);
|
|
|
|
Если Не ЗначениеЗаполнено(Слово) Или Не НайтиКириллицу(Слово) Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
СуществующееЗначение = Список.НайтиПоЗначению(Слово);
|
|
|
|
Если СуществующееЗначение = Неопределено Тогда
|
|
Список.Добавить(Слово, СтрДлина(Слово));
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПолучитьАлфавит()
|
|
|
|
Алфавит = Новый Массив;
|
|
|
|
Алфавит.Добавить("а");
|
|
Алфавит.Добавить("б");
|
|
Алфавит.Добавить("в");
|
|
Алфавит.Добавить("г");
|
|
Алфавит.Добавить("д");
|
|
Алфавит.Добавить("е");
|
|
Алфавит.Добавить("ё");
|
|
Алфавит.Добавить("ж");
|
|
Алфавит.Добавить("з");
|
|
Алфавит.Добавить("и");
|
|
Алфавит.Добавить("й");
|
|
Алфавит.Добавить("к");
|
|
Алфавит.Добавить("л");
|
|
Алфавит.Добавить("м");
|
|
Алфавит.Добавить("н");
|
|
Алфавит.Добавить("о");
|
|
Алфавит.Добавить("п");
|
|
Алфавит.Добавить("р");
|
|
Алфавит.Добавить("с");
|
|
Алфавит.Добавить("т");
|
|
Алфавит.Добавить("у");
|
|
Алфавит.Добавить("ф");
|
|
Алфавит.Добавить("х");
|
|
Алфавит.Добавить("ц");
|
|
Алфавит.Добавить("ч");
|
|
Алфавит.Добавить("ш");
|
|
Алфавит.Добавить("щ");
|
|
Алфавит.Добавить("ъ");
|
|
Алфавит.Добавить("ы");
|
|
Алфавит.Добавить("ь");
|
|
Алфавит.Добавить("э");
|
|
Алфавит.Добавить("ю");
|
|
Алфавит.Добавить("я");
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПолучитьМассивСимволов()
|
|
|
|
МассивСимволов = Новый Массив();
|
|
МассивСимволов.Добавить(";");
|
|
МассивСимволов.Добавить(".");
|
|
МассивСимволов.Добавить(",");
|
|
МассивСимволов.Добавить(")");
|
|
МассивСимволов.Добавить("(");
|
|
МассивСимволов.Добавить("/");
|
|
МассивСимволов.Добавить("\");
|
|
МассивСимволов.Добавить("[");
|
|
МассивСимволов.Добавить("]");
|
|
МассивСимволов.Добавить("=");
|
|
МассивСимволов.Добавить("+");
|
|
МассивСимволов.Добавить("-");
|
|
МассивСимволов.Добавить("*");
|
|
МассивСимволов.Добавить("#");
|
|
МассивСимволов.Добавить(" ");
|
|
МассивСимволов.Добавить("""");
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция НайтиКириллицу(Знач Слово)
|
|
|
|
СловоНРег = НРег(Слово);
|
|
|
|
Для Каждого Буква Из Алфавит Цикл
|
|
Если СтрНайти(СловоНРег, Буква) <> 0 Тогда
|
|
Возврат Истина;
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
Возврат Ложь;
|
|
|
|
КонецФункции
|
|
|
|
СоздатьСловари();
|
|
|