노무현 대통령 배너
BLOG main image
왕미친놈의 왕미친세상입니다. 미친 소리는 써도 되지만, 근거 없는 소리는 쓰면 안 됩니다.


영어나 외국어로 된 프로그램의 메시지을 한글로 바꾼 뒤에 그 언어 정보는 원래대로 두는 실수를 하는 때가 있다. 보통 때는 전혀 문제가 없으나, 간혹 문제가 생기는 경우도 있습니다. 이렇게 언어 정보가 틀려 있는 프로그램의 언어 정보를 리소스 해커(Resource HackerTM)를 이용하여 고쳐보도록 하겠습니다.

먼저 Total Commander Korean Forum :: XPG Community 사이트에서 NFO Viewer 플러그인을 다운로드합니다.

언어 정보 편집 순서

프로그램 리소스에서 언어 정보를 고치는 작업의 순서는 다음과 같습니다.

  1. 프로그램의 언어 정보 고치기
  2. 메뉴의 언어 정보 고치기
  3. 대화상자의 언어 정보 고치기
  4. 대화상자의 글꼴 정보 고치기

프로그램의 언어 정보 고치기

리소스 해커에서 파일을 열어서 가장 먼저 할 일은 프로그램 전체에 적용되는 언어 정보를 고치는 작업입니다. 프로그램 전체에 적용되는 언어정보는 아래 자료 화면에서, 주로 왼쪽 창에서 Version Info라는 항목을 살펴보면 찾을 수 있습니다.

버전 정보(Version Info)와 언어 정보

버전 정보(Version Info)와 언어 정보

다음과 같은 순서로 작업을 합니다.

  1. nfoviewer_kor.wlx 파일을 리소스 해커에서 엽니다.
  2. Version Info를 클릭하고, 1을 클릭하고, 2052를 클릭하면 위와 같은 화면을 볼 수 있습니다.
  3. 오른쪽 창에서 BLOCK "StringFileInfo" 부분과 BLOCK "VarFileInfo" 부분을 찾습니다. "Translation", 0x0804 0x04B0 부분에서 앞의 십육진수는 언어 정보이고, 뒤의 십육진수는 코드페이지 정보입니다.
  4. MSDN :: List of Localized MS Operating Systems 문서를 참조하여 언어 정보(LCID)와 코드페이지 정보를 알아둡니다.
    • 참고로 한국어의 LCID는 십육진수로 0x0412, 십진수로는 1042입니다. 그리고 코드페이지는 십진수로 949, 십육진수로는 0x03B5입니다. 다만 이번 경우에는 0x04B0(utf-16, 유니코드)을 그대로 유지합니다.
  5. "Translation", 0x0804 0x04B0 부분을 "Translation", 0x0412 0x04B0라고 고칩니다.
  6. BLOCK "080404b0" 부분을 BLOCK "041204b0"라고 고칩니다.
  7. 왼쪽 창에서 언어 정보(LCID)를 2052(중국어 간자체)에서 1042(한국어 통합완성형)로 고칩니다.

    언어 변경

    언어 변경


    새 리소스 언어 입력

    새 리소스 언어 입력

  8. 스크립트 컴파일을 클릭한다. 이 작업을 하면 지금까지 했던 작업 결과가 적용된다.
    스크립트 컴파일
  9. 저장한다.
    저장

메뉴의 언어 정보 고치기

메뉴는 대부분 글꼴 정보를 포함하고 있지 않습니다. 그 까닭은 메뉴는 대부분 비주얼스튜디오와 같은 IDE(개발 환경)에서 자동으로 만들어주기 때문이며, 또한 그 과정에서 시스템에서 기본으로 정해준 글꼴을 사용하도록 설정되어 있기 때문입니다. 물론 프로그램을 짤 때 사용자가 수동으로 바꿀 수는 있으며, 또한 메뉴 글꼴 전체를 사용자 시스템에서 고칠 수도 있습니다.

[디스플레이지 등록 정보]의 [고급 화면 배색]에서 [메뉴] 항목을 수정하는 화면

[디스플레이지 등록 정보]의 [고급 화면 배색]에서 [메뉴] 항목을 수정하는 화면

