¿Cómo soluciono mi problema de configuración regional?

506

Recibo este mensaje cada vez que hago algo como iniciar o detener un servicio.

perl: warning: Setting locale failed.   
perl: warning: Please check that your locale settings:   
        LANGUAGE = "en_US:en",   
        LC_ALL = (unset),   
        LC_MESSAGES = "en_US.UTF-8",   
        LANG = "en_US.UTF-8"   
    are supported and installed on your system.   
perl: warning: Falling back to the standard locale ("C").   
locale: Cannot set LC_CTYPE to default locale: No such file or directory   
locale: Cannot set LC_MESSAGES to default locale: No such file or directory   
locale: Cannot set LC_ALL to default locale: No such file or directory   
(Reading database ... 21173 files and directories currently installed.)  
Removing bind9 ...  
 * Stopping domain name service... bind9                                        [ OK ]
Processing triggers for man-db ...   
locale: Cannot set LC_CTYPE to default locale: No such file or directory   
locale: Cannot set LC_MESSAGES to default locale: No such file or directory   
locale: Cannot set LC_ALL to default locale: No such file or directory   

¿Cómo soluciono este error?

HackToHell
fuente

Respuestas:

513

Primero ejecute localepara enumerar las configuraciones regionales definidas actualmente para la cuenta de usuario actual:

$ locale
LANG=C
LANGUAGE=
LC_CTYPE=fi_FI.UTF-8
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE=fi_FI.UTF-8
LC_MONETARY="C"
LC_MESSAGES=fi_FI.UTF-8
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

Luego, genere la configuración regional que falta y reconfigure las configuraciones regionales para tomar nota:

$ sudo locale-gen "en_US.UTF-8"
Generating locales...
  en_US.UTF-8... done
Generation complete.

$ sudo dpkg-reconfigure locales
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.

¡Ahora ya no verá ningún error!

Otto Kekäläinen
fuente
220
no funcionó para mí
Umair
44
Esto me ha funcionado en varios sistemas. ¿Hay alguna manera de evitar este problema en los sistemas recién instalados?
Brylie Christopher Oxley
13
@UmairAyub puede tener más de una configuración regional desconocida, intente esto para y en $ (locale | cut -d '=' -f 2 | sort | uniq); do locale-gen $ y; hecho
Generará
3
Cerrar sesión e
iniciar
44
@Umair Existe un alto riesgo de error humano en este problema. Su sistema está configurado en_GBde manera predeterminada, pero lo configura en en_US. Usted tiene que comentar de forma manual en_GBy elimine el comentario en_USen /etc/locale.gen. Vea mi respuesta askubuntu.com/a/790373/25388 en el hardware Raspberry Pi 3b y el sistema Raspbian Jessie.
Léo Léopold Hertz 준영
366

Nada de lo sugerido anteriormente funcionó en mi caso (Ubuntu Server 12.04LTS). Lo que finalmente ayudó fue poner en el archivo /etc/environment:

LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

Por alguna razón faltaba. Las salidas para locale y otros comandos aparecieron como si las variables estuvieran definidas correctamente. En otras palabras, no dé por sentado que todo lo básico se declara donde debería declararse.

Marcin
fuente
115
Sí, ninguno funcionó excepto este, quizás debido a la versión actualizada. Pero prefiero poner esto /etc/default/locale.
Naveed
27
Actualizado /etc/default/localey no más advertencias. Gracias
ohho
77
Sí, los otros no funcionaron para mí. Este lo hizo. Aquí está la línea que utilicé para la actualización desatendida de esto. sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
dman
12
@ user163207 su solución es incorrecta porque se agrega (en lugar de sobrescribir), no es el archivo recomendado y echodebe ejecutarse con la interpretación de escapes de barra invertida habilitada. Esto es lo mismo que el tuyo pero con lo mencionado anteriormente arreglado:sh -c "echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale"
glarrain
13
¡NO OLVIDES INICIAR SESIÓN Y REINICIAR SESIÓN!
SMMousavi
149

Deberían desaparecer después de emitir:

sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales 

dpkg-reconfigurereconfigura los paquetes después de que ya se han instalado. Páselo los nombres de un paquete o paquetes para reconfigurar. Hará preguntas de configuración, como cuando se instaló el paquete por primera vez.

Rinzwind
fuente
99
Me alegra que mis problemas de hace un año te
hayan
1
¿No debería generarse esta configuración regional de forma predeterminada? Es decir en, en_AU, en_CA, en_GBestán presentes por defecto, pero no en_US?
Daniel Serodio
@Rinzwind ¡Muchas gracias por tu esfuerzo! Me disculpo; Debería haber redactado mejor mi pregunta. Lo que quise preguntar es: ¿Por qué es necesario volver a configurar el paquete de configuraciones regionales después de generar nuevas configuraciones regionales? Me parece que los locales funcionan incluso sin ellos dpkg-reconfigure.
Victor
Usando Ubuntu 14.04, en un contenedor Docker, por lo que no se estaba configurando nada. Django makemessagenecesita esto. Esto funcionó perfectamente! Gracias.
Justin
1
Me doy cuenta de que raspbian está fuera de alcance aquí, pero pensé en mencionar que tuve que cerrar sesión e iniciar sesión antes de LC_ALLconfigurarlo correctamente.
MatrixManAtYrService
119

