¿Cómo arreglar una advertencia de configuración regional de Perl?

596

Cuando corro perl, recibo la advertencia:

perl: advertencia: la configuración regional falló.
perl: advertencia: compruebe que su configuración regional:
    IDIOMA = (sin establecer),
    LC_ALL = (sin establecer),
    LANG = "en_US.UTF-8"
son compatibles e instalados en su sistema.
perl: advertencia: volviendo a la configuración regional estándar ("C").

¿Cómo lo soluciono?

xain
fuente
¿Qué sucedió cuando verificó la configuración regional como le dijo el mensaje de error?
Brian D Foy
3
en lugar de instalar la configuración regional, también puede cambiar la configuración regional. En mi cuadro de Ubuntu, esto se hace para un usuario editando~/.pam_environment
Janus Troelsen
En mi ODROID-C1 que ejecuta Ubuntu, el problema era el archivo ~ / .pam_environment. Algunas de las variables fueron es_US.UTF-8 en lugar de en_US.UTF-8. Gracias.
f1vefour
Tengo esto en Cygwin \ Babun. Solo una reinstalación de perl lo arregló.
Lucas Soares

Respuestas:

449

Su sistema operativo no lo sabe en_US.UTF-8.

No mencionaste una plataforma específica, pero puedo reproducir tu problema:

% uname -a
OSF1 hunter2 V5.1 2650 alfa
% perl -e salir
perl: advertencia: la configuración regional falló.
perl: advertencia: compruebe que su configuración regional:
    LC_ALL = (sin establecer),
    LANG = "en_US.UTF-8"
    son compatibles e instalados en su sistema.
perl: advertencia: volviendo a la configuración regional estándar ("C").

Supongo que usó ssh para conectarse a este host anterior desde una máquina de escritorio más nueva. Es común /etc/ssh/sshd_configcontener

AcceptEnv LANG LC_*

que permite a los clientes propagar los valores de esas variables de entorno en nuevas sesiones.

La advertencia le da una pista sobre cómo silenciarlo si no necesita la configuración regional completa:

% env LANG = C perl -e salir
%

o con bash:

$ LANG = C perl -e salir
PS 

Para una solución permanente, elija uno de

  1. En el host anterior, configure la LANGvariable de entorno en el archivo de inicialización de su shell.
  2. Modifique su entorno en el lado del cliente, por ejemplo , en lugar de ssh hunter2utilizar el comando LANG=C ssh hunter2.
  3. Si tiene derechos de administrador, evite que ssh envíe las variables de entorno comentando la SendEnv LANG LC_*línea en el archivo local /etc/ssh/ssh_config . (Gracias a esta respuesta . Ver Bug 1285 para OpenSSH para más información).
Greg Bacon
fuente
22
¡Gracias! Recibí este mensaje de error al conectarme con git a mi servidor. Después de agregar de_CH.UTF-8 (no se admitió allí, pero se usó localmente) con dpkg-reconfigure localesel mensaje desapareció.
Simon A. Eugster
82
Tuve este problema durante siglos, ... eliminar "AcceptEnv LANG LC_ *" de sshd_config finalmente lo resolvió. ¡Gracias por la pista!
madc
2
@ Greg Bacon, ¿No habría también casos en los que desearía establecer las variables de entorno en todo el sistema, por ejemplo creando un archivo / etc / environment? help.ubuntu.com/community/…
fraxture
25
@HermannIngjaldsson, al menos en Ubuntu (12.10), no había necesidad de reiniciar el servidor (después de eliminar "AcceptEnv LANG LC_ *"). Acabo de recargar ssh config:, service ssh reloadque toma una fracción de segundo, y ni siquiera hace que la sesión ssh actual finalice.
noamtm
3
agregue 'export LC_ALL = C' y luego 'source ~ / .bashrc' en el sistema cliente resuelva el problema.
EffectiveMatrix
476

Aquí se explica cómo resolverlo en Mac OS Lion (10.7) o Cygwin (Windows 10):

Agregue las siguientes líneas a su bashrc o bash_profile en la máquina host:

# Setting for the new UTF-8 terminal support in Lion
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Si está usando zsh, edite zshrc:

