/*
 * Copyright 2001 Eric Pouech
 * Copyright 2005,2007,2011 YunSong Hwang
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "wineconsole_res.h"

#pragma code_page(65001)

LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT

STRINGTABLE
BEGIN
IDS_EDIT,		"편집(&E)"
IDS_DEFAULT,		"기본으로 설정(&D)"
IDS_PROPERTIES,		"속성(&P)"
IDS_MARK,		"&Mark"
IDS_COPY,		"복사(&C)"
IDS_PASTE,		"붙여넣기(&P)"
IDS_SELECTALL,		"모두 선택(&S)"
IDS_SCROLL,		"스크롤(&R)"
IDS_SEARCH,		"찾기(&E)"
IDS_FNT_DISPLAY,	"각각의 글자는 %ld  픽셀 너비에 %ld 픽셀 높이를 가집니다"
IDS_FNT_PREVIEW,	"이것은 테스트입니다"
IDS_DLG_TIT_DEFAULT,    "설치 - 기본 설정"
IDS_DLG_TIT_CURRENT,    "설치 - 현재 설정"
IDS_DLG_TIT_ERROR,	"설정 에러"
IDS_DLG_ERR_SBWINSIZE, 	"스크린 버퍼 크기는 반드시 창보다 같거나 커야합니다."

IDS_CMD_INVALID_EVENT_ID  "wineconsole: 이벤트 id를 붙여 넣을 수 없습니다\n"
IDS_CMD_INVALID_BACKEND    "wineconsole: 올바르지 않은 백엔드\n"
IDS_CMD_INVALID_OPTION    "wineconsole: 이해할수 없는 명령 라인 옵션\n"
IDS_CMD_ABOUT              "Wine 콘솔에서 프로그램 시작\n"
IDS_CMD_LAUNCH_FAILED      "wineconsole: 풀그림 %s 시작 실패.\n"\
                           "이 명령은 올바르지 않습니다.\n"

IDS_USAGE_HEADER           "\n사용법:\n  wineconsole [옵션] <명령>\n\n옵션:\n"
IDS_USAGE_BACKEND          "  --backend={user|curses}  사용자가 새 창을 열 것인지,\n"\
                           "                            curses가 Wine 콘솔처럼 현재 터미널에  나타낼 것인지 선택\n"
IDS_USAGE_COMMAND          "  <명령>                 The Wine 프로그램은 콘솔을 통해서 시작됨\n"
IDS_USAGE_FOOTER           "\n예:\n  wineconsole cmd\nWine 콘솔에서 Wine 명령 프롬프트 시작\n\n"

END

IDD_OPTION DIALOG 36, 24, 208, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " 옵션 "
FONT 9, "MS Shell Dlg"
{
	GROUPBOX "커서 크기", -1, 10, 11, 60, 44, BS_GROUPBOX
	AUTORADIOBUTTON "작게(&S)", IDC_OPT_CURSOR_SMALL, 14, 23, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "중간(&M)", IDC_OPT_CURSOR_MEDIUM, 14, 33, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "크게(&L)", IDC_OPT_CURSOR_LARGE, 14, 43, 44, 10, WS_TABSTOP

	GROUPBOX "컨트롤", -1, 75, 11, 125, 44, BS_GROUPBOX
	LTEXT "팝업 메뉴", -1, 79, 23, 40, 10
	AUTOCHECKBOX "컨트롤(&C)", IDC_OPT_CONF_CTRL, 129, 23, 60, 10, WS_TABSTOP
	AUTOCHECKBOX "쉬프트(&H)", IDC_OPT_CONF_SHIFT, 129, 33, 60, 10, WS_TABSTOP
	LTEXT "빠른 편집", -1, 79, 43, 50, 10
	AUTOCHECKBOX "가능(&E)", IDC_OPT_QUICK_EDIT, 129, 43, 60, 10, WS_TABSTOP

	GROUPBOX "명령 히스토리", -1, 10, 57, 190, 35, BS_GROUPBOX
	LTEXT "다시 부르는 명령의 갯수(&N):", -1, 14, 67, 78, 18
	EDITTEXT IDC_OPT_HIST_SIZE, 92, 69, 31, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_OPT_HIST_SIZE_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	AUTOCHECKBOX "두번  제거(&R)", IDC_OPT_HIST_NODOUBLE, 130, 67, 50, 18, WS_TABSTOP|BS_MULTILINE
}

IDD_FONT DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " 글꼴 "
FONT 9, "MS Shell Dlg"
{
	LTEXT "글꼴(&F)", -1, 5, 5, 24, 8
	LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL
	LTEXT "색상(&C)", -1, 100, 5, 50, 8
	CONTROL "", IDC_FNT_COLOR_FG, "WineConColorPreview", 0L, 100, 18, 48, 16
	CONTROL "", IDC_FNT_COLOR_BK, "WineConColorPreview", 0L, 100, 40, 48, 16
	LTEXT "크기;(&S)", -1, 158, 5, 40, 8
	LISTBOX IDC_FNT_LIST_SIZE, 158, 18, 40, 60, WS_VSCROLL
	CONTROL "", IDC_FNT_PREVIEW, "WineConFontPreview", 0L, 5, 60, 109, 40
	LTEXT "", IDC_FNT_FONT_INFO, 128, 76, 80, 18
}

IDD_CONFIG DIALOG 36, 24, 206, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " 설정 "
FONT 9, "MS Shell Dlg"
{
	GROUPBOX "버퍼 존", -1, 10, 11, 100, 42, BS_GROUPBOX
	LTEXT "너비(&W) :", -1, 14, 25, 54, 9
	EDITTEXT IDC_CNF_SB_WIDTH, 68, 23, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_SB_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	LTEXT "높이(&H) :", -1, 14, 39, 54, 9
	EDITTEXT IDC_CNF_SB_HEIGHT, 68, 37, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_SB_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0

	GROUPBOX "창 크기", -1, 10, 55, 100, 42
	LTEXT "너비(&I) :", -1, 14, 69, 54, 9
	EDITTEXT IDC_CNF_WIN_WIDTH, 68, 67, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_WIN_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	LTEXT "높이(&E) :", -1, 14, 83, 54, 9
	EDITTEXT IDC_CNF_WIN_HEIGHT, 68, 81, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_WIN_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0

	GROUPBOX "풀그림의 끝", -1, 115, 11, 80, 42, BS_GROUPBOX
	AUTOCHECKBOX "콘솔 닫기(&C)", IDC_CNF_CLOSE_EXIT, 119, 25, 72, 20, WS_TABSTOP

	GROUPBOX "에디션", -1, 115, 55, 80, 42
	COMBOBOX IDC_CNF_EDITION_MODE, 119, 69, 72, 20, CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
}

IDD_SAVE_SETTINGS DIALOG 20, 20, 170, 60
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION " 콘솔 매개변수"
FONT 9, "MS Shell Dlg"
{
	GROUPBOX "", -1, 10, 10, 150, 31, BS_GROUPBOX
	AUTORADIOBUTTON "나중의 세션을 위해 설정 보존", IDC_SAV_SAVE, 14, 15, 140, 10, WS_TABSTOP
	AUTORADIOBUTTON "오직 현재의 세션만 변경", IDC_SAV_SESSION, 14, 27, 140, 10, WS_TABSTOP

	PUSHBUTTON "확인", IDOK, 35, 45, 35, 12
	PUSHBUTTON "취소", IDCANCEL, 80, 45, 35, 12
}
