한글화와 언어 정보
Total Commander Korean Forum :: XPG Community 사이트에서 플러그인을 살펴보다가 NFO Viewer 플러그인의 한글화된 파일이 있어서 다운로드를 하게 되었다. 한글화가 얼마나 잘 되었는지 알고 싶어서 리소스 해커(Resource HackerTM) 프로그램을 이용하여 열어보았다.
그런데 한글화된 그 플러그인의 언어 정보가 한글이 아닌 중국어였다. 다시 말해 대화상자 등의 메시지는 한글로 바꾸었으나, 정작 가장 중요한 언어 정보는 중국어인 상태로 놔두었다. 이럴 경우 한글 윈도에서는 제대로 보이지만, 중국어 윈도에서는 한글이 깨져서 나타날 수도 있다.
- 참고 : 이 글에서는 실제로 수정하는 방법에 대해서는 다루지 않습니다.
언어 정보는 어디에?
리소스 해커에서 파일을 열면 언어 정보는 어디에서 살필 수 있을까? 이 정보는 주로 왼쪽 창에서 Version Info라는 항목을 살펴보면 알 수 있다. 대부분의 프로그램의 리소스에는 이 항목이 나타나고 있습니다.
버전 정보(Version Info) 부분에 나타난 언어 정보
우선 왼쪽 창에서 파랑게 된 숫자 부분을 보자. 2052라고 되어 있다. 오른쪽 창에서 BLOCK "StringFileInfo" 부분과 BLOCK "VarFileInfo" 부분을 보자. 특히 밑줄을 그은 부분을 잘 살펴야 한다.
BLOCK "StringFileInfo" 부분에서 밑줄 그은 BLOCK "080404b0" 부분과 아래의 BLOCK "VarFileInfo" 부분의 VALUE "Translation", 0x0804 0x04B0 부분을 살펴보면 무언가 눈에 들어오는 게 있다. 그렇다. 거기에 나타난 십육진수의 값이 같다. 그렇다면 위의 2052 부분은? 바로 0x0804이다. 엄밀히 말하면 왼쪽 창의 십진수 값대로 십육진수 값을 정하게 된다. 가끔 이 값이 틀리는 경우도 있는데, 그렇더라도 대부분 정상적으로 메시지를 출력해 준다. 다만 알 수 없는 문제가 생길 수도 있으므로 혹시라도 발견한 경우가 있다면, 그러한 값을 고쳐 주면 된다.
이때 "Translation", 0x0804 0x04B0 부분에서 앞의 십육진수는 언어 정보이고, 뒤의 십육진수는 코드페이지 정보입니다.
언어 정보
뭉뚱그려서 언어 정보라고 썼지만, 마이크로소프트에서는 이것을 LCID(Locale Identifier)라고 부릅니다. 이 정보는 엄밀히 말하면 언어 정보라기보다는 지역 정보와 언어 정보의 혼용에 가깝습니다.
인터넷에서 검색하여 찾아낸 언어 정보는 다음과 같습니다. 원본 페이지는 Language (Resource)입니다. 원문에는 8자로 되어 있으나, 코드페이지 부분이 잘못되어 있어서 삭제하였다.
[code text; tab-size:32; smart-tabs: true] Arabic 0401 Bulgarian 0402 Catalan 0403 Traditional Chinese 0404 Czech 0405 Danish 0406 German 0407 Greek 0408 U.S. English 0409 Castilian English 040A Finnish 040B French 040C Hebrew 040D Hungarian 040E Icelandic 040F Italian 0410 Japanese 0411 Korean 0412 Dutch 0413 Norwegian - Bokm?l 0414 Polish 0415 Brazilian Portugese 0416 Phaeto-Romanic 0417 Romanian 0418 Russian 0419 Croato-Serbian (Latin) 041A Slovak 041B Albanian 041C Swedish 041D Thai 041E Turkish 041F Urdu 0420 Bahasa 080A Simplified Chinese 0804 Swiss German 0807 U.K. English 0809 Mexican Spanish 080A Belgian French 080C Swiss Italian 0810 Belgian Dutch 0813 Norwegian - Nynorsk 0814 Portugese 0816 Serbo-Croatian (Cyrillic) 081A Canadian French 0C0C Swiss French 100C [/code]위의 자료에서 십육진수 0x0804는 Simplified Chinese를 나타낸다. 이때 Simplified Chinese는 중국어 간체자의 영어 표기이다. 이것을 한글화 한다면 메시지뿐만 아니라 이 정보도 바꾸어 주어야 한다. 그러나 왼쪽 창에 나타나는 값(LCID 값)을 고치려면 언어 변경을 해야만 한다. 변경할 때는 십진수와 십육진수를 혼동하지 않아야 합니다.
좀 더 자세한 정보는 MSDN :: List of Localized MS Operating Systems 문서를 살펴보기 바랍니다.
코드페이지 정보
코드페이지 정보를 알아보기 쉽게 정리한 자료는 MSDN에서 찾을 수 있다. MSDN 자료는 십진수로 나타나 있으므로 십육진수를 십진수로 고쳐서 보아야 한다. 0x04B0은 십진수 1200으로 바꿀 수 있다.
Identifier | .NET Name | 추가 정보 |
1200 | utf-16 | Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications |
윈도에서 한글화를 할 때 한글로 나타낼 수 있는 코드페이지는 1200(04b0, utf-16), 949(03B5, ks_c_5601-1987), 1361(0551, Johap) 등이며, 이 가운데 1200(04b0, utf-16), 949(03B5, ks_c_5601-1987)이 주로 쓰인다. 유니코드를 지원한다면 1200(04b0, utf-16)을 써야 하며, 유니코드를 지원하지 않는다면 949(03B5, ks_c_5601-1987)를 써야 한다.
위의 경우 처음부터 유니코드로 되어 있으므로 그것을 그대로 유지하여 쓰는 것이 좋다.
좀 더 자세한 정보는 MSDN :: List of Localized MS Operating Systems 문서를 살펴보기 바랍니다.
그밖에 살펴야 할 사항
리소스 해커를 이용하여 프로그램을 한글화할 때 그밖에도 살펴야 할 사항이 있다.
언어 정보
왼쪽 창의 2052 값이 LCID 값이며, LANG_CHINESE 문자열이 언어 정보를 나타내는 문자열이다.
가장 먼저 앞서 말한 LCID 값을 고쳐주어야 한다. 왼쪽 창에 나타난 LCID 값을 고치려면 언어 변경을 해야만 합니다. 변경할 때는 십진수와 십육진수를 혼동하지 않아야 합니다.
언어 정보를 가진 문자열 및 상수
각각의 메시지마다 언어 정보가 들어 있습니다. 바로 언어 정보를 가진 문자열이죠. MSDN :: Language Identifier Constants and Strings 문서에서 그 값을 찾을 수 있습니다. 이 값을 참조하여 메시지마다 그 정보를 고쳐 주어야 합니다. 이 값은 MS의 비주얼스튜디오가 아니더라도 공통으로 사용되고 있으므로 외우지는 못하더라도 그런 것이 있다는 사실은 기억해야 합니다. 만약 이것을 고친 뒤에 제대로 나오지 않는다면, 문자열을 상수값으로 고쳐주면 됩니다.
예컨대, 그림에서 LANG_CHINESE 대신에 LANG_KOREAN를 썼는데, 화면에 한글을 제대로 표시하지 못한다면, 그것의 실제 값인 0x12를 쓰면 한글을 올바르게 나타낼 수 있다.
한편 위 그림에서 LANG_CHINESE 뒤에 오는 십육진수는 SUBLANG이라고 하며, 하나의 언어에 여러 가지 문자 코드가 존재할 때 사용한다. 이 SUBLANG 값은 앞서 오는 언어 상수 값에 영향을 받으므로, 이 값이 같다고 같은 의미를 가진다고 오해하지 않아야 한다. 다시 말해 다음 두 코드에서 0x1은 서로 다른 의미를 가진다.
참고로 위 화면의 LANGUAGE LANG_CHINESE, 0x2는 다음과 같다.
[code cpp] LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED [/code]글꼴 바꾸기
마지막으로 글꼴을 살펴야 합니다. 간혹 글꼴 정보가 엉뚱하게 되어 있는 경우가 있다. 보통은 시스템 기본값을 쓰도록 글꼴을 설정하지 않을 때도 있는데, 차라리 그럴 경우에는 괜찮다. 그런데 엉뚱한 글꼴을 지정한 경우에는? 시스템에서 잘 처리해 주기를 바라야 한다.
위 그림에서는 글꼴 정보가 FONT 9, "宋?"라고 나타나 있습니다. 이것은 아마도 중국어의 송체를 가리킵니다. 메모장 등에서 SimSun으로 나타나는 글꼴이죠. 이것을 "굴림" 또는 "굴림체"로 바꾸어 주면 좋습니다.
그런데 이때 주의할 점이 있습니다. 보통 외국어 글꼴이 9포인트이며, 한글로는 10포인트로 바뀔 경우가 많습니다. 그러나 강제로 "굴림"과 같은 글꼴을 지정하면 글꼴 크기는 그대로 9포인트가 됩니다. 이때 10포인트로 바꾸어도 되고, 그대로 두어도 됩니다. 일단 바꾼 뒤 화면에 나타나는 모습을 보고 다시 고쳐도 됩니다.
관련 문서
외부 문서
- Total Commander Korean Forum :: XPG Community :: [WLX] Nfoviewer
- 리소스 해커(Resource HackerTM) 웹페이지
- MSDN :: Code Page Identifiers 문서
- MSDN :: List of Localized MS Operating Systems 문서
- MSDN :: Language Identifier Constants and Strings 문서
- Language (Resource) 문서
이 글은 스프링노트에서 작성되었습니다.