Linux 게시글 로고

리눅스 명령어 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로 바꿔보았다.

Write A Comment