'en' 로캘이 누락되었습니다.

'en' 로캘이 누락되었습니다.

저는 openSUSE Tumbleweed를 사용하고 있으며 시간을 모두 24시간 형식으로 변경하려고 합니다. 주로 KDE 잠금 화면에 사용되지만 다른 용도로도 사용됩니다.

나의 첫 번째 시도는 /etc/sysconfig/언어(YaST를 통해)에서 RC_LC_TIME="en_GB"를 설정하는 것이었지만 "TIME"도 날짜에 영향을 미친다는 사실을 깨닫지 못했기 때문에 이제 Thunderbird의 날짜 필드는 DD/MM/YYYY입니다. 방향 감각을 잃는다.

다음으로, 다른 옵션이 작동할 수 있는지 확인하기 위해 모든 로케일을 반복해 보았습니다.

cd /usr/share/locale
for f in *; do echo -e "$f\t$(LC_TIME=$f date +"%A %B %c")";done | grep "Tuesday December Tue Dec" | grep -v "[AP]M" | less

이것은 나에게 많은 옵션을 제공하며 그 중 가장 확실한 것은 "en"입니다. 그래서 시도해 보았지만 이제 로그인할 때 다음 오류가 발생합니다.

-bash: warning: setlocale: LC_TIME: cannot change locale (en): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (en)
/usr/bin/manpath: can't set the locale; make sure $LC_* and $LANG are correct

그렇다면 무엇이 작동하는지 확인하기 위해 로케일 목록을 기반으로 몇 가지 시행착오를 수행하기 전에 올바른 접근 방식은 무엇입니까? 나는 단지 en_US를 원하지만 24시간이 필요합니다.

답변1

en로케일 이름이 아닙니다. 모든 디렉토리가 /usr/share/locales로케일 이름은 아닙니다. 일부에는 여러 로케일에서 공유되는 데이터가 포함되어 있습니다. 예를 들어 en모든 영어 변형에서 사용되는 파일을 포함합니다.

대부분의 로케일 이름은 (미국 영어), (영국 영어), (캐나다 영어) 등의 형식입니다.language_REGIONen_USen_GBen_CA

(Glibc 기반(즉, 내장되지 않은 Linux) 시스템)에서 사용 가능한 로캘 목록을 얻으려면 다음을 실행하세요.

locale -a

일부 시스템(적어도 Debian 및 그 파생 시스템)에서는 기본적으로 모든 로캘을 사용할 수 있는 것은 아닙니다. locale -a사용 가능한 로케일만 나열됩니다. 로케일의 전체 목록은 에서 찾을 수 있습니다 /usr/share/i18n/SUPPORTED. 로케일을 준비하려면 를 실행하십시오 locale.gen. (시스템의 매뉴얼 페이지를 확인하십시오. 버전마다 구문이 다릅니다.)

필수 속성이 있는 로케일에 대해 사용 가능한 로케일을 검색할 수 있습니다. 로캘 설정에 대한 정보는 에 있습니다 /usr/share/i18n/locales/. 기본 날짜 형식은 %m이전 %d, 기본 시간 형식은 24시간, 요일 이름은 영어로 되어 있어야 합니다. 아래는 사용 가능한 로캘을 검색하고 해당 로캘을 이전 달 날짜와 평일과 함께 영어로 보고하는 스크립트입니다.

for x in /usr/share/i18n/locales/*; do
  awk '
    $1=="t_fmt" {t = $0}
    $1 == "d_fmt" && /%m.*%d/ {mdy=1}
    $1=="day" && (/Sunday/ || /Monday/) {english=1}
    END {if (english && mdy) {print FILENAME, t}}
  ' $x;
done

내 시스템의 출력:

/usr/share/i18n/locales/en_CA t_fmt       "%r"
/usr/share/i18n/locales/en_DK t_fmt    "%T"
/usr/share/i18n/locales/en_US t_fmt   "%r"

%r12시간제, %T24시간제입니다. 따라서 en_DK로캘에는 원하는 속성이 있습니다. 아마도 텍스트 인코딩을 지정할 수 있습니다 en_DK.UTF-8.

답변2

문제를 추가로 해결한 후에 ls /usr/share/locale이것이 $(localectl list-locales). 동일한 루프를 실행하면 다음과 같은 답변을 얻을 수 있습니다.C.UTF8. 내가 알 수 있는 한, 이것이 내가 바랐던 바로 그 것이다.

그러나 이것이 최선의 접근 방식인지 여전히 궁금합니다.

관련 정보