Obtener el idioma del sistema en AppleScript

En algunos proyectos con AppleScript puede que queramos dar soporte a varios idiomas. La solución inicial pasa por distribuir nuestro fichero de AppleScript adaptado a cada uno de los idiomas que queramos incluir en el proyecto. Esta solución es poco eficiente e incrementa mucho el coste de mantenimiento.

Pero si nuestro AppleScript pudiese detectar qué idioma necesita el usuario y se pudiera adaptar la selección de cadenas de texto al idioma que necesitemos podríamos utilizar un único fichero de AppleScript para todos los idioma.

Limitaciones y soluciones para identificar el idioma

En principio AppleScript no puede acceder a la información del sistema desde su propia librería de comandos. Pero sí podemos usar otros entornos para acceder a dicha información.

Por ejemplo, con el comando defaults tenemos acceso a mucha de la información del sistema. Si ejecutamos en la Terminal de MacOS el comando defaults read NSGlobalDomain AppleLanguages por la pantalla de la Terminal aparecerá algo como:

(
"es-ES",
"en-ES"
)

Es un array o lista de los idiomas y regiones que tenemos instalado en nuestro sistema. Como buscamos obtener un resultado con el texto es que representa a Español debemos cortar todo el texto sobrante para quedarnos con ese primer elemento de la lista.

Con el comando sed podemos realizar todas estas operaciones. Enlazando el comando defaults con sed podemos obtener lo que buscamos utilizando el comando:

defaults read NSGlobalDomain AppleLanguages | sed -n '2s/[^a-zA-Z-]//gp' | cut -d '-' -f1 

Al ejecutarlo en la Terminal aparecerá:

es

Ahora podemos utilizar un comando de Terminal en un AppleScript.

Función para AppleScript

Nuestra función finalmente quedaría así:

on getSystemLanguage()
    return do shell script "defaults read NSGlobalDomain AppleLanguages | sed -n '2s/[^a-zA-Z-]//gp' | cut -d '-' -f1"
end getSystemLanguage

Actualizado el script de VoiceOverTranslator

El script de AppleScript de VoiceOverTranslator ha sido actualizado incluyendo un script extra que nos permite traducir el contenido que tengamos almacenado en el portapapeles.

Ahora podemos selecciona un bloque de texto completo y utilizando las funciones de la API de GoogleTrans obtener una traducción a nuestro idioma preferido.

Puedes obtener estos dos scripts en el repositorio de Tyflos Accessible Software para VoiceOverTranslator.

Obtener el contenido del portapapeles con AppleScript

Ya hemos visto que en AppleScript podemos acceder a mucha de la información que está disponible en nuestro equipo pero aún no hemos visto una de las funciones más simples y útiles de los sistemas operativos modernos: el portapapeles.

El portapapeles es un espacio en memoria donde se aloja una copia del contenido que hayamos copiado o cortado con las funciones del sistema operativo.

¿Para qué podemos querer acceder a la información de portapapeles desde un script? Pues desde una simple función para mostrar el contenido del portapapeles en un cuadro de diálogo para verificar qué tenemos almacenado en esa memoria o para crear un script que nos traduzca el texto del portapapeles al idioma que necesitemos.

Con AppleScript podemos acceder a ese espacio de memoria utilizando la variable the clipboard. Esta variable de AppleScript puede almacenar cualquier tipo de contenido como imágenes, texto, audio o la información de un fichero de una carpeta. Esto nos obliga a convertir esta información en algo comprensible para nuestro script.

Veamos un ejemplo en el que obtenemos como texto la información guardada en el portapapeles:

set clipboardContent to (the clipboard as text)

Con esto podemos crear un script para verbalizar el contenido del portapapeles utilizando la voz del sistema. El código sería algo como esto:

set clipboardContent to the clipboard as text

say clipboardContent

Este código funciona pero no tiene en cuenta si en el portapapeles el contenido que está almacenado es convertible a texto. Para evitar posibles errores de ejecución de nuestro script debemos emplear un bloque try que nos permita controlar errores de ejecución en un script. El código quedaría así:

try

  set clipboardContent to the clipboard as text

  say clipboardContent

on error

  say "El portapapeles no contiene texto"

end try

Con esta modificación nuestro script siempre verbalizará algo aunque sea para notificarnos que el contenido de nuestro portapapeles no es texto.

Disponible remapeador de teclas para MacOS

Los teclados físicos disponibles en los equipos Macbook y Macbook pro no incluyen ciertas teclas que si posee un teclado expandido. En algunas ocasiones, como por ejemplo al acceder a una máquina virtual o utilizar un software técnico, puede que necesitemos la tecla control derecha o que la tecla comando izquierda se comporte de otra manera. La solución pasa por cambiar el mapa de valores de teclado de nuestro Mac.

En el artículo Cambia la tecla BlockMayus por otra en MacOS de forma rápida compartí una solución de un AppleScript para realizar un cambio específico para la tecla BlockMayus.

Ahora en el mismo repositorio de ChangeKeyboardForVM está disponible un segundo script llamado KeyboardRemapper que permite seleccionar la tecla a cambiar y por qué tecla se quiere cambiar ampliando las posibilidades de personalización de nuestro Macbook.

Obtener la dirección IP de tu Mac con AppleScript

En AppleScript hay varias formas de obtener información sobre el estado de la máquina que está ejecutando un script. 

Una de esas formas es mediante system info.

Con get system info obtenemos un diccionario con información sobre qué versión de MacOS, nombre de usuario, nombre completo, dirección IPv4, memoria RAM instalada y más datos interesantes.

Ejemplo básico

Con esta información es muy sencillo crear un script de AppleScript que obtenga la información de la dirección Ip de nuestra máquina y mostrarla en un cuadro de diálogo.

El código sería algo como:

set ipText to IPv4 address of (get system info)
display alert "IP: " & ipText

Convierte de texto a voz con AppleScript

A veces puede que necesitemos convertir un fichero de texto a un fichero de audio utilizando las voces que vienen incluidas en MacOS. Para este tipo de situaciones Tyflos accessible software ha publicado un proyecto sencillo que realiza esta función.

Este proyecto incluye un script de AppleScript que te permite seleccionar una de las voces del sistema y abrir un fichero de texto en formato txt. El script realizará la conversión a fichero de audio con la voz seleccionada de forma automática.

Este proyecto es de caracter software libre por lo que cualquiera puede utilizarlo y participar para mejorarlo.

Puedes encontrar el script en la página del proyecto TTSConverter en Github.