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)