Как параметризовать / транслитерировать в Javascript? - PullRequest
3 голосов
/ 24 января 2010

В Ruby on Rails вы можете легко преобразовать «любой» текст в формат, который будет работать для поддоменов / путей.

1) "I am nobody." -> "i-am-nobody"
2) "Grünkohl is a german word." -> "grunkohl-is-a-german-word"

Я бы хотел сделать это на стороне клиента для высокой скорости отклика (альтернатива была бы через Ajax).

Последний пример называется транслитерацией (преобразование умлаутов и других нелатинских букв алфавита в латинские). Транслитерация была бы отличной возможностью (в таких случаях я мог бы использовать Ajax, чтобы Iconv сделал это).

Кто-нибудь знает, как это сделать с помощью JavaScript? Мой текущий код работает нормально, но есть проблемы с несколькими пробелами, и Tête-à-tête становится Tte--tte, что просто ужасно.

Ответы [ 3 ]

9 голосов
/ 24 января 2010

Когда мне это было нужно, я использовал реализацию Javascript для Django, которая охватывает большую часть этого и даже больше:)

Его можно найти здесь: https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/static/admin/js/urlify.js

0 голосов
/ 25 августа 2014

Вот JS для транслитерации переданной фразы с русского на английский для нужд URL. Можно изменить свои данные, чтобы подать заявку на французский или любой другой язык. Все, кроме букв и цифр, заменяется на «-», двойные и заканчивающиеся «-» удаляются.

function url(word, letterVersionOrder) {
        var letters = 'a b v g d e ["zh","j"] z i y k l m n o p r s t u f h c ch sh ["shh","shch"] ~ y ~ e yu ya ~ ["jo","e"]'.split(' ');
        var wordSeparator = '';
        word = word.toLowerCase();
        for (var i = 0; i < word.length; ++i) {
            var charCode = word.charCodeAt(i);
            var chars = (charCode >= 1072 ? letters[charCode - 1072] : word[i]);
            if (chars.length < 3) {
                wordSeparator += chars;
            } else {
                wordSeparator += eval(chars)[letterVersionOrder];
            }
        }
        return(wordSeparator.
                replace(/[^a-zA-Z0-9\-]/g, '-').
                replace(/[-]{2,}/gim, '-').
                replace(/^\-+/g, '').
                replace(/\-+$/g, ''));
    }

Вот более быстрая минимизированная версия:

function url(w, v) { var tr = 'a b v g d e ["zh","j"] z i y k l m n o p r s t u f h c ch sh ["shh","shch"] ~ y ~ e yu ya ~ ["jo","e"]'.split(' '); var ww = ''; w = w.toLowerCase(); for (var i = 0; i < w.length; ++i) { var cc = w.charCodeAt(i); var ch = (cc >= 1072 ? tr[cc - 1072] : w[i]); if (ch.length < 3) {ww += ch;} else {ww += eval(ch)[v];} } return(ww.replace(/[^a-zA-Z0-9\-]/g, '-').replace(/[-]{2,}/gim, '-').replace(/^\-+/g, '').replace(/\-+$/g, ''));}

Принято с здесь .

0 голосов
/ 08 июня 2013

urlify для пакета npm.js https://npmjs.org/package/parameterize

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...