Транслитерация средствами языка ActionScript

Сегодня мы обратимся к теме транслитерации и реализуем простейший транслит-переводчик средствами языка ActionScript.

«Транслитерация (от транс… и лат. littera - буква), перевод одной графической системы алфавита в другую (то есть передача букв одной письменности буквами другой).» /БСЭ/

Зачем нам нужна транслитерация?

Ну, причины могут быть разными... Мне, например, транслит приглянулся тем, что с его помощью можно избежать проблем с кодировкой при передаче русского текста.

Как реализовать транслитерацию?

Реализовать-то просто. Проблема тут в другом. Дело в том, что нет единого стандарта транслитерации (стандарты есть, а вот единого - нет). И это создаёт свои трудности. Мы возьмём за основу правила транслитерации, используемые одним из мобильных операторов (честное слово, ссылка на первоисточник утеряна после очередной переустановки ОС). Но вы можете изменить правила транслитерации. Делается это очень просто и быстро.

Итак, сперва мы создадим переводчик в транслит на языке программирования ActionScript 3.0...

Код ActionScript 3.0:

/* исходная строка */ var str:String = "Свобода - не именинный подарок. Её нужно взять; даром она никому не даётся. (П. А. Кропоткин)"; /* строка-результат */ var result:String = ""; /* функция, которая выполняет транслитерацию */ function translit(s:String):String { /* массив, хранящий правила транслитерации */ var arr:Array = new Array(["А","A"],["Б","B"],["В","V"],["Г","G"],["Д","D"],["Е","E"],["Ё","E"],["Ж","J"],["З","Z"],["И","I"],["Й","Y"],["К","K"],["Л","L"],["М","M"],["Н","N"],["О","O"],["П","P"],["Р","R"],["С","S"],["Т","T"],["У","U"],["Ф","F"],["Х","H"],["Ц","Ts"],["Ч","Ch"],["Ш","Sh"],["Щ","Sch"],["Ъ",""],["Ы","Yi"],["Ь",""],["Э","E"],["Ю","Yu"],["Я","Ya"],["а","a"],["б","b"],["в","v"],["г","g"],["д","d"],["е","e"],["ё","e"],["ж","j"],["з","z"],["и","i"],["й","y"],["к","k"],["л","l"],["м","m"],["н","n"],["о","o"],["п","p"],["р","r"],["с","s"],["т","t"],["у","u"],["ф","f"],["х","h"],["ц","ts"],["ч","ch"],["ш","sh"],["щ","sch"],["ъ","y"],["ы","yi"],["ь",""],["э","e"],["ю","yu"],["я","ya"]); /* результирующая строка */ var r:String = ""; /* текущая буква */ var b:String = ""; /* длина строки, к которой будет применена транслитерация */ var lenS:uint = s.length; /* длина массива с правилами транслитерации */ var lenA:uint = arr.length; /* циклы, которые и выполняют перевод строки в транслит */ var i:uint = 0; var j:uint; while (i < lenS) { b = s.substr(i,1); j = 0; while (j < lenA) { if (b == arr[j][0]) { b = arr[j][1]; } j++; } r += b; i++; } /* возвращаем результат */ return r; } /* применяем функцию */ str = translit(str); /* выводим результат */ trace(str);

Как видите, ничего сложного. Правила транслитерации хранятся в массиве arr в виде ["буква русского алфавита","буква английского алфавита"]. При необходимости массив легко можно модифицировать под свои нужды.

Реализация переводчика для ActionScript 2.0 выглядит аналогичным образом...

Код ActionScript 2.0:

str = "Свобода - не именинный подарок. Её нужно взять; даром она никому не даётся. (П. А. Кропоткин)"; result = ""; function translit(s:String):String { var arr:Array = new Array(["А","A"],["Б","B"],["В","V"],["Г","G"],["Д","D"],["Е","E"],["Ё","E"],["Ж","J"],["З","Z"],["И","I"],["Й","Y"],["К","K"],["Л","L"],["М","M"],["Н","N"],["О","O"],["П","P"],["Р","R"],["С","S"],["Т","T"],["У","U"],["Ф","F"],["Х","H"],["Ц","Ts"],["Ч","Ch"],["Ш","Sh"],["Щ","Sch"],["Ъ",""],["Ы","Yi"],["Ь",""],["Э","E"],["Ю","Yu"],["Я","Ya"],["а","a"],["б","b"],["в","v"],["г","g"],["д","d"],["е","e"],["ё","e"],["ж","j"],["з","z"],["и","i"],["й","y"],["к","k"],["л","l"],["м","m"],["н","n"],["о","o"],["п","p"],["р","r"],["с","s"],["т","t"],["у","u"],["ф","f"],["х","h"],["ц","ts"],["ч","ch"],["ш","sh"],["щ","sch"],["ъ","y"],["ы","yi"],["ь",""],["э","e"],["ю","yu"],["я","ya"]); var r:String = ""; var b:String = ""; var lenS:Number = s.length; var lenA:Number = arr.length; var i:Number = 0; var j:Number; while (i < lenS) { b = s.substr(i,1); j = 0; while (j < lenA) { if (b == arr[j][0]) { b = arr[j][1]; } j++; } r += b; i++; } return r; } str = translit(str); trace(str);

Теперь, если мы добавим к приведённому выше коду элементы интерфейса, то можем получить примерно следующий переводчик кириллического текста в транслит:

Загрузить Adobe Flash Player

Примечание: если вы не знаете, как реализовать кнопку «Копировать в буфер обмена», то обратитесь к посту «ActionScript и буфер обмена».

Автор: admin

Дата добавления: 2012-01-16

Просмотров: 2077

Рейтинг поста: +3-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2017-05-16
Да, конечно :-)
Комментатор
Комментарий добавил(а): Роман
Дата добавления: 2017-05-16
В if (b == arr[j][0]) можно вставить break; после присвоения... Зачем перебирать оставшуюся часть строки, если буква уже найдена...
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2012-01-22
Нет, тёзка, не отменило :-) Но в данном случае это просто нерационально: пришлось бы дополнительно писать функцию, которая бы обрабатывала "Ts", "Ch", "Sh", "Sch", "Yi" и "Ya", чтобы они показывались в правильном регистре. Ведь согласись, что "Schuka" смотрится гораздо красивее, чем "SCHuka". А написание дополнительной функции - нерациональное расходование ресурсов (по крайней мере, в данном случае).
Комментатор
Комментарий добавил(а): Dracyla
Дата добавления: 2012-01-21
Ай-ай-ай, а toLowerCase() и toUpperCase() человечество отменило? :)

P.S.: я бот, всегда приходится Ленина искать, ибо других я не знаю...
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика