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


지난 9월 말경 제가 파천일검을 해킹했다면서, 느닷없이 제 계정을 막아 버리더군요. 그래서 저는 제 계정에 어떤 아이템이 있는지조차 알 수 없이, 그저 파천일검 운영자가 제 계정을 마구잡이로 헤집으며, 최종적으로 모든 아이템을 빼앗아가는 것을 사건이 모두 끝난 뒤에야 알 수 있었습니다.

그런데 파천일검 운영자는 제가 해킹하지 않았음을 알게 된 뒤로도 전혀 사과의 말조차 하지 않더군요. 저는 파천일검 운영자 때문에 게임을 사실상 접거나, 그게 아니라면 1레벨부터 다시 키워야 할 위기에 봉착했는데도 그들은 아무런 해결책도 제시하지 않았습니다.

도대체 당신은 뭐하는 사람입니까? 유저 계정을 마구 헤집어 놓고서도 아무 말이 없이 그저 "네가 해킹했으니 당해야 한다."입니까? 아니, 그것도 아니군요. 현재 제 계정은 접속 불가가 아니므로, 제가 해킹하지 않았다는 사실은 이미 알고 있다는 뜻이겠지요.

그럼, 제 계정을 압류하고 헤집은 데 대한 사과를 해야 하지 않습니까? 당신들이 제 계정을 마구 뒤진 이유가 해킹 때문이었다면, 제가 해킹하지 않았음을 알게 된 때 곧바로 사과해야 했습니다. 그런데 왜 사과를 안 하는지요?

그리고 제 계정을 뒤진 원인에도 문제가 있습니다. 분명히 저는 처음부터 "해킹한 적 없다"라고 했습니다. 그럼 그 시점에서 피해 신고가 있었더라도, 일단은 계정의 아이템을 그냥 두었어야 합니다. 왜냐고요? 이미 "제 계정이 해킹되었다"라고 저 역시 신고를 했기 때문입니다. 아, 신고 양식에 어긋나기 때문에 인정 못한다고요? 그럼 저 역시 파천일검 운영자의 행위는 고의로 게임을 즐기지 못하도록 하는 파렴치한 행동으로 생각하는 수밖에 없습니다.

그리고 제가 여러 차례 이메일로 답장을 했음에도 파천일검 운영자는 "책임 없다" "알아서 하라"라는 식의 답변만 했습니다. 그런데 무슨 권리로, 무슨 권한으로 남의 계정에 제제를 가한 것입니까? 운영자는 게임 전체의 해킹 위험이 있을 때 그것을 막는 의무도 분명히 있다고 생각합니다. 그게 없다면, 그에 따른 책임도, 권리도, 권한도 없어야 합니다. 그런데 파천일검 운영자의 행동을 보면, 무조건 운영자는 옳고 유저는 잘못이라는 생각을 갖고 있는 듯싶습니다.
(예컨대, 1개월 이상 접속하지 않은 사용자가 접속했을 때 이메일로 본인 확인만 했어도 해킹 사고를 미연에 막을 수 있었습니다. 그런데 운영자라는 사람이 아무런 조치도 취하지 않았더군요. 그래놓고는 해킹 신고가 들어오니 계정부터 막고는 이메일 날렸더군요. 어떻게 그런 정신머리로 사이트 운영자를 하고 있는지 진짜 놀라울 뿐입니다.)

아무튼 이러쿵저러쿵 말해봐야 저에게 아무 이득도 없습니다. 그러나 제가 받은 모욕에 대한 사과는 반드시 받고 싶습니다. 파천일검 운영자의 성의있는 사과를 요구합니다.

//덧 : 아래에 제가 보낸 이메일 있습니다.


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

Resource HackerTM는 리소스를 보고, 변경하고, 추가하고, 추출하고, 지우는 등 관리를 해 주는 프로그램으로 프리웨어입니다. 유능한 리소스 컴파일러이기도 합니다.

