首页 > 解决方案 > 在 JavaScript 中输入时将拉丁字母动态替换为西里尔字母

问题描述

我正在尝试构建这个程序,它需要输入部分类似于谷歌翻译的。也就是说,拉丁字母在键入时会动态替换为西里尔字母(例如,当键入字母 B 时,字母 Б 会打印在输入框中,依此类推)

我尝试通过 onkeyup 事件将拉丁字母与西里尔字母联系起来,但是像 Sh(Ш) 或 Ya(Я) 这样的字母与组合键相关联,我找不到解决方法。我会包含我已经尝试过的代码示例,但我遇到的问题更多是与计划相关的,而不是与实施相关的。如果我能得到帮助来弄清楚如何解决和构建这个问题,那就太好了。

TIA

标签: javascript

解决方案


我很无聊,所以我编写了一个示例(概念证明)
我不断确定普通文本是什么,以及转换后的文本是什么,这就是允许多个键组合的原因(不仅查看每个键输入的整个字符串)

var _change={sh:'lol',ab:'cd',a:'z',SH:'LOL',AB:'CD',A:'Z'} //largest strings first
var _default={lol:'sh',cd:'ab',z:'a',LOL:'SH',CD:'AB',Z:'A'} //largest strings first
//you can fill these objects with as many translations as you want
//if a smaller string was first, "ab" would turn to "zb" before it can turn into "cd"
//make sure the every translation text is different from any original text
var _text=document.getElementById('text')
let defaultText=(text)=>text.split('').map(l=>_default[l]||l).join('')
let changeText=(text)=>{
  Object.keys(_change).forEach(toSplit=>text=text.split(toSplit).join(_change[toSplit]))
  return text
}
setInterval(()=>{
  let text=_text.value
  _text.value=changeText(defaultText(text))
},300)
<input id="text" />
<p>I only have 3(technically 6) examples.. <i>'sh' to 'lol'</i>, <i>'a' to 'z'</i> and <i>'ab' to 'cd'</i>
<br><p>technically 6 because I also have <i>'SH' to 'LOL'</i> and so forth


推荐阅读