/*
 * Copyright 2009 Piotr Caban
 * 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 "resource.h"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT

STRINGTABLE
{
    IDS_TO_PRIMITIVE        "객페를 기본 형식으로 변환하는 중에 에러 발생"
    IDS_INVALID_CALL_ARG    "올바르지 않은 프로시져 호출이나 인수"
    IDS_CREATE_OBJ_ERROR    "자동화 서버가 객체를 만들 수 없습니다"
    IDS_NO_PROPERTY         "객체는 이 속성이나 메소드를 지원하지 않습니다"
    IDS_UNSUPPORTED_ACTION  "객체는 이 행동을 지원하지 않습니다"
    IDS_ARG_NOT_OPT         "인수는 옵션이 아닙니다"
    IDS_SYNTAX_ERROR        "문법 에러"
    IDS_SEMICOLON           "';' 가 필요합니다"
    IDS_LBRACKET            "'(' 가 필요합니다"
    IDS_RBRACKET            "')' 가 필요합니다"
    IDS_UNTERMINATED_STR    "띁나지 않은 문자열 상수"
    IDS_NOT_FUNC            "함수가 필요합니다"
    IDS_NOT_DATE            "'[객체]' 는 날짜 객체가 아닙니다"
    IDS_NOT_NUM             "숫자가 필요합니다"
    IDS_OBJECT_EXPECTED     "객체가 필요합니다"
    IDS_ILLEGAL_ASSIGN      "잘못된 할당"
    IDS_UNDEFINED           "'|' 는 정의되지 않았습니다"
    IDS_NOT_BOOL            "볼린 객제가 필요합니다"
    IDS_JSCRIPT_EXPECTED    "JScript 객체가 필요합니다"
    IDS_REGEXP_SYNTAX_ERROR "정규 표현식에 문법에러가 있습니다"
    IDS_URI_INVALID_CHAR    "URI 는 올바르지 않은 문자를 포함해서 인코딩되었습니다"
    IDS_INVALID_LENGTH      "배열 길이는 반드시  한정된 양의 정수이어야 합니다"
    IDS_ARRAY_EXPECTED      "배열 객체가 필요합니다"
}
