firefox y locales (script)

Me acabo de pasar por el proyecto nave y me he encontrado con la gratísima sorpresa de que ya se pueden tener instalados varios lenguajes a las vez con firefox. La verdad es que hacía muchísimo que no intentaba traducir el navegador, de modo que no sé hasta que punto es reciente la noticia. El caso es que viendo cómo hace para elegir uno u otro lenguaje, me he escrito un script para arrancar según cómo tengamos configuradas las locales en el ordenador, es decir, si nuestro usuario "X" tiene catalán por defecto, le saldrá firefox en catalán; si el "Y" tiene castellano, en castellano. De igual modo, si cambiamos la configuración del idioma en nuestro sistema, firefox "se enterará". Por supuesto, hay que instalar primero los paquetes de lenguaje en firefox.

Ahí va el script (como siempre, se agradecen sugerencias, correcciones, etc...):

#!/bin/sh
#
# run_firefox.sh: arranca firefox según la configuración de las locales
#

# Por defecto, el idioma original (siempre presente)
UILocale_default="en-US"
contentLocale_default="US"

LOCALE=`which locale`

# Si no has instalado firefox con un paquete de tu distribución,
# asegúrate de que "which firefox" te devuelve el ejecutable.
FIREFOX=`which firefox`
# En caso contrario, comenta la línea anterior, busca el ejecutable,
# descomenta la siguiente línea y pon la ruta apropiada.
#FIREFOX="$HOME/firefox/firefox"

# Averiguamos el valor de las locales.
if test -n "$LOCALE"; then
   UILocale=`$LOCALE | sed -n '/^LC_MESSAGES/!b;s/^.*="\([^"]\{0,5\}\).*$/\1/;y/_/-/;p;q'`
   contentLocale=`echo $UILocale | cut -d "-" -f2`
fi

# Ejecutamos firefox con la local. En caso de que no esté instalada esa local
# arrancamos el idioma por defecto.
$FIREFOX -UILocale $UILocale -contentLocale $contentLocale || \
$FIREFOX -UILocale $UILocale_default -contentLocale $contentLocale_default


Evidentemente, en vez de ejecutar "firefox" habrá que ejecutar "run_firefox.sh": lo metéis en un directorio del path, cambiáis la configuración de vuestros iconos, teclas de arranque, etc... y listo.

Espero que le sea de ayuda o interés a alguien.

EDITO:

He decidido cambiar el script para incluir la variable de entorno LANGUAGE. Hace tiempo envié al foro un mensaje en el que recuerdo que explicaba un poco las locales y también esta variable:


#!/bin/sh

lang_default="en"
country_default="US"

function locales() {
   lang=`echo $1 | cut -c1,2`
   country=`echo $1 | cut -c4,5`
   UILocale=$lang-$country
   contentLocale=$country
}

LOCALE=`which locale`
FIREFOX=`which firefox`
#FIREFOX="$HOME/firefox/firefox"

if test -n "$LANGUAGE"; then
   language=`echo $LANGUAGE | tr ":" " "`
elif test -n "$LOCALE"; then
   language=`$LOCALE | grep '^LC_MESSAGES' | cut -c14-18`
fi

for i in ${language} ${lang_default}-${country_default}; do
   locales $i
   EXE="$EXE $FIREFOX -UILocale $UILocale -contentLocale $contentLocale || "
done

eval $EXE test
Mis felicitaciones por el script. Yo no tengo la necesidad de usar varias traducciones pero me parece muy bien pensado el script.

Así mirándolo me he dado cuenta de que tengo pendiente una buena lectura de tu manual de sed. ;)

Saludos.
bpeople escribió:Así mirándolo me he dado cuenta de que tengo pendiente una buena lectura de tu manual de sed.


Pues, sinceramente, justamente el uso de sed me parece demasiado enrevesado. Pero no se me ocurre otra forma de aislar lo que quiero con un sólo comando. Con dos sí:

UILocale=`$LOCALE | cut -c14-18 | sed '7!d;y/_/-/;q'`
2 respuestas