Traducir en Ubuntu con solo seleccionar el texto

Hace unos días que llevo en mente desarrollar una nueva aplicación para Ubuntu basándome en algunas que he visto para Android que me parecen realmente interesantes, y sobre todo orientadas a la productividad, expandir texto, reemplazar texto, traducir en Ubuntu, etc.

Me refiero a aplicaciones que monitorizan lo que escribimos y cuando detectan una palabra clave o una combinación de teclas determinada, ejecutan una acción, ya sea buscar una palabra en el diccionario, cambiar una palabra clave por otra predeterminada, etc.

De esta manera cuando he leído en WebUpd8, sobre como traducir cualquier tecto seleccionado con un atajo de teclado, no he podido resistirme a publicar una referencia al artículo original, por supuesto con alguna que otra variante o modificación de cosecha propia.

Traducir en Ubuntu.png

Traducir en Ubuntu un texto seleccionado

Tal y como mencionan en el artículo de WebUpd8, se trata de una variación de un script original de 2.012.

Se trata de una herramienta verdaderamente útil, pero sobre todo productiva, ya que permite traducir cualquier texto previamente seleccionado, ya sea en el navegador, en un documento de texto, en un PDF, etc, cuando pulsamos un atajo de teclado.

El funcionamiento para traducir en Ubuntu es sencillo, pues utiliza el motor de traducción de Google para esta operación, con lo que según tu mismo te puedes imaginar, esto es funcional para palabras y frases cortas, pero no para textos largos. Además tiene un tres problemas adicionales; por un lado si el motor de Google es incapaz de detectar el idioma de partida dará un error, por otro, evidentemente, necesitas una conexión a internet, y por último si abusas de las traducciones Google terminará por bloquear tu IP temporalmente.

Otra opción para traducir en Ubuntu es utilizar apertium, un motor de traducción de código abierto que está disponible para la mayoría de las distribuciones Linux.

Pero, no nos adelantemos a la jugada, vamos paso a paso, veamos las diferentes opciones disponibles, y elijamos aquella que mas nos conviene en función de nuestras circustancias.

Necesidades para nuestro sistema

Lo primero es determinar que es lo que tenemos seleccionado, es decir, poder capturar la selección actual para poder manipularla, ya sea traducir en Ubuntu, o realizar la operación que consideremos. Para esta primera operación, necesitamos xsel. Para instalarlo, abrimos un emulador de terminal, y ejecutamos la siguiente orden,

sudo apt-get install xsel

Para mostraar la traducción tenemos diferentes opciones; desde utilizar el sistema de notificaciones de Ubuntu, para lo que tenemos que ejecutar la orden,

sudo apt-get install libnotify-bin

O bien utilizar zenity, para lo que ejecutaremos la orden

sudo apt-get install zenity

La ventaja de zenity frente al sistema de notificaciones de Ubuntu es que mientras que este último desaparecerá de forma automática al cabo de un tiempo, al tratarse de una notificación, zenity, es un cuadro de diálogo, que se ocultará cuando nosotros queramos.

Otra opción interesante, es que la traducción vaya directamente aal portapapeles, es decir, cuando seleccionamos una palabra, al pulsar nuestra combinación de teclas, se traduce y se copia directamente al portapapeles. Para utilizar esta última opción, necesitaremos instalar xclip,

sudo apt-get install xclip

Para utiliza la traducción de Google, necesitaremos utilizar wget, que podemos instalar ejecutando la orden,

sudo apt-get install wget

Todo junto…

Traducir en Ubuntu utilizando Google y utilizar el sistema de notificaciones de Ubuntu

Para esta opción tenemos que crear el siguiente script,

1
2
#!/usr/bin/env bash
notify-send --icon=info "$(xsel -o)" "$(wget -U "Mozilla/5.0" -qO - "http://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=es&dt=t&q=$(xsel -o | sed "s/[\"'<>]//g")" | sed "s/,,,0]],,.*//g" | awk -F'"' '{print $2, $6}')"

En este script, hemos indicado el idioma de destino como español, indicando el parámetro tl=es.

Una vez creado, debemos darle permiso de ejecución y copiarlo al directorio /usr/bin, y crear un atajo de teclado para su ejecución. Por ejemplo supuesto que le hemos llamado trans1. Todo esto, traducido a ordenes, vendría a ser:

chmod +x trans1
sudo cp trans1 /usr/bin

Para crear el atajo de teclado, nos vamos a Configuración del sistema > Teclado y seleccionamos la pestaña Atajos, donde crearemos un nuevo atajo para nuestro comando en Combinaciones personales, pulsando el botón mas y añadiendo el comando que hemos creado

traducir en Ubuntu

Traducir en Ubuntu con Google y zenity para mostrarlo

En este caso el comando, trans2, sería,

