Tips Consola: Script para Traducir Texto » Blog de Notas | Soy Facus

miércoles, 21 de septiembre de 2011

Tips Consola: Script para Traducir Texto

Hace mucho escuché que en Linux se puede hacer TODO, y hoy en día soy yo el que vive repitiendo esa frase.
Todavía no encontré algo que no se pueda hacer en Linux, y si hay algo que no se puede, seguramente se encontrará una alternativa para satisfacer el objetivo final.

consola linux

En esta entrada, voy a mostrarles un Tip para Traducir Texto de cualquier idioma de origen a cualquier otro de destino y todo desde nuestra querida Consola.

También (de yapa) vamos a ver como crear un comando personalizado para esta tarea en nuestra Consola Linux.
salto

Bueno, lo que vamos a ver.. es un Script en Bash que, usando las APIs REST de Google, nos traduce una palabra o frase.
Tan solo tenemos que llamarlo por su nombre (ejemplo: gtranslate) más los argumentos, donde el primer argumento debe ser las dos letras asignadas al idioma y el segundo argumento será la palabra o frase a traducir.

Ejemplo:
gtranslate en hola mundo

En este ejemplo, nos devolverá en pantalla la frase "hello world" ya que elegimos traducir el "hola mundo" en inglés (en).

Como se darán cuenta, el script se encarga de detectar el idioma de origen.

A continuación, el código:

#!/usr/bin/env bash
progname=$(basename $0)

if [ -z "$2" ]
then
echo -e "Usage: $progname idiomaDestino 'palabras a traducir...'"
echo -e "Example: $progname en 'Hola como!'\n"
exit
fi

TO="$1"
shift 1

# Google Translate Ajax API Url
TRANSURL='http://ajax.googleapis.com/ajax/services/language/translate?v=1.0'

# Parse string to translate, change ' ' to '+'
# STRING: String to translate.
STRING="$@"
PSTRING=$(echo "$STRING" |tr ' ' '+')
DETECT='http://ajax.googleapis.com/ajax/services/language/detect?v=1.0'
RESPONSE_DETECT=$(/usr/bin/env curl -s -A Mozilla $DETECT'&q='$PSTRING)
FROM=$(echo "$RESPONSE_DETECT" | cut -d ':' -f 3 |cut -d ',' -f 1 | sed -s "s/^\([\"']\)\(.*\)\1\$/\2/g")

LANGPAIR="$FROM|$TO"
# Get translation
RESPONSE=$(/usr/bin/env curl -s -A Mozilla \
$TRANSURL'&langpair='$LANGPAIR'&q='$PSTRING)

echo -n "$progname> "
# Parse and clean response, to show only translation.
echo "$RESPONSE" |cut -d ':' -f 3 |cut -d '}' -f 1

Copiar el código y guardarlo en un archivo de texto vacío con el nombre que elegimos para nuestro script (como sugiere el ejemplo: gtranslate).

Casi sin conocer mucho sobre bash, se puede entender de todas formas como hace el script para realizar la traducción, empleando comandos como Curl para hacer las solicitudes a los servidores, Sed y Cut para extraer el texto traducido.



Ahora, pasamos a la parte de utilizarlo como Comando:

Sugiero colocar los scripts en una carpeta llamada "scripts" en nuestro Home, simplemente para ser más organizados.
Entonces supongo que lo guardamos así: /home/USUARIO/scripts/gtranslate donde "USUARIO" es el nombre de usuario correspondiente.

Nos dirigimos entonces al directorio:

cd ~/scripts/
# el símbolo ~ (alt+4) se reemplazará automáticamente por /home/Tu_Nombre_De_Usuario


Ahora tendríamos que darle permisos de ejecución al script con el siguiente comando:

chmod +x gtranslate
# si a tu script lo llamaste de otra manera, reemplazar por lo que corresponda.


Y ahora ya tenemos lo necesario para que funcione... bueno... veamos.

Prueba:

facus@ubuntu:~/scripts/$ gtranslate en hola mundo

si nos devuelve el famoso "hello world" vamos bien, pero todavía no terminamos.

Desde cualquier otra dirección no podremos ejecutar el script.. a menos que.. Creemos un Comando Personalizado con Alias.

Para esto, modificamos el archivo de Alias agregando la siguiente información:

alias gtrans='bash /home/USUARIO/scripts/gtranslate'
# reemplazar "USUARIO" y "gtranslate" si es necesario, por lo que corresponda.

Nota: Si no sabés como agregar Alias, seguí este enlace → Alias en Bash


Guardamos los cambios y listo, ahora podremos ejecutar el comando para traducir texto desde cualquier lugar de la consola.



Por último, decirles que el código del script no me pertenece.. lo encontré en BloGeek en donde Gonto nos cuenta que él se basó en un script de ksaver, así que todo el crédito y la gloria para ellos.

Así es esto, cuando hay algo que se comparte... puede caer en manos de alguien que lo mejora y lo publique, y otro lo puede encontrar y así se arma la cadena... donde todos servimos para algo... aunque al principio no lo creas.

Por mi parte, estoy realizando un script basado en éste, para traducir subtítulos de películas/series. Cuando lo pueda optimizar, sin dudas lo publicaré en mi Blog de Notas.


Cualquier inquietud que puedas llegar a tener, no dudes en usar los comentarios ;)

Saludos! y si te gustó, compartilo =)



SoyFacus | y Traduzco desde mi Consola.

<---- Compartilo desde la barra social. (Facebook, Twitter y/o Google Plus)

2 comentarios:

  1. Genial por tu block de notas :D. Están geniales los tips :D

    ResponderEliminar
    Respuestas
    1. Me alegra que te guste! :D
      Gracias por tu comentario, y volvé cuando gustes ;)
      Saludos!

      Eliminar

Dale, dejame saber que opinás..

Ingresar un Nick en "Nombre/URL" o logueate en Google, OpenID, AIM, TypePad, WordPress o LiveJournal.