dtradutor.sh: Shell Script Tradutor

Introdução

Frequentemente precisamos descobrir a tradução de uma palavra e não temos um dicionário por perto e muito menos um programa que nos ajude nessa tarefa. Então, devemos entrar na internet e buscar pela tradução. Como isso acontece muito comigo, resolvi criar um shell script que busca na Internet a tradução de terminada palavra.

Site tradutor: Babylon

Dos vários sites que realizam tradução, percebi que o babylon é o mais interessante para ser usado em scripts por retornar uma página fácil de ser manipulada. Muitos scripts de tradução utilizam o babylon como tradutor [1].

Como traduzir

Por enquando só consegui traduzir do inglês para qualquer idioma utilizando o link abaixo:

http://bis.babylon.com/?rt=ol&tid=pop&mr=2&term=PALAVRA&tl=IDIOMA

Em word=PALAVRA indicamos a palavra em inglês a ser traduzida. Em lang=IDIOMA indicamos o idioma, use pt para português, en para inglês (fornece definições), fr para francês e assim por diante.

Saída da página

Utilizando o lynx e traduzindo a palavra love para o português obtemos como resultado:

$ lynx --dump 'http://bis.babylon.com/?rt=ol&tid=pop&mr=2&term=love&tl=pt'
   [?rt=GetFile&uri=!!BJKS8ZN2QJ&type=1&index=11] Babylon
   English-Portuguese
   [1]Download this dictionary
   love
   v. amar; gostar; adorar; apaixonar-se; querer muito

   s. amor; amado, querido; afeição; pessoa amada; zero pontos (no jogo de
   tênis)
   [?rt=GetFile&uri=!!9G2CGKRAUE&type=1&index=11] Wikipedia
   Português - A enciclopédi...
   [2]Download this dictionary
   LOVE
   LOVE é um espetáculo do [3]Cirque du Soleil que tem a trilha sonora de
   músicas dos [4]Beatles. As canções foram remixadas e resmasterizadas
   pelo produtor [5]George Martin, conhecido como o quinto Beatle, e seu
   filho Giles.
   [?rt=GetFile&uri=!!9G2CGKRAUE&type=0&index=1360] [6]Veja mais na
   Wikipédia.org...

Quando procuramos por uma palavra que não existe no tradutor, a seguinte página aparece:

$ lynx --dump 'http://bis.babylon.com/?rt=ol&tid=pop&mr=2&term=naoexisto&tl=pt'
   This is a single Word Translation tool. Click [1]here for Full Text
   Translation Babylon software

   IFRAME:
   [2]http://www.babylon.com/systems/pages/tbox/tbox.php?lang=EN&tl=PT&ter
   m=naoexisto&cid=&affID=

References

   1. http://www.babylon.com/systems/affiliates/landing/index.php
   2. http://www.babylon.com/systems/pages/tbox/tbox.php?lang=EN&tl=PT&term=naoexisto&cid=&affID=

Observando as saídas do babylon foi possível criar o script abaixo.

O script: dtradutor.sh

Segue o código:

#!/bin/bash
# [dtradutor.sh]
# Traduz palavras do inglês para qualquer
# idioma. Por padrão o idioma português
# utilizado. (Veja a variável IDIOMA)
#
# [Autor]
# Marcos Paulo Ferreira (Daemonio)
# undefinido gmail com
# daemoniolabs.wordpress.com
#
# [Dependências]
# lynx
#
# Versão 1, Wed Jan  4 00:15:30 BRST 2012
# Versão 1.1, Fri Mar 23 11:57:54 BRT 2012
# Versão 2.0 by daemonio @ Thu Jan  2 15:23:28 BRST 2014
#   [+] A saía do lynx acrescentou uma nova linha e por isso
#       as versões anteriores não funcionam mais. O script de
#       agora não depende mais da numeração das linhas.
#   [+] As cores agora são manuseadas com tput
#

# Idioma final (Padrão: inglês -> português)
IDIOMA='pt'

# Importante: se a saída tiver caracteres estranhos
# utilize o outro valor para essa variável
CODIFICACAO='UTF-8'
#CODIFICACAO='ISO-8859-1'

# Variáveis referente a cor (código do tput)
CORPALAVRA='1' # 1 = vermelho
CORTEXTO='2'   # 2 = verde

# Função que retorna erro caso uma dependência não foi
# encontrada
function encontrar_dependencia {
local A=`whereis "$1"`

if ! [[ $A =~ '/' ]]
then
    tput setaf 1; tput bold
    echo "O programa $1 parece não estar instalado. Instale-o antes"
    echo "de usar."
    tput sgr0
    exit 1;
fi
}

#
# MAIN
#

encontrar_dependencia 'lynx'

while [ $# != "0" ]; do
   tput setaf $CORPALAVRA; tput bold; echo "$1"; tput setaf $CORTEXTO;
   lynx -dump -nolist "http://bis.babylon.com/?rt=ol&tid=pop&mr=2&term=$1&tl=$IDIOMA" |
   sed -n ':c;/^$/{d;bc;};/Babylon$/!q; n;n;n; :a;p;n;/\(^ *\[\|IFRAME:\)/!ba;q;' |
   fmt -80 | sed '/^ *$/d' | iconv -t $CODIFICACAO
   tput sgr0
   shift
done

# EOF

Uso

Salve o código acima em um arquivo de nome dtradutor.sh. Em seguida dê permissão de execução com o chmod. Para usar o scritpt basta invocá-lo com as palavras em inglês como parâmetro:

$ chmod +x dtradutor.sh
$ ./dtradutor.sh what is love baby don\'t hurt me
what:
   conj. até quando
   interj. quê! (exclamação de surpresa ou protesto)
   pron. que, qual; quanto; aquilo que
   adv. o que, qual; quanto; até quanto
   adj. que, o que, qual, quais
   s. o que, qual

is:
   Sistema Internacional, sistema métrico de unidades consistente para
   cientistas (que tem a quantidade básica de comprimento, tempo, corrente
   elétrica, temperatura, intesidade de luz, quantidade de substância e massa)
   be v. ser; estar; existir; ocorrer, acontecer; ficar, ocupar um espaço

love:
   v. amar; gostar; adorar; apaixonar-se; querer muito
   s. amor; amado, querido; afeição; pessoa amada; zero pontos (no jogo
   de tênis)

baby:
   adj. criança de peito, nenê, pessoa infantil; boneca (gíria)
   s. bebê; querido/a, meu bem (tratamento carinhoso)
   v. mimar; tratar como um bebê

don't:
   v. contração de do not; não (palavra negativa)
   don't s. proibição, preceito de não fazer determinada coisa

hurt:
   adj. ferido
   v. ferir; doer; magoar; estragar; danificar
   s. ferimento; prejuízo

me:
   pron. mim; eu; para mim
   ME (Maine) Maine, estado no leste dos Estados Unidos
   ME (Middle East) Oriente Médio
   ME (Middle English) inglês médio, forma da língua inglesa que foi usada
   aprox. 1100 a aprox. 1500

Se a saída do script tiver caracteres estranhos então é por causa do problema de codificação. As codificações mais comuns são UTF-8ISO-5589-1, daí basta saber qual dessas é usada em seu terminal e comentar/descomentar o valor correto da variável CODIFICACAO.

Referências

[1] scr by Thobias Salazar Trevisan (Acessado em: Março/2012)
http://thobias.org/scr/scr

Deixe um comentário