독일어 (오스트리아) 로케일 (A4 용지 크기, 24 시간, yyyy-mm-dd)을 원하지만 영어 사용자 인터페이스 (번역이 좋지 않습니다). 나는 이것을 달성하는 올바른 방법 LC_
은 내 변수를 다음과 같이 설정하는 .bashrc
것이라고 생각했습니다 (잘못되면 수정하십시오).
LC_MESSAGES=en_US.UTF-8
LC_$everythingelse=de_AT.UTF-8
모든 단일 값을 설정하는 대신 LC_ $ everythingelse를 설정하는 더 우아한 방법이 있습니까? LC_ALL 설정은 LC_MESSAGES보다 우선하므로 옵션이 아닙니다.
$ export LC_ALL=de_AT.UTF_8
$ export LC_MESSAGES=en_US.UTF_8
$ echo $LC_MESSAGES
en_US.UTF_8
$ locale | grep LC_MESSAGES
LC_MESSAGES="de_AT.UTF_8"
추신 : 그것은 공유 컴퓨터이며 sudoer가 아니므로 시스템 전체 설정을 변경하는 것은 옵션이 아닙니다.
답변
로케일 설정에는 세 가지 세트가 있습니다 ¹ :
LANG
카테고리에 값을 지정하지 않은 경우 대체 설정입니다. 사용자가 간단한 방법으로 로케일을 표시하도록되어 있습니다.LC_xxx
각 카테고리 (xxx
일 수MESSAGES
,TIME
등).LC_ALL
모든 설정을 무시합니다. 알려진 로케일 (일반적으로C
기본 로케일) 에서 작업하기 위해 응용 프로그램이 모든 설정을 대체하는 방법 으로, 일반적으로 다양한 명령이 알려진 형식으로 출력을 생성합니다.
사용자가 설정할 수 있도록 LANG=de_AT.UTF-8
하고 LC_MESSAGES=C
( C
디폴트 로케일과 번역되지 않은 의미 en_US
로 일반적으로 동일 C
메시지).
그러나 기본값을 변경하지 않는 두 가지 범주가 있습니다. 많은 프로그램이 중단되기 때문입니다.
LC_COLLATE
문자 조합 순서입니다. 문자열을 정렬하는 방법이 아니라 문자를 정렬하는 방법 만 나타 내기 때문에 매우 유용하지 않습니다. 문자열을 정렬하는 방법을 알고있는 도구는를 사용하지 않습니다LC_COLLATE
. 또한 많은 도구는 ”[a-z]
26 개의 ASCII 소문자와 일치하고 다른 ASCII 문자는 모두 일치하지 않습니다 ” 와 같은 것을 기대 하지만 대부분의 기본이 아닌 로케일에서는 그렇지 않습니다 (tryecho B | LC_COLLATE=en_US grep '[a-z]'
).LC_NUMERIC
숫자를 표시하는 방법을 나타냅니다. 특히 많은 언어에서 부동 소수점 숫자는 소수점이,
아닌을 사용합니다.
. 그러나 숫자를 구문 분석하는 대부분의 프로그램은 a를 예상 하고 필드 구분 기호로.
취급합니다,
.
그래서 나는 추천합니다
- 명시 적
LC_COLLATE=C LC_NUMERIC=_C
으로 - 또는 떠나
LANG
해제 만 유용한 범주에 대한 값을 설정 (LC_MESSAGES
,LC_TIME
,LC_PAPER
, 플러스LC_CTYPE
(그 값에 따라 다를 수 있습니다 터미널)).
¹ GNU libc에
플러스 LANGUAGE
. 당신이 그것에 대해 듣지 못했다면, 당신은 그리워하지 않습니다.
답변
매뉴얼 페이지 로케일 (7)는 말한다 :
기본 로케일 […] 은 다음 단계를 사용하여 결정됩니다.
널이 아닌 환경 변수 LC_ALL이 있으면 LC_ALL의 값이 사용됩니다.
위의 범주 [LC_ *] 중 하나와 이름이 같은 환경 변수가 존재하고 널이 아닌 경우 해당 값이 해당 범주에 사용됩니다.
널이 아닌 환경 변수 LANG가 있으면 LANG 값이 사용됩니다.
따라서 LANG를 LC_ALL의 우선 순위가 낮은 아날로그의 일종으로 사용할 수 있습니다. LANG 값을 de_AT
LC_MESSAGES로 설정하십시오 en_US
.
$ env LC_MESSAGES=en_US.UTF-8 LANG=de_AT.UTF-8 locale | egrep '(MESSAGES|PAPER)'
LC_MESSAGES=en_US.UTF-8
LC_PAPER="de_AT.UTF-8"