"bash: 경고: setlocale: LC_ALL: 로케일을 변경할 수 없습니다" - 오해의 소지가 있습니까? 무슨 뜻이에요?

"bash: 경고: setlocale: LC_ALL: 로케일을 변경할 수 없습니다" - 오해의 소지가 있습니까? 무슨 뜻이에요?

로케일이 어떻게 작동하는지 이해하고 싶습니다. 특히 내가 읽은 이후로"-bash: 경고: setlocale: LC_ALL: 로케일을 변경할 수 없습니다(en_US.UTF-8)"그리고https://askubuntu.com/questions/114759/warning-setlocale-lc-all-cannot-change-locale

내 Linux Mint에서 그렇게 한 locale-gen fr_FR.*LC_ALL=fr_FR.UTF-8"bash: warning: setlocale: LC_ALL: can Change locale (fr_FR.UTF-8)"이 출력되었습니다. 그러나 locale나중에 "LC_NAME=fr_FR.UTF-8" 등이 표시되므로 로케일 변수가 변경됩니다. "로케일을 변경할 수 없습니다"라는 메시지가 나타나는 이유는 무엇입니까?

나는 LC_NAME=qq_QQ.UTF-8(존재하지 않습니까? 로케일) 결과는 동일합니다. 경고, locale출력이 업데이트되었습니다.

bash 터미널이 시작되기 전에 새 할당이 생성된 경우에만 경고가 나타납니다. 이에 따라 bash -c "LC_NAME=fr_FR.UTF-8"경고가 생성되지 않았습니다.

명령은 다음에서 비롯됩니다.https://askubuntu.com/questions/114759/warning-setlocale-lc-all-cannot-change-locale sudo update-locale LANG=fr_FR경고를 제거할 수는 없습니다.

현재 bash 세션이 /etc/defaults/locale다른 파일을 유지하는 것으로 의심되므로 locale-gen이는 효과가 없습니다. 옳은? strace출력이 너무 복잡해서 읽을 수 없습니다. 아직 찾지 못했습니다 /etc/defaults/locale.

다음에 추가:

시스템 Linux Mint 20.2(Ubuntu 기반). IIRC locale-gen name.*어딘가에서 해당 줄을 읽었고 출력 결과 가 name정확히 done. 이제 답변과 매뉴얼 페이지를 읽은 후 실행 locale-gen에서 name.*을 주석 처리한 다음 주석 처리를 해제하고 다시 실행해 보았습니다. 실행 결과는 이전과 동일합니다./etc/locale.gensudo locale-genname.UTF-8sudo locale-genlocale-gen name.*

답변1

귀하의 경고는 귀하가 요청한 로케일이 실제로 아직 컴파일되지 않았음을 나타냅니다. 따라서 다음을 사용해야 합니다.

sudo dpkg-reconfigure locales

컴파일할 로캘을 선택합니다.

또는 파일을 편집하세요.

/etc/locale.gen

필요한 로캘의 주석을 해제하고 다음을 실행합니다.

sudo locale-gen

그들을 생성합니다.

로케일 변수란 무엇입니까?

로캘 환경 변수는 C 라이브러리()에서 특별한 의미를 부여하는 일반 환경 변수입니다 glibc. 특히 setlocale(LC_ALL, "");이러한 변수는 프로그램이 호출 또는 유사한 수단을 통해 현지화 지원 활성화를 요청할 때 사용됩니다. 이 시점에서 C 라이브러리는 /usr/lib/locale/.

이러한 현지화된 설정은 유틸리티에서 localedef사용됩니다 . /usr/share/localeDebian, Ubuntu 및 관련 배포판에서는 .localedeflocale-gen

locale-gen fr_FR.*작동하지 않습니까?

locale-gen명령줄에서 인수를 사용하지 않습니다. /etc/locale.gen생성할 로케일을 결정하기 위해서만 읽습니다 . 따라서 /etc/locale.gen파일에서 주석 처리되지 않은 로케일 에 따라 locale-gen fr_FR.*명령이 예상한 효과를 얻지 못할 수도 있습니다.

update-locale명령은 업데이트에 사용하기 위한 패키지 관리자 스크립트용 도구일 뿐입니다 /etc/default/locale. 컴파일되는 실제 로케일에는 전혀 영향을 미치지 않습니다.

관련 정보