이 글에서는 그런 시스템 정보는 전혀 다루지 않지만, 참고 삼아 알려드렸습니다.

메뉴 항목과 언어 정보

메뉴 항목과 언어 정보

메뉴에 대한 언어 정보를 고치는 과정은 다음과 같습니다.

  1. nfoviewer_kor.wlx 파일을 리소스 해커에서 엽니다.
  2. Version Info를 클릭하고, 101을 클릭하고, 2052를 클릭하면 위와 같은 화면을 볼 수 있습니다.
  3. MSDN :: List of Localized MS Operating Systems 문서를 참조하여 언어 정보(LCID)와 코드페이지 정보를 알아둡니다.
  4. 왼쪽 창에서 언어 정보(LCID)를 2052(중국어 간자체)에서 1042(한국어 통합완성형)로 고칩니다.
  5. 오른쪽 창에서 LANGUAGE LANG_CHINESE, 0x2 부분을 찾습니다. 이것을 LANGUAGE LANG_KOREAN, 0x1라고 고칩니다. 이때 마지막 0x2SUBLANG_KOREAN 또는 0x01로 고쳐도 됩니다.
  6. 스크립트를 컴파일한 뒤에 저장합니다. 이때 스크립트를 컴파일하면 LANGUAGE LANG_KOREAN, SUBLANG_KOREAN 이라고 바뀐 부분이 LANGUAGE LANG_KOREAN, 0x1로 바뀝니다. 이것은 정상이므로 걱정하지 않아도 됩니다.

이 프로그램(nfoviewer_kor.wlx)에는 메뉴가 하나뿐이지만, 대부분의 프로그램은 메뉴가 여러 개로 되어 있다.

대화상자의 언어 정보 고치기

프로그램을 만들게 되면 현재 화면에 보이는 창으로 작업을 할 수 없는 때가 생기거나 메시지를 사용자에게 전달해야 하는 때가 있다. 이때 생성하는 것이 바로 대화상자이다. 대화상자에는 언어 정보와 함께 글꼴 정보가 함께 포함되는 때가 많다.

이 프로그램(nfoviewer_kor.wlx)에는 대화상자가 하나뿐이지만, 대부분의 프로그램은 대화상자가 여러 개로 되어 있다.

대화상자 항목과 언어 정보

대화상자 항목과 언어 정보

작업하는 순서는 다음과 같습니다.

  1. 앞서 작업한 메뉴를 참조하여 대화상자언어 정보(LCID)와 코드페이지 정보를 고칩니다.
  2. 글꼴 정보에서 FONT 9, "宋?"FONT 9, "굴림" 또는 FONT 10, "굴림"으로 고칩니다.
  3. 스크립트를 컴파일한 뒤에 저장합니다.

완료

그밖에 살펴야 할 사항

일단 이렇게 바꾸었으면, 메시지가 정상적으로 출력되는지를 확인해야 합니다. 이 작업에 앞서 반드시 원본을 백업해 두기 바랍니다. 백업은 선택이 아닌 필수입니다.

관련 문서

내부 문서

외부 문서

이 글은 스프링노트에서 작성되었습니다.


글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

