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.gen
tiene varios ejemplos; todas las líneas UTF-8 tienen "algo.UTF-8", y ejecuta locale-gen
programas en_US.UTF-8... done
mientras 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-gen
y 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=C
y LC_ALL=en_US.UTF-8
trabajar (de hecho, la configuración lo LC_ALL
arregló, la configuración LANG
no 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 setlocale
con LC_ALL
, para conseguir una NULL
vuelta, y generar un error, incluso cuando otras llamadas a setlocale
devuelven una cadena buena.
Aquí está la parte superior de una ltrace
de 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
?.utf8
enLOCALE
yLC_*
, pero al parecer.UTF-8
trabaja aquí también ... En cuanto a es-ES: ¿Parece (y sin.utf8
) enlocale -a
?export LANG=C
yexport LC_ALL=en_US.UTF-8
ver 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.gen
sería útil también.Respuestas:
Le falta un archivo que se usaría para predeterminar la configuración regional en ausencia de
$LANG
o$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:
---------------------- 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-8
funciona en Raspbian 2018-11-13 Lite.Tuve el mismo problema después de configurarlo
/etc/locale.conf
hoy (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-gen
para instalar las configuraciones regionales seleccionadas.fuente
Seguir este enlace resuelve mi problema:
genera un archivo
/etc/locale.conf
que 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_LOCALE
yLOCALE
en/etc/rc.conf
, asegúrese de que no era el primerono
y 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