Existe alguma biblioteca ou ferramenta para "traduzir" strings de um layout de teclado para outro?

Existe alguma biblioteca ou ferramenta para "traduzir" strings de um layout de teclado para outro?

Quero escrever um script bash simples que traduza a entrada entre diferentes layouts de teclado. Por exemplo, se meu sistema tiver layouts em russo e inglês e eu estiver passando a string 'Руддщ' para este script, ele deverá gerar 'Hello'.

Atualmente estou usando este código:

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

Existem desvantagens óbvias:

  • Tenho que usar iconv, pois meu sistema usa utf8 e trnão consigo usar.
  • Tenho que digitar todos os caracteres manualmente, o que leva à falta de aplicabilidade e à alta possibilidade de erros.

Eu sei que xneurtem funcionalidade semelhante, mas não quero mudar o layout rapidamente, apenas traduza as strings mediante solicitação. Examinei xneuro código-fonte, mas não encontrei nada útil.

Responder1

Eu achoalgunsexiste uma biblioteca para isso (mesmo que apenas internamente no Google?). Por exemplo,https://www.google.com/search?q=hjccbzexibe corretamente os resultados para россия. Não funciona paragbdtn, no entanto (talvez porque erros ortográficos привет como este sejam uma piada interna comum?)

Na verdade, a busca por essas cordas traz alguns resultados meio promissores, embora nada claramente aplicável diretamente.

De qualquer forma, não há razão para você não poder colocar seu próprio código em um script, o que obviamente elimina a necessidade de redigitá-lo corretamente.

Se você salvar isso com uma codificação CP1251 do seu editor, poderá evitar o aninhado iconv:

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

EUpensarvocê teve uma falsa suposição sobre a necessidade de usar colchetes em torno dos argumentos trque também tentei corrigir.

Salve em um local em seu computador PATHcom um nome memorável e fácil de digitar, chmod +xe pronto.

Responder2

Não imagino que isso seja possível, pois, com um layout específico, pode haver várias maneiras de digitar o mesmo caractere. Por exemplo, com meu layout francês, posso digitar “É” habilitando CapsLocke digitando é, ou por Compose- '- Shift- e.

informação relacionada