/*
 * Copyright 2010 José Rostagno
 *
 * 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_SPANISH, SUBLANG_NEUTRAL

STRINGTABLE DISCARDABLE
{
    IDS_TO_PRIMITIVE        "Error al convertir objeto a tipo primitivo"
    IDS_INVALID_CALL_ARG    "Llamada a procedimiento no válido o argumento"
    IDS_CREATE_OBJ_ERROR    "Servidor de automatización no puede crear el objeto"
    IDS_NO_PROPERTY         "El objeto no acepta esta propiedad o método"
    IDS_ARG_NOT_OPT         "Argumento no opcional"
    IDS_SYNTAX_ERROR        "Error de sintaxis"
    IDS_SEMICOLON           "Esperado ';'"
    IDS_LBRACKET            "Esperado '('"
    IDS_RBRACKET            "Esperado ')'"
    IDS_UNTERMINATED_STR    "Constante de cadena no terminada"
    IDS_NOT_FUNC            "Función esperada"
    IDS_NOT_DATE            "'[objeto]' no es un objeto fecha"
    IDS_NOT_NUM             "Numero esperado"
    IDS_OBJECT_EXPECTED     "Objeto esperado"
    IDS_ILLEGAL_ASSIGN      "Asignación ilegal"
    IDS_UNDEFINED           "'|' no está definido"
    IDS_NOT_BOOL            "Objeto Booleano esperado"
    IDS_JSCRIPT_EXPECTED    "Objeto JScript esperado"
    IDS_REGEXP_SYNTAX_ERROR "Error de sintaxis en la expresion regular"
    IDS_URI_INVALID_CHAR    "URI a codificar contiene caracteres no válidos"
    IDS_INVALID_LENGTH      "La longitud del arreglo debe ser un entero positivo finito"
    IDS_ARRAY_EXPECTED      "Objeto Arreglo esperado"
}
