[linux] 로케일(locale) 설정 확인 및 변경방법
## 로케일(Locale)이란?
- 로케일은 사용자 인터페이스에서 사용되는 언어, 지역 설정, 출력 형식 등을 정의하는 문자열로, 유닉스Unix와 리눅스Linux와 같은 POSIX 기반의 시스템에서는 같은 형식을 공유하고 있다. 애플의 맥OS를 비롯한 Darwin 계열 운영체제들도 POSIX 호환이 되기 때문에 같은 형식의 로케일 문자열을 사용한다.
- 로케일과 관련된 환경변수들을 설정함으로서 로케일 설정을 변경할 수 있으며, 이 설정값에 따라서 프로그램이 지원하는 경우 메시지, 시간 형식, 통화 형식 등의 출력이나 동작을 변경할 수 있습니다.
- 로케일 설정은 특정 언어의 입출력에 영향을 주는 경우가 있어서, 영어 이외의 언어를 사용하는 경우 적절한 값 지정필요. 잘못설정할 경우 어플리케이션에서 한글깨짐등이 발생할 수 있고, 이경우 locale설정을 잘 살펴보아야 한다.
로케일(Locale) 형식
language[_territory][.codeset][@modifier]
- 형식은 위와 같고, ko_KR.UTF-8 로케일를 예를 들면 맨 앞의 ko는 한국어(한글)을 의미하며, 이 값은 ISO 639-1 표준 형식을 따릅니다. 두 번째로 언더바로 구분되는 KR 값은 지역을 의미하며, 마지막으로 점으로 구분되는 코드셋은 UTF-8 문자 인코딩 코드셋을 의미한다.
테스트 수행한 환경
- 인터넷가능한 환경, ubuntu 22.04, rockylinux 8.6
1. 현재 설정된 locale 정보 확인하기
- locale명령으로 시스템의 로케일 정보를 확인 가능
1) ubuntu 22.04 OS
## ubuntu 22.04
root@ubuntuserver2204:~# locale
LANG=en_US.UTF-8
LANGUAGE=
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=
2) rockylinux 8.6 OS
## rockylinux 8.6 OS
[root@rocky8 ~]# 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 설정에 대한 설명
가장 우선순위가 높은 값은 LC_ALL 이고 제일 우선순위가 낮은 값은 LANG 이다. LANG 을 지정하더라도 LC_ALL 이 다른 값으로 지정되어 있는 경우에는 LC_ALL 에 지정된 값을 기준으로 동작하게 된다.
환경변수명 | 설명 |
---|---|
LC_ALL | 전역 로케일 설정의 값이다. 우선순위가 가장 높다. |
LANG | 전역 로케일 설정값이다. 우선순위가 가장 낮은 값으로, 다른 값이 설정되어 있지 않을 때만 적용된다. |
LC_MESSAGES | 메시지를 표시하는 기준이 되는 로케일을 지정한다. |
LC_CTYPE | 문자 분류, 글자수, 대소문자 구분 등의 기준이 되는 로케일을 지정한다. |
LC_NUMERIC | 숫자와 관련된 기준이 되는 로케일을 지정한다. |
LC_MONETARY | 통화나 금액과 관련된 숫자의 기준이 되는 로케일을 지정한다. |
LC_TIME | 날짜, 시간과 관련된 로케일을 지정한다. |
LC_COLLATE | 문자열의 정렬 순서를 결정하는 로케일을 지정한다. |
2. 적용가능한 locale 목록 확인하기
- locale -a 명령어로 조회가능한 locale로만 변경가능하고, 해당목록에 없는 경우에는 설치를 해야 사용가능하다 1) ubuntu 22.04 OS
root@ubuntuserver2204:~# locale -a
C
C.utf8
en_US.utf8
POSIX
- 2) rockylinux 8.6 OS
[root@rocky8 ~]# locale -a
C
C.utf8
en_AG
en_AU
en_AU.utf8
en_BW
en_BW.utf8
en_CA
en_CA.utf8
en_DK
en_DK.utf8
en_GB
en_GB.iso885915
en_GB.utf8
en_HK
en_HK.utf8
en_IE
en_IE@euro
en_IE.utf8
en_IL
en_IN
en_NG
en_NZ
en_NZ.utf8
en_PH
en_PH.utf8
en_SC.utf8
en_SG
en_SG.utf8
en_US
en_US@ampm
en_US.iso885915
en_US.utf8
en_US.utf8@ampm
en_ZA
en_ZA.utf8
en_ZM
en_ZW
en_ZW.utf8
POSIX
- 많이 사용하는 인코딩중 하나인 ko_KR.UTF-8 관련 설치하기 1) ubuntu 22.04 OS
## 설치
root@ubuntuserver2204:~# apt-get install language-pack-ko -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
language-pack-ko-base
The following NEW packages will be installed:
language-pack-ko language-pack-ko-base
0 upgraded, 2 newly installed, 0 to remove and 90 not upgraded.
Need to get 1,168 kB of archives.
이하 생략..
## 확인
root@ubuntuserver2204:~# locale -a
C
C.utf8
en_US.utf8
ko_KR.utf8
POSIX
- 2) rockylinux 8.6 OS
## 설치
[root@rocky8 ~]# dnf install glibc-langpack-ko -y
Last metadata expiration check: 5:20:25 ago on Fri 21 Apr 2023 07:12:00 AM KST.
Dependencies resolved.
=======================================================================================
Package Architecture Version Repository Size
=======================================================================================
Installing:
glibc-langpack-ko x86_64 2.28-211.el8 baseos 358 k
Transaction Summary
=======================================================================================
Install 1 Package
Total download size: 358 k
Installed size: 2.5 M
Downloading Packages:
glibc-langpack-ko-2.28-211.el8.x86_64.rpm 4.0 MB/s | 358 kB 00:00
---------------------------------------------------------------------------------------
Total 434 kB/s | 358 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : glibc-langpack-ko-2.28-211.el8.x86_64 1/1
Running scriptlet: glibc-langpack-ko-2.28-211.el8.x86_64 1/1
Verifying : glibc-langpack-ko-2.28-211.el8.x86_64 1/1
Installed:
glibc-langpack-ko-2.28-211.el8.x86_64
Complete!
## 확인
[root@rocky8 ~]# locale -a
C
C.utf8
en_AG
en_AU
en_AU.utf8
en_BW
en_BW.utf8
en_CA
en_CA.utf8
en_DK
en_DK.utf8
en_GB
en_GB.iso885915
en_GB.utf8
en_HK
en_HK.utf8
en_IE
en_IE@euro
en_IE.utf8
en_IL
en_IN
en_NG
en_NZ
en_NZ.utf8
en_PH
en_PH.utf8
en_SC.utf8
en_SG
en_SG.utf8
en_US
en_US@ampm
en_US.iso885915
en_US.utf8
en_US.utf8@ampm
en_ZA
en_ZA.utf8
en_ZM
en_ZW
en_ZW.utf8
ko_KR.euckr
ko_KR.utf8
POSIX
3. locale 정보 변경하기
- 터미널에서 한글이 깨질때 ko_KR.utf8 로 변경하면 해결되고,
현재세션 또는 특정한 쉘스크립트 실행시 적용할수도 있고, .bashrc 에 적용하여 해당유저 로그인시 계속적으로 적용할수도 있다.
- .bashrc 에 적용하는것은 어플리케이션 구동에도 영향이 있을수 있기 때문에 충분한 확인이 필요하다.
1) ubuntu 22.04 OS
## 현재 세션에 적용하기
root@ubuntuserver2204:~# export LANG=ko_KR.utf8
## locale 확인
root@ubuntuserver2204:~# locale
LANG=ko_KR.utf8
LANGUAGE=
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=
## 한글 정상확인
root@ubuntuserver2204:~# ls
snap 한글.txt
- 2) rockylinux 8.6 OS
## 현재 세션에 적용하기
[root@rocky8 ~]# export LANG=ko_KR.utf8
## locale 확인
[root@rocky8 ~]# 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=
## 한글 정상확인
[root@rocky8 ~]# ls
anaconda-ks.cfg docker temp 한글.txt
댓글남기기