로케일이 어떻게 작동하는지 이해하고 싶습니다. 특히 내가 읽은 이후로"-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.gen
sudo locale-gen
name.UTF-8
sudo locale-gen
locale-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/locale
Debian, Ubuntu 및 관련 배포판에서는 .localedef
locale-gen
왜 locale-gen fr_FR.*
작동하지 않습니까?
locale-gen
명령줄에서 인수를 사용하지 않습니다. /etc/locale.gen
생성할 로케일을 결정하기 위해서만 읽습니다 . 따라서 /etc/locale.gen
파일에서 주석 처리되지 않은 로케일 에 따라 locale-gen fr_FR.*
명령이 예상한 효과를 얻지 못할 수도 있습니다.
이 update-locale
명령은 업데이트에 사용하기 위한 패키지 관리자 스크립트용 도구일 뿐입니다 /etc/default/locale
. 컴파일되는 실제 로케일에는 전혀 영향을 미치지 않습니다.