将文本转换为塞尔维亚语西里尔字母

时间:2015-07-24 18:50:33

标签: javascript cyrillic transliteration

如何将Serbian Cyrilic alphabet添加到我的HTML中,以使我的浏览器识别它?

例如,我需要将“Povrce”变成“Поврће”。

我只需要一个代码,所以当我输入“Поврће”或“Povrće”时,浏览器就可以显示它。

3 个答案:

答案 0 :(得分:2)

你的意思是transliterating拉丁语塞尔维亚语西里尔语(反之亦然)。这没有问题,因为音译是一次一个字符的可逆转换(而转录是语音的)。只需使用alphabet设置“关联”对象,然后相应地设置map()。这是一些概念证明:

var latinString = 'Povrce';
var latinToSerbian = { "P":"П", "o":"о", "v":"в", "r":"р", "c":"ћ", "e":"е" /* ... */ };
var serbianString = latinString.split('').map(function(character){
    return latinToSerbian[character];
}).join('');
console.log( latinString + ' = ' + serbianString ); // Povrce = Поврће

对于HTML,当然,总会有实体来诉诸。看一下Cyrillic Unicode block,您可以轻松地将字符转换为十进制或十六进制代码点:

element.innerHTML = 'Поврће';
element.onclick = function(){ alert('\u041F\u043E\u0432\u0440\u045B\u0435'); };

如果您想在网站上打字时进行即时音译,请使用charCodeAt()<input> element作为输入的文字,其中包含以下内容:

var latinToCyrillic = { "80": 1055 /* entire alphabet */ };
var cyrillicToLatin = { "1115" : 263 /* entire alphabet */ };
var toCyrillic = function(character){
    return String.fromCharCode(latinToCyrillic[character.charCodeAt(0)]);
};
var toLatin = function(character){
    return String.fromCharCode(cyrillicToLatin[character.charCodeAt(0)]);
};
console.log(
    toCyrillic('P'), // === "П"
    toLatin('ћ')     // === "ć"
);

答案 1 :(得分:0)

我做了这个解决方案,有点简单,但也许可以帮助你:

var pp='VOĆE POVRĆE DINJA';
var ss=["NJ","V","O","Ć","E","P","R","D","I","A"];
var cyr=["Њ","В","О","Ћ","Е","П","Р","Д","И","А"];
for(var i=0;i<ss.length;i++) {
    var tt=cyr[i];
    pp=pp.replace(new RegExp(ss[i], "g"),tt);
}

jsfiddle example, too

sscyr中的字符位置非常重要。因此,首先是ljnj等字符。

更新 使用文本框,失去焦点后,短语将被转换。当然,你必须将所有字符放在数组中。

&#13;
&#13;
function chChar(ele) {
    var pp=ele.value;
    var ss=["NJ","V","O","Ć","E","P","R","D","I","A"];
var cyr=["Њ","В","О","Ћ","Е","П","Р","Д","И","А"];
for(var i=0;i<ss.length;i++) {
    var tt=cyr[i];
    pp=pp.replace(new RegExp(ss[i], "gi"),tt);
}
document.getElementById('cyr').innerHTML=pp;
}
&#13;
<input type="text" onblur="chChar(this);" /><br>
<div id="cyr"></div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

wikipedia list中完整的语言音译映射,包括大写和小写,只是没有其他人列出它。根据音译方向,翻转映射(当前为西里尔字母->拉丁字母)。

const langmap = {
    "А": "A",
    "Б": "B",
    "В": "V",
    "Г": "G",
    "Д": "D",
    "Ђ": "Đ",
    "Е": "E",
    "Ж": "Ž",
    "З": "Z",
    "И": "I",
    "Ј": "J",
    "К": "K",
    "Л": "L",
    "Љ": "Lj",
    "М": "M",
    "Н": "N",
    "Њ": "Nj",
    "О": "O",
    "П": "P",
    "Р": "R",
    "С": "S",
    "Т": "T",
    "Ћ": "Ć",
    "У": "U",
    "Ф": "F",
    "Х": "H",
    "Ц": "C",
    "Ч": "Č",
    "Џ": "Dž",
    "Ш": "Š",
    "а": "a",
    "б": "b",
    "в": "v",
    "г": "g",
    "д": "d",
    "ђ": "đ",
    "е": "e",
    "ж": "ž",
    "з": "z",
    "и": "i",
    "ј": "j",
    "к": "k",
    "л": "l",
    "љ": "lj",
    "м": "m",
    "н": "n",
    "њ": "nj",
    "о": "o",
    "п": "p",
    "р": "r",
    "с": "s",
    "т": "t",
    "ћ": "ć",
    "у": "u",
    "ф": "f",
    "х": "h",
    "ц": "c",
    "ч": "č",
    "џ": "dž",
    "ш": "š",
}

function remapLang (str) {
    return str.replace(/[^\u0000-\u007E]/g, function(a){ 
        return langmap[a] || a; 
    });
}

然后进行眼球测试:

var tests = [
  "First name: ГЕОРГИ, Last name: КОСТАДИНОВ.",
  // --> First name: GEORGI, Last name: KOSTADINOV.
  "First name: Димитър, Last name: Стоев."
  // --> First name: Dimitъr, Last name: Stoev
];
tests.map(remapLang).forEach(console.log);

我会注意到上述测试是真实的示例,因此Wiki似乎缺少与“不赞成使用的”(?)“硬符号”相同的词,我想人们仍然会使用? YMMV ...