댓글을 달아주세요:: 왕미친놈 욕은 해도 되지만, 근거없는 소리는 쓰지 말아 주세요.
BBCode 사용할 수 있습니다.

  1. 2009.12.28 16:32
    한글화를 몇 번 해본 적이 있는데, 전혀 몰랐던 내용이네요.
    그냥 화면에 잘 보이니까 잘됐나 보다 했는데 아니었어요.
    잘 보고 갑니다.
    • 2009.12.28 17:39
      댓글 주소 수정/삭제
      저 역시 그렇게 생각했으니까요. 그런데 일본어 윈도를 쓰는 컴퓨터에서 보니까, 이상하게 보일 뿐만 아니라, 아무도 알아볼 수 없는 메시지로 바뀐 경우가 있어서 알게 되었습니다. ^^a
      본문 내용처럼 처리해 주면 일본어 윈도나 중국어 윈도에서도 정확하게 보여줍니다.
  2. 잘봤습니다
    2010.01.10 23:38
    잘봤습니다. 그런데요 제가 영어를 한국화 하는작업중인데....
    메뉴를 한글로 바꿨습니다. 위에 작업도 하였구요.
    그런데 중국어로 나오네요... 왜그런거죠?
    • 2010.01.11 00:38
      댓글 주소 수정/삭제
      해당 프로그램에서 강제로 중국어로만 출력하는 경우가 있습니다.
      저도 예전에 한글화를 시도한 적이 있는데, 언어 파일의 설정을 아예 무시하고 영어로만 나온 프로그램이 있습니다. 이처럼 파일에 따로 언어 정보를 저장하는 프로그램은 한글화를 하더라도 메시지가 바뀌지 않을 수 있습니다.

      덧// 어떤 프로그램인지를 모르니 답변하기가 좀 곤란하네요.
    • 2010.01.11 11:17
      댓글 주소 수정/삭제
      혹시... 한국어 설정으로 바꾸어야 할 부분을 중국어 설정으로 바꾸지 않았나 살펴보시기 바랍니다.
      그 글에서 중국어를 한국어로 바꾸는 설정이라서 둘을 헷갈릴 경우 중국어로 출력하게 됩니다.
  3. 잘봤습니다
    2010.01.11 01:21
    그렇군요 ....
    그리구 비표준 레이아웃이라고 뜨면서 변경할수 없는 프로그램이 있던데 이런건 아예하지못하나요?
    • 2010.01.11 09:30
      댓글 주소 수정/삭제
      예. 리소스 해커에서 다룰 수 있는 것은 "표준 레이아웃"뿐입니다. 비표준 방식은 헥스 에디터 등을 사용해야 합니다. 아니면 전문적으로 리소스를 다루는 상용 프로그램을 써야 하죠.
      물론 리소스 해커도 잘 다루지만, 어디까지나 표준 방식만을 대상으로 하고 있습니다.
  4. 2010.01.29 21:17
    비밀댓글입니다
    • 2010.01.29 11:01
      댓글 주소 수정/삭제
      폰트를 한국어 폰트로 지정해 주거나 유니코드 폰트로 지정해 주면 됩니다.
  5. 2010.01.29 21:28
    비밀댓글입니다
    • 2010.01.30 00:52
      댓글 주소 수정/삭제
      폰트 수정하는 방법은 간단합니다.
      일단 본문처럼 FONT 부분이 있다면, 그곳에 한글 폰트, 예컨대 "굴림"을 넣어주면 됩니다.
      FONT 부분이 없다면, 일단 LANGUAGE LANG_KOREAN, 0x1 라는 부분을 찾습니다.
      그리고 그 아랫줄에 폰트 정보를 넣어주면 됩니다.
  6. 2010.01.30 02:50
    비밀댓글입니다
  7. 최선용
    2010.01.31 23:07
    메일 보내드렷습니다. 확인요^^
  8. 2010.03.14 11:20
    비밀댓글입니다
    • 2010.03.14 16:37
      댓글 주소 수정/삭제
      ======================================
      101 DIALOGEX 0, 0, 441, 274
      STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
      CAPTION "SC2Launcher v1.33 한글판 "
      LANGUAGE LANG_KOREAN, 0x1
      FONT 8, "Tahoma"
      {
      CONTROL "", 1001, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 262, 26, 175, 200
      CONTROL "게임설정", -1, BUTTON, BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 5, 4, 251, 240
      CONTROL "플레이어", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 22, 16, 47, 8
      CONTROL "종족", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 75, 16, 42, 8
      CONTROL "동맹", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 128, 16, 46, 8
      CONTROL "색상", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 185, 16, 46, 8
      CONTROL "", 1005, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 21, 26, 51, 80
      CONTROL "", 1008, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 74, 26, 51, 48
      CONTROL "", 1009, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 127, 26, 55, 80
      CONTROL "", 1030, COMBOBOX, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 184, 26, 68, 200
      CONTROL "", 1011, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 21, 40, 51, 80
      CONTROL "", 1012, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 74, 40, 51, 48
      CONTROL "", 1013, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 127, 40, 55, 80
      CONTROL "", 1031, COMBOBOX, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 184, 40, 68, 199
      CONTROL "", 1014, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 21, 54, 51, 80
      CONTROL "", 1015, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 74, 54, 51, 48
      CONTROL "", 1016, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 127, 54, 55, 80
      CONTROL "", 1032, COMBOBOX, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 184, 54, 68, 200
      CONTROL "", 1017, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 21, 68, 51, 66
      CONTROL "", 1018, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 74, 68, 51, 48
      CONTROL "", 1019, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 127, 68, 55, 79
      CONTROL "", 1033, COMBOBOX, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 184, 68, 68, 205
      CONTROL "", 1020, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 21, 82, 51, 79
      CONTROL "", 1021, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 74, 82, 51, 52
      CONTROL "", 1022, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 127, 82, 55, 80
      CONTROL "", 1034, COMBOBOX, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 184, 82, 68, 200
      CONTROL "", 1023, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 21, 96, 51, 80
      CONTROL "", 1024, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 74, 96, 51, 52
      CONTROL "", 1025, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 127, 96, 55, 80
      CONTROL "", 1035, COMBOBOX, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 184, 96, 68, 200
      CONTROL "지도(&M)", 1002, BUTTON, BS_AUTORADIOBUTTON | BS_PUSHLIKE | WS_CHILD | WS_VISIBLE, 261, 8, 40, 14
      CONTROL "리플레이(&R)", 1003, BUTTON, BS_AUTORADIOBUTTON | BS_PUSHLIKE | WS_CHILD | WS_VISIBLE, 302, 8, 45, 14
      CONTROL "새로고침(&H)", 1026, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 348, 8, 46, 14
      CONTROL "탐색...", 1010, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 395, 8, 40, 14
      CONTROL "난이도:", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 263, 233, 33, 8
      CONTROL "", 1006, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 301, 232, 118, 80
      CONTROL "자원 공유(&E)", 1036, BUTTON, BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 8, 248, 80, 10
      CONTROL "동맹유닛 조종(&C)", 1038, BUTTON, BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 94, 248, 80, 10
      CONTROL "프레임 표시(&F)", 1029, BUTTON, BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 8, 260, 80, 10
      CONTROL "...", 1004, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 421, 232, 14, 13
      CONTROL "실행(&S)", 1, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 380, 256, 56, 14
      CONTROL "종료(&X)", 2, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 318, 256, 56, 14
      CONTROL "", 1027, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 21, 110, 51, 80
      CONTROL "", 1028, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 74, 110, 51, 50
      CONTROL "", 1037, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 127, 110, 55, 80
      CONTROL "", 1039, COMBOBOX, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 184, 110, 68, 200
      CONTROL "", 1040, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 21, 124, 51, 80
      CONTROL "", 1041, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 74, 124, 51, 50
      CONTROL "", 1042, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 127, 124, 55, 80
      CONTROL "", 1043, COMBOBOX, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP, 184, 124, 68, 200
      CONTROL "1", 1045, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 11, 29, 8, 8
      CONTROL "2", 1046, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 11, 43, 8, 8
      CONTROL "3", 1047, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 11, 57, 8, 8
      CONTROL "4", 1048, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 11, 71, 8, 8
      CONTROL "5", 1049, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 11, 85, 8, 8
      CONTROL "6", 1050, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 11, 99, 8, 8
      CONTROL "7", 1051, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 11, 113, 8, 8
      CONTROL "8", 1052, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 11, 127, 8, 8
      CONTROL "Edited by BoroMir [http://random.codex.kr]", 1053, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 65, 230, 140, 10
      }
      ======================================
      위와 같이 된 부분을 그 아래 중국어 부분에 덮어쓰기를 해 보시기 바랍니다.
      그래도 안 되면 중국어 부분을 삭제해 버리세요.

      덧 1// 작업에 앞서 원본은 반드시 백업해 두시기 바랍니다.
      덧 2// 아무쪼록 비밀글로 질문하지 마시기 바랍니다.
  9. 옆집
    2011.08.12 01:42
    리소스해커로 윈도우 대화상자 나 설정창에 보이는 폰트의 색상은 바꿀수 없을까요 ?

    테마로 해도 바뀌지 않는 검정색 글들이 있습니다.
  10. 옆집
    2011.08.12 01:45
    예를 들면 시스템 속성대화창에서 고급탭 부분을 보면 성능 부분에

    시각 효과, 프로세서 일정, 메모리 사용 및 가상 메모리 << 요런 글들은 어떻게 해도 색상을 바꿀수가 없네요
  11. ㄴㄴㄴ
    2019.03.18 10:44
    간단한 프로그램에서 단축키부분을 바꾸려면 어떻게 찾아야되나요? shift+F1 -> shift+F6
    • 2019.03.18 12:47 신고
      댓글 주소 수정/삭제
      리소스를 입력할 때 어떤 식으로 했는지를 추리해 봐야 합니다.

      1. 키값으로 입력했다.
      shift+F1 단축키의 키값을 알아야 하며, 또한 바꿀 대상인 shift+F6 단축키의 키값으로 바꿔 줘야 합니다.

      2. 문자열로 입력했다.
      이럴 경우 비주얼 베이직 또는 비주얼 C 등에서는 특정 문자열로 존재합니다.
      그 문자열은 그대로 입력된 상태이며, 실행할 때만 키값으로 바꿔 실행합니다.
      이 문자열의 앞부분은 같고, 마지막 부분만 F1 대신 F6 문자열이 들어갑니다.

      3. 메뉴 리소스 부분을 살펴본다.
      1번과 2번에 상관없이, 메뉴에서 단축키가 보인다면, 그 메뉴 리소스 부분에 단축키도 함께 정의하는 경우가 많습니다.
      그 부분을 중점적으로 살펴보기 바랍니다.

      4. 그밖에 다른 언어로 프로그램을 만들었다.
      이 경우에는 어떤 프로그램에서 만들어서, 어떤 방식으로 리소스를 입력했는지를 알아야 합니다.
  12. 살려주세요
    2019.03.18 16:24
    http://naver.me/xt9fhpgi

    이 프로그램인데 리소스 폴더를 다열어봐도 도통 알수가 없네요;
    비주얼로 만들지 않았을까 싶습니다.

    의심가는건 RCData 쪽에 (0010CA64 00 40 75 42 6F 73 73 4B 65 79 00 ?uBossKey?) 이런식으로 된 것중 하나같은데 힌트점 주시면 감사하겠습니다 _(__)_

    [목표 : 기존 단축키 F2, shift+F2 를 F1, shift+F1로 바꾼다]
    • 2019.03.21 23:16 신고
      댓글 주소 수정/삭제
      리소스가 아닌 코드에 직접 입력되어 있습니다.
      그래서 리소스를 아무리 살펴봐도 안 나옵니다.

