是否有任何库或工具可以将字符串从一种键盘布局“翻译”到另一种键盘布局?

是否有任何库或工具可以将字符串从一种键盘布局“翻译”到另一种键盘布局?

我想编写简单的 bash 脚本,在不同的键盘布局之间转换输入。例如,如果我的系统有俄语和英语布局,并且我将“Руддщ”字符串传递给此脚本,则它应该输出“Hello”。

目前我正在使用这段代码:

echo "$@" | iconv -t cp1251 | tr $(echo "[йцукенгшщзхъфывапролджэ\\ячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,\"№;:?Ёё]" | iconv -t cp1251) "[qwertyuiop\[\]asdfghjkl;'\\zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?@#$^&~\`]"

有明显的缺点:

  • 我必须使用iconv,因为我的系统使用utf8并且tr不能使用它。
  • 我必须手动输入所有字符,这导致缺乏适用性并且错误可能性很高。

我知道xneur有类似的功能,但我不想动态切换布局,只需根据请求翻译字符串。我查看了xneur源代码,但没有发现任何有用的东西。

答案1

我猜一些存在这个库(如果只是在谷歌内部?)。例如,https://www.google.com/search?q=hjccbz正确显示 россия 的结果。它不适合ghbdn,不过(也许是因为像这样拼写错误привет是一个常见的笑话?)

事实上,搜索这些字符串会带来一些有希望的结果,尽管没有任何明确的直接适用的结果。

无论如何,您没有理由不能将自己的代码放入脚本中,这显然消除了正确重新输入的需要。

如果您使用编辑器中的 CP1251 编码保存此内容,则可以避免嵌套iconv

#!/bin/sh
LC_ALL=C
iconv -t cp1251 |
tr 'йцукенгшщзхъфывапролджэ\ячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"№;:?Ёё' "qwertyuiop[]asdfghjkl;'\\zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?@#$^&~\`"

思考tr您有一个错误的假设,即需要在我也尝试修复的参数周围使用方括号。

保存到您的某个位置,PATH并使用易于记忆且易于输入的名称,chmod +x,然后您就拥有了它。

答案2

我不认为这是可能的,因为通过给定的布局,可以有多种方法来键入相同的字符。例如,在我的法语布局中,我可以通过启用CapsLock并输入éCompose- '- Shift-来输入“É” e

相关内容