Script перевода с кириллицы в транслит

Ivan Carpenter

Участник
Топикстартер
Сообщения
6
Реакции
0
Здравствуйте! Хочу создать smartname в котором бы скриптом из заданного smartname имя файла конвертировалось из кириллицы в транслит.
Делаю так:
function f ()
{

var ru = {
'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd',
'е': 'e', 'ё': 'e', 'ж': 'j', 'з': 'z', 'и': 'i',
'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o',
'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u',
'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh',
'щ': 'shch', 'ы': 'y', 'э': 'e', 'ю': 'u', 'я': 'ya'
}, n_str = [];

str = str.replace(/[ъь]+/g, '').replace(/й/g, 'i');
var name="[Job label name]";
for ( var i = 0; i < str.length; ++i ) {
n_str.push(
ru[ str ]
|| ru[ str.toLowerCase() ] == undefined && str
|| ru[ str.toLowerCase() ].replace(/^(.)/, function ( match ) { return match.toUpperCase() })
);
}

return n_str.join('');
}
f ();
Подскажите где ошибка. Или может быть у кого-то есть такой скрипт?
 

baraka

Участник
Сообщения
193
Реакции
90
Здравствуйте! Хочу создать smartname в котором бы скриптом из заданного smartname имя файла конвертировалось из кириллицы в транслит.
Делаю так:
function f ()
{

var ru = {
'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd',
'е': 'e', 'ё': 'e', 'ж': 'j', 'з': 'z', 'и': 'i',
'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o',
'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u',
'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh',
'щ': 'shch', 'ы': 'y', 'э': 'e', 'ю': 'u', 'я': 'ya'
}, n_str = [];

str = str.replace(/[ъь]+/g, '').replace(/й/g, 'i');
var name="[Job label name]";
for ( var i = 0; i < str.length; ++i ) {
n_str.push(
ru[ str ]
|| ru[ str.toLowerCase() ] == undefined && str
|| ru[ str.toLowerCase() ].replace(/^(.)/, function ( match ) { return match.toUpperCase() })
);
}

return n_str.join('');
}
f ();
Подскажите где ошибка. Или может быть у кого-то есть такой скрипт?

вот нормальный рабочий скрипт
Код:
function translit(str){
    var sp = '_';
    var text = str.toLowerCase();
    var transl = {
        '\u0430': 'a', '\u0431': 'b', '\u0432': 'v', '\u0433': 'g', '\u0434': 'd', '\u0435': 'e', '\u0451': 'e', '\u0436': 'zh',
        '\u0437': 'z', '\u0438': 'i', '\u0439': 'j', '\u043a': 'k', '\u043b': 'l', '\u043c': 'm', '\u043d': 'n', '\u043e': 'o',
        '\u043f': 'p', '\u0440': 'r', '\u0441': 's', '\u0442': 't', '\u0443': 'u', '\u0444': 'f', '\u0445': 'h', '\u0446': 'c',
        '\u0447': 'ch', '\u0448': 'sh', '\u0449': 'shch', '\u044a': '\'', '\u044b': 'y', '\u044c': '', '\u044d': 'e', '\u044e': 'yu',
        '\u044f': 'ya',       
        '\u00AB':'_', '\u00BB':'_', // «»
        ' ': sp, '_': sp, '`': sp, '~': sp,
        '!': sp, '@': sp, '#': sp, '$': sp,
        '%': sp, '^': sp, '&': sp, '*': sp, '(': sp, ')': sp, '-': sp, '\=': sp,
        '+': sp, '[': sp, ']': sp, '\\': sp, '|': sp, '/': sp, '.': sp, ',': sp,
        '{': sp, '}': sp, '\'': sp, '"': sp, ';': sp, ':': sp, '?': sp, '<': sp,
        '>': sp, '№': sp                   
    }
    var result = '';
    var curent_sim = '';
    for(i=0; i < text.length; i++) {
        if(transl[text[i]] != undefined) {           
            if(curent_sim != transl[text[i]] || curent_sim != sp){
                result += transl[text[i]];
                curent_sim = transl[text[i]];               
            }                   
        } else {
            result += text[i];
            curent_sim = text[i];
        }       
    }
    result = result.replace(/^_/, '').replace(/_$/, ''); // trim
    return result
}


translit("текст выфвыф");
 
  • Спасибо
Реакции: Ivan Carpenter

Ivan Carpenter

Участник
Топикстартер
Сообщения
6
Реакции
0
вот нормальный рабочий скрипт
Код:
function translit(str){
    var sp = '_';
    var text = str.toLowerCase();
    var transl = {
        '\u0430': 'a', '\u0431': 'b', '\u0432': 'v', '\u0433': 'g', '\u0434': 'd', '\u0435': 'e', '\u0451': 'e', '\u0436': 'zh',
        '\u0437': 'z', '\u0438': 'i', '\u0439': 'j', '\u043a': 'k', '\u043b': 'l', '\u043c': 'm', '\u043d': 'n', '\u043e': 'o',
        '\u043f': 'p', '\u0440': 'r', '\u0441': 's', '\u0442': 't', '\u0443': 'u', '\u0444': 'f', '\u0445': 'h', '\u0446': 'c',
        '\u0447': 'ch', '\u0448': 'sh', '\u0449': 'shch', '\u044a': '\'', '\u044b': 'y', '\u044c': '', '\u044d': 'e', '\u044e': 'yu',
        '\u044f': 'ya',     
        '\u00AB':'_', '\u00BB':'_', // «»
        ' ': sp, '_': sp, '`': sp, '~': sp,
        '!': sp, '@': sp, '#': sp, '$': sp,
        '%': sp, '^': sp, '&': sp, '*': sp, '(': sp, ')': sp, '-': sp, '\=': sp,
        '+': sp, '[': sp, ']': sp, '\\': sp, '|': sp, '/': sp, '.': sp, ',': sp,
        '{': sp, '}': sp, '\'': sp, '"': sp, ';': sp, ':': sp, '?': sp, '<': sp,
        '>': sp, '№': sp                 
    }
    var result = '';
    var curent_sim = '';
    for(i=0; i < text.length; i++) {
        if(transl[text[i]] != undefined) {         
            if(curent_sim != transl[text[i]] || curent_sim != sp){
                result += transl[text[i]];
                curent_sim = transl[text[i]];             
            }                 
        } else {
            result += text[i];
            curent_sim = text[i];
        }     
    }
    result = result.replace(/^_/, '').replace(/_$/, ''); // trim
    return result
}


translit("текст выфвыф");
Подскажите, в какую строку подставить смартимя, имя в котором будет переводится?
 
Последнее редактирование:

ACTPOHOM

12 лет на форуме
Сообщения
2 981
Реакции
1 133
Можно обойтись без скрипта вообще. в стандартном
Проверил, все работает! Спасибо огромное!
можно обойтись вообще без скрипта, станартным форматированием смарнейма String Extract, я пошел тем путем, все равно надо менять всякие спецсимволы на что-то более устойчивое
 
  • Спасибо
Реакции: Ivan Carpenter

Ivan Carpenter

Участник
Топикстартер
Сообщения
6
Реакции
0
Можно обойтись без скрипта вообще. в стандартном

можно обойтись вообще без скрипта, станартным форматированием смарнейма String Extract, я пошел тем путем, все равно надо менять всякие спецсимволы на что-то более устойчивое
Да, понял как. Про замену в String Extract сразу не вспомнил. Спасибо!
 

ACTPOHOM

12 лет на форуме
Сообщения
2 981
Реакции
1 133
Эта фишка появилась с 14.0 до этого писали скриптами. у меня до сих пор лежит такой скрипт.