在 JavaScript 中输入时将拉丁字母动态替换为西里尔字母

时间:2021-06-08 00:54:58

标签: javascript

我正在尝试构建这个程序,该程序需要输入部分类似于 google-translate 的输入部分。也就是说,拉丁字母在输入时被动态替换为西里尔字母(例如,当键入字母 B 时,字母 Б 被打印在输入框中等)

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

TIA

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

const map = {
  'b': 'Б', //...etc
}

function onPressHandler(e) {
  const value = e.target.value 
  //alternatively you could handle each pressed key at a time

  const length = value.length
  let output = ''

  for (let i = 0; i < length; i++)
    output += map[value.chatAt(i)]

  e.target.value = output // if you want or just return it


}

相关问题