Solución 1:
Editar /etc/default/locale
y establezca el contenido en:
LANG="nl_NL.UTF-8"
Puede verificar qué locales ha generado actualmente usando:
locale -a
Puedes generar más editando /etc/locale.gen
y descomente las líneas de las configuraciones regionales que desea habilitar. Luego puede generarlos ejecutando el comando:
locale-gen
Puede encontrar una lista de configuraciones regionales admitidas en /usr/share/i18n/SUPPORTED
Hay más información disponible en el wiki de Debian.
Solución 2:
Es posible que deba instalar el locales
paquete. Esto le preguntará qué locales generar. Si ya está instalado, entonces dpkg-reconfigure locales
le permitirá generar más locales.
Solución 3:
Las respuestas aquí están incompletas como en la mayoría de los demás lugares. Después de recopilar información de algunos lugares, lo que funcionó para mí fue (1) asegurarme de que la configuración regional que quería estaba disponible (generarla si no lo estaba) y luego (2) establecer las variables de entorno relacionadas con la configuración regional en la configuración regional deseada.
En mi caso necesitaba en_US.UTF-8
instalado mediante programación (es decir, de forma no interactiva) en un contenedor docker. El ff logró lo que necesito, pero debería funcionar bien en un shell interactivo.
apt-get update
# Install locales package
apt-get install -y locales
# Uncomment en_US.UTF-8 for inclusion in generation
sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen
# Generate locale
locale-gen
# Export env vars
echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
echo "export LANG=en_US.UTF-8" >> ~/.bashrc
echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc
En el mismo shell, deberá hacer source ~/.bashrc
para que las variables env surtan efecto de inmediato. Puede comprobar que la configuración regional se ha configurado correctamente invocando locale
.
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
Hubo muchas entradas de preguntas y respuestas sobre este tema, pero solo unas pocas fueron realmente útiles. Crédito donde se debe el crédito:
- https://unix.stackexchange.com/a/247019/21289
- https://perlgeek.de/en/article/set-up-a-clean-utf8-environment
Solución 4:
Ninguna de estas respuestas funcionó para mí, en un contenedor LXC instalado con:
lxc-create -n sse-master -t download -n sse-master -- \
-d debian -r jessie --arch i386
Siempre obtuve el siguiente resultado de locale-gen
, es decir, no genera ningún local (ninguno en la lista):
$ sudo locale-gen
Generating locales (this might take a while)...
Generation complete.
Ejecutando dpkg-reconfigure locales
y seleccionar algunas configuraciones regionales no actualizó /etc/locale.gen
como esperaba.
Sin embargo, cuando modifiqué ese archivo manualmente y eliminé los comentarios de las configuraciones regionales que quería, entonces locale-gen
empezó a funcionar correctamente:
$ sudo locale-gen
Generating locales (this might take a while)...
en_GB.UTF-8... done
en_US.UTF-8... done
Generation complete.
También pude generar locales manualmente como este:
sudo localedef -i en_US -f UTF-8 en_US.UTF-8
sudo localedef -i en_GB -f UTF-8 en_GB.UTF-8
Pero esta no era una solución permanente:descubrí que ejecutar locale-gen
sin el --keep-existing
La opción eliminará todas las configuraciones regionales generadas manualmente, es decir, todas las configuraciones regionales no enumeradas (y sin comentarios) en /etc/locale.gen
.
Solución 5:
Para una aplicación web, podría ser mejor usar setlocale () dentro el programa, en lugar de requerir que la configuración regional predeterminada del sistema se establezca adecuadamente fuera. Menos cabos sueltos de esa manera.