是否有任何庫或工具可以將字串從一種鍵盤佈局“翻譯”到另一種鍵盤佈局?

是否有任何庫或工具可以將字串從一種鍵盤佈局“翻譯”到另一種鍵盤佈局?

我想編寫簡單的 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

相關內容