在jquery上将俄语翻译为英语

时间:2014-09-07 23:19:11

标签: jquery transliteration

我制作了一个Jquery脚本,用于从俄语字符到英语的音译。 但是我无法解决两个问题。这里有代码:

$( window ).load(function() {

$("#username,.validate-username").keyup(

function TRANS () {
    var translit = $("#username,.validate-username").val()
        .replace("ӓ", "a")
        .replace("ӓ̄", "a")
        .replace("ӑ", "a")
        .replace("а̄", "a")
        .replace("ӕ", "ae")
        .replace("а́", "a")
        .replace("а̊", "a")
        .replace("ә", "a")
        .replace("ӛ", "a")
        .replace("я", "a")
        .replace("ѫ", "a")
        .replace("а", "a")
        .replace("б", "b")
        .replace("в", "v")
        .replace("ѓ", "g")
        .replace("ґ", "g")
        .replace("ғ", "g")
        .replace("ҕ", "g")
        .replace("г", "g")
        .replace("һ", "h")
        .replace("д", "d")
        .replace("ђ", "d")
        .replace("ӗ", "e")
        .replace("ё", "e")
        .replace("є", "e")
        .replace("э", "e")
        .replace("ѣ", "e")
        .replace("е", "e")
        .replace("ж", "zh")
        .replace("җ", "zh")
        .replace("ӝ", "zh")
        .replace("ӂ", "zh")
        .replace("ӟ", "z")
        .replace("ӡ", "z")
        .replace("ѕ", "z")
        .replace("з", "z")
        .replace("ӣ", "j")
        .replace("и́", "i")
        .replace("ӥ", "i")
        .replace("і", "i")
        .replace("ї", "ji")
        .replace("і̄", "i")
        .replace("и", "i")
        .replace("ј", "j")
        .replace("ј̵", "j")
        .replace("й", "j")
        .replace("ќ", "k")
        .replace("ӄ", "k")
        .replace("ҝ", "k")
        .replace("ҡ", "k")
        .replace("ҟ", "k")
        .replace("қ", "k")
        .replace("к̨", "k")
        .replace("к", "k")
        .replace("ԛ", "q")
        .replace("љ", "l")
        .replace("Л’", "l")
        .replace("ԡ", "l")
        .replace("л", "l")
        .replace("м", "m")
        .replace("њ", "n")
        .replace("ң", "n")
        .replace("ӊ", "n")
        .replace("ҥ", "n")
        .replace("ԋ", "n")
        .replace("ԣ", "n")
        .replace("ӈ", "n")
        .replace("н̄", "n")
        .replace("н", "n")
        .replace("ӧ", "o")
        .replace("ө", "o")
        .replace("ӫ", "o")
        .replace("о̄̈", "o")
        .replace("ҩ", "o")
        .replace("о́", "o")
        .replace("о̄", "o")
        .replace("о", "o")
        .replace("œ", "oe")
        .replace("ҧ", "p")
        .replace("ԥ", "p")
        .replace("п", "p")
        .replace("р", "r")
        .replace("с̀", "s")
        .replace("ҫ", "s")
        .replace("ш", "sh")
        .replace("щ", "sch")
        .replace("с", "s")
        .replace("ԏ", "t")
        .replace("т̌", "t")
        .replace("ҭ", "t")
        .replace("т", "t")
        .replace("ӱ", "u")
        .replace("ӯ", "u")
        .replace("ў", "u")
        .replace("ӳ", "u")
        .replace("у́", "u")
        .replace("ӱ̄", "u")
        .replace("ү", "u")
        .replace("ұ", "u")
        .replace("ӱ̄", "u")
        .replace("ю̄", "u")
        .replace("ю", "u")
        .replace("у", "u")
        .replace("ԝ", "w")
        .replace("ѳ", "f")
        .replace("ф", "f")
        .replace("ҳ", "h")
        .replace("х", "h")
        .replace("ћ", "c")
        .replace("ҵ", "c")
        .replace("џ", "d")
        .replace("ч", "c")
        .replace("ҷ", "c")
        .replace("ӌ", "c")
        .replace("ӵ", "c")
        .replace("ҹ", "c")
        .replace("ч̀", "c")
        .replace("ҽ", "c")
        .replace("ҿ", "c")
        .replace("ц", "c")
        .replace("ъ", "y")
        .replace("ӹ", "y")
        .replace("ы̄", "y")
        .replace("ѵ", "y")
        .replace("ы", "y")
        .replace("ь", "y")
        .replace("", "")
        .replace("Ӓ", "a")
        .replace("Ӓ̄", "a")
        .replace("Ӑ", "a")
        .replace("А̄", "a")
        .replace("Ӕ", "ae")
        .replace("А́", "a")
        .replace("А̊", "a")
        .replace("Ә", "a")
        .replace("Ӛ", "a")
        .replace("Я", "a")
        .replace("Ѫ", "a")
        .replace("А", "a")
        .replace("Б", "b")
        .replace("В", "v")
        .replace("Ѓ", "g")
        .replace("Ґ", "g")
        .replace("Ғ", "g")
        .replace("Ҕ", "g")
        .replace("Г", "g")
        .replace("Һ", "h")
        .replace("Д", "d")
        .replace("Ђ", "d")
        .replace("Ӗ", "e")
        .replace("Ё", "e")
        .replace("Є", "e")
        .replace("Э", "e")
        .replace("Ѣ", "e")
        .replace("Е", "e")
        .replace("Ж", "zh")
        .replace("Җ", "zh")
        .replace("Ӝ", "zh")
        .replace("Ӂ", "zh")
        .replace("Ӟ", "z")
        .replace("Ӡ", "z")
        .replace("Ѕ", "z")
        .replace("З", "z")
        .replace("Ӣ", "j")
        .replace("И́", "i")
        .replace("Ӥ", "i")
        .replace("І", "i")
        .replace("Ї", "ji")
        .replace("І̄", "i")
        .replace("И", "i")
        .replace("Ј", "j")
        .replace("Ј̵", "j")
        .replace("Й", "j")
        .replace("Ќ", "k")
        .replace("Ӄ", "k")
        .replace("Ҝ", "k")
        .replace("Ҡ", "k")
        .replace("Ҟ", "k")
        .replace("Қ", "k")
        .replace("К̨", "k")
        .replace("К", "k")
        .replace("ԛ", "q")
        .replace("Љ", "l")
        .replace("Л’", "l")
        .replace("ԡ", "l")
        .replace("Л", "l")
        .replace("М", "m")
        .replace("Њ", "n")
        .replace("Ң", "n")
        .replace("Ӊ", "n")
        .replace("Ҥ", "n")
        .replace("Ԋ", "n")
        .replace("ԣ", "n")
        .replace("Ӈ", "n")
        .replace("Н̄", "n")
        .replace("Н", "n")
        .replace("Ӧ", "o")
        .replace("Ө", "o")
        .replace("Ӫ", "o")
        .replace("О̄̈", "o")
        .replace("Ҩ", "o")
        .replace("О́", "o")
        .replace("О̄", "o")
        .replace("О", "o")
        .replace("Œ", "oe")
        .replace("Ҧ", "p")
        .replace("ԥ", "p")
        .replace("П", "p")
        .replace("Р", "r")
        .replace("С̀", "s")
        .replace("Ҫ", "s")
        .replace("Ш", "sh")
        .replace("Щ", "sch")
        .replace("С", "s")
        .replace("Ԏ", "t")
        .replace("Т̌", "t")
        .replace("Ҭ", "t")
        .replace("Т", "t")
        .replace("Ӱ", "u")
        .replace("Ӯ", "u")
        .replace("Ў", "u")
        .replace("Ӳ", "u")
        .replace("У́", "u")
        .replace("Ӱ̄", "u")
        .replace("Ү", "u")
        .replace("Ұ", "u")
        .replace("Ӱ̄", "u")
        .replace("Ю̄", "u")
        .replace("Ю", "u")
        .replace("У", "u")
        .replace("ԝ", "w")
        .replace("Ѳ", "f")
        .replace("Ф", "f")
        .replace("Ҳ", "h")
        .replace("Х", "h")
        .replace("Ћ", "c")
        .replace("Ҵ", "c")
        .replace("Џ", "d")
        .replace("Ч", "c")
        .replace("Ҷ", "c")
        .replace("Ӌ", "c")
        .replace("Ӵ", "c")
        .replace("Ҹ", "c")
        .replace("Ч̀", "c")
        .replace("Ҽ", "c")
        .replace("Ҿ", "c")
        .replace("Ц", "c")
        .replace("Ъ", "y")
        .replace("Ӹ", "y")
        .replace("Ы̄", "y")
        .replace("Ѵ", "y")
        .replace("Ы", "y")
        .replace("Ь", "y")
        .replace("№", "")
        .replace("\'", "")
        .replace("\"", "")
        .replace(";", "")
        .replace(":", "")
        .replace(",", "")
        .replace(".", "")
        .replace(">", "")
        .replace("<", "")
        .replace("?", "")
        .replace("!", "")
        .replace("@", "")
        .replace("#", "")
        .replace("$", "")
        .replace("%", "")
        .replace("&", "")
        .replace("^", "")
        .replace("(", "")
        .replace(")", "")
        .replace("*", "")
        .replace("+", "")
        .replace("~", "")
        .replace("|", "")
        .replace("{", "")
        .replace("}", "")
        .replace("|", "")
        .replace("[", "")
        .replace("]", "")
        .replace("/", "")
        .replace("`", "")
        .replace("=", "")
        .replace("+", "")
        .replace("_", "")
        .replace("\s", "")
        .replace("\s\s", "")
        .replace("/[^A-Za-z0-9\-]", "")
        .trim();
    $(this).val(translit);
});

});

