저는 독일어(오스트리아) 로케일(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가 아니므로 시스템 전체 설정을 변경할 수 없습니다.
답변1
세 가지 로케일 세트가 있습니다1:
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를 기대.
하고 a를,
필드 구분 기호로 처리합니다.
그래서 나는 제안한다
- 또는 명시적으로
LC_COLLATE=C LC_NUMERIC=_C
, - 또는
LANG
설정하지 않은 채로 두고 유용한 카테고리에 대한 값(LC_MESSAGES
,LC_TIME
,LC_PAPER
더하기 기호LC_CTYPE
(해당 값은 터미널에 따라 다를 수 있음))을 설정하면 됩니다.
더하기 기호 1개LANGUAGE
GNU libc로. 들어본 적이 없다면 많이 놓친 것이 아닙니다.
답변2
이것맨페이지 로케일(7)설명하다:
기본 로케일[...]다음 단계를 사용하여 다음을 결정하세요.
null이 아닌 환경 변수 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"