/*
 * Spanish resources for localui
 *
 * 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 "localui.h"

#pragma code_page(65001)

LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL

ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47
STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
CAPTION "Agregar un puerto local"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT "&Ingrese el nombre del puerto a agregar:", -1, 7, 13, 194, 13, WS_VISIBLE
    EDITTEXT ADDPORT_EDIT, 6, 28, 174, 12, WS_VISIBLE | ES_AUTOHSCROLL
    DEFPUSHBUTTON "Aceptar", IDOK, 199, 10, 40, 14, WS_VISIBLE
    PUSHBUTTON "Cancelar", IDCANCEL, 199, 27, 40, 14, WS_VISIBLE
END


LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47
STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
CAPTION "Configurar puerto LPT"
FONT 8, "MS Shell Dlg"
BEGIN
    GROUPBOX "Tiempo de espera (segundos)", LPTCONFIG_GROUP, 6, 6, 150, 35, BS_GROUPBOX
    LTEXT "&Reintentar transmisión:", -1, 14, 22, 90, 13, WS_VISIBLE
    EDITTEXT LPTCONFIG_EDIT, 112, 20, 32, 13, WS_VISIBLE | ES_NUMBER
    DEFPUSHBUTTON "Aceptar", IDOK, 164, 10, 50, 14, WS_VISIBLE
    PUSHBUTTON "Cancelar", IDCANCEL, 164, 27, 50, 14, WS_VISIBLE
END


STRINGTABLE DISCARDABLE
{
    IDS_LOCALPORT "Puerto local"
    IDS_INVALIDNAME "'%s' no es un nombre de puerto válido"
    IDS_PORTEXISTS "El puerto %s ya existe"
    IDS_NOTHINGTOCONFIG "Este puerto no tiene opciones para configurar"
}
