【问题标题】:Convert text to and from Serbian cyrillic letters将文本与塞尔维亚西里尔字母相互转换
【发布时间】:2015-07-24 18:50:32
【问题描述】:

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

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

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

【问题讨论】:

  • Добрі день) 您可以使用带有 String.prototype.replace 的正则表达式数组对其进行解析,但它需要 Javascript。谷歌:javascript regexstring replace
  • @Ivan 就像 Stephan 写的一样,并且有带有西里尔代码的 w3schools 链接:w3schools.com/charsets/ref_utf_cyrillic.asp(p.s. nadam se da ce ti pomoci :))。
  • 这可能很棘手......首先您必须将 lj、nj 之类的字母转换(例如 njњ (њ)),然后再进行其他字母的转换。

标签: javascript cyrillic transliteration


【解决方案1】:

您的意思是 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('ћ')     // === "ć"
);

【讨论】:

  • 这行不通,因为一些拉丁字符实际上被组合为一个西里尔字符。例如,拉丁语 shch 被音译为乌克兰语(和俄语,可能还有更多)щ
  • @StephanBijzitter:反对,请参阅ISO 9 以供参考。这样做是为了避免您指出的问题。例如,在德语中,您可以将Щ 转录为schtsch,但您也可以将其罗马化为šč。至于 ISO 9,它的唯一等价物是 Ŝ
【解决方案2】:

来自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...

【讨论】:

    【解决方案3】:

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

    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 这样的第一个字符。

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

    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;
    }
    <input type="text" onblur="chChar(this);" /><br>
    <div id="cyr"></div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      相关资源
      最近更新 更多