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