# Setting for the new UTF-8 terminal support in Lion
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8
Allen Bargi
fuente
66
Gracias, he buscado una solución para este problema durante mucho tiempo, y siempre pensé que era un problema en la configuración de mi servidor Ubuntu, y parecía que no había una solución que ayudara (todas esas cosas de reconfiguración de dkpg (
Teemu Kurppa
55
Debido a que LC_ALLsobrescribe todas las demás variables, prefiero establecer LANG=de_AT.UTF-8y variables individuales como LC_MESSAGES=en_US.UTF-8. Si no se establece una variable, recurre a LANG. También puedes, por ejemplo. unset LC_CTYPEpara obligarlo a volver a caer LANG.
David
44
Colocar esas líneas en .bashrc no funcionó, ¡pero bash_profile lo resolvió! Tuve que crear el archivo.
Hermann Ingjaldsson
55
Poner estas líneas en ~/.bashrcresuelto para mí ... luego debe volver a cargar usando source ~/.bashrc... Thnks <3
Enissay
55
Gracias, esto funcionó bien en ZSH y el complemento oh-my-zsh en Mac OS X El Capitan, en la parte inferior de ~ / .zshrc: LC_CTYPE = en_US.UTF-8 LC_ALL = en_US.UTF-8
Valerio Schiavoni
207

Si está creando un rootfs usando debootstrap, deberá generar las configuraciones regionales. Puede hacer esto ejecutando:

# (optional) enable missing locales
sudo nano /etc/locale.gen

# then regenerate
sudo locale-gen

Este consejo proviene de https://help.ubuntu.com/community/Xen

Bagazo
fuente
28
Esta es la verdadera solución para mí.
Afriza N. Arief
66
locale-gen no toma ningún argumento (en Debian estable al menos). En su lugar, edite /etc/locale.gen para descomentar las configuraciones regionales que desee, luego ejecute sudo locale-gen
Sam Watkins
2
fijado enUbuntu Server
Paschalis
55
En Debian puede que tenga que hacer $ echo en_US UTF-8 >> /etc/locale.genprimero.
akhmed
1
En Gentoo (al menos), locale-genno toma argumentos. Se lee de /etc/locale.gen.
Pistos
142

Utilizar:

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

Funciona para Debian . No sé por qué, pero locale-gen no tuvo resultados.

¡Importante! Es una solución temporal. Tiene que ejecutarse para cada sesión.

artemn
fuente
13
Este me funcionó. Solo lo puse en mi .bashrcarchivo.
Anirudh Ramanathan
2
A mí también me funcionó. Yo sólo tenía que fijar los dos ajustes (lengua y LC_ALL) que apareció desarmado en las advertencias de Perl
Laurent
2
En Debian, local-gensolo procesa configuraciones regionales que no están comentadas /etc/local.gen. Es posible que deba hacer echo en_US UTF-8 >> /etc/locale.genprimero.
akhmed
esto funcionó para mí en Elementary OS Freaya (basado en Ubuntu)
valkirilov
1
LC_ C TYPE puede ser?
mixel
139

Esto generalmente significa que no ha configurado correctamente las configuraciones regionales en su caja de Linux.

En Debian o Ubuntu, eso significa que debes hacer

$ sudo locale-gen
$ sudo dpkg-reconfigure locales

Ver también man locale-gen .

Paul Tomblin
fuente
30
no soluciona el problema aquí
Somatik
66
Configuraciones locales dpkg-reconfigure - solucionó el problema para mí, debian 7.1
newUserNameHere
44
dpkg-reconfigure locales falla con los mismos mensajes de error de configuración regional perl que uno está tratando de arreglar en primer lugar !!!!
matteo
10
Esto funcionó para mí en Ubuntu 14.04, aunque primero tuve que agregar la configuración regional que faltabasudo locale-gen es_UY.UTF-8
alf
2
@matteo Solo la primera vez, antes de que solucione el error. Inténtalo de nuevo, y debería solucionarse.
Zero3
92

Solo para usuarios de macOS y Mac OS X

Recibía la misma advertencia mientras usaba Git

Para resolver esta advertencia Desmarque la Set locale environment variable on startupopción y reinicie su terminal. La siguiente captura de pantalla representa la configuración de mi terminal.

ingrese la descripción de la imagen aquí

Inder Kumar Rathore
fuente
3
¡Guau, tan simple y solucionado mis problemas! ¡Gracias!
Michal
3
Intenté todos los demás, pero este lo hizo por mí. Yo uso iTerm y tiene la misma opción de codificación de caracteres.
Michael Morrison
2
Desafortunadamente, esto rompe ZSH (la tabulación dejó de funcionar)
Christian
1
Esto hace totalmente el truco para Mac OS. Por cierto, esto comenzó a sucederme justo después de actualizar a macOS Sierra. Y esto solucionó este problema para mí.
Paulo Malvar
1
Esto solucionó mi problema. comenzó a sucederme, después de actualizar a Mac OS X High Sierra desde Sierra.
Lucian Irimie
36

Es una solución simple en Ubuntu. Debe generar las configuraciones regionales desde cero, ejecutando los siguientes comandos desde la línea de comandos:

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

Esto debería crear las configuraciones regionales y luego volver a configurarlas.

jfreak53
fuente
Esto funcionó bien para mí incluso usando pt_BR pt_BR.UTF-8- Gracias.
Marcos Freitas
29

Agregar lo siguiente para /etc/environmentsolucionar el problema para mí en Debian y Ubuntu (por supuesto, modificar para que coincida con la configuración regional que desea utilizar):

LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
joscarsson
fuente
77
.. Recibí una advertencia que decía que la configuración regional /etc/environmentestá en desuso y, en su lugar, debería establecerse /etc/default/locale. Ambos parecen funcionar por ahora.
joscarsson
debería serLC_CTYPE
aexl
25

Ahora estoy usando esto:

$ cat /etc/environment
...
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

Luego cierre la sesión de SSH e inicie sesión nuevamente.

Vieja respuesta:

Solo esto me ayudó:

$ locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=ru_RU.UTF-8
LC_TIME=ru_RU.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=ru_RU.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=ru_RU.UTF-8
LC_NAME=ru_RU.UTF-8
LC_ADDRESS=ru_RU.UTF-8
LC_TELEPHONE=ru_RU.UTF-8
LC_MEASUREMENT=ru_RU.UTF-8
LC_IDENTIFICATION=ru_RU.UTF-8
LC_ALL=

$ sudo su

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

# locale-gen en_US.UTF-8
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.

# dpkg-reconfigure locales
Generating locales...
  en_AG.UTF-8... done
  en_AU.UTF-8... done
  en_BW.UTF-8... done
  en_CA.UTF-8... done
  en_DK.UTF-8... done
  en_GB.UTF-8... done
  en_HK.UTF-8... done
  en_IE.UTF-8... done
  en_IN.UTF-8... done
  en_NG.UTF-8... done
  en_NZ.UTF-8... done
  en_PH.UTF-8... done
  en_SG.UTF-8... done
  en_US.UTF-8... up-to-date
  en_ZA.UTF-8... done
  en_ZM.UTF-8... done
  en_ZW.UTF-8... done
Generation complete.

# exit

$ 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
warvariuc
fuente
Esto funcionó bien para mí en Ubuntu 15.04, muchas gracias.
Goke Obasa
22

en Debian después de mucho buscar esto hizo el truco.

primero:

sudo apt-get purge locales

entonces:

sudo aptitude install locales

y el famoso:

sudo dpkg-reconfigure locales

Esto libera el sistema de configuraciones regionales, luego reinstala las configuraciones regionales y degrada libc6 de 2.19 a 2.13, que es el problema. Luego configura las configuraciones regionales nuevamente.

tkjef
fuente
44
dpkg-reconfigure localesEs todo lo que se necesita. sudosi eres un tipo de sudo, o hazlo como root. Luego seleccione su entorno local de acuerdo con lo que tiene en su entorno de shell.
mknaf
66
Las configuraciones regionales dpkg-reconfigure DEBERÍAN ser todo lo que se necesita. Después de haber intentado eso 100 veces y haber buscado en Internet y eso es todo lo que has visto y el problema aún no se resuelve solo, prueba lo anterior. Luego regresa y vota esto. :)
tkjef
1
Finalmente una respuesta no hack a este problema, ¡definitivamente debería ser la aceptada!
php_nub_qq
17

Esta es una respuesta rápida. Estableceremos configuraciones regionales que no estén desarmadas después del reinicio. Primero abra el archivo bash y edítelo:

nano .bashrc

agregue estas líneas al archivo:

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

activar el cambio recargando bash:

source ~/.bashrc

resultados de la prueba :

locale
Alouani Younes
fuente
El único que funciona para mí, Raspbian y ubuntu server 16.04 :)
Liso
13