1
2
3
4
5
6
#!/usr/bin/env bash
text="$(xsel -o)"
translate="$(wget -U "Mozilla/5.0" -qO - "http://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=es&dt=t&q=$(echo $text | sed "s/[\"'<>]//g")" | sed "s/,,,0]],,.*//g" | awk -F'"' '{print $2, $6}')"
echo -e "Original text:" "$text"'\n' > /tmp/notitrans
echo "Translation:" "$translate" >> /tmp/notitrans
zenity --text-info --title="Translation" --filename=/tmp/notitrans

Igualmente, lo debemos copiar a /usr/bin/ y darle permisos de ejecución.

Traducir en Ubuntu utilizando Google y copia al portapapeles

Esto es básicamente igual que en el primer caso, pero además utilizamos xclip para realizar la copia al portapapeles.

1
2
3
4
5
#!/usr/bin/env bash
text="$(xsel -o)"
translate="$(wget -U "Mozilla/5.0" -qO - "http://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=es&dt=t&q=$(echo $text | sed "s/[\"'<>]//g")" | sed "s/,,,0]],,.*//g" | awk -F'"' '{print $2, $6}')"
echo "$translate" | xclip -selection clipboard
notify-send --icon=info "$text" "$translate"

Traducir en Ubuntu utilizando apertium y el sistema de notificaciones de Ubuntu

El primer paso es instalar apertium y el diccionario que queramos utilizar, por ejemplo de inglés a español.

sudo apt-get install apertium apertium-en-es

Evidentemente, la ventaja reside en que no necesitaremos conexión a internet, pero las traducciones dejan bastante que desear, aunque para palabras es mas que suficiente

El comando, trans4, será el siguiente,

1
2
#!/usr/bin/env bash
notify-send --icon=info "$(xsel -o)" "$(xsel | apertium en-es)"

Igualmente, tenemos que darle permisos de ejecución y copiar a /usr/bin/.

Traducir en Ubuntu utilizando apertium y zenity

En este caso el script será,

1
2
3
4
5
6
#!/usr/bin/env bash
text="$(xsel -o)"
translate="$(xsel | apertium en-es)"
echo -e "Original text:" "$text"'\n' > /tmp/notitrans
echo "Translation:" "$translate" >> /tmp/notitrans
zenity --text-info --title="Translation" --filename=/tmp/notitrans

Traducir en Ubuntu utilizando apertium y el portapaples. Ultima opción.

En esta última opción el script será,

1
2
3
4
5
#!/usr/bin/env bash
text="$(xsel -o)"
translate="$(xsel | apertium en-es)"
echo "$translate" | xclip -selection clipboard
notify-send --icon=info "$text" "$translate"

Que al igual que en los casos anteriores, deberás dar permisos de ejecución y copiar al directorio /usr/bin/, creando posteriormente el atajo de teclado para su utilización.

Conclusiones

Aquí has visto algunas opciones, pero las alternativas son innumerables, solo tienes que tener un poco de imaginación para hacer casi cualquier cosa…


Más información,

  • Juan González

    impresionante el post, soy aficionado a los scripts en bash, me ha encantado. Pregunto: con este tipo de ordenes se puede hacer algún comando que funcione en cualquier aplicación de ubuntu (firefox, gmail, libreoffice, scribus, …) tal que si escribo una palabra clave (“mifactura” “misdatos”, o algo asi), convierta esa expresión en mis datos fiscales, toda la información de mi contacto, etc…?? perdón por el tocho de pregunta. Es porque diariamente escribimos muchas veces las mismas informaciones agrupadas en distintos canales, y nos resta productividad.

    • Hola Juan,

      Estoy trabajando en ello, pero actualmente está muy verde… Conforme lo actualice lo publicaré en este sitio.

      Muchas gracias y un saludo.

      • Juan González

        Gracias a tí, gran trabajo, te sigo.

    • Cex

      De manera gráfica creo que con Autokey se podía hacer.

      En un terminal con xdotool puedes hacer un guion y luego asociarle una combinación de teclas o un gesto de ratón para que se ejecute.

      • Juan González

        muchas gracias!! lo miraré.

      • Cex

        Ah y para Python existe el módulo virtkey. Y supongo que otros lenguajes tendrán algo parecido.

        KeePass2 tiene esa función. Y KeePassX también pero no sé cómo incluir los atributos adicionales.

  • Senpai

    Hola Atarao:
    Gracias por los script, hay un error de sintaxis en el script de ” apertium y zenity” (apertium en-ex), debía ser (apertium en-es).
    Lo he corregido, pero en mi caso no funciona me sale vacía la traducción dentro de zenity:

    Original text: script

    Translation: (sale vacío….) ¿Porque puede ser?, por supuesto esta instalado apertium…

    Si lo ejecuto desde una terminal me da este error: Error: Unknown error matching regexp (code -28)

    Un saludo

    • Hola Senpai,

      corregido. Muchas gracias.

      • Senpai

        Hola Atareao, con los de Google funciona, pero con los de Apertium sigue saliendo vacía la traducción… ¿Que puede ser?.
        Un saludo

  • Cex

    ¿Usas xsel -o por alguna razón en especial?

    Lo digo, porque ya que usas también xclip, con -o hace lo mismo que xsel.