Simplemente agregue lo siguiente a su .bashrcarchivo (suponiendo que esté usando bash)

export LC_ALL="en_US.UTF-8"
Ratz
fuente
2
Esta dulce solución funcionó para mí en mi imagen Amazon-EC2 (estaba ejecutando su RHEL AMI predeterminada) ¡Muchas gracias! :)
gideon
Este me funcionó con la imagen Ubuntu 12.04 de mi digitalocean.
Inan
2
Esto solucionó mi problema. Tengo que hacer una pregunta: ¿por qué el comando locale-gen no configuró LC_ALL como se dijo en otras respuestas?
alexserver
Extraño, toda la solución anterior no funcionó para mí, pero esta sí. Después de exportar LC_ALLfinalmente pude usar sudo dpkg-reconfigure locales.
sobi3ch
Finalmente, después de probar muchos trucos, este es el que funciona para mí en kubuntu 14.04.3 lts. ¡Gracias!
Jonás
94

Este es un problema común si se conecta de forma remota, por lo que la solución es no reenviar su ubicación. Editar /etc/ssh/ssh_configy comentar SendEnv LANG LC_*línea.

usuario249697
fuente
66
Estaba probando otras respuestas, pero olvidé que me estaba conectando de forma remota hasta que vi su respuesta. Diferentes configuraciones regionales en el servidor ssh y el cliente estaban causando el problema.
Hieu
2
En OSX (conexión a ubuntu) está en/etc/ssh_config
Michiel de Mare
One-liner para hacer esto: sed -e '/SendEnv/ s/^#*/#/' -i /etc/ssh/ssh_config(útil para el aprovisionamiento del servidor)
Albin
No pude configurar LC_ALL en la máquina local pero solucionó mi problema con el servidor remoto, gracias.
Alexander Shlenchack
1
Probablemente valga la pena señalar que debe editar el archivo en la máquina local, no en el remoto.
Clashsoft
72

Hay un comando para eso:

sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

Se actualiza /etc/default/localecon los valores proporcionados.

sgtpep
fuente
44
¡Esto es legitimo! No olvide cerrar sesión / volver a cargar su shell, de lo contrario no verá los cambios. No olvide consultar la respuesta aprobada para generar y reconfigurar configuraciones regionales.
Erik Zivkovic
1
La ejecución localeaún no muestra ningún valor utf.
Cerin
@Cerin: Myybe, falta una llamada a locale-gen. Antes, uno tiene que hacer apt-get install locales.
koppor
1
Esto no cambiará LANG para el shell raíz en Ubuntu 16.04, ya que se anula en /root/.profile.
Willem
32

Lo que funcionó para mí en 12.10 fue esto:

apt-get install language-pack-en-base  

Esto después dpkg-reconfigure localesno produjo resultados.

George Answerology
fuente
2
Esta es la mejor respuesta. No es que mis configuraciones regionales se hayan configurado incorrectamente, pero en realidad no existían. Creo que esto también es similar al problema del OP ("No existe tal archivo o directorio" es bastante claro si su configuración regional está configurada correctamente).
Avance del
1
Recibía el problema de OP cada vez que usaba apt-get en Ubuntu 12.04 Esto lo resolvió perfectamente sin tener que editar ningún archivo.
Deependir el
"language-pack-en-base ya es la versión más nueva".
karlingen
Cerrar sesión e
iniciar
Trabajó para mí en un ubuntu chrootbajo debian. Gracias :)
Wyatt8740
18

No olvide salir de su sesión SSH (o su X11) saliendo y volviendo a iniciar sesión. Todas estas sugerencias no funcionaron para mí a menos que volviera a iniciar sesión ...

Michael R. Hines
fuente
2
Este comentario debería obtener más votos a favor o al menos el hecho debe destacarse en cada respuesta.
ni8mr
11

Para Ubuntu 12.10, ninguno de los anteriores funcionó, excepto la solución de ratzs. Recomiendo agregar esto a su archivo /etc/bash.bashrc:

export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"
Lovemore Nalube
fuente
De todas las soluciones anteriores. Este es el único que funcionó para mí.
JohnnyQ
11

Estaba atascado en un estado extraño en el que mi máquina local está configurada esy, por lo tanto, la máquina remota (vía vagrant) había sido aprovisionada en un estado no manejado. Por lo tanto, tuve que usar el manual export=solo para facilitar un éxito dpkg-reconfigure. Entonces el sistema está bien.

export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales
Charney Kaye
fuente
¡Mejor! Debido a las dpkg-recofigurepantallas mojibake.
Oriente
9

Escribí un script bash para solucionar el problema anterior. Las respuestas anteriores son útiles, pero configurar las variables locales simplemente exportando los valores en la variable de shell funcionará solo para una sesión. Resolví este problema permanentemente exportando las variables locales en el archivo .bash_profile. También puede usar el /etc/profilearchivo en lugar de .bash_profile.

