Проста функція 1с яка перетворює Кирилицю на Латиницю (і назад Латиницю на Кирилицю).
Функция Транслит(СтрокаВход, Реверс = Ложь)
ВыходСтрока= "";
AZ_3 = Новый Соответствие; // три символа (сочетание)
AZ_2 = Новый Соответствие; // два символа (сочетание)
AZ_1 = Новый Соответствие; // один символ
AZ_3.Вставить(?(Реверс=Ложь,"щ","sch"),?(Реверс=Истина,"щ","sch"));
AZ_2.Вставить(?(Реверс=Ложь,"є","je"),?(Реверс=Истина,"є","je"));
AZ_2.Вставить(?(Реверс=Ложь,"ю","ju"),?(Реверс=Истина,"ю","ju"));
AZ_2.Вставить(?(Реверс=Ложь,"я","ya"),?(Реверс=Истина,"я","ya"));
AZ_2.Вставить(?(Реверс=Ложь,"ж","zh"),?(Реверс=Истина,"ж","zh"));
AZ_2.Вставить(?(Реверс=Ложь,"ч","ch"),?(Реверс=Истина,"ч","ch"));
AZ_2.Вставить(?(Реверс=Ложь,"ш","sh"),?(Реверс=Истина,"ш","sh"));
AZ_1.Вставить(?(Реверс=Ложь,"ї","yi"),?(Реверс=Истина,"ї","yi"));
AZ_1.Вставить(?(Реверс=Ложь,"а","a"),?(Реверс=Истина,"а","a"));
AZ_1.Вставить(?(Реверс=Ложь,"б","b"),?(Реверс=Истина,"б","b"));
AZ_1.Вставить(?(Реверс=Ложь,"в","v"),?(Реверс=Истина,"в","v"));
AZ_1.Вставить(?(Реверс=Ложь,"г","g"),?(Реверс=Истина,"г","g"));
AZ_1.Вставить(?(Реверс=Ложь,"д","d"),?(Реверс=Истина,"д","d"));
AZ_1.Вставить(?(Реверс=Ложь,"е","e"),?(Реверс=Истина,"е","e"));
AZ_1.Вставить(?(Реверс=Ложь,"з","z"),?(Реверс=Истина,"з","z"));
AZ_1.Вставить(?(Реверс=Ложь,"и","i"),?(Реверс=Истина,"и","i"));
AZ_1.Вставить(?(Реверс=Ложь,"й","j"),?(Реверс=Истина,"й","j"));
AZ_1.Вставить(?(Реверс=Ложь,"к","k"),?(Реверс=Истина,"к","k"));
AZ_1.Вставить(?(Реверс=Ложь,"л","l"),?(Реверс=Истина,"л","l"));
AZ_1.Вставить(?(Реверс=Ложь,"м","m"),?(Реверс=Истина,"м","m"));
AZ_1.Вставить(?(Реверс=Ложь,"н","n"),?(Реверс=Истина,"н","n"));
AZ_1.Вставить(?(Реверс=Ложь,"о","o"),?(Реверс=Истина,"о","o"));
AZ_1.Вставить(?(Реверс=Ложь,"п","p"),?(Реверс=Истина,"п","p"));
AZ_1.Вставить(?(Реверс=Ложь,"р","r"),?(Реверс=Истина,"р","r"));
AZ_1.Вставить(?(Реверс=Ложь,"с","s"),?(Реверс=Истина,"с","s"));
AZ_1.Вставить(?(Реверс=Ложь,"т","t"),?(Реверс=Истина,"т","t"));
AZ_1.Вставить(?(Реверс=Ложь,"у","u"),?(Реверс=Истина,"у","u"));
AZ_1.Вставить(?(Реверс=Ложь,"ф","f"),?(Реверс=Истина,"ф","f"));
AZ_1.Вставить(?(Реверс=Ложь,"х","h"),?(Реверс=Истина,"х","h"));
AZ_1.Вставить(?(Реверс=Ложь,"ц","c"),?(Реверс=Истина,"ц","c"));
AZ_1.Вставить(?(Реверс=Ложь,"і","i"),?(Реверс=Истина,"і","i"));
AZ_1.Вставить(?(Реверс=Ложь,"ґ",""),?(Реверс=Истина,"ґ",""));
AZ_1.Вставить(?(Реверс=Ложь,"ь",""),?(Реверс=Истина,"ь",""));
AZ_1.Вставить(?(Реверс=Ложь," ","_"),?(Реверс=Истина," ","_"));
Для Сч=1 По СтрДлина(СтрокаВход) Цикл
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,3));
НайденныйСимвол = AZ_3.Получить(ТекСимволСтроки);
Если НайденныйСимвол = Неопределено Тогда
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,2));
НайденныйСимвол = AZ_2.Получить(ТекСимволСтроки);
Если НайденныйСимвол = Неопределено Тогда
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,1));
НайденныйСимвол = AZ_1.Получить(ТекСимволСтроки);
Если НайденныйСимвол = Неопределено Тогда
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,1));
НайденныйСимвол = AZ_3.Получить(ТекСимволСтроки);
Если НайденныйСимвол = Неопределено Тогда
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,1));
НайденныйСимвол = AZ_2.Получить(ТекСимволСтроки);
КонецЕсли;
КонецЕсли;
Иначе
Сч=Сч+1
КонецЕсли;
Иначе
Сч=Сч+2
КонецЕсли;
Если НайденныйСимвол Неопределено Тогда
СимволВСтроку = НайденныйСимвол;
Иначе
СимволВСтроку = Сред(СтрокаВход,Сч,1);
КонецЕсли;
ВыходСтрока = ВыходСтрока + СимволВСтроку;
КонецЦикла;
Возврат ВыходСтрока;
КонецФункции
2024-05-24