로케일(Locale)이란? 국제화(internationalization)와 지역화(localization)
로케일(Locale)이란?
로케일이란 사용자 인터페이스(UI)에서 사용되는 언어(ISO 639-1 codes 표준 형식), 지역 설정(ISO 3166-1 표준 형식), 출력 방식(Character Set 또는 ISO 8859-1, UTF-8 등의 인코딩 식별자) 등을 정의하는 문자열을 말한다. OS에서 로케일과 관련된 환경 변수들을 사용해 로케일 관련 설정들을 변경할 수 있으며, 설정된 로케일에 따라 프로그램이 지원하는 메시지, 시간 포맷, 통화 등의 출력이나 동작 등을 제어할 수도 있다. 로케일 설정은 특정 언어의 입출력에 영향을 줄 수도 있기 때문에 영어 이외의 언어를 사용하는 경우 적절한 값을 지정해야 한다.
로케일 형식
language[_territory][.codeset][@modifier]
한국어를 사용하는 경우 주로 ko_KR.UTF-8을 사용하며, 이 때 맨 앞의 ko는 한국어(한글), 가운데 언더바(_)로 구분되는 KR은 국가 변수(한국), 마지막 점(.)으로 구분되는 코드셋은 EUC-KR이나 UTF-8같은 문자 인코딩 코드셋을 의미한다. 일반적으로는 이렇게 언어+지역+코드셋의 세 개의 값을 묶어서 로케일이 구성된다. 이 뒤로 @로 구분되는 추가 문자열이 붙는 경우도 있지만 자주 사용되지는 않는다.
즉, ko_KR.UTF-8은 한글, 한국, UTF-8 인코딩을 의미한다. 한국어(ko)의 경우 주로 한국(KR)으로 지역을 설정하지만 영어의 경우 국가에 종속되지 않기 때문에 다음과 같이 여러 국가의 조합으로 사용되곤 한다.
▪︎ en_US.UTF-8: 영어, 미국, UTF-8 인코딩
▪︎ en_CA.UTF-8: 영어, 캐나다, UTF-8 인코딩
▪︎ en_GB.UTF-8: 영어, 영국, UTF-8 인코딩
▪︎ en_HK.UTF-8: 영어, 홍콩, UTF-8 인코딩
locale 명령어
셸에서 locale 명령어를 입력하면 현재 OS에 설정되어 있는 로케일 값을 확인할 수 있다.
$ locale
각각의 설정값들이 의미하는 것은 아래와 같다.
LANG
전역 로케일 설정값으로, 다른 값이 설정되어있지 않을 때만 적용되며, 우선순위가 가장 낮다.
LC_COLLATE
문자열의 정렬 순서를 결정하는 로케일을 지정한다.
LC_CTYPE
문자 분류, 글자수, 대소문자 구분이 되는 로케일을 지정한다.
LC_MESSAGES
메시지를 표시하는 기준이 되는 로케일을 지정한다.
LC_MONETARY
통화나 금액과 관련된 숫자의 기준이 되는 로케일을 지정한다.
LC_NUMERIC
숫자와 관련된 기준이 되는 로케일을 지정한다.
LC_TIME
날짜, 시간과 관련된 로케일을 지정한다.
LC_ALL
전역 로케일 설정값으로, 우선순위가 가장 높다.
이 외에도 시스템에 따라 LC_PAPER, LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC
_IDENTIFICATION 등의 추가적인 환경변수도 있다. 로케일은 라이브러리나 프로그램의 동작 방식에 영향을 줄 수도 있지만, 라이브러리나 프로그램에서 로케일과 관련된 동작 방식을 지원해야만 의도한대로 동작한다.
아래와 같이 locale 뒤에 -a를 붙이면 현재 OS에서 사용가능한 모든 로케일을 확인할 수 있다.
$ locale -a
로케일 설정 방법
$ export LANG="ko_KR.UTF-8"
셸에 export 키워드로 위와 같이 명령어를 입력하면 로케일을 설정할 수 있다. LANG의 위치에는 로케일의 환경변수 이름을 입력하고, 등호(=)로 로케일 설정값을 할당한다.
로케일 환경변수의 우선순위
위와 같이 로케일과 관련된 다양한 환경변수들 중에서 우선순위가 가장 높은 환경변수는 LC_ALL로, LC_ALL 값이 설정되어 있으면 이 외의 다른 로케일 환경변수들을 별도로 변경해도 적용되지 않는다. LC_ALL 다음으로 우선순위가 높은 환경변수는 LC 로 시작하는 환경변수들이며, 우선순위가 가장 낮은 환경변수는 LANG이다.
특정 로케일을 사용한다면 LC_ALL 하나만 설정해줘도 되며, 각각의 로케일 환경변수에 서로 다른 설정값을 지정해야 하는 경우에는 LANG으로 기본값을 설정하고 필요에 따라 LC_*의 설정값을 개별적으로 지정해주면 된다.
국제화(internationalization)와 지역화(localization)의 차이
internationalization (i18n)
i18n은 internationalization의 축약형이다. 국제화를 의미하는 internationalization은 총 20개의 알파벳으로 되어 있는데, 가장 첫 글자인 i와 가장 마지막 글자인 n 사이의 알파벳의 갯수가 18개이기 때문에 i18n이라고 칭한다. 즉, 국제화 = internationalization = i18n 이라고 보아도 무방하다.
i18n외에도 축약형으로 사용하는 다른 예시들도 있다.
▪︎ i18n: internationalization (국제화)
▪︎ l10n: localization (현지화)
▪︎ g11n: globalization (세계화)
소프트웨어의 국제화(internationalization, i18n)
소프트웨어의 국제화는 소프트웨어가 특정 지역이나 언어에 종속되지 않고 다양한 지역, 언어에서 정상적으로 동작하도록 국제적으로 통용되는 소프트웨어를 설계하고 개발하는 과정을 일컫는다.
소프트웨어 국제화 고려사항
▪︎ 유니코드
▪︎ 리소스 외부화 및 관리
▪︎ 로케일 대응
▪︎ Localizability (internationalization & localization)
주요 요소 | 설명 | 목적 |
유니코드 | 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준 | 각 언어와 문자 체계에 따른 충돌 문제 해결 |
리소스 외부화 및 관리 | 이미지, 바이너리 코드, 소스코드 등으로부터 리소스를 분리하는 것 | 프로그램의 수정 없이 다국어 지원이 가능하도록 하기 위함 |
로케일 대응 | 날짜/시간 형식, 달력, 통화 기호, 문자열 정렬 순서 등 | 국제화 라이브러리를 이용하여 다수의 로케일에 유연하게 대응하기 위함 |
Localizability | 다국어로 번역될 경우 사용자 인터페이스에 미치는 영향을 분석하는 것 | UI가 구성한 의도에 맞게 언어별로 처리할 수 있는지를 확인하기 위함 |
소프트웨어의 현지화 (localization, l10n)
소프트웨어의 현지화는 현지의 IT 환경에 맞에 소프트웨어를 개발하는 과정을 일컫는다.
소프트웨어 현지화 고려사항
▪︎ 현지화 번역
▪︎ 현지어 처리
▪︎ 문화적, 사회적 객체 처리 등
즉, 그 나라의 문화와 사회적 분위기 등을 고려하여 소프트웨어를 만들고, 번역을 처리하고, 리소스 작업을 하는 것이 현지화이다.
주요 요소 | 설명 | 목적 |
현지화 번역 | ||
현지어 처리 | 인코딩 (문자와 문자열) 입, 출력 장치 (키보드, 마우스 등) 파일 시스템을 이용한 입출력 데이터베이스를 이용한 데이터 입출력 등 |
사용자가 의도한 대로 정상적으로 입출력이 동작하는지 확인 |
문화적, 사회적 객체 처리 | 날짜, 시간, 달력 숫자, 통화 측정 단위 우편번호, 주소, 전화번호, 이름 등 |
참고