ko-kr, en-us 같은 문자열과 1042, 1033 같은 숫자는 둘 다 "어느 나라의 어떤 언어인가"를 가리킵니다. 앞의 것은 언어-지역 코드(culture name), 뒤의 숫자는 Windows가 오래전부터 쓰던 로캘 식별자 LCID입니다. VBA나 VB6 코드를 보다 보면 이 숫자가 아무 설명 없이 박혀 있을 때가 많은데, 표 하나 옆에 두면 금방 읽힙니다.
아래 표는 예전 Windows Live Messenger에서 Activity(메신저 안에서 돌아가는 공유 앱)를 국가·언어별로 배포할 때 지원하던 목록입니다. 메신저 자체는 이미 서비스가 끝났지만, 표에 있는 코드와 숫자 대부분은 지금도 Windows와 Office에서 그대로 통용되는 값이라 참고용으로 남겨 둡니다.
| 국가 | 언어 | 코드 | 언어 값 |
|---|---|---|---|
| 오스트레일리아 | 영어 | en-au | 3081 |
| 오스트리아 | 독일어 | de-at | 3079 |
| 벨기에(네덜란드어) | 네덜란드어 | nl-be | 2067 |
| 벨기에(프랑스어) | 프랑스어 | fr-be | 2060 |
| 브라질 | 포르투갈어 | pt-br | 1046 |
| 캐나다(영어) | 영어 | en-ca | 4105 |
| 캐나다(프랑스어) | 프랑스어 | fr-ca | 3084 |
| 중국 | 중국어 간체 | zh-cn | 2052 |
| 체코 | 체코 | cs-cz | 1029 |
| 덴마크 | 덴마크어 | da-dk | 1030 |
| 핀란드 | 핀란드어 | fi-fi | 1035 |
| 프랑스 | 프랑스어 | fr-fr | 1036 |
| 독일 | 독일어 | de-de | 1031 |
| 영국 | 영어 | en-gb | 2057 |
| 그리스 | 그리스어 | el-gr | 1032 |
| 홍콩 | 중국어 번체 | zh-hk | 3076 |
| 헝가리 | 헝가리어 | hu-hu | 1038 |
| 인도 | 영어 | en-in | 16393 |
| 이스라엘 | 히브리어 | he-il | 1037 |
| 이탈리아 | 이탈리아어 | it-it | 1040 |
| 일본 | 일본어 | ja-jp | 1041 |
| 한국 | 한국어 | ko-kr | 1042 |
| 라틴 아메리카 | 스페인어 | es-la | 58378 |
| 말레이시아 | 영어 | en-my | 17417 |
| 멕시코 | 스페인어 | es-mx | 2058 |
| 네덜란드 | 네덜란드어 | nl-nl | 1043 |
| 뉴질랜드 | 영어 | en-nz | 5129 |
| 노르웨이 | 노르웨이어(복말) | nb-no | 1044 |
| 노르웨이 | 노르웨이어(니노르스크) | nn-no | 2068 |
| 폴란드 | 폴란드어 | pl-pl | 1045 |
| 포르투갈 | 포르투갈어 | pt-pt | 2070 |
| 러시아 | 러시아어 | ru-ru | 1049 |
| 사우디아라비아 | 아랍어 | ar-sa | 1025 |
| 사우디아라비아 | 영어 | En-xa | 61449 |
| 싱가포르 | 영어 | en-sg | 18441 |
| 슬로바키아 | 슬로바키아어 | sk-sk | 1051 |
| 슬로베니아 | 슬로베니아어 | sl-si | 1060 |
| 남아프리카 | 영어 | en-za | 7177 |
| 스페인 | 스페인어 | es-es | 3082 |
| 스웨덴 | 스웨덴어 | sv-se | 1053 |
| 스위스(프랑스어) | 프랑스어 | fr-ch | 4108 |
| 스위스(독일어) | 독일어 | de-ch | 2055 |
| 대만 | 중국어 번체 | zh-tw | 1028 |
| 터키 | 터키어 | tr-tr | 1055 |
| 미국(영어) | 영어 | en-us | 1033 |
| 미국(스페인어) | 스페인어 | es-us | 21514 |
숫자를 16진수로 바꿔 보면 규칙이 보인다
LCID는 10진수로 보면 들쭉날쭉하지만 16진수로 바꾸면 규칙이 드러납니다. 한국어 1042는 &H412, 일본어 1041은 &H411, 미국 영어 1033은 &H409, 영국 영어 2057은 &H809 입니다. 뒤쪽 두 자리가 언어(09는 영어), 앞쪽이 같은 언어 안의 지역 구분이라고 보면 됩니다. 그래서 영어권 나라들의 값은 전부 16진수 끝이 09 로 맞춰져 있습니다. VBA 직접 실행 창에서 ? Hex(1042) 를 쳐 보면 412 가 나옵니다.
실무에서 이 숫자를 만나는 곳
엑셀에서 가장 자주 보는 건 셀 서식의 로캘 접두어입니다. 날짜 서식을 지정하다 [$-412] 같은 문자열을 본 적이 있을 텐데, 이 412 가 바로 한국어 LCID의 16진수입니다. 영문 Windows에서 파일을 열어도 요일을 한국어로 보여 주고 싶다면 이렇게 적습니다.
=TEXT(A1,"[$-412]yyyy-mm-dd dddd")
반대로 매크로가 어떤 언어 환경의 Office에서 돌아가는지 확인해서 메시지 문구를 바꾸고 싶을 때는 Office의 언어 설정에서 LCID를 읽어 비교하면 됩니다.
Sub CheckUILanguage()
Dim lcid As Long
lcid = Application.LanguageSettings.LanguageID(msoLanguageIDUI)
If lcid = 1042 Then
MsgBox "한국어 Office 입니다."
Else
MsgBox "UI language LCID: " & lcid
End If
End Sub
해외 지사나 거래처에 배포하는 엑셀 양식이라면 이런 분기 하나로 "날짜 서식이 깨진다", "메시지가 다른 언어로 나온다" 같은 문의를 꽤 줄일 수 있습니다.
표를 쓸 때 주의할 값
표에서 es-la(58378)와 En-xa(61449)는 Windows에서 흔히 쓰는 표준 LCID 목록에서 보던 값과는 성격이 다릅니다. 메신저 서비스 쪽에서 지역 구분용으로 쓰던 값일 가능성이 있으니, 이 두 줄은 다른 프로그램의 로캘 인수로 그대로 넣기 전에 해당 프로그램 문서에서 한 번 더 확인하는 게 좋습니다. 나머지 값들은 VB.NET의 New CultureInfo(1042) 처럼 LCID를 받는 곳에 넣어도 같은 문화권으로 해석됩니다.
참고: Windows Live Messenger Activity 테스트 개요 (MSDN)