Para Ubuntu usa esto,

#export LANGUAGE=en_US.UTF-8
#export LC_ALL=en_US.UTF-8
#export LANG=en_US.UTF-8
#export LC_TYPE=en_US.UTF-8

Trabajó para mi.

Amjith
fuente
También funcionó para mí, eliminando todo el contenido del archivo /etc/default/localey poniendo solo la definición de los vars (eliminando la palabra exportar) y reiniciando el servidor
Edenshaw
12

Si utiliza Mac OS X v10.10 (Yosemite) o superior para conectarse a su servidor Linux, puede probar estos pasos.

  1. Mantenga su archivo / etc / ssh / sshd-config original

  2. Pon tu ~ / .bash_profile

    export LANG="en_US"
    export LC_ALL=$LANG.UTF-8
  3. correr

    dpkg-reconfigure locales

    Y seleccione "en_US.UTF-8"

dsandrade
fuente
10
sudo nano /etc/locale.gen

Descomente las configuraciones regionales que desea usar (por ejemplo en_US.UTF-8 UTF-8):

Entonces corre:

sudo /usr/sbin/locale-gen

Fuente: http://people.debian.org/~schultmc/locales.html

Thomas Jensen
fuente
La compañía para la que trabajo en EE. UU. Alberga un servidor git que tiene clientes internacionales. La multitud de GB se quejó de que sus clones git sobre ssh tendrían problemas debido a las diferencias locales. Esto aplicado en el servidor solucionó este problema para ellos.
Therealstubot
10

