Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание переводчика транслита

477
13 мая 2007 года
Robinnovich
182 / / 02.12.2006
Доброго времени суток вот на днях был загорелся сделать такую штуку вот только уперся рогами в тупик и хоть убей не знаю как можно исправить багу ))

Привожу код работающего транслятора (тоесть то что смог написать)
[HTML]<style>
.bgcolor4 {background: #D1DEEA;}
.bgcolor5 {background: white;}
input, textarea, select {background: #FAFAFA; color: #000000; border: 1px #D1DEEA solid; font-size: 11px; font-family: Verdana, Helvetica; text-decoration: none;}
input:hover, textarea:hover, select:hover {border: 1px #A2BCD5 solid;}
input:focus, textarea:focus, select:focus {border: 1px #83A5C7 solid;}
</style>
<script language="JavaScript">
var latcode = new Array();
var cyrcode = new Array();
var lat2 = new Array("JO","SCH","ZH","CH","SH","JE","JU","JA","jo","sch","zh","ch","sh","je","ju","ja");
var cyr2 = new Array("Ё", "Щ", "Ж", "Ч", "Ш", "Э", "Ю", "Я", "ё", "щ", "ж", "ч", "ш", "э", "ю", "я");
var lat = new Array("A", "B", "V", "G", "D", "E", "Z", "I", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "H", "C", ",", "Y", "'", "a", "b", "v", "g", "d", "e", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", ",","y", "'");
var cyr = new Array("А", "Б", "В", "Г", "Д", "Е", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ъ", "Ы", "Ь", "а", "б", "в", "г", "д", "е", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ъ", "ы", "ь");
var rules = "<table align='center' width='100%' class='bgcolor4'><tr class='bgcolor5'><td align='center'>A</td><td align='center'>B</td><td align='center'>V</td><td align='center'>G</td><td align='center'>D</td><td align='center'>E</td><td align='center'>JO</td><td align='center'>ZH</td><td align='center'>Z</td><td align='center'>I</td><td align='center'>J</td><td align='center'>K</td><td align='center'>L</td><td align='center'>M</td><td align='center'>N</td><td align='center'>O</td><td align='center'>P</td><td align='center'>R</td><td align='center'>S</td><td align='center'>T</td><td align='center'>U</td><td align='center'>F</td><td align='center'>H</td><td align='center'>C</td><td align='center'>CH</td><td align='center'>SH</td><td align='center'>SCH</td><td align='center'>,</td><td align='center'>Y</td><td align='center'>'</td><td align='center'>JE</td><td align='center'>JU</td><td align='center'>JA</td></tr><tr class='bgcolor5'><td align='center'>A</td><td align='center'>Б</td><td align='center'>В</td><td align='center'>Г</td><td align='center'>Д</td><td align='center'>Е</td><td align='center'>Ё</td><td align='center'>Ж</td><td align='center'>З</td><td align='center'>И</td><td align='center'>Й</td><td align='center'>К</td><td align='center'>Л</td><td align='center'>М</td><td align='center'>Н</td><td align='center'>О</td><td align='center'>П</td><td align='center'>Р</td><td align='center'>С</td><td align='center'>Т</td><td align='center'>У</td><td align='center'>Ф</td><td align='center'>Х</td><td align='center'>Ц</td><td align='center'>Ч</td><td align='center'>Ш</td><td align='center'>Щ</td><td align='center'>Ъ</td><td align='center'>Ы</td><td align='center'>Ь</td><td align='center'>Э</td><td align='center'>Ю</td><td align='center'>Я</td></tr></table>";
var enabled_translit = 0;
var translate=1;

function enabled(id){
var buf = new String;
var selection = false;
var txtarea = document.getElementById(id);
var regexp;
var i;
if (enabled_translit==0){
document.getElementById('button1').value="Выключить транслятор";
document.getElementById('button1').style.color="red";
txtarea.onkeyup=function(){
buf = txtarea.value;
for (i = 0; i < cyr2.length; i++){
eval('regexp = /'+cyr2+'/g');
buf = buf.replace(regexp, lat2);
}
for (i = 0; i < cyr.length; i++){
eval('regexp = /'+cyr+'/g');
buf = buf.replace(regexp, lat);
}
for (i = 0; i < lat2.length; i++){
eval('regexp = /'+lat2+'/g');
buf = buf.replace(regexp, cyr2);
}
for (i = 0; i < lat.length; i++){
eval('regexp = /'+lat+'/g');
buf = buf.replace(regexp, cyr);
}
txtarea.value = buf;
return;
}
txtarea.focus();
enabled_translit=1;
document.getElementById('rulestranslit').innerHTML=rules;
txtarea.focus();
} else {
document.getElementById('button1').value="Включить транслятор";
document.getElementById('button1').style.color="green";
txtarea.onkeyup=OnKeyUp=function(){}
enabled_translit=0;
document.getElementById('rulestranslit').innerHTML="";
txtarea.focus();
}
}
</script>

<H1>Translit</H1><br>
<input style="width: 200px; color: green;" type="button" id="button1" value="Включить транслятор" onclick="enabled('message')">
<input style="width: 50px; color: orange;" type="button" value="" onclick="document.getElementById('message').value+=''; document.getElementById('message').focus();">
<input style="width: 50px; color: orange;" type="button" value="" onclick="document.getElementById('message').value+=''; document.getElementById('message').focus();">
<input style="width: 50px; color: orange;" type="button" value="" onclick="document.getElementById('message').value+=''; document.getElementById('message').focus();">
<input style="width: 50px; color: orange;" type="button" value="
 
Код:
" &#111;&#110;click="document.getElementById('message').value+='[code]
'; document.getElementById('message').focus();">
<input style="width: 50px; color: orange;" type="button" value="
Цитата:
" onclick="document.getElementById('message').value+='[quote]

'; document.getElementById('message').focus();"><br><br>
<textarea style="width: 100%" id="message" rows="15"></textarea><br><br>
<div id="rulestranslit"></div>[/HTML]

Создание переводчика транслита

Доброго времени суток вот на днях был загорелся сделать такую штуку вот только уперся рогами в тупик и хоть убей не знаю как можно исправить багу ))

Привожу код работающего транслятора (тоесть то что смог написать)

Проблема заключается в том что не могу заставить чтобы он не переводил текст заключений в [….] и <….>. Возможно выбран не правильный подход перевода. Если есть идеи внимательно их выслушаю.

P.S. Причиной написания транслятора стало то что в инете работающего на всех браузерах не нашел, точнее все были под ИЕ, та и код в них куда более моего разобраться тяжело.

477
13 мая 2007 года
Robinnovich
182 / / 02.12.2006
переводит как теxт [цоде], а Нужно чтобы все что в [] и <> скобках не переводилось
622
13 мая 2007 года
nilbog
507 / / 19.12.2006
а что если приблизительно так сделать
если встретили открывающую скобку [ то перестаете транслировать и пока не встретите закрывающую ] просто вне режима трансляции оставляете текст
правда для этого придется наверно серьезно поменять структуру скрипта (
477
13 мая 2007 года
Robinnovich
182 / / 02.12.2006
Ну я так тоже пребывал это значит надо перебирать строку и заменять каждый символ по отдельности. Тогда возникает проблема с заменой комбинаций букв таких как ch sch и т.д.
Если бы както реализовать буфер в котором бы постоянно были только латинские буквы, то может с этого что-то бы и получилось, но тоже пребывал брать последний символ со строки и заносить в буфер с этого выплыла следующая проблема что если пользователь ввел текс потом решил в тексте (не в конец) дописать букву в моем примере заносилась опять последняя. Ужу переведенная и весь транслит летел.

Если реализовать правильно этот буфер тогда еще можно что-то придумать.
12
13 мая 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: Robinnovich
Единственным минусом вашего транслятора является то что он реализован на пхп, а этот который я предоставил, переводит на лету.


Так и есть. До реализации на JS руки не дошли. Будет желание допишу :)

12
13 мая 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: Robinnovich
Ну я так тоже пребывал это значит надо перебирать строку и заменять каждый символ по отдельности. Тогда возникает проблема с заменой комбинаций букв таких как ch sch и т.д.


Не возникает. Просто при проверке текущего символа имей в виду, что замена может быть двойной. Т.е. если текущий символ s, то проверь следующий за ним символ, если это c и потом h, то транслируй их в нужную комбинацию, если нет, то транслируй в c.

622
13 мая 2007 года
nilbog
507 / / 19.12.2006
Цитата: Robinnovich
Ну я так тоже пребывал это значит надо перебирать строку и заменять каждый символ по отдельности.


перебирать всю строку я думаю будет самый простой вариант
с учетом того что тебе сказал alekciy
ну можно скажем еще строку разбивать на куски по признакам разграничения [...][/...] и применять вашу функцию только к тому что осталось между разграничителями

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог