あるキーボードレイアウトから別のキーボードレイアウトに文字列を「翻訳」できるライブラリやツールはありますか?

あるキーボードレイアウトから別のキーボードレイアウトに文字列を「翻訳」できるライブラリやツールはありますか?

さまざまなキーボードレイアウト間で入力を変換する単純なbashスクリプトを作成したいと思います。たとえば、私のシステムにロシア語と英語のレイアウトがあり、「RudдЂ」文字列をこのスクリプトに渡すと、「Hello」を出力する必要があります。

現在、次のコードを使用しています。

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

明らかな欠点があります。

  • iconv私のシステムはutf8の使用にはtr使用できないため、使用する必要があります。
  • すべての文字を手動で入力する必要があるため、使いやすさがなく、エラーが発生する可能性が高くなりました。

同様の機能があることを知っていますが、xneurレイアウトを動的に切り替えたくないので、要求に応じて文字列を翻訳するだけです。ソースコードを見ましたが、xneur役に立つものが見つかりませんでした。

答え1

私の考えでは一部このライブラリは存在しますか(Google内にのみ存在する場合)?例えば、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'Shifte

関連情報