locale(로케일, 로캘) 이란?
개요
locale은 세계 각 국에서 사용하는 언어, 문자, 화폐 표시, 시간등에 대해 국제화(i18n; Internationalization) 와 지역화(l10n; localization)를 통해 어떻게 표시할 지 정의한 매개 변수의 모음입니다.
locale 이 필요한 이유는 동일한 데이타라도 문화권마다 표시하고 처리하는 방법이 달라서입니다.
예로 12345678.235 란 숫자가 있을 경우 한국어로 locale 이 설정되어 있으면 다음과 같이 큰 자리 구분은 , 로 소수점은 . 으로 표시를 합니다.
12,345,678.235
하지만 프랑스 권에서는 다음처럼 콤마 대신 공백을 사용하고 소수점에는 콤마를 찍어서 표시한다고 합니다.
12 345 678,235
프랑스와 같은 EU 국가인 독일은 우리와 정반대로 콤마와 점을 사용한다고 합니다. 즉 큰 자리수 표현은 . 으로 소수점은 , 로 구분합니다.
12.345.678,235
locale 을 활용하면 언어권에 맞게 프로그램마다 데이타의 입력과 출력을 수정하지 않고도 사용하는 언어별에 맞는 데이타를 처리할 수 있는 장점이 있습니다.
locale 확인
locale 명령어로 현재 설정을 확인할 수 있습니다.
$ 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=
가능한 로케일 언어 목록은 -a 옵션을 주고 실행하면 됩니다.
$ locale -a | grep C C.utf8 en_AG en_AU en_AU.utf8 ... en_US en_US.iso885915 en_US.utf8 en_ZA en_ZA.utf8 en_ZM en_ZW en_ZW.utf8 ko_KR.euckr ko_KR.utf8 POSIX
한국어 로케일은 ko_KR.euckr 과 ko_KR.utf8 이며 만약 목록에 보이지 않을 경우 언어팩을 설치해 주면 됩니다.
$ sudo yum install langpacks-ko
$ sudo apt install language-pack-ko
locale 설정
LC_NUMERIC, LC_TIME, LC_MONETARY 같은 개별 로케일 변수마다 설정해도 되지만 LANG 변수에 설정하면 모든 로케일에 적용됩니다.
$ export LANG=ko_KR.utf8
위 문장은 다음 명령어와 동일한 결과를 갖게 됩니다.
export LC_CTYPE="ko_KR.utf8" export LC_NUMERIC="ko_KR.utf8" export LC_TIME="ko_KR.utf8" export LC_COLLATE="ko_KR.utf8" export LC_MONETARY="ko_KR.utf8" export LC_MESSAGES="ko_KR.utf8" export LC_PAPER="ko_KR.utf8" export LC_NAME="ko_KR.utf8" export LC_ADDRESS="ko_KR.utf8" export LC_TELEPHONE="ko_KR.utf8" export LC_MEASUREMENT="ko_KR.utf8" export LC_IDENTIFICATION="ko_KR.utf8"
위와 같이 콘솔에서 설정하면 재부팅시 사라지므로 사용하는 쉘의 초기화 파일에 설정을 넣어주면 됩니다.
예로 RHEL/CentOS 에서 bash를 사용시에는 .bash_profile 에 Ubuntu 에서 bash 를 사용하면 .profile 에 설정하며 zsh 를 사용시에는 .zshrc 에 넣어줍니다.
export LANG=ko_KR.utf8
export LANG=ko_KR.utf8
같이 보기
- PHP number_format 으로 숫자 포맷팅 하기
- RHEL/CentOS 6 에서 locale 변수를 변경했지만 service 명령어의 결과가 한글로 표시되는 경우 처리 방법
- C locale(로캘)의 의미(export LANG=C)
- PHP money_format 으로 화폐 단위 표시 하기