본문으로 건너뛰기
홈
기술
기술 전체
프로그래밍68
컴퓨터 과학63
AI48
웹 개발36
인프라33
데이터31
소프트웨어 공학18
소개
← 목록으로인프라 › 운영체제 › Linux

우분투 영문 로케일 설정

목차

우분투 영문 로케일 설정

$ locale

LANG=ko_KR.UTF-8

LANGUAGE=

LC_CTYPE=“ko_KR.UTF-8”

LC_NUMERIC=“ko_KR.UTF-8”

LC_TIME=“ko_KR.UTF-8”

LC_COLLATE=“ko_KR.UTF-8”

LC_MONETARY=“ko_KR.UTF-8”

LC_MESSAGES=“ko_KR.UTF-8”

LC_PAPER=“ko_KR.UTF-8”

LC_NAME=“ko_KR.UTF-8”

LC_ADDRESS=“ko_KR.UTF-8”

LC_TELEPHONE=“ko_KR.UTF-8”

LC_MEASUREMENT=“ko_KR.UTF-8”

LC_IDENTIFICATION=“ko_KR.UTF-8”

LC_ALL=

$ sudo vi /etc/default/locale

LC_ALL=en_US.UTF-8

LANG=en_US.UTF-8

$ logout

다시 로그인 후

$ locale

위 기록은 /etc/default/locale을 수정하던 환경의 절차다. 적용 전 locale -a로 en_US.utf8이 생성되어 있는지 확인한다. 없다면 해당 배포판의 로케일 생성 도구로 먼저 추가해야 한다.

LANG은 기본 로케일이고 LC_* 값이 설정되어 있으면 해당 범주에서 LANG보다 우선한다. LC_ALL은 모든 범주를 강제로 덮어쓰므로 지속 설정에 남기기 전에 다른 로케일 설정을 무시해도 되는지 확인한다. 한 셸에서만 임시로 시험하려면 다음처럼 실행할 수 있다.

LANG=en_US.UTF-8 locale

서버 전체의 기본값을 바꾸면 기존 프로세스의 출력 언어, 날짜, 숫자 형식이 영향을 받을 수 있다. 설정 후 새 로그인 셸에서 locale을 다시 확인하고, 특정 서비스에만 필요한 변경이라면 서비스 환경 변수로 범위를 좁힌다.

로케일이 바뀌는 범위 이해하기

로케일은 화면에 보이는 문장만 바꾸지 않는다. LC_TIME은 날짜 표시, LC_NUMERIC은 소수점 표기, LC_COLLATE는 정렬 순서, LC_MESSAGES는 프로그램 메시지에 영향을 준다. 따라서 서버 로그를 영문으로 보고 싶다는 이유로 시스템 전체를 바꾸면, 같은 서버에서 실행하는 배치 프로그램의 출력 형식도 달라질 수 있다.

flowchart LR
  LANG[LANG: 기본값] --> 범주[LC_TIME·LC_NUMERIC·LC_MESSAGES 등]
  개별[개별 LC_* 설정] -->|해당 범주 우선| 범주
  전체[LC_ALL 설정] -->|모든 범주 최우선| 범주

locale 출력에서 LANG=en_US.UTF-8이어도 LC_MESSAGES=ko_KR.UTF-8가 남아 있으면 메시지는 계속 한국어로 보일 수 있다. 반대로 LC_ALL을 설정하면 각 범주의 개별 값을 모두 덮는다. 영문 메시지만 필요한 경우에는 전체 설정 대신 해당 명령을 LC_MESSAGES=C 명령어로 실행하는 방법을 먼저 고려한다.

Ubuntu에서 기본값을 바꿀 때

locale -a에 원하는 로케일이 없다면 로케일을 생성해야 한다. Debian/Ubuntu의 locales 패키지가 설치된 환경에서 다음 순서로 확인할 수 있다. 사용 중인 Ubuntu 릴리스에 따라 기본 설정 파일 경로가 다를 수 있으므로 update-locale의 도움말과 현재 설정을 먼저 본다.

locale -a | rg -i '^en_US\.utf8$'
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8 LC_ALL

마지막 명령의 LC_ALL에는 값을 주지 않았으므로 기존의 전역 덮어쓰기 설정을 제거하겠다는 뜻이다. 기존 시스템에 범주별 설정이 있다면 함께 유지되는지 확인한다. 설정 후 현재 셸에서 바로 바뀌지 않을 수 있으므로 새 로그인 세션을 열어 locale, locale -a, printenv LANG LC_ALL LC_MESSAGES를 다시 본다. locale: Cannot set LC_* to default locale 같은 경고가 나오면 선언한 로케일이 실제 생성됐는지부터 확인한다.

목적변경 범위확인 방법
한 명령만 영문 메시지로 실행LC_MESSAGES=C 명령어그 명령의 출력 언어
현재 셸에서 시험export LANG=en_US.UTF-8같은 셸에서 locale
새 로그인 세션의 기본값 변경update-locale다시 로그인한 뒤 locale
특정 서비스만 변경서비스 환경 변수서비스 재시작 후 실제 프로세스 환경과 로그

서비스 프로세스는 로그인 셸과 다른 환경으로 시작할 수 있다. 터미널의 locale이 영문으로 바뀌어도 systemd 서비스 출력이 그대로라면 서비스 단위의 환경을 확인한다. Linux locale(7) 매뉴얼에 우선순위와 범주가, Ubuntu update-locale 매뉴얼에 전역 설정 명령이 설명돼 있다.

같은 카테고리의 글