Total Commander Korean Forum :: XPG Community 사이트에서 플러그인을 살펴보다가 NFO Viewer 플러그인의 한글화된 파일이 있어서 다운로드를 하게 되었다. 한글화가 얼마나 잘 되었는지 알고 싶어서 리소스 해커(Resource HackerTM) 프로그램을 이용하여 열어보았다.

그런데 한글화된 그 플러그인의 언어 정보가 한글이 아닌 중국어였다. 다시 말해 대화상자 등의 메시지는 한글로 바꾸었으나, 정작 가장 중요한 언어 정보는 중국어인 상태로 놔두었다. 이럴 경우 한글 윈도에서는 제대로 보이지만, 중국어 윈도에서는 한글이 깨져서 나타날 수도 있다.

  • 참고 : 이 글에서는 실제로 수정하는 방법에 대해서는 다루지 않습니다.

언어 정보는 어디에?

리소스 해커에서 파일을 열면 언어 정보는 어디에서 살필 수 있을까? 이 정보는 주로 왼쪽 창에서 Version Info라는 항목을 살펴보면 알 수 있다. 대부분의 프로그램의 리소스에는 이 항목이 나타나고 있습니다.

버전 정보(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]

위의 자료에서 십육진수 0x0804Simplified 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 문자열이 언어 정보를 나타내는 문자열이다.

