Сегодня мы обратимся к теме транслитерации и реализуем простейший транслит-переводчик средствами языка 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);
Теперь, если мы добавим к приведённому выше коду элементы интерфейса, то можем получить примерно следующий переводчик кириллического текста в транслит:
Примечание: если вы не знаете, как реализовать кнопку «Копировать в буфер обмена», то обратитесь к посту «ActionScript и буфер обмена».