如何在Javascript中参数化/音译?

时间:2010-01-24 17:40:34

标签: javascript ruby-on-rails internationalization

在Ruby on Rails中,您可以轻松地将“任意”文本转换为适用于子域名/路径名的格式。

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

我想在客户端执行此操作以获得高响应性(替代方案是通过Ajax)。

最后一个例子称为音译(将变音符号和其他非拉丁字母字母转换为拉丁字母)。音译将是一个很好的2个功能(在这种情况下,我可以回退到Ajax让Iconv这样做。)

有人知道如何使用JavaScript吗?我当前的代码工作正常但有多个空格的问题,而Tête-à-tête变成了Tte--tte,这只是丑陋。

3 个答案:

答案 0 :(得分:9)

当我需要这个时,我使用了Django javascript实现,这包括大部分内容甚至更多:)

可以在这里找到: https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/static/admin/js/urlify.js

答案 1 :(得分:0)

urlify for node.js npm package https://npmjs.org/package/parameterize

答案 2 :(得分:0)

这里是一个JS,用于将传递的俄语短语音译为英语以满足URL需求。可以修改其数据以申请法语或任何其他语言。除了字母和数字之外的任何内容都用" - ",double和结束" - "被删除。

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, ''));}

通过here