왼쪽 창의 2052 값이 LCID 값이며, LANG_CHINESE 문자열이 언어 정보를 나타내는 문자열이다.

가장 먼저 앞서 말한 LCID 값을 고쳐주어야 한다. 왼쪽 창에 나타난 LCID 값을 고치려면 언어 변경을 해야만 합니다. 변경할 때는 십진수와 십육진수를 혼동하지 않아야 합니다.

언어 정보를 가진 문자열 및 상수

각각의 메시지마다 언어 정보가 들어 있습니다. 바로 언어 정보를 가진 문자열이죠. MSDN :: Language Identifier Constants and Strings 문서에서 그 값을 찾을 수 있습니다. 이 값을 참조하여 메시지마다 그 정보를 고쳐 주어야 합니다. 이 값은 MS의 비주얼스튜디오가 아니더라도 공통으로 사용되고 있으므로 외우지는 못하더라도 그런 것이 있다는 사실은 기억해야 합니다. 만약 이것을 고친 뒤에 제대로 나오지 않는다면, 문자열을 상수값으로 고쳐주면 됩니다.

예컨대, 그림에서 LANG_CHINESE 대신에 LANG_KOREAN를 썼는데, 화면에 한글을 제대로 표시하지 못한다면, 그것의 실제 값인 0x12를 쓰면 한글을 올바르게 나타낼 수 있다.
한편 위 그림에서 LANG_CHINESE 뒤에 오는 십육진수는 SUBLANG이라고 하며, 하나의 언어에 여러 가지 문자 코드가 존재할 때 사용한다. 이 SUBLANG 값은 앞서 오는 언어 상수 값에 영향을 받으므로, 이 값이 같다고 같은 의미를 가진다고 오해하지 않아야 한다. 다시 말해 다음 두 코드에서 0x1은 서로 다른 의미를 가진다.

