Есть ли какая-нибудь библиотека или инструмент для «перевода» строки с одной раскладки клавиатуры на другую?

Есть ли какая-нибудь библиотека или инструмент для «перевода» строки с одной раскладки клавиатуры на другую?

Я хочу написать простой скрипт bash, который переводит ввод между различными раскладками клавиатуры. Например, если в моей системе есть русская и английская раскладки, и я передаю строку 'Руддщ' этому скрипту, он должен вывести '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правильно отображает результаты для россия. Это не работает длягхбдтн, хотя (возможно, потому, что неправильное написание слова привет — это распространённая шутка?)

На самом деле поиск этих строк выдает несколько многообещающих результатов, хотя и ничего, что можно было бы напрямую применить.

В любом случае, нет никаких причин, по которым вы не могли бы поместить свой собственный код в скрипт, что, очевидно, устраняет необходимость его корректного повторного ввода.

Если вы сохраните это в кодировке 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.

Связанный контент