/*
 * Start
 * Korean Language Support
 *
 * Copyright 2003 Dan Kegel
 * Copyright 2005,2010 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 "resources.h"

#pragma code_page(65001)

LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE
{
STRING_USAGE,"풀그림을 실행시키거나 보통 파일에 첨가해서 사용되는  풀그림으로 문서 열기\n\
Usage:\n\
start [옵션] 풀그림이나 파일 이름 [...]\n\
start [옵션] 문서 파일 이름\n\
\n\
Options:\n\
/M[inimized] 풀그림 최소화 상태로 실행.\n\
/MAX[imized] 풀그림 최대화 상태로 실행.\n\
/R[estored]  풀그림을 보통상태로 시작시키기 (최소화도 아니고 최대화도 아님).\n\
/W[ait]      시작된 풀그림이 끝날 때까지 기다림, 끝날 때 종료코드를 남김.\n\
/Unix        윈도우 익스플로어같이 유닉스 파일이름을 사용해서 시작.\n\
/ProgIDOpen  지정한 progID를 사용해서 문서 열기.\n\
/L           사용자 라이센스 보여줌\n\
\n\
start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
Start comes with ABSOLUTELY NO WARRANTY; for details run with /L option.\n\
This is free software, and you are welcome to redistribute it\n\
under certain conditions; run 'start /L' for details.\n\
"

STRING_LICENSE, "start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
This program is free software; you can redistribute it and/or\n\
modify it under the terms of the GNU Lesser Public License\n\
as published by the Free Software Foundation; either version 2.1\n\
of the License, or (at your option) any later version.\n\
\n\
This program is distributed in the hope that it will be useful,\n\
but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\
GNU Lesser Public License for more details.\n\
\n\
You should have received a copy of the GNU Lesser Public License\n\
along with this program; if not, write to the Free Software\n\
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.\n\
\n\
See the COPYING.LIB file for license information.\n\
"

STRING_EXECFAIL "프로그램을 실행할 수 없거나, 지정된 파일에 연결된 프로그램이 없습니다.\nShellExecuteEx 실패"

STRING_UNIXFAIL "지정된 Unix 파일명을 DOS 파일명으로 바꿀 수 없습니다."
}