[code cpp] LANGUAGE LANG_KOREAN, 0x1 [/code] [code cpp] LANGUAGE LANG_CHINESE, 0x1 [/code]

참고로 위 화면의 LANGUAGE LANG_CHINESE, 0x2는 다음과 같다.

[code cpp] LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED [/code]

글꼴 바꾸기

마지막으로 글꼴을 살펴야 합니다. 간혹 글꼴 정보가 엉뚱하게 되어 있는 경우가 있다. 보통은 시스템 기본값을 쓰도록 글꼴을 설정하지 않을 때도 있는데, 차라리 그럴 경우에는 괜찮다. 그런데 엉뚱한 글꼴을 지정한 경우에는? 시스템에서 잘 처리해 주기를 바라야 한다.

위 그림에서는 글꼴 정보가 FONT 9, "宋?"라고 나타나 있습니다. 이것은 아마도 중국어의 송체를 가리킵니다. 메모장 등에서 SimSun으로 나타나는 글꼴이죠. 이것을 "굴림" 또는 "굴림체"로 바꾸어 주면 좋습니다.
그런데 이때 주의할 점이 있습니다. 보통 외국어 글꼴이 9포인트이며, 한글로는 10포인트로 바뀔 경우가 많습니다. 그러나 강제로 "굴림"과 같은 글꼴을 지정하면 글꼴 크기는 그대로 9포인트가 됩니다. 이때 10포인트로 바꾸어도 되고, 그대로 두어도 됩니다. 일단 바꾼 뒤 화면에 나타나는 모습을 보고 다시 고쳐도 됩니다.

관련 문서

외부 문서

이 글은 스프링노트에서 작성되었습니다.


글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

댓글을 달아주세요:: 왕미친놈 욕은 해도 되지만, 근거없는 소리는 쓰지 말아 주세요.
BBCode 사용할 수 있습니다.

  1. 2009.12.16 20:11
    이야... 멋진 글이네요..
    • 2009.12.17 00:11
      댓글 주소 수정/삭제
      고맙습니다.


카테고리

분류 전체보기 (1005)
스크립트 (22)
벌레와 팁 (126)
소프트웨어 (240)
하드웨어 (6)
이야기 (24)
말의 나무 (506)
미쳐보자 (22)
일기 (48)
아이폰 (10)

달력

«   2019/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30