프로그램 정보

  • 프로그램 이름 : Resource HackerTM (리소스 해커)
  • 버전 : v3.4.0 (2002년 3월 24일) / v3.5.2 beta (2009년 12월 19일)
  • 저작권자/제작자 : 앵거스 존슨(Angus Johnson)
  • 분류 : 리소스 편집기
  • 지원 운영체제 : Win95, Win98, WinME, WinNT, Win2000 and WinXP operating systems.
  • 홈페이지 : http://angusj.com/resourcehacker/
  • 저작권 : 프리웨어
  • 평가 : @@@@@@@@@@ ( 8 / 10 )
  • 스크린 샷 :


  • 설명 :
    리소스를 보고 편집할 수 있게 해주는 툴이다. 매우 작으면서도 유용하다. 다만 64비트 프로그램을 지원하지 않으며, 또한 .rc 파일로부터 직접 리소스를 읽어올 수 없다.
  • 기타 :
    1. 이 프로그램은 현재 개발이 중단된 상태입니다. 다만 v3.5.2 베타 버전이 2009년에 업데이트 되었습니다. 그러나 이 버전은 정식 버전은 아니며, 그저 개발자가 64비트 파일을 열어 보려는 목적으로 만든 버전으로 여겨집니다. 홈페이지에는 다음과 같은 글을 남겼습니다.
    2. I needed to access resources in a 64bit Windows executable so I've just updated Resource HackerTM to open (ie decompile/recompile) these files too.
    3. 제작자가 Resource HackerTM 프로그램의 다른 언어로의 번역을 원치 않는다고 하였습니다. 따라서 이곳에는 한글화된 Resource HackerTM 프로그램을 올리지 않습니다.
    4. I do not intend to host any other translations of Resource HackerTM.

다운로드

아래 view source 부분을 클릭하면 바로 볼 수 있으며, 그 내용은 리소스 해커를 이용하여 한글화된 리소스 해커 파일의 리소스를 추출한 것입니다.