问题1 - 当用户按下并按住某个键时 - 脚本不起作用 问题2 - 在我看来,代码很长。也许有一个更短的方式? 有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

不确定按住键的问题是什么,不知道预期的行为是什么,但可以缩短这样的时间......

$("#username,.validate-username").keyup(function(){
    // get reference to value
        var val = $("#username,.validate-username").val()
    // define map of translations to do
        var map = [
    ["ӓ", "a"], ["ӓ̄", "a"], ["ӑ", "a"], ["а̄", "a"], ["ӕ", "ae"], ["а́", "a"], ["а̊", "a"], ["ә", "a"], ["ӛ", "a"], ["я", "a"], ["ѫ", "a"], ["а", "a"], ["б", "b"], ["в", "v"], ["ѓ", "g"], ["ґ", "g"], ["ғ", "g"], ["ҕ", "g"], ["г", "g"], ["һ", "h"], ["д", "d"], ["ђ", "d"], ["ӗ", "e"], ["ё", "e"], ["є", "e"], ["э", "e"], ["ѣ", "e"], ["е", "e"], ["ж", "zh"], ["җ", "zh"], ["ӝ", "zh"], ["ӂ", "zh"], ["ӟ", "z"], ["ӡ", "z"], ["ѕ", "z"], ["з", "z"], ["ӣ", "j"], ["и́", "i"], ["ӥ", "i"], ["і", "i"], ["ї", "ji"], ["і̄", "i"], ["и", "i"], ["ј", "j"], ["ј̵", "j"], ["й", "j"], ["ќ", "k"], ["ӄ", "k"], ["ҝ", "k"], ["ҡ", "k"], ["ҟ", "k"], ["қ", "k"], ["к̨", "k"], ["к", "k"], ["ԛ", "q"], ["љ", "l"], ["Л’", "l"], ["ԡ", "l"], ["л", "l"], ["м", "m"], ["њ", "n"], ["ң", "n"], ["ӊ", "n"], ["ҥ", "n"], ["ԋ", "n"], ["ԣ", "n"], ["ӈ", "n"], ["н̄", "n"], ["н", "n"], ["ӧ", "o"], ["ө", "o"], ["ӫ", "o"], ["о̄̈", "o"], ["ҩ", "o"], ["о́", "o"], ["о̄", "o"], ["о", "o"], ["œ", "oe"], ["ҧ", "p"], ["ԥ", "p"], ["п", "p"], ["р", "r"], ["с̀", "s"], ["ҫ", "s"], ["ш", "sh"], ["щ", "sch"], ["с", "s"], ["ԏ", "t"], ["т̌", "t"], ["ҭ", "t"], ["т", "t"], ["ӱ", "u"], ["ӯ", "u"], ["ў", "u"], ["ӳ", "u"], ["у́", "u"], ["ӱ̄", "u"], ["ү", "u"], ["ұ", "u"], ["ӱ̄", "u"], ["ю̄", "u"], ["ю", "u"], ["у", "u"], ["ԝ", "w"], ["ѳ", "f"], ["ф", "f"], ["ҳ", "h"], ["х", "h"], ["ћ", "c"], ["ҵ", "c"], ["џ", "d"], ["ч", "c"], ["ҷ", "c"], ["ӌ", "c"], ["ӵ", "c"], ["ҹ", "c"], ["ч̀", "c"], ["ҽ", "c"], ["ҿ", "c"], ["ц", "c"], ["ъ", "y"], ["ӹ", "y"], ["ы̄", "y"], ["ѵ", "y"], ["ы", "y"], ["ь", "y"], ["", ""], ["Ӓ", "a"], ["Ӓ̄", "a"], ["Ӑ", "a"], ["А̄", "a"], ["Ӕ", "ae"], ["А́", "a"], ["А̊", "a"], ["Ә", "a"], ["Ӛ", "a"], ["Я", "a"], ["Ѫ", "a"], ["А", "a"], ["Б", "b"], ["В", "v"], ["Ѓ", "g"], ["Ґ", "g"], ["Ғ", "g"], ["Ҕ", "g"], ["Г", "g"], ["Һ", "h"], ["Д", "d"], ["Ђ", "d"], ["Ӗ", "e"], ["Ё", "e"], ["Є", "e"], ["Э", "e"], ["Ѣ", "e"], ["Е", "e"], ["Ж", "zh"], ["Җ", "zh"], ["Ӝ", "zh"], ["Ӂ", "zh"], ["Ӟ", "z"], ["Ӡ", "z"], ["Ѕ", "z"], ["З", "z"], ["Ӣ", "j"], ["И́", "i"], ["Ӥ", "i"], ["І", "i"], ["Ї", "ji"], ["І̄", "i"], ["И", "i"], ["Ј", "j"], ["Ј̵", "j"], ["Й", "j"], ["Ќ", "k"], ["Ӄ", "k"], ["Ҝ", "k"], ["Ҡ", "k"], ["Ҟ", "k"], ["Қ", "k"], ["К̨", "k"], ["К", "k"], ["ԛ", "q"], ["Љ", "l"], ["Л’", "l"], ["ԡ", "l"], ["Л", "l"], ["М", "m"], ["Њ", "n"], ["Ң", "n"], ["Ӊ", "n"], ["Ҥ", "n"], ["Ԋ", "n"], ["ԣ", "n"], ["Ӈ", "n"], ["Н̄", "n"], ["Н", "n"], ["Ӧ", "o"], ["Ө", "o"], ["Ӫ", "o"], ["О̄̈", "o"], ["Ҩ", "o"], ["О́", "o"], ["О̄", "o"], ["О", "o"], ["Œ", "oe"], ["Ҧ", "p"], ["ԥ", "p"], ["П", "p"], ["Р", "r"], ["С̀", "s"], ["Ҫ", "s"], ["Ш", "sh"], ["Щ", "sch"], ["С", "s"], ["Ԏ", "t"], ["Т̌", "t"], ["Ҭ", "t"], ["Т", "t"], ["Ӱ", "u"], ["Ӯ", "u"], ["Ў", "u"], ["Ӳ", "u"], ["У́", "u"], ["Ӱ̄", "u"], ["Ү", "u"], ["Ұ", "u"], ["Ӱ̄", "u"], ["Ю̄", "u"], ["Ю", "u"], ["У", "u"], ["ԝ", "w"], ["Ѳ", "f"], ["Ф", "f"], ["Ҳ", "h"], ["Х", "h"], ["Ћ", "c"], ["Ҵ", "c"], ["Џ", "d"], ["Ч", "c"], ["Ҷ", "c"], ["Ӌ", "c"], ["Ӵ", "c"], ["Ҹ", "c"], ["Ч̀", "c"], ["Ҽ", "c"], ["Ҿ", "c"], ["Ц", "c"], ["Ъ", "y"], ["Ӹ", "y"], ["Ы̄", "y"], ["Ѵ", "y"], ["Ы", "y"], ["Ь", "y"], ["№", ""], ["\'", ""], ["\"", ""], [";", ""], [":", ""], [",", ""], [".", ""], [">", ""], ["<", ""], ["?", ""], ["!", ""], ["@", ""], ["#", ""], ["$", ""], ["%", ""], ["&", ""], ["^", ""], ["(", ""], [")", ""], ["*", ""], ["+", ""], ["~", ""], ["|", ""], ["{", ""], ["}", ""], ["|", ""], ["[", ""], ["]", ""], ["/", ""], ["`", ""], ["=", ""], ["+", ""], ["_", ""], ["\s", ""], ["\s\s", ""], ["/[^A-Za-z0-9\-]", ""]
];
    // loop through the map, doing all necessary replacements
    for(var i=0; i<map.length; i++){
        val = val.replace(map[i][0], map[i][1]);
    };

    $(this).val(val.trim());

});

如果可能的话,可能最好将映射数据拉入源中的单独文件中。

DEMO:http://jsfiddle.net/avtt8pkk/

答案 1 :(得分:0)

1)使用keypress代替keyup

2)将这些字符存储到数组中并使用for循环:

var r = ['ӓ',...];
var r = ['a',...];
...
var translit = $("#username,.validate-username").val();
for ( var i = 0 ; i < r.length ; i++ ) {
    translit.replace(r[i], e[i]);
}
...

2')您可以使用地图

var map = {"ӓ":"a",...};

答案 2 :(得分:0)

似乎,我找到了解决方案。应该是这样的

.bind('keyup keypress keydown', function ()

http://jsfiddle.net/terveg/v812L53n/