¿Existe alguna biblioteca o herramienta para "traducir" cadenas de una distribución de teclado a otra?

¿Existe alguna biblioteca o herramienta para "traducir" cadenas de una distribución de teclado a otra?

Quiero escribir un script bash simple que traduzca la entrada entre diferentes diseños de teclado. Por ejemplo, si mi sistema tiene diseños en ruso e inglés y paso la cadena 'Руддщ' a este script, debería generar 'Hola'.

Actualmente estoy usando este código:

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

Hay desventajas obvias:

  • Tengo que usarlo iconvporque mi sistema usa utf8 y trno puedo usarlo.
  • Tengo que escribir todos los caracteres manualmente, lo que genera falta de aplicabilidad y una alta posibilidad de error.

Sé que xneurtiene una funcionalidad similar, pero no quiero cambiar el diseño sobre la marcha, simplemente traducir cadenas a pedido. Revisé xneurel código fuente, pero no encontré nada útil.

Respuesta1

SupongoalgunoExiste una biblioteca para esto (¿aunque solo sea internamente en Google?). Por ejemplo,https://www.google.com/search?q=hjccbzmuestra correctamente los resultados de россия. No funciona paraghbdtn, sin embargo (¿quizás porque escribir mal привет como este es una broma interna común?)

De hecho, la búsqueda de estas cadenas arroja algunos resultados medio prometedores, aunque nada claramente aplicable directamente.

De todos modos, no hay ninguna razón por la que no puedas poner tu propio código en un script, lo que obviamente elimina la necesidad de volver a escribirlo correctamente.

Si guarda esto con una codificación CP1251 de su editor, puede evitar el anidado iconv:

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

Ipensartenías una suposición falsa acerca de la necesidad de usar corchetes alrededor de los argumentos trque también intenté corregir.

Guárdelo en una ubicación PATHcon un nombre memorable y fácil de escribir, chmod +xy ahí lo tiene.

Respuesta2

No creo que esto sea posible ya que, con un diseño determinado, puede haber varias formas de escribir el mismo carácter. Por ejemplo, con mi diseño francés, puedo escribir “É” ya sea habilitando CapsLocky escribiendo éo usando Compose- '- Shift- e.

información relacionada