/*
 * Copyright 2009 Ricardo Filipe
 * Copyright 2010 Gustavo Henrique Milaré
 *
 * 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"

#pragma code_page(65001)

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN

STRINGTABLE
{
    IDS_TO_PRIMITIVE        "Erro ao converter objeto em tipo primitivo"
    IDS_INVALID_CALL_ARG    "Argumento ou chamada de procedimento inválida"
    IDS_SUBSCRIPT_OUT_OF_RANGE "Subscript fora de alcance"
    IDS_CREATE_OBJ_ERROR    "O servidor de automação não conseguiu criar o objeto"
    IDS_NO_PROPERTY         "O objeto não suporta esta propriedade ou método"
    IDS_UNSUPPORTED_ACTION  "O objeto não suporta esta ação"
    IDS_ARG_NOT_OPT         "Argumento não opcional"
    IDS_SYNTAX_ERROR        "Erro de sintaxe"
    IDS_SEMICOLON           "';' esperado"
    IDS_LBRACKET            "'(' esperado"
    IDS_RBRACKET            "')' esperado"
    IDS_UNTERMINATED_STR    "Constante de string não terminada"
    IDS_NOT_FUNC            "Função esperada"
    IDS_NOT_DATE            "'[object]' não é um objeto de data"
    IDS_NOT_NUM             "Número esperado"
    IDS_OBJECT_EXPECTED     "Objeto esperado"
    IDS_ILLEGAL_ASSIGN      "Atribuição ilegal"
    IDS_UNDEFINED           "'|' é indefinido"
    IDS_NOT_BOOL            "Objeto boleano esperado"
    IDS_NOT_VBARRAY         "Objeto VBArray esperado"
    IDS_JSCRIPT_EXPECTED    "Objeto JScript esperado"
    IDS_REGEXP_SYNTAX_ERROR "Erro de sintaxe na expressão regular"
    IDS_URI_INVALID_CHAR    "URI a ser codificado contém caracteres inválidos"
    IDS_INVALID_LENGTH      "Tamanho do vetor tem que ser um inteiro finito positivo"
    IDS_ARRAY_EXPECTED      "Objeto Array esperado"
}

LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE

STRINGTABLE
{
    IDS_TO_PRIMITIVE        "Erro ao converter objecto em tipo primitivo"
    IDS_INVALID_CALL_ARG    "Argumento ou chamada de procedimento inválida"
    IDS_SUBSCRIPT_OUT_OF_RANGE "Subscript fora de alcance"
    IDS_CREATE_OBJ_ERROR    "O servidor de automação não conseguiu criar o objecto"
    IDS_NO_PROPERTY         "O objecto não suporta esta propriedade ou método"
    IDS_UNSUPPORTED_ACTION  "O objecto não suporta esta acção"
    IDS_ARG_NOT_OPT         "Argumento não opcional"
    IDS_SYNTAX_ERROR        "Erro de sintaxe"
    IDS_SEMICOLON           "';' esperado"
    IDS_LBRACKET            "'(' esperado"
    IDS_RBRACKET            "')' esperado"
    IDS_UNTERMINATED_STR    "Constante de string não terminada"
    IDS_NOT_FUNC            "Função esperada"
    IDS_NOT_DATE            "'[object]' não é um objecto de data"
    IDS_NOT_NUM             "Número esperado"
    IDS_OBJECT_EXPECTED     "Objecto esperado"
    IDS_ILLEGAL_ASSIGN      "Atribuição ilegal"
    IDS_UNDEFINED           "'|' é indefinido"
    IDS_NOT_BOOL            "Objecto boleano esperado"
    IDS_NOT_VBARRAY         "Objecto VBArray esperado"
    IDS_JSCRIPT_EXPECTED    "Objecto JScript esperado"
    IDS_REGEXP_SYNTAX_ERROR "Erro de sintaxe na expressão regular"
    IDS_URI_INVALID_CHAR    "URI a ser codificado contém caracteres inválidos"
    IDS_INVALID_LENGTH      "Tamanho do vector tem de ser um inteiro finito positivo"
    IDS_ARRAY_EXPECTED      "Objecto Array esperado"
}
