
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
iconv
porque mi sistema usa utf8 ytr
no puedo usarlo. - Tengo que escribir todos los caracteres manualmente, lo que genera falta de aplicabilidad y una alta posibilidad de error.
Sé que xneur
tiene una funcionalidad similar, pero no quiero cambiar el diseño sobre la marcha, simplemente traducir cadenas a pedido. Revisé xneur
el 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 tr
que también intenté corregir.
Guárdelo en una ubicación PATH
con un nombre memorable y fácil de escribir, chmod +x
y 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 CapsLock
y escribiendo é
o usando Compose
- '
- Shift
- e
.