Existe alguma biblioteca ou ferramenta para “traduzir” string de um layout de teclado para outro?

2

Eu quero escrever um script simples que traduza a entrada entre diferentes layouts de teclado. Por exemplo, se meu sistema tiver layouts em russo e inglês e eu passar a string 'Руддщ' para esse script, ele deverá exibir '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:

  • Eu tenho que usar iconv , porque meu sistema usa utf8 e tr não pode usá-lo.
  • Eu tenho que digitar todos os caracteres manualmente, o que leva à falta de aplicabilidade e possibilidade de alto erro.

Eu sei que o xneur tem a funcionalidade simillar, mas eu não quero mudar o layout em tempo real, apenas traduza strings a pedido. Analisei o código-fonte xneur , mas não encontrei nada útil.

    
por Denis Sheremet 22.04.2017 / 09:36

2 respostas

2

Eu acho que alguma biblioteca existe (se apenas internamente no Google?). Por exemplo, o link exibe corretamente os resultados para россия. Não funciona para ghbdtn , embora (talvez porque o erro de ortografia como este seja uma piada comum?)

Na verdade, a pesquisa por essas sequências traz alguns hits meio promissores, embora nada claramente aplicável diretamente.

De qualquer forma, não há motivo para você não ter colocado seu próprio código em um script, o que obviamente elimina a necessidade de redigitar isso corretamente.

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

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

Eu acho que você teve uma falsa suposição sobre a necessidade de usar colchetes ao redor dos argumentos para tr , que eu também tentei corrigir.

Salvar em um local no seu PATH com um nome memorável e fácil de digitar, chmod +x , e você o tem.

    
por 22.04.2017 / 11:33
0

Não imagino que isso seja possível, pois, com um layout de disposição, pode haver várias maneiras de digitar o mesmo caractere. Por exemplo, com meu layout francês, posso digitar "É" ativando CapsLock e digitando é , ou por Compose - ' - Shift - e .

    
por 22.04.2017 / 09:40