echo "export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8">>~/.bash_profile

No se olvide de sourcela .bash_profiley seguir la secuencia de comandos de fácil configuración.

Ajeet Khan
fuente
8

Puedes probar:

export LANGUAGE=ru_RU.UTF-8
export LC_CTYPE=ru_RU.UTF-8
export LC_NUMERIC=ru_RU.UTF-8
export LC_TIME=ru_RU.UTF-8
export LC_COLLATE=ru_RU.UTF-8
export LC_MONETARY=ru_RU.UTF-8
export LC_MESSAGES=ru_RU.UTF-8
export LC_PAPER=ru_RU.UTF-8
export LC_NAME=ru_RU.UTF-8
export LC_ADDRESS=ru_RU.UTF-8
export LC_TELEPHONE=ru_RU.UTF-8
export LC_MEASUREMENT=ru_RU.UTF-8
export LC_IDENTIFICATION=ru_RU.UTF-8
export LC_ALL=ru_RU.UTF-8

¿Dónde ru_RUestá el código de tu país?

Koss
fuente
7

La respuesta actual aceptada no es suficiente en la estrategia de solución de problemas porque puede tener un error humano. Configura su sistema en_USpero ha en_GBhabilitado /etc/locale.gencomo lo hice en el hilo aquí para Raspberry Pi 3b. Debería tener habilitadas todas las configuraciones regionales utilizadas /etc/locale.gen.

Solo había en_GB.UTF-8 UTF-8habilitado /etc/locale.gen. Debería haber habilitado allí solo en_US.UTF-8 UTF-8porque otros comandos se ejecutan para ello. Así que comenté GB y Estados Unidos, y todo funciona ahora

masi@raspberrypi:~ $ sudo vim /etc/locale.gen

masi@raspberrypi:~ $ sudo locale-gen 
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.

masi@raspberrypi:~ $ sudo a2enmod rewrite && a2enmod headers && a2enmod ssl
Module rewrite already enabled
Module headers already enabled
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Module socache_shmcb already enabled
Module ssl already enabled

Ahora, no obtengo esos errores de configuración regional con ningún comando.

Sistema: Raspbian Jessie
Hardware: Raspberry Pi 3b

Léo Léopold Hertz 준영
fuente
6

Como se dijo aquí en el Wiki de Debian , puede editar /etc/locale.geny agregar todas las configuraciones regionales (o descomentarlas, tenía una lista de todas las configuraciones regionales pero todas excepto la que usé como comentarios) para las que desea tener soporte en su sistema. Luego, ejecuta

sudo dpkg-reconfigure locales

para actualizar las configuraciones regionales en su sistema. Ahora, todas las configuraciones regionales que agregó / descomentaron /etc/locale.genestán disponibles en su sistema sin ninguna advertencia.

msrd0
fuente
3

Si usa el entorno KDE, verifique el setlocale.sharchivo en ~/.kde/env/:

$ cat ~/.kde/env/setlocale.sh 
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en
MaximKostrikin
fuente
esto me salvó el culo ... gracias! Increíble en cuántos lugares se está estableciendo esta basura local ... y cómo en el mundo KDE logra arruinar las cosas al mezclar mis dos ubicaciones diferentes (is_IS para ubicación, dinero, etc. y en_EN para lenguaje en un is_EN inexistente lugar)! Grmpfh
StFS
2
  1. Es posible que deba ejecutar sudo dpkg-reconfiguretambién la aplicación que ha instalado mientras la configuración de "configuración regional" no ha sido válida / no coincide.

    Mientras que la configuración regional del sistema se configuró incorrectamente, instalé vim. Más tarde, cuando se fijó configuración regional del sistema vi una situación que vimestaba mostrando caracteres UTF-8 de forma incorrecta como símbolos extraños, mientras que nanoy lessse muestra correctamente. Corriendo

    sudo dpkg-reconfigure vim
    

    pareció solucionar el problema después de que se corrigió la configuración del sistema.

  2. También noté lo mismo que ya se mencionó: es posible que deba desconectar / volver a conectar SSH para que los cambios sean visibles.

ajaaskel
fuente
2

Agregar el siguiente texto ~/.profileme funciona:

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Estoy usando el servidor Ubuntu 16.04 LTS de 64 bits en Linode.

Jingguo Yao
fuente
2

Esto funcionó para mí cuando tuve el mismo problema (basado en la solución proporcionada por dman ):

sudo sh -c "echo -e 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
Pythonhunter
fuente
No estaba muy seguro de cómo agregar la URL al comentario. @EliahKagan
pythonhunter
1
No hay problema: la fecha / marca de tiempo al lado de un comentario es lo que lo vincula directamente. ... Entonces, he notado que el comentario de glarrain (pidiendo en >lugar de >>) parece una respuesta a dman's. En realidad, no sé cuál es la mejor o la mejor opción, pero si tiene alguna idea sobre esto, podría ampliar esta respuesta con más información. (Sin embargo, no es necesario).
Eliah Kagan