로케일 환경 변수를 변경하는 방법?


18

en_US.utf8 , et_EE.iso88591ru_RU.utf8 현지화 파일 을 생성 했습니다 . 이제 로케일 변수를 ru_RU.utf8 또는 en_US.utf8 로 변경하려고 시도해 도 아무런 영향이 없습니다.

# locale -a
C
en_US.utf8
et_EE
et_EE.iso88591
POSIX
ru_RU.utf8
# LC_TIME=ru_RU.utf8
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
# LC_TIME="ru_RU.utf8"
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
# 

그러나, I가 변화하는 경우 LANG = 변수, 모든 다른 변수하지만 LANGUAGE =LC_ALL를 = 의 값을 취 LANG = 변수. 각 로케일 변수를 개별적으로 수정하는 방법이 있습니까? 또한 로케일 변수가 일반 쉘 변수가 아니라 로케일 유틸리티의 매개 변수와 비슷한 것이 맞 습니까?

답변:


15

로캘 범주를 독립적으로 설정할 수 있습니다. LANG명시 적으로 설정되지 않은 카테고리에만 적용됩니다.

LANGLC_xxx일반 환경 변수입니다. 그것들은 locale유틸리티의 설정이 아닙니다 : locale프로그램은 로케일 처리에 관여하지 않으며, 현재 및 사용 가능한 로케일 설정을보고하는 작은 유틸리티 일뿐입니다.

작성 LC_TIME=ru_RU.utf8하면 환경 변수가 설정되지 않고 쉘 변수 만 설정됩니다. 쉘 변수는 쉘 내부에 있으며 다른 프로그램에서는 보이지 않습니다. 반면에 환경 변수는 쉘이 시작하는 프로그램에 의해 상속됩니다. 변수를 환경으로 내 보내야합니다.

$ LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
$ export LC_TIME
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"

또는 직접

$ export LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"

"LANG 및 LC_xxx 일반 환경 변수는" 그걸 어떻게 알 수 있습니까 LANGLC_xxx환경 변수? 단지 내 테스트 쇼 LANGLANGUAGELC_MESSAGESLC_ALL기타 등의 변수 동안 환경 변수, LC_CTYPE그리고 LC_MONETARY환경 변수 (또한, 그들은 쉘 변수 없음)하지?
rony_t

@rony_t 응용 프로그램 및 라이브러리의 소스 코드를 보거나 설명서를 보거나 실험 해 볼 수 있습니다. 예를 들어 and를 env LC_TIME=en_GB date사용 env LC_TIME=fr_FR date하여 구성하십시오 env PATH="$PATH" date(분명히 시스템에 존재하는 로케일을 선택하십시오). 분명히, 각 변수는 주어진 프로세스 환경에서 설정되거나 설정되지 않을 수 있습니다. 어떤 테스트를 했습니까? 사용하는 응용 프로그램이 LC_CTYPE(정상적으로) 및 LC_MONETARY(꽤 드문) 에 따라 다르게 동작 합니까?
Gilles 'SO- 악 그만

터미널에서 printenvbash의 환경 변수를 나열 하는 명령을 실행했으며 LANGand LANGUAGELC_MESSAGESand 만 LC_ALL환경 변수로 나열되었습니다. 또한 환경 변수와 bash의 쉘 변수를 가져 오기 위해 명령 set -o posix다음에 명령 set을 실행했으며 LANGand LANGUAGELC_MESSAGESand LC_ALL만 나열되었습니다. 따라서 이것은 LANGand LANGUAGELC_MESSAGESand LC_ALL가 환경 변수이고 나머지 로케일 변수가 아니며 쉘 변수도 아님을 의미합니다.
rony_t

@rony_t 호는 것을 의미한다 당신이 환경 변수를 설정 한 LANG, LANGUAGE, LC_MESSAGESLC_ALL. (명시 적으로 또는 배포판 또는 시스템 관리자가 직접 수행했습니다.) (구문 상 유효한) 이름으로 환경 변수를 설정할 수 있습니다! 그러나 일부 이름은 일부 응용 프로그램에 의미가 있으며 일부 이름은 그렇지 않습니다. LC_MESSAGES, LC_CTYPELC_TIME은 오류 메시지 언어, 문자 인코딩, 시간 형식 등을 관리하는 응용 프로그램에서 사용됩니다.
Gilles 'SO- 악의를 그만두십시오

@rony_t 그런데 당신의 설정은 매우 이상합니다. 설정은 LC_ALL다른 모든 설정 보다 우선하므로 다른 로케일 변수의 값은 중요하지 않습니다. 일반적으로 프로그램이 주어진 로케일을 사용하도록 강제하기 위해 일시적으로 만 사용되며 정상적인 환경에서 사용하는 것은 의미가 없습니다.
Gilles 'SO- 악마 그만

6

Fedora / CentOS / RHEL 기반 배포판 locale -a에서이 시스템 파일에서 명령 을 실행할 때 로케일을 로케일 중 하나로 변경할 수 있다고 생각 합니다.

/etc/sysconfig/i18n

예를 들어 Fedora 14 시스템에서 :

$ more /etc/sysconfig/i18n 
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

그놈에서 도움말 앱을 실행할 수 있습니다.

system-config-language

이 GUI가 나타납니다.

             랭의 SS.  GUI

데비안 / 우분투 배포판과는 약간 다르다고 생각합니다. 이 파일이라고 생각합니다.

/etc/default/locale

나는 이것이 환경 변수라고 생각하지만 응용 프로그램이 어떻게 사용하는지 전혀 확실하지 않습니다.

참고 문헌


4

RedHat 6에서 LC_ALL이 설정되면 LC_ALL이 다른 모든 LC_ * 환경 변수보다 우선하므로 다른 LC_ * 환경 변수를 설정해도 아무런 영향을 미치지 않습니다.

[root@nbu76 bin]# LC_TIME=en_US.UTF-8
[root@nbu76 bin]# export LC_TIME
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_IE"
LC_NUMERIC="en_IE"
LC_TIME="en_IE"
...
LC_ALL=en_IE
[root@nbu76 bin]# unset LC_ALL
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_US.UTF-8
...
LC_ALL=
[root@nbu76 bin]# export LC_TIME=en_IE
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_IE
....
LC_ALL=

1

데비안 시스템에서는 dpkg-reconfigure locales기본 언어를 설정하고 다른 언어를 사용할 수 있도록 실행할 수 있습니다. 그런 다음 환경 변수 update-locale를 설정하여 대체 언어를 사용할 수 있습니다.LANGUAGE/etc/default/locale


2
dpkg-reconfigure locales, notlocale
lauriys
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.