Si no se han cambiado correctamente las locales en Debian GNU/Linux, la próxima vez que se inicie sesión en la consola Bash mostrará la siguiente advertencia:
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Oct 19 21:20:46 2015 -bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)
¿Porqué se muestra esta advertencia? Sencillamente no lo tengo muy claro, pero todo apunta a que se trata de un bug de Debian, concretamente en la versión 7 para arquitectura ARM. A mi personalmente me sucedió al configurar el idioma de la distribución tras instalarla en mi OLIMEX A20-OLinuXino-Lime2, aunque por la red se encuentran evidencias de casos similares en Debian x86 y distribuciones derivadas como Ubuntu. También puede ser que trasteando con las locales se introduzca una mal o se generen de forma correcta.
Independientemente de la causa la pregunta es: ¿Cómo se soluciona esta advertencia y evitar perder la configuración del idioma ante los apagados o reinicios? Pues la respuesta es volver a cambiar la localización del sistema operativo, pero esta vez haciéndola en 5 sencillos pasos como superusuario (buscando se encuentran muchas soluciones, pero experimentando esta fue la única que me funcionó):
- Reinstalar las locales:
root@a20-olimex:~# apt-get install --reinstall locale
- Sobreescribir la variable de entorno LANG con el valor de la locale
root@a20-olimex:~# export LANG=es_ES.UTF-8
Existen más variables de entorno relacionadas con las locales, pero con cambiar esto es suficiente. Verificamos la asignación de valor anterior mediante el comando
root@a20-olimex:~# echo $LANG es_ES.UTF-8
- Generar las locales mediante
root@a20-olimex:~# dpkg-reconfigure locales
Se selecciona la opción es_ES.UTF-8 mediante la barra espaciadora y se deselecciona la localización en_US.UTF-8 que por defecto viene seleccionada. Con el tabulador se selecciona el botón Aceptar y se pulsa Intro. En la siguiente pantalla marcar es_ES.UTF-8 como locale por defecto y Aceptar. La salida final tras la ejecución del comando será algo parecido a:
Generating locales (this might take a while)... es_ES.UTF-8... done Generation complete.
- Es necesario reiniciar el sistema para que los cambios surjan efecto.
root@a20-olimex:~# reboot
- Verificación final tras arrancar el sistema e iniciar sesión: ya no aparece la advertencia de Bash. Si la advertencia continúa y el valor de la variable LANG vuelve a ser el no deseado editar el fichero /etc/default/locale con un editor de texto plano como VI o nano para dejarlo tal como se indica a continuación:
# File generated by update-locale LANG=es_ES.UTF-8 LANGUAGE=es_ES.UTF-8 LC_ALL=es_ES.UTF-8 LC_CTYPE=es_ES.UTF-8 LC_NUMERIC=es_ES.UTF-8 LC_TIME=es_ES.UTF-8 LC_COLLATE=es_ES.UTF-8 LC_MONETARY=es_ES.UTF-8 LC_MESSAGES=es_ES.UTF-8 LC_PAPER=es_ES.UTF-8 LC_NAME=es_ES.UTF-8 LC_ADDRESS=es_ES.UTF-8 LC_TELEPHONE=es_ES.UTF-8 LC_MEASUREMENT=es_ES.UTF-8 LC_IDENTIFICATION=es_ES.UTF-8 Finalmente reiniciar y volver a comprobar