Debe configurar la configuración regional adecuadamente /etc/default/locale, cerrar sesión, iniciar sesión y luego ejecutar los comandos regulares

root@host:~# echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale
root@host:~# exit
local-user@local:~$ ssh root@host
root@host:~# locale-gen en_US.UTF-8
root@host:~# dpkg-reconfigure locales
Glarrain
fuente
44
Estos pasos me funcionaron (servidor Ubuntu 14.04). El punto principal era cerrar sesión y volver a iniciar sesión.
liberborn
9
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory

Solución:

Prueba esto ( uk_UA.UTF-8 es mi ubicación actual. Escribe tu ubicación, por ejemplo en_US.UTF-8 !)

sudo locale-gen uk_UA.UTF-8

y esto.

sudo dpkg-reconfigure locales
bogdanvlviv
fuente
Gracias, esto resolvió mi problema, después de hacer esto y reinstalar.
madprops
8

para mí solucioné este error al editar el archivo .bashrc agregar exportación. Añadir después de los comentarios iniciales.

Añadir soporte de idioma.

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

Regads amables,

LandiLeite
fuente
6

La adición de la configuración regional correcta a ~/.bashrc, ~/.bash_profile, /etc/environmenty similares va a resolver el problema, sin embargo, no es recomendable, ya que anula la configuración de /etc/default/locale, lo cual es confuso en el mejor y puede conducir a los lugares que no se aplican de manera uniforme en el peor.

En cambio, uno debe editar /etc/default/localedirectamente, lo que puede verse así:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US

El cambio entrará en vigencia la próxima vez que inicie sesión. Puede obtener la nueva configuración regional en un shell existente mediante el suministro de /etc/default/localeesta manera:

$ . /etc/default/locale
Nuvanda
fuente
1
necesita reiniciar el sistema después de este paso
Ghanshyam Bagul
Simplemente puede comentar en la configuración regional deseada en "/etc/locale.gen" y luego ejecutar:locale-gen
Dave Everitt
5

