본 시리즈는 차례대로 읽으면 소프트웨어 국제화가 전체적으로 이해가 되어서 소프트웨어 개발자에게 도움이 되는 방향으로 진행하려고 하고 있다. 개발자마다 지식과 경험이 천차만별이라서 초급 개발자를 기준으로 작성하고 있다.
경영자가 개발자에게 독일어 버전을 만들라고 하면 어떨까? 대부분은 콩떡 같이 말하면 찰떡같이 알아듣겠지만 엄밀히 말하면 틀린 얘기다. 정확한 표현이 아니라고 하는 것이 낫겠다.
우리는 우연히 한 국가에서 하나의 언어만 쓰고 있다. 공식 언어가 존재한다. 하지만 미국만 하더라도 공식 언어가 존재하지 않는다. 누구나 미국의 공식 언어는 영어라고 생각하지만 관습 헌법 같은 것일 뿐이다. 그나마 미국은 영어가 대표적인 언어다. 하지만 바로 위의 캐나다로 가면 영어와 프랑스어를 쓰고 있으며 어느 한 언어를 무시할 수 없다.
스위스로 가면 독일어, 프랑스어, 이탈리아어, 로만슈어의 네 가지 언어가 공용 언어다. 이렇게 한 나라에서 여러 가지 언어를 쓰는 경우는 매우 많다. 오히려 한 가지 언어만 쓰는 나라가 더 적다.
반대로 언어의 관점으로 보면 하나의 언어가 매우 많은 나라에서 쓰인다. 독일에서 쓰는 표준 독일어와 스위스에서 쓰는 독일어는 조금 다르다. 독일 사람들은 스위스 사람들이 말하는 독일어를 이해하지 못하곤 한다. 스페인어도 매우 많은 나라에서 쓰인다. 스페인을 비롯해서, 멕시코, 칠레, 미국 등 국가에서 사용된다.
그럼 독일어 버전을 만들라고 하면 표준 독일어를 말하는 것일까? 오스트리아, 스위스, 룩셈부르크 어느 나라의 독일어를 지원하라는 얘기일까? 대충 다 알아보지 않을까?라고 생각하는 것은 안일한 생각이다. 각 나라 별로 같은 언어라고 하더라도 쓰는 방법이 다 다르다.
그래서 소프트웨어 국제화에서는 언어와 국가, 정확하게 말하면 지역을 조합해서 부른다. 이것을 로케일(Locale)이라고 한다. 그래서 앞으로 소프트웨어 국제화를 얘기할 때는 언어나 국가로 얘기하지 않고 로케일을 기준으로 얘기를 해야 한다.
로케일의 컨셉은 거의 모든 OS와 개발 언어에 포함되어 있다.
로케일의 표기 방법은 다음과 같다.
[language[_territory][.codeset]]
language는 언어를 나타내며 알파벳 소문자 두 글자로 이루어져 있다. 한국어는 “ko”, 일본어는 “ja”, 영어는 “en”, 독일어는 “de”라고 표기한다. ISO639에 표준이 정의 되어 있다.
territory는 지역을 의미하며 알파벳 대문자 두 글자를 사용하며 생략하기도 한다. 한국은 “KR”, 일본은 “JP”, 미국은 “US”, 독일은 “DE”를 사용한다. ISO3166에 표준이 정의 되어 있다.
codeset은 어떠한 코드셋을 사용했는지 나타내는 것으로 생략할 수 있다. 한국어인 경우 “UTF-8” 또는 “euc-kr”을 사용한다.
그래서 한국어는 ko_KR이라는 로케일을 사용하게 된다.
독일어 하나만 해도 de_DE(독일), de_AT(오스트리아), de_LU(룩셈부르크), de_CH (스위스) 이렇게 여러 가지 로케일로 표한 할 수 있다.
이렇게 해서 탄생할 수 있는 로케일의 개수는 수백 개가 넘지만 개발 언어의 라이브러리 별로 지원하는 범위가 조금씩 다르다. 하지만 우리가 흔히 지원하려고 하는 로케일은 거의 포함이 되어 있으므로 걱정할 필요는 없다.
이외에 “C” 로케일이라는 것이 있다. 이것은 GNU C에서 사용되는 것으로서 로케일을 지정하지 않으면 지정되는 디폴트 로케일로서 “POSIX”로케일이라고도 한다.
어플리케이션에서 로케일을 지정하는 방법은 setlocale() 이라는 함수를 쓰거나 환경 변수를 바꾸는 함수를 사용하는 것이다. OS나 개발 언어에 따라서 조금씩 다르다.
로케일이 바뀌면 무엇이 바뀌는지는 다음 연재글에서 알아보자.