저는 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_REGION
en_US
en_GB
en_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"
%r
12시간제, %T
24시간제입니다. 따라서 en_DK
로캘에는 원하는 속성이 있습니다. 아마도 텍스트 인코딩을 지정할 수 있습니다 en_DK.UTF-8
.
답변2
문제를 추가로 해결한 후에 ls /usr/share/locale
이것이 $(localectl list-locales)
. 동일한 루프를 실행하면 다음과 같은 답변을 얻을 수 있습니다.C.UTF8. 내가 알 수 있는 한, 이것이 내가 바랐던 바로 그 것이다.
그러나 이것이 최선의 접근 방식인지 여전히 궁금합니다.