리눅스 명령어 locale은 현재 Linux 시스템에서 사용 중인 locale을 보여주거나, 원하는 locale로 변경 할 수 있도록 도와주는 명령어다.
그렇다면 Locale이란 무엇일까?
Locale은 Linux나 Windows 등 운영체에서 사용중인 지역(국가)이나 언어 등을 나타내는 용어다. 로케일이 필요한 이유는 같은 데이터를 표현 하더라도 나라 마다 혹은 지역 마다 표시하고 처리하는 방법이 달라서이다.
예를 들어 숫자 4163820486를 표시 할 때 미국과 영국은 4,163,820,486이라고 표시하지만 프랑스와 핀란드는 콤마 대신 공백을 사용하여 4 163 820 486이라고 표시한다. 노르웨이는 콤마 대신 마침표를 사용하여 4.163.820.486이라고 표시한다.
날짜 또 어떠한가, 대한민국은 2024년 03월 30일 이라고 표시한다면 미국은 Mar 30, 2024이라고 표시한다.
위의 두 가지 외에도 문자, 사람 이름, 화폐, 측정 단위 등 많은 것들이 시스템에 설정된 Locale 값에 따라 표현되는 방법이 달라진다.
추가로 왜 지역(국가)과 언어를 각각 설정하는 것일까? 필자 생각에는 캐나다와 같이 국가는 하나지만 다수의 언어(영어와 프랑스어, 이누피아크 등)를 공용어로 삼는 나라들 때문인거 같다.
locale 명령어 경로
/usr/bin/locale
[devover@oisystem ~]$ ls -alh /usr/bin/locale
-rwxr-xr-x. 1 root root 38K May 19 2022 /usr/bin/locale
사용 방법 및 옵션
locale [option] 이름
-a, --all-locales : 사용 가능한 로케일 이름 출력
-c, --category-name : 사용 가능한 범주(Category) 이름을 출력
-k, --keyword-name : 선택된 키워드 이름을 출력
-v, --vervose : 상세한 정보 출력
-?, --help : 명령어 사용법 출력
-V, --version : 명령어 버전 정보 출력
로케일 환경 변수
맨 아래 LC_ALL은 모든 항목들의 값을 한꺼번에 바꿀때 사용한다.
항목 | 설명 |
LC_CTYPE | 문자에 대한 정의(대문자, 소문자 등의 정보) |
LC_NUMERIC | 숫자 표시 형식 정의(천 단위, 소수점, 구분 기호 등) |
LC_TIME | 날짜와 시간의 표시 형식 정의 |
LC_COLLATE | 문자열 정렬 및 문자열 비교에 사용 되는 규칙 정의 |
LC_MONETARY | 금액(통화) 표시 형식 정의(화폐 표시 문자, 천 단위, 소수점 등) |
LC_MESSAGES | 시스템 메시지의 언어 및 형식 정의(언어, 포맷, 에러 메시지 등) |
LC_PAPER | 출력 장치와 관련된 종이 크기와 방향 정의 |
LC_NAME | 사람 이름의 표기법 및 형식 정의 |
LC_ADDRESS | 주소 표기법 및 형식 정의 |
LC_TELEPHONE | 전화번호 표기법 및 형식 정의 |
LC_MEASUREMENT | 측정 단위와 관련된 형식 정의(길이, 무게 등) |
LC_IDENTIFICATION | 신분증 및 식별자와 관련된 형식을 지정 |
LC_ALL | 모든 환경 변수에 대한 로케일 설정 |
사용예
보통 Linux를 설치 할 때 지역과 언어를 선택하므로 자주 쓰이는 명령어는 아니다.
[devover@oignon ~]$ 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_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
▲위와 같이 locale만 입력 하면 현재 설정된 로케일들을 볼 수 있다.
필자의 리눅스는 en(영어)와 US(미국)을 의미하는 en_US로 되어 있고, UTF8 방식의 문자 인코딩을 사용하는 걸 알 수 있다.
[devover@oignon ~]$ locale -a
aa_DJ
aa_DJ.iso88591
aa_DJ.utf8
aa_ER
aa_ER@saaho
aa_ER.utf8
aa_ER.utf8@saaho
aa_ET
aa_ET.utf8
af_ZA
af_ZA.iso88591
af_ZA.utf8
am_ET
am_ET.utf8
...중략...
▲위와 같이 옵션 a를 사용하면 사용 가능한 로케일들이 출력된다.
[devover@oignon ~]$ locale -a | grep -i kr
ko_KR
ko_KR.euckr
ko_KR.utf8
▲grep을 이용해 한국 지역이 포함된 로케일들을 출력해봤다.
만약 KR이 보이지 않으면 언어팩을 설치해주면 해결된다.
[devover@oignon ~]$ export LC_ALL=ko_KR.utf8
[devover@oignon ~]$ locale
LANG=ko_KR.utf8
LC_CTYPE="ko_KR.utf8"
LC_NUMERIC="ko_KR.utf8"
LC_TIME="ko_KR.utf8"
LC_COLLATE="ko_KR.utf8"
LC_MONETARY="ko_KR.utf8"
LC_MESSAGES="ko_KR.utf8"
LC_PAPER="ko_KR.utf8"
LC_NAME="ko_KR.utf8"
LC_ADDRESS="ko_KR.utf8"
LC_TELEPHONE="ko_KR.utf8"
LC_MEASUREMENT="ko_KR.utf8"
LC_IDENTIFICATION="ko_KR.utf8"
LC_ALL=
▲필자의 시스템은 en_US.UTF-8이었으나 “export LC_ALL=ko_KR.utf8″을 입력하여 모든 Locale 환경 변수를 ko_KR.utf8로 바꿔보았다.