
저는 Arch Linux를 사용하고 있으며 다음 지침을 따랐습니다.위키내 로케일 설정에 대해.
실행되는 거의 모든 프로그램은 로케일에 대해 불평합니다 locale
. 심지어 . 다음과 같습니다.
% 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=
또는:
% 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")
약간 혼란스러운 점은 에 /etc/locale.gen
여러 가지 예가 있다는 것입니다. 모든 UTF-8 행에는 "something.UTF-8"이 있으며 실행 중은 실행 중인 동안 locale-gen
표시되지만 사용 가능한 로케일을 표시하는 는 표시됩니다 . 와 에서 두 형식을 다양하게 조합해 보았 으나 문제가 해결되지 않았습니다.en_US.UTF-8... done
locale -a
en_US.utf8
/etc/locale-gen
LOCALE=
/etc/rc.conf
추가 정보:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
Bruce Ediger의 설정 제안을 받고 작업 LANG=C
했지만 LC_ALL=en_US.UTF-8
(사실 설정은 LC_ALL
해결되었으므로 설정은 LANG
중요하지 않았습니다) 무슨 일이 일어나고 있는지 알고 싶습니다. 에 따르면SUS, LC_ALL은 다른 모든 LC_* 변수가 설정되어 있고 null이 아닌 경우 재정의됩니다. 제 시스템에서는 설정되어 있지만 null이므로 무시하고 대신 다른 값을 사용해야 합니다. 그것은 무슨 일이 일어나고 있는지가 아닙니다. 다른 호출이 좋은 문자열을 반환 하는 경우에도 응용 프로그램이 호출 setlocale
하고 LC_ALL
, 반환을 받고 NULL
, 오류를 생성하는 것 같습니다.setlocale
ltrace
다음은 of 의 상단입니다 locale
(함수 반환 값을 보려면 오른쪽으로 스크롤).
% 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)
답변1
$LANG
또는 $LC_ALL
(또는) 이 없을 때 로케일을 기본값으로 사용하는 파일이 누락되었습니다.모두보다 구체적인 $LC_whatever
)이 설정됩니다.
오래된 glibc에서는 /usr/lib/locale/locale-archive
. GNU/Linux는 혼란스럽기 때문에 strace를 사용하여 컴퓨터에서 사용 중인 특정 버전에 어떤 파일이 필요한지 확인해야 합니다.
strace -e 파일 로케일 execve("/usr/bin/locale", ["locale"], [/* 36 vars */]) = 0 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (해당 파일이나 디렉터리가 없음) open("/etc/ld.so.cache", O_RDONLY) = 3 오픈("/lib/libc.so.6", O_RDONLY) = 3 open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
---------1일 후 추가된 댓글:
ltrace -S
syscall을 표시하므로 괜찮습니다.
strace
그렇지 않은 경우 "ltrace" 는 최상위 호출만 표시하므로 그다지 도움이 되지 않습니다(즉, 에 비해 비생산적입니다 ). 그것들은 명백한 ( setlocale(3)
) 반면, 실제 문제는 내부에서 발생합니다 libc
.
당신이 가지고있는 것 같습니다날것의로케일 데이터가 설치되었으므로 en_US.UTF-8
작동합니다.
그렇다면 다음과 같이 시스템 전체 기본값을 설정하여 문제를 해결해야 합니다.
localedef -f UTF-8 -i en_US en_US.UTF-8
답변2
오늘 바로 설정한 후에도 동일한 문제가 발생했습니다 /etc/locale.conf
(최근 변경 사항과 관련) /etc/rc.conf
. 제 경우에는 로캘이 설치되지 않은 것으로 나타났습니다.
확인하다 /etc/locale.gen
. 환경 변수가 참조하는 모든 로캘은 여기에서 활성화되어야 합니다(즉, 주석 처리되지 않음). 변경한 후 실행하여 sudo locale-gen
선택한 로캘을 설치합니다.
답변3
이에 따라링크내 문제를 해결합니다.
sudo localectl set-locale LANG=en_CA.UTF-8
# or change to en_US.UTF-8 depends on your locale-gen
/etc/locale.conf
이 문제를 해결하는 파일을 생성합니다.
답변4
설정 중 하나가 잘못되었을 수 있나요? 이것은 참조용 로케일 설정입니다. 오류가 발생하지 않습니다(KUbuntu 12.04):
LANG=en_AU.UTF-8
LANGUAGE=
LC_CTYPE="en_AU.UTF-8"
LC_NUMERIC="en_AU.UTF-8"
LC_TIME="en_AU.UTF-8"
LC_COLLATE="en_AU.UTF-8"
LC_MONETARY="en_AU.UTF-8"
LC_MESSAGES="en_AU.UTF-8"
LC_PAPER="en_AU.UTF-8"
LC_NAME="en_AU.UTF-8"
LC_ADDRESS="en_AU.UTF-8"
LC_TELEPHONE="en_AU.UTF-8"
LC_MEASUREMENT="en_AU.UTF-8"
LC_IDENTIFICATION="en_AU.UTF-8"
LC_ALL=