LC_ALL이 아닌 LC_ *로 설정


13

독일어 (오스트리아) 로케일 (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가 아니므로 시스템 전체 설정을 변경하는 것은 옵션이 아닙니다.

답변:


15

로케일 설정에는 세 가지 세트가 있습니다 ¹ :

  • 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 문자는 모두 일치하지 않습니다 " 와 같은 것을 기대 하지만 대부분의 기본이 아닌 로케일에서는 그렇지 않습니다 (try echo 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. 당신이 그것에 대해 듣지 못했다면, 당신은 그리워하지 않습니다.


자세한 답변과 설명에 감사드립니다! 그래도 독일어 키보드의 숫자 키패드 ,.(아쉽게도) 대신에 점이있는 숫자를 입력하는 것이 불편하므로 대부분의 앱은 비표준 LC_NUMERIC에서 잘 작동하는 것처럼 보입니다. LC_COLLATE 예제를 완전히 이해하지 못합니다. 시스템에서 제공 한 예제가 일치 하지 않습니다B .
Heinzi


10

매뉴얼 페이지 로케일 (7)는 말한다 :

기본 로케일 [...] 은 다음 단계를 사용하여 결정됩니다.

  1. 널이 아닌 환경 변수 LC_ALL이 있으면 LC_ALL의 값이 사용됩니다.

  2. 위의 범주 [LC_ *] 중 하나와 이름이 같은 환경 변수가 존재하고 널이 아닌 경우 해당 값이 해당 범주에 사용됩니다.

  3. 널이 아닌 환경 변수 LANG가 있으면 LANG 값이 사용됩니다.

따라서 LANG를 LC_ALL의 우선 순위가 낮은 아날로그의 일종으로 사용할 수 있습니다. LANG 값을 de_ATLC_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"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.