/*
 * Task termination utility
 * Korean language support
 *
 * Copyright 2010 Andrew Nguyen
 * Copyright 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 "taskkill.h"

#pragma code_page(65001)

LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT

STRINGTABLE
{
    STRING_USAGE, "사용법: taskkill [/?] [/f] [/im 프로세스이름 | /pid 프로세스ID]\n"
    STRING_INVALID_OPTION, "에러: 알수 없거나 올바르지 않은 명령라인 옵션이 지정되었습니다.\n"
    STRING_INVALID_PARAM, "에러: 올바르지 않은 명령어 라인 옵션이 지정되었습니다.\n"
    STRING_MISSING_OPTION, "에러: /im 니 /pid  옵션중의 하나는 반드시 지정되어야합니다.\n"
    STRING_MISSING_PARAM, "에러: 롭션 %s 는 하나의 명령어라인 매개변수가 올것으로 예상합니다.\n"
    STRING_MUTUAL_EXCLUSIVE, "에러:  /im 와 /pid 옵션은 같이 사용할 수 없습니다.\n"
    STRING_CLOSE_PID_SEARCH, "PID %u 의 프로세스의 최상위 창에 닫는 메세지 보냈습니다.\n"
    STRING_CLOSE_PROC_SRCH, "PID %u 의 프로세스 \"%s\"의 최상위 창에 닫는 메세지 보냈습니다.\n"
    STRING_TERM_PID_SEARCH, "PID %u 의 프로세스는 강제로 종료되었습니다.\n"
    STRING_TERM_PROC_SEARCH, "PID %u 의 프로세스 \"%s\" 는 강제로 종료되엇습니다.\n"
    STRING_SEARCH_FAILED, "에러: 프로세스 \"%s\"를 찾을 수 없습니다.\n"
    STRING_ENUM_FAILED, "에러: 프로세스 목록을 열거 할 수 업습니다.\n"
    STRING_TERMINATE_FAILED, "에러: \"%s\" 프로세스를 중단시킬 수 없습니다.\n"
    STRING_SELF_TERMINATION, "에러: 프로세스 자가 종료는 허용되지 않습니다.\n"
}