[code cpp; collapse: true] 128 GIF "Data_1.gif" CL_MPBACK BITMAP "Bitmap_1.bmp" CL_MPEJECT BITMAP "Bitmap_2.bmp" CL_MPNEXT BITMAP "Bitmap_3.bmp" CL_MPPAUSE BITMAP "Bitmap_4.bmp" CL_MPPLAY BITMAP "Bitmap_5.bmp" CL_MPPREV BITMAP "Bitmap_6.bmp" CL_MPRECORD BITMAP "Bitmap_7.bmp" CL_MPSTEP BITMAP "Bitmap_8.bmp" CL_MPSTOP BITMAP "Bitmap_9.bmp" DI_MPBACK BITMAP "Bitmap_10.bmp" DI_MPEJECT BITMAP "Bitmap_11.bmp" DI_MPNEXT BITMAP "Bitmap_12.bmp" DI_MPPAUSE BITMAP "Bitmap_13.bmp" DI_MPPLAY BITMAP "Bitmap_14.bmp" DI_MPPREV BITMAP "Bitmap_15.bmp" DI_MPRECORD BITMAP "Bitmap_16.bmp" DI_MPSTEP BITMAP "Bitmap_17.bmp" DI_MPSTOP BITMAP "Bitmap_18.bmp" EN_MPBACK BITMAP "Bitmap_19.bmp" EN_MPEJECT BITMAP "Bitmap_20.bmp" EN_MPNEXT BITMAP "Bitmap_21.bmp" EN_MPPAUSE BITMAP "Bitmap_22.bmp" EN_MPPLAY BITMAP "Bitmap_23.bmp" EN_MPPREV BITMAP "Bitmap_24.bmp" EN_MPRECORD BITMAP "Bitmap_25.bmp" EN_MPSTEP BITMAP "Bitmap_26.bmp" EN_MPSTOP BITMAP "Bitmap_27.bmp" SMALLICONS BITMAP "Bitmap_28.bmp" 128 BITMAP "Bitmap_29.bmp" STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65136, "개개의 아이콘그룹 리소스만 ICO 파일로 저장될 수 있습니다" 65137, "개개의 커서그룹 리소스만 CUR 파일로 저장될 수 있습니다" 65138, "개개의 DFM 폼만 DFM 파일로 저장될 수 있습니다" 65139, "다중 리소스는 RES 또는 RC 파일로만 추출이 가능합니다" 65140, "아이콘그룹 또는 커서그룹 항목만 삭제될 수 있습니다" 65141, "경고: 커서 이미지는 직접 조작될 수 없고, 커서그룹으로 칩니다" 65142, "경고: 아이콘 이미지는 직접 조작될 수 없고, 아이콘그룹으로 칩니다" 65143, "콤마 분실" 65144, "원본 파일의 이름을 바꿀 수 없습니다. 저장이 취소되었습니다." 65145, "새 리소스 이름 입력: " 65146, "새 리소스 언어 입력: " 65147, "디렉토리를 생성할 수 없습니다" 65148, "언어 변경(&H)" 65149, "OLE 오류 %.8x" 65150, "자동화 개체로부터 지원되지 않는 '%s' 방법입니다" 65151, "변수는 자동화 개체를 참조하지 않습니다" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65152, "러시아어" 65153, "태국어" 65154, "동유럽어" 65155, "오류" 65156, "존재하지 않습니다" 65157, "잘못된 명령입니다" 65158, "지정된 리소스 파일이 없습니다" 65159, "잘못된 리소스 정의입니다" 65160, "다른 이름으로 저장할 지정된 파일이 없습니다" 65161, "명령이 완료되었습니다" 65162, "리소스 이름을 지정해야 합니다" 65163, "잘못된 리소스 종류입니다" 65164, "DFM 파일이 리소스 이름과 일치하지 않습니다" 65165, "리소스 종류와 리소스 이름 둘다 지정해야 합니다" 65166, "아이콘그룹 또는 커서그룹 항목만 추출될 수 있습니다" 65167, "개개의 비트맵 리소스만 BMP 파일로 저장될 수 있습니다" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65168, "일치하는 리소스가 없습니다" 65169, "이 파일은 비표준 리소스 레이아웃을 가지고 있습니다...\n아마도 \"EXE 압축기\"로 압축된것 같습니다." 65170, "\"%s\" 을(를) 리소스 구역에서 찾을 수 없습니다" 65171, "더 이상 발견된 \"%s\" 이(가) 없습니다" 65172, "\"%s\" 이(가) 더 이상 존재하지 않습니다" 65173, "일본어" 65174, "한국어 (한글)" 65175, "한국어 (조합)" 65176, "중국어 (GB)" 65177, "중국어 (Big5)" 65178, "그리스어" 65179, "터키어" 65180, "베트남어" 65181, "히브리어" 65182, "아랍어" 65183, "발트어" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65184, "[ %s ] 리소스 저장 ..." 65185, "리소스 저장 ..." 65186, "리소스 아이템이 갱신되었습니다." 65187, "Win32 PE 파일" 65188, "16진수 덤프" 65189, "리소스 삭제(&D)" 65190, "리소스 이름 바꾸기(&E)" 65191, "새 리소스 추가 ..." 65192, "리소스 추가(&R)" 65193, "선택된 커서를 추가할 수 없습니다" 65194, "선택된 아이콘을 추가할 수 없습니다" 65195, "선택된 리소스를 추가할 수 없습니다" 65196, "일치하는 리소스가 없습니다" 65197, "리소스가 이미 존재합니다!" 65198, "스크립트가 변경되었습니다...\n컴파일하시겠습니까?" 65199, "다른 이름으로 파일 저장 ..." } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65200, "비디오 클립 파일" 65201, "WAVE 오디오 파일" 65202, "MIDI 오디오 파일" 65203, "GIF 이미지 파일" 65204, "JPG 이미지 파일" 65205, "아이콘 교체" 65206, "커서 교체" 65207, "새 커서를 가진 파일 선택(&F)..." 65208, "교체할 아이콘 선택(&A)" 65209, "새 커서 선택(&N)" 65210, "비트맵 교체" 65211, "리소스 교체 ..." 65212, "리소스 파일" 65213, "%d 줄의 %d 오프셋에서 컴파일러 오류" 65214, "모든 파일" 65215, "리소스 스크립트 파일" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65216, "대화상자 숨기기(&D)" 65217, "대화상자를 표시할 수 없습니다." 65218, "리소스를 삭제하시겠습니까?" 65219, "리소스가 수정되었습니다, 변경된것을 저장하시겠습니까?" 65220, "리소스를 포함한 파일 열기 ..." 65221, "디컴파일된 리소스 저장(&S) ..." 65222, "저장(&S)" 65223, "[%s : %s] 을(를) %s 파일로 저장(&S) ..." 65224, "메뉴 보이기(&M)" 65225, "메뉴 숨기기(&M)" 65226, "[%s : %s] 을(를) 16진수 덤프로 저장(&S) ..." 65227, "리소스 저장 ..." 65228, "비트맵 파일" 65229, "아이콘 파일" 65230, "커서 파일" 65231, "델파이 폼 파일" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65232, "잘못된 정리 방법입니다" 65233, "GIF 이미지" 65234, "불러오는 중..." 65235, "저장 중..." 65236, "변환 중..." 65237, "반환 중..." 65238, "복사 중..." 65239, "최적화 중..." 65240, "JPEG 이미지의 크기를 변경할 수 없습니다" 65241, "JPEG 오류 #%d" 65242, "%d x %0:d (%s 색상) - 서수 이름: %d" 65243, "AVI 재생(&P)" 65244, "MIDI 재생(&P)" 65245, "WAVE 재생(&P)" 65246, "컨트롤 위치" 65247, "대화상자 보이기(&D)" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65248, "지원되지 않는 응용프로그램 확장 블럭 크기입니다" 65249, "알 수 없는 GIF 블럭 종류입니다" 65250, "작업에 지원되지 않는 개체 종류입니다" 65251, "잘못된 GIF 자료입니다" 65252, "포함된 프레임에 이미지 높이가 너무 작습니다" 65253, "포함된 프레임에 이미지 너비가 너무 작습니다" 65254, "이미지가 논리적 화면 크기를 초과했습니다" 65255, "정의된 전역 또는 지역 색상 테이블이 없습니다" 65256, "잘못된 픽셀 좌표입니다" 65257, "지원되지 않는 픽셀형식입니다" 65258, "잘못된 이미지 치수입니다" 65259, "이미지에 DIB 가 없습니다" 65260, "잘못된 스트림 작업입니다" 65261, "색상 테이블에 없는 색상입니다" 65262, "색상 테이블이 비었습니다" 65263, "이미지가 비었습니다" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65264, "잘못된 언어-문자세트 문장입니다." 65265, "\"번역\"이 요구됩니다." 65266, "너무 이른 자료의 끝입니다" 65267, "색상 테이블을 넘었습니다" 65268, "잘못된 색상 색인입니다" 65269, "지원되지 않는 GIF 버전입니다" 65270, "잘못된 GIF 기호입니다" 65271, "화면 서술자에 지정된 색상의 수가 잘못되었습니다" 65272, "이미지 서술자에 지정된 색상의 수가 잘못되었습니다" 65273, "알 수 없는 확장자 종류입니다" 65274, "잘못된 확장자 소개자입니다" 65275, "GIF DIB를 위한 메모리 할당이 실패했습니다" 65276, "디코더 비트 버퍼가 모자랍니다" 65277, "순환의 디코더 테이블 항목입니다" 65278, "잘못된 이미지 트레일러입니다" 65279, "내부 오류: 확장자 사례가 확장자 라벨과 일치하지 않습니다" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65280, "구문 오류: END 문장이 요구됩니다" 65281, "구문 오류: MENUITEM 또는 POPUP이 요구됩니다" 65282, "오류: 잘못된 가속기 플래그 값입니다" 65283, "오류: 잘못된 가속기 키누룸 값입니다" 65284, "오류: MESSAGETABLE의 중복된 메시지 ID입니다" 65285, "문자열 리소스는 숫자 이름을 가져야 합니다" 65286, "이 문자열 ID 는 %d 와 %d의 범위 밖입니다" 65287, "잘못된 VERSIONINFO 문장: " 65288, "BEGIN이 요구됩니다." 65289, "END가 요구됩니다." 65290, "BLOCK이 요구됩니다." 65291, "VALUE가 요구됩니다." 65292, "\"StringFileInfo\"가 요구됩니다." 65293, "\"VarFileInfo\"가 요구됩니다." 65294, "잘못된 \"StringFileInfo\" 문장: " 65295, "잘못된 \"VarFileInfo\" 문장: " } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65296, "잘못된 #Define 문장입니다" 65297, "식별자가 재정의 되었습니다" 65298, "잘못된 #Include 문장입니다" 65299, "반복하는 #Include 문장입니다" 65300, "파일이 없습니다" 65301, "파일을 불러오는데 실패했습니다" 65302, "잘못된 DIALOG 문장입니다" 65303, "잘못된 DIALOG 문장: CONTROL 문장이 요구됩니다" 65304, "잘못된 문장: 콤마 또는 라인의 끝이 요구됩니다" 65305, "잘못된 DIALOG 문장: END 문장이 요구됩니다" 65306, "오류: 틀린 리소스 이름입니다" 65307, "잘못된 DIALOGEX 문장입니다" 65308, "잘못된 DIALOGEX 구문: HelpID 또는 라인의 끝이 요구됩니다" 65309, "요구되는 구문: \"FONT 크기, 이름, [굵기,이탤릭,문자세트]\"" 65310, "구문 오류입니다" 65311, "구문 오류: BEGIN 문장이 요구됩니다" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65312, "이것은 Win32 실행 파일이 아닙니다." 65313, "리소스 구역을 읽을 수 없습니다." 65314, "잘못된 값: " 65315, "잘못된 구문: " 65316, "잘못된 텍스트: 종결 쌍따옴표가 없습니다." 65317, "잘못된 문장입니다" 65318, "잘못된 문장: 텍스트 또는 값이 요구됩니다" 65319, "표현에 잘못된 기호입니다" 65320, "빈 값 스택 - 아마도 일치하지 않는 괄호 때문일 것입니다" 65321, "잘못된 표현 - 아마도 일치하지 않는 괄호 때문일 것입니다" 65322, "잘못된 표현입니다" 65323, "잘못된 문장: 콤마가 요구됩니다" 65324, "잘못된 문장: 정수가 요구됩니다" 65325, "잘못된 문장: 텍스트가 요구됩니다" 65326, "잘못된 문장: 값이 요구됩니다." 65327, "잘못된 문장: 라인의 끝이 요구됩니다" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65328, "Alt+" 65329, "라인을 입력할 수 없습니다" 65330, "잘못된 클립보드 형식입니다" 65331, "클립보드는 아이콘을 지원하지 않습니다" 65332, "텍스트가 메모 용량을 초과했습니다" 65333, "현재 선택된 기본 프린터가 없습니다" 65334, "비트 색인이 범위를 넘었습니다" 65335, "메뉴 '%s' 이(가) 이미 다른 폼에서 사용되었습니다" 65336, "열린 MCI 장치가 없습니다" 65337, "알 수 없는 오류 코드입니다" 65338, "잘못된 색인입니다" 65339, "항목을 삽입할 수 없습니다" 65340, "RichEdit 라인 삽입 오류입니다" 65341, "스트림 불러오기가 실패했습니다" 65342, "스트림 저장이 실패했습니다" 65343, "잘못된 역슬래쉬 (가능한 옵션 - \\\\, \\\", \\n, \\t, \\000 .. \\400 )" } STRINGTABLE LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL { 65344, "Tab" 65345, "Esc" 65346, "Enter" 65347, "Space" 65348, "PgUp" 65349, "PgDn" 65350, "End" 65351, "Home" 65352, "Left" 65353, "Up" 65354, "Right" 65355, "Down" 65356, "Ins" 65357, "Del" 65358, "Shift+" 65359, "Ctrl+" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65360, "경고" 65361, "오류" 65362, "정보" 65363, "확인" 65364, "예(&Y)" 65365, "아니오(&N)" 65366, "확인" 65367, "취소" 65368, "도움말(&H)" 65369, "중단(&A)" 65370, "재시도(&R)" 65371, "무시(&I)" 65372, "모두(&A)" 65373, "모두 아니오(&O)" 65374, "모두 예(&E)" 65375, "BkSp" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65376, "작업에 그리드가 너무 큽니다" 65377, "너무 많은 로우 또는 칼럼이 삭제되었습니다" 65378, "그리드 색인이 범위를 넘었습니다" 65379, "고정 칼럼수는 칼럼수보다 작아야 합니다" 65380, "고정 로우수는 로우수보다 작아야 합니다" 65381, "라인 %d 위의 %s" 65382, "식별자가 요구됩니다" 65383, "문자열이 요구됩니다" 65384, "숫자가 요구됩니다" 65385, "''%s'' 이(가) 요구됩니다" 65386, "%s 이(가) 요구됩니다" 65387, "잘못된 문자열 상수입니다" 65388, "잘못된 속성 값입니다" 65389, "잘못된 바이너리 값입니다" 65390, "잘못된 입력 값입니다" 65391, "잘못된 입력 값입니다. 변경된것을 버리려면 ESC 키를 사용하세요." } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65392, "볼 수 있는 윈도우 모달을 만들 수 없습니다" 65393, "메뉴 색인이 범위를 넘었습니다" 65394, "메뉴가 두번 입력되었습니다" 65395, "하위메뉴가 메뉴에 없습니다" 65396, "프린터가 현재 인쇄중이지 않습니다" 65397, "인쇄중" 65398, "잘못된 프린터가 선택되었습니다" 65399, "%s / %s" 65400, "그룹색인은 이전 메뉴 항목의 그룹색인보다 작을 수 없습니다" 65401, "폼을 생성할 수 없습니다. 현재 활성중인 MDI 폼이 없습니다" 65402, "컨트롤은 그 자신을 부모로 가질 수 없습니다" 65403, "폼을 드래그할 수 없습니다" 65404, "메타파일" 65405, "향상된 메타파일" 65406, "아이콘" 65407, "비트맵" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65408, "잘못된 픽셀 형식입니다" 65409, "조사 라인 색인이 범위를 넘었습니다" 65410, "아이콘의 크기를 변경할 수 없습니다" 65411, "지원되지 않는 클립보드 형식입니다" 65412, "시스템 리소스를 넘었습니다" 65413, "캔버스가 그리기를 허가하지 않습니다" 65414, "잘못된 이미지 크기입니다" 65415, "잘못된 이미지목록입니다" 65416, "잘못된 이미지목록 색인입니다" 65417, "스트림으로부터 이미지목록 자료 읽기가 실패했습니다" 65418, "윈도우 장치 환경 생성 오류입니다" 65419, "윈도우 클래스 생성 오류입니다" 65420, "불가능하거나 감춰진 윈도우에 초점을 맞출 수 없습니다" 65421, "컨트롤 '%s' 은(는) 부모 윈도우가 없습니다" 65422, "MDI 자식 폼을 숨길 수 없습니다" 65423, "OnShow 또는 OnHide의 보기를 변경할 수 없습니다" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65424, "목록수가 범위를 넘었습니다 (%d)" 65425, "정렬된 문자열 목록에서 작업이 허가되지 않습니다" 65426, "문자열 목록이 중복을 허가하지 않습니다" 65427, "구성요소 이름 %s 이(가) 이미 존재합니다" 65428, "''%s'' 은(는) 잘못된 구성요소 이름입니다" 65429, "클래스 이름 %s 은(는) 이미 존재합니다" 65430, "라인이 너무 깁니다" 65431, "잘못된 속성 값입니다" 65432, "잘못된 속성 경로입니다" 65433, "속성이 존재하지 않습니다" 65434, "속성이 읽기 전용입니다" 65435, "%s.%s: %s 읽기 오류입니다" 65436, "'%s' 의 조상이 없습니다" 65437, "비트맵 이미지가 잘못되었습니다" 65438, "아이콘 이미지가 잘못되었습니다" 65439, "메타파일이 잘못되었습니다" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65440, "수요일" 65441, "목요일" 65442, "금요일" 65443, "토요일" 65444, "%s 을(를) %s 에 할당할 수 없습니다" 65445, "%s 파일을 생성할 수 없습니다" 65446, "%s 파일을 열 수 없습니다" 65447, "스트림 읽기 오류입니다" 65448, "스트림 쓰기 오류입니다" 65449, "메모리 스트림 확장동안 메모리를 넘었습니다" 65450, "읽기 전용 리소스 스트림에 쓸 수 없습니다" 65451, "클래스 %s 이(가) 없습니다" 65452, "잘못된 스트림 형식입니다" 65453, "리소스 %s 이(가) 없습니다" 65454, "목록 색인이 범위를 넘었습니다 (%d)" 65455, "목록 용량이 범위를 넘었습니다 (%d)" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65456, "07월" 65457, "08월" 65458, "09월" 65459, "10월" 65460, "11월" 65461, "12월" 65462, "일" 65463, "월" 65464, "화" 65465, "수" 65466, "목" 65467, "금" 65468, "토" 65469, "일요일" 65470, "월요일" 65471, "화요일" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65472, "3월" 65473, "4월" 65474, "5월" 65475, "6월" 65476, "7월" 65477, "8월" 65478, "9월" 65479, "10월" 65480, "11월" 65481, "12월" 65482, "01월" 65483, "02월" 65484, "03월" 65485, "04월" 65486, "05월" 65487, "06월" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65488, "변수 방법 호출이 지원되지 않습니다" 65489, "읽기" 65490, "쓰기" 65491, "변수 배열 생성 오류입니다" 65492, "변수는 배열이 아닙니다" 65493, "변수 배열 색인이 범위를 넘었습니다" 65494, "%x 외부 예외입니다" 65495, "주장이 실패했습니다" 65496, "인터페이스가 지원되지 않습니다" 65497, "%s (%s, 라인 %d)" 65498, "이론적인 오류입니다" 65499, "모듈 '%s'의 주소 %p에서의 접근 위반. 주소 %p 의 %s" 65500, "Win32 오류. 코드: %d.\n%s" 65501, "Win32 API 함수가 실패했습니다" 65502, "1월" 65503, "2월" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65504, "잘못된 소수점 연산입니다" 65505, "0으로 나눈 소수점입니다" 65506, "소수점이 넘쳤습니다" 65507, "소수점이 모자랍니다" 65508, "잘못된 포인터 연산입니다" 65509, "잘못된 클래스 역할 정의입니다" 65510, "주소 %p에서의 접근 위반. 주소 %p 의 %s" 65511, "스택이 넘쳤습니다" 65512, "Control + C 누름(강제 종료)" 65513, "우선 명령" 65514, "예외 %s -> 모듈 %s -> %p.\n%s%s" 65515, "응용프로그램 오류입니다" 65516, "'%s' 형식이 잘못되었거나 인수와 호환되지 않습니다" 65517, "'%s' 형식에 인수가 없습니다" 65518, "잘못된 변수 종류 변환입니다" 65519, "잘못된 변수 연산입니다" } STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 65520, "'%s' 은(는) 잘못된 정수 값입니다" 65521, "'%s' 은(는) 잘못된 소수점 값입니다" 65522, "시간 인코드에 잘못된 인수입니다" 65523, "날짜 인코드에 잘못된 인수입니다" 65524, "메모리를 넘었습니다" 65525, "I/O 오류 %d 입니다" 65526, "파일이 없습니다" 65527, "잘못된 파일 이름입니다" 65528, "너무 많은 파일이 열렸습니다" 65529, "파일 접근이 거부되었습니다" 65530, "파일의 끝을 넘어서 읽었습니다" 65531, "디스크가 꽉찼습니다" 65532, "잘못된 숫자 입력입니다" 65533, "0으로 나누었습니다" 65534, "범위 검사 오류입니다" 65535, "정수가 넘쳤습니다" } DVCLAL RCDATA "RCData_1.bin" PACKAGEINFO RCDATA "RCData_2.bin" TABOUTFORM RCDATA "RCData_3.bin" TBMPFORM RCDATA "RCData_4.bin" TDIALOGFORM RCDATA "RCData_5.bin" TDLGEDFORM RCDATA "RCData_6.bin" TICONFORM RCDATA "RCData_7.bin" TMAINFORM RCDATA "RCData_8.bin" TMENUFORM RCDATA "RCData_9.bin" TRSRCFORM RCDATA "RCData_10.bin" 258 RCDATA "RCData_11.bin" NSEW CURSOR "Cursor_1.cur" 32761 CURSOR "Cursor_2.cur" 32762 CURSOR "Cursor_3.cur" 32763 CURSOR "Cursor_4.cur" 32764 CURSOR "Cursor_5.cur" 32765 CURSOR "Cursor_6.cur" 32766 CURSOR "Cursor_7.cur" 32767 CURSOR "Cursor_8.cur" MAINICON ICON "Icon_1.ico" 128 ICON "Icon_2.ico" 1 VERSIONINFO FILEVERSION 3,4,0,79 PRODUCTVERSION 3,4,0,79 FILEOS 0x4 FILETYPE 0x1 { BLOCK "StringFileInfo" { BLOCK "041203B5" { VALUE "CompanyName", "" VALUE "FileDescription", "리소스 뷰어, 디컴파일러 & 재컴파일러." VALUE "FileVersion", "3.4.0.79" VALUE "InternalName", "ResHack" VALUE "LegalCopyright", "(c) Angus Johnson 1999-2002" VALUE "LegalTrademarks", "" VALUE "OriginalFilename", "ResHack" VALUE "ProductName", "" VALUE "ProductVersion", "3.0.0.0" VALUE "Comments", "프리웨어, 그러나 조건은 도움말 파일을 보세요." VALUE "Aditional Notes", "제작자의 허가 없이 배포할 수 없습니다." } } BLOCK "VarFileInfo" { VALUE "Translation", 0x0412 0x03B5 } } [/code]

관련 문서

내부 문서

외부 문서

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

'소프트웨어 > 소개' 카테고리의 다른 글

Process Explorer  (2) 2010.01.09
Resize Browser  (2) 2009.12.29
VirtualDub  (0) 2009.09.12
AVI-Mux GUI  (0) 2009.09.09
GSpot  (0) 2009.09.06
글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

영어나 외국어로 된 프로그램의 메시지을 한글로 바꾼 뒤에 그 언어 정보는 원래대로 두는 실수를 하는 때가 있다. 보통 때는 전혀 문제가 없으나, 간혹 문제가 생기는 경우도 있습니다. 이렇게 언어 정보가 틀려 있는 프로그램의 언어 정보를 리소스 해커(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로 공개한 글입니다.

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로 공개한 글입니다.

카테고리

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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2024/03   »
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
31

글 보관함