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 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 - "https://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 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 - "https://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 - "https://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,
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.
Gracias a tí, gran trabajo, te sigo.
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.
muchas gracias!! lo miraré.
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.
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.
Hola Atareao, con los de Google funciona, pero con los de Apertium sigue saliendo vacía la traducción… ¿Que puede ser?.
Un saludo
¿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.