Estoy usando Arch Linux, y he seguido las instrucciones en la wiki sobre cómo configurar mi ubicación.
Casi todos los programas que se ejecutan se quejan de la configuración regional, incluso locale. Se parece a esto:
% locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en-US
LC_TIME=en-US
LC_COLLATE="POSIX"
LC_MONETARY=en-US
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT=en-US
LC_IDENTIFICATION="POSIX"
LC_ALL=
o:
% perl
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "en-US",
LC_NUMERIC = "en-US",
LC_MONETARY = "en-US",
LC_MEASUREMENT = "en-US",
LC_CTYPE = "en_US.UTF-8",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C")
Algo un poco confuso es que /etc/locale.gentiene varios ejemplos; todas las líneas UTF-8 tienen "algo.UTF-8", y ejecuta locale-genprogramas en_US.UTF-8... donemientras se está ejecutando, pero locale -a, que se supone que muestra los programas locales disponibles en_US.utf8. He intentado varias combinaciones de ambos formatos en /etc/locale-geny LOCALE=en /etc/rc.conf, pero nada ha solucionado el problema.
Información Adicional:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
La sugerencia de Bruce Ediger de configurar LANG=Cy LC_ALL=en_US.UTF-8trabajar (de hecho, la configuración lo LC_ALLarregló, la configuración LANGno importó), pero me gustaría saber qué está sucediendo. Según SUS , LC_ALL anulará todas las demás variables LC_ * si está configurado y no es nulo. En mi sistema, está configurado, pero es nulo, por lo que debe ignorarse y, en su lugar, deben usarse otros valores. Eso no es lo que está pasando, parece que las aplicaciones están llamando setlocalecon LC_ALL, para conseguir una NULLvuelta, y generar un error, incluso cuando otras llamadas a setlocaledevuelven una cadena buena.
Aquí está la parte superior de una ltracede locale(desplácese hacia la derecha para ver los valores de retorno de la función)
% ltrace locale
(0, 0, 0, -1, 0x7f5c1ae44510) = 0x7f5c1ae47140
__libc_start_main(0x401d70, 1, 0x7fff7c8cfbf8, 0x404610, 0x4046a0 <unfinished ...>
setlocale(0, "") = "en_US.UTF-8"
setlocale(5, "") = "en_US.UTF-8"
textdomain("libc") = "libc"
argp_parse(0x607280, 1, 0x7fff7c8cfbf8, 0, 0x7fff7c8cfad4) = 0
setlocale(6, "") = NULL
dcgettext(0, 0x405aa8, 5, 0, 0) = 0x405aa8
error(0, 2, 0x405aa8, 1, 0locale: Cannot set LC_ALL to default locale: No such file or directory)
fuente

locale -a?.utf8enLOCALEyLC_*, pero al parecer.UTF-8trabaja aquí también ... En cuanto a es-ES: ¿Parece (y sin.utf8) enlocale -a?export LANG=Cyexport LC_ALL=en_US.UTF-8ver qué pasa. Mi computadora portátil Arch Linux tieneLOCALE="en_US.UTF-8"/etc/rc.conf, y no puedo entender dónde establece mi computadora portátil LANG = C./etc/locale.conf? Parece que escribiste accidentalmenteLANG=en-US(con guión) en lugar deLANG=en_US(con guión bajo)./etc/locale.gensería útil también.Respuestas:
Le falta un archivo que se usaría para predeterminar la configuración regional en ausencia de
$LANGo$LC_ALL(o todos los más específicos$LC_whatever) configurados.En glibc anterior, es / usr / lib / locale / locale-archive. Debido a que GNU / Linux es caótico, debe usar strace para determinar qué archivos se esperan en las versiones particulares en uso en su máquina:
strace -e locale de archivo execve ("/ usr / bin / locale", ["locale"], [/ * 36 vars * /]) = 0 acceso ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (No existe tal archivo o directorio) abierto ("/ etc / ld.so.cache", O_RDONLY) = 3 abierto ("/ lib / libc.so.6", O_RDONLY) = 3 abierto ("/ usr / lib / locale / locale-archive", O_RDONLY | O_LARGEFILE) = 3---------------------- Comentarios agregados 1 día después:
"ltrace -S" debería estar bien, ya que muestra syscalls.
De lo contrario, "ltrace" no es muy útil (es decir, es contraproducente versus strace), ya que solo muestra las llamadas superiores. Esos son obvios (setlocale (3)), mientras que el verdadero problema ocurre dentro de libc.
Parece que tiene los datos locales sin procesar instalados, ya que en_US.UTF-8 funciona.
Si es así, algo como esto debería solucionar su problema, estableciendo un valor predeterminado para todo el sistema:
fuente
sudo localedef -f UTF-8 -i en_US en_US.UTF-8funciona en Raspbian 2018-11-13 Lite.Tuve el mismo problema después de configurarlo
/etc/locale.confhoy (en relación con los cambios recientes a/etc/rc.conf. En mi caso, resultó que las configuraciones regionales no estaban instaladas.Compruebe
/etc/locale.gen. Todas las configuraciones regionales a las que hace referencia su variable de entorno deben estar activadas (es decir, no comentadas) allí. Después de haber realizado sus cambios, ejecutesudo locale-genpara instalar las configuraciones regionales seleccionadas.fuente
Seguir este enlace resuelve mi problema:
genera un archivo
/etc/locale.confque soluciona este problemafuente
Tuve problemas similares recientemente, todos los nombres de archivo Unicode se mostraron incorrectamente, cuando eliminé accidentalmente 'LOCALE = en_US.utf8' en
/etc/rc.conf. Así que revisé el script de arranque:Una solución simple es comprobar tanto
DAEMON_LOCALEyLOCALEen/etc/rc.conf, asegúrese de que no era el primeronoy el segundo no estaba vacía.fuente
¿Quizás una de sus configuraciones no es válida? Estas son mis configuraciones locales para referencia; no causan ningún error (KUbuntu 12.04):
fuente