Para cualquiera que se conecte a DigitalOcean u otro proveedor de alojamiento en la nube desde iTerm2.app en MacOS High Sierra y obtenga este error en algunos comandos:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "en_US.UTF-8"
  are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").

Esto solucionó el problema para mí:

ingrese la descripción de la imagen aquí

Sé que este hilo es antiguo, pero tal vez alguien lo encuentre útil. Sé lo molesto que esto puede ser.

Blago Eres
fuente
Sí, esta configuración en iterm2! ¡Gracias!
Brian Olsen
4

Siguiendo la respuesta aceptada:

LANG = C ssh hunter2.

LC_ALL = C ssh hunter2

en el lado del cliente hizo el truco para mí.

Alex Kosenkov
fuente
Me funcionó en OSX 10.10.3, mientras que solo "LANG = C" no era suficiente. Gracias Alex!
Christian
4

Con zsh ohmyzsh agregué esto a .zshrc:

 # You may need to manually set your language environment
 LANGUAGE=en_US.UTF-8
 LANG=en_US.UTF-8
 LC_CTYPE=en_US.UTF-8
 LC_ALL=en_US.UTF-8

Quitando la línea export LANG=en_US.UTF-8

Reabrí una nueva pestaña y SSHed, funcionó para mí :)

Joseph Briggs
fuente
3

Añadir LC_ALL="en_GB.utf8"a /etc/environmenty reinicie. Eso es todo.

zires
fuente
2

Como siempre, el diablo está en los detalles ...

En Mac OS X v10.7.5 (Lion), para corregir algún error de Django , en mi ~/.bash_profilehe configurado:

export LANG=en_EN.UTF-8
export LC_COLLATE=$LANG
export LC_CTYPE=$LANG
export LC_MESSAGES=$LANG
export LC_MONETARY=$LANG
export LC_NUMERIC=$LANG
export LC_TIME=$LANG
export LC_ALL=$LANG

Y a su vez, durante mucho tiempo recibí esa advertencia al usar Perl.

¡Culpa mía! Como me di cuenta mucho más tarde, ¡mi sistema es en_US.UTF-8! Lo arreglé simplemente cambiando de

export LANG=en_EN.UTF-8

a

export LANG=en_US.UTF-8
Luca Bonavita
fuente
2

Todas las respuestas anteriores son incorrectas. El mensaje es claro: falta la configuración regional. La solución es agregar la configuración regional adecuada. Para ello, edite el archivo /etc/locale.gen, elimine el signo # delante de la configuración regional que se informa como faltante y luego emita el comando:

$ sudo locale-gen

En realidad, esto generará las configuraciones regionales especificadas en /etc/locale.gen y, por lo tanto, el mensaje no se mostrará.

Matthias Hryniszak
fuente
Esta es simplemente la respuesta y funcionó en la antigua Debian (6) para mí. Todo lo demás es demasiado complicado y un poco fuera de pista.
Dave Everitt
2

en mi caso, con debian8.6, tuve que cambiar la configuración en:

/etc/ssh/ssh_config para #AcceptEnv LANG LC_*

y sshd_configpara#SendEnv LANG LC_*

luego reinicie el servicio ssh.

por fin

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

java newbees
fuente
2

Agregue configuraciones regionales faltantes a .bash_profile

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

Luego busca tu .bash_profile

source ~/.bash_profile
Parinda Rajapaksha
fuente
1

En mi caso, este fue el resultado:

LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "ro_RO.UTF-8",
LC_ADDRESS = "ro_RO.UTF-8",
....

La solución fue:

sudo locale-gen ro_RO.UTF-8
Rodislav Moldovan
fuente
1

sshsobrescribe las variables locales de LC de forma predeterminada. Ver /etc/ssh/sshd_config:

AcceptEnv LANG LC_*

Entonces, tal vez necesite establecer estas variables en su shell local.

garaboncias
fuente
1

Para mí, en Ubuntu 16.04 (Xenial Xerus) funcionó lo siguiente:

root@host:~#locale-gen en_GB.UTF-8
root@host:~#localectl set-locale LANG=en_GB.UTF-8,LC_ALL=en_GB.UTF-8

Luego reiniciar ...

Aleksandar Pavić
fuente