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)
.utf8
en LOCALE
y LC_*
, pero al parecer .UTF-8
trabaja aquí también ... En cuanto a es-ES: ¿Parece (y sin .utf8
) en locale -a
?
export LANG=C
y export LC_ALL=en_US.UTF-8
ver qué pasa. Mi computadora portátil Arch Linux tiene LOCALE="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 accidentalmente LANG=en-US
(con guión) en lugar de LANG=en_US
(con guión bajo).
/etc/locale.gen
sería útil también.
locale -a
?