Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать транлит с нуля? преобразователь в язык с особыми буквами 
:(
    Опции темы
Maker
Дата 10.11.2005, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Всем здрасти!

В программировании я полный НОЛЬ!
Нужна помощь в создании небольшого ресурса на подобии www.translit.ru для моего родного языка. Переводить кириллицу, а также английскую латиницу в правильную азербайджанскую латиницу. Хотелось бы, чтобы процесс нес также и ОБУЧАЮЩИЙ характер.
Есть желающие помочь?
PM MAIL   Вверх
2man
Дата 11.11.2005, 04:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Вообще это делает javascript.
Вот например для перекодировки из латиницы в русскую по всем правилам translit.ru:
Для начала обозначаем переменные:
Код

var rus_lr2 = ('Е-е-О-о-Ё-Ё-Ё-Ё-Ж-Ж-Ч-Ч-Ш-Ш-Щ-Щ-Ъ-Ь-Э-Э-Ю-Ю-Я-Я-Я-Я-ё-ё-ж-ч-ш-щ-э-ю-я-я').split('-');
var lat_lr2 = ('/E-/e-/O-/o-ЫO-Ыo-ЙO-Йo-ЗH-Зh-ЦH-Цh-СH-Сh-ШH-Шh-ъ'+String.fromCharCode(35)+'-ь'+String.fromCharCode(39)+'-ЙE-Йe-ЙU-Йu-ЙA-Йa-ЫA-Ыa-ыo-йo-зh-цh-сh-шh-йe-йu-йa-ыa').split('-');
var rus_lr1 = ('А-Б-В-Г-Д-Е-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Х-Ц-Щ-Ы-Я-а-б-в-г-д-е-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-х-ц-щ-ъ-ы-ь-ь-я').split('-');
var lat_lr1 = ('A-B-V-G-D-E-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-X-C-W-Y-Q-a-b-v-g-d-e-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-x-c-w-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-'+String.fromCharCode(96)+'-q').split('-');

Ну и собственно сама функция транслитеровки:
Код

function translit()
{
    var obj_ta = fombj.Post;

    //----------------------------------------
    // It's IE!
    //----------------------------------------
    if ( (ua_vers >= 4) && is_ie && is_win)
    {
        if (obj_ta.isTextEdit)
        {
            obj_ta.focus();
            var sel = document.selection;
            var rng = sel.createRange();
            rng.colapse;
            if((sel.type == "Text" || sel.type == "None") && rng != null)
            {
                rng.text = dotranslate(rng.text);
            }
        }
        else
        {
            obj_ta.value = dotranslate(obj_ta.value);
        }
    }
    //----------------------------------------
    // It's MOZZY!
    //----------------------------------------

    else if ( obj_ta.selectionEnd )
    {
        var ss = obj_ta.selectionStart;
        var st = obj_ta.scrollTop;
        var es = obj_ta.selectionEnd;

        if (es <= 2)
        {
            es = obj_ta.textLength;
        }

        var start  = (obj_ta.value).substring(0, ss);
        var middle = (obj_ta.value).substring(ss, es);
        var end    = (obj_ta.value).substring(es, obj_ta.textLength);

        //-----------------------------------
        // text range?
        //-----------------------------------

        if (obj_ta.selectionEnd - obj_ta.selectionStart > 0)
        {
            middle = dotranslate(middle);
        }

        obj_ta.value = start + middle + end;

        var cpos = ss + (middle.length);

        obj_ta.selectionStart = cpos;
        obj_ta.selectionEnd   = cpos;
        obj_ta.scrollTop      = st;


    }
    //----------------------------------------
    // It's CRAPPY!
    //----------------------------------------
    else
    {
        obj_ta.value = dotranslate(obj_ta.value);
    }

    obj_ta.focus();

    return;
}

//==========================================
// TRANSLITIRATE (String convertion)
//------------------------------------------
// Original code from translit.ru
// by Igor Ilyin (2002-2004)
//==========================================


function dotranslate(text)
{
    var txtnew = "";
    var symb = 0;
    var subsymb = "";
    var trans = 1;
    for (kk=0;kk<text.length;kk++)
    {
        subsymb = text.substr(kk,1);
        if ((subsymb=="[") || (subsymb=="<"))
        {
            trans = 0;
        }
        if ((subsymb=="]") || (subsymb==">"))
        {
            trans = 1;
        }
        if (trans)
        {
            symb = transsymbtocyr(txtnew.substr(txtnew.length-1,1), subsymb);
        }
        else
        {
            symb = txtnew.substr(txtnew.length-1,1) + subsymb;
        }
        txtnew = txtnew.substr(0,txtnew.length-1) + symb;
    }
    return txtnew;
}

//==========================================
// TRANSLITIRATE (Symbol convertion)
//------------------------------------------
// Original code from translit.ru
// by Igor Ilyin (2002-2004)
//==========================================

function transsymbtocyr(pretxt,txt)
{
    var doubletxt = pretxt+txt;
    var code = txt.charCodeAt(0);
    if (!(((code>=65) && (code<=123))||(code==35)||(code==39))) return doubletxt;
    var ii;
    for (ii=0; ii<lat_lr2.length; ii++)
    {
        if (lat_lr2[ii]==doubletxt) return rus_lr2[ii];
    }
    for (ii=0; ii<lat_lr1.length; ii++)
    {
        if (lat_lr1[ii]==txt) return pretxt+rus_lr1[ii];
    }
    return doubletxt;
}

Заменяй буквы в русской раскладке и вот тебе готовый мод! smile

Добавлено @ 04:06
Ах, да! Чуть не забыл. Ну и сама кнопка:
Код

<input type='button' accesskey='t' value=' TRANSLIT ' onclick='translit()' class='codebuttons' name='TRANSLIT' onmouseover="hstat('translit')" />



--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Maker
Дата 11.11.2005, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Огромное спасибо за ответ!

Ресурс, оказывается, уже создан.
PM MAIL   Вверх
Maker
Дата 15.12.2005, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Опять возвращаюсь к этой теме, ибо создатели готового ресурса на письма не отвечают.
В javascript-е я полный чайник, потому попрошу заранее набраться терпения.
В моей транслитерации кириллица не участвует.
Конвертация идет между расскладками, похожими друг на друга на 80%. Из английской раскладки транслитерируются только следующие знаки (в большом и малом регистре)

w - ü

[ - ö

] - ğ

; - ı

' - ə

, - ç

. - ş

/ - .

? - ,

Для наглядности азербайджанская клавиатура представлена тут.
Буду признателен за помощь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Продвижение и оптимизация сайтов | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.