/*
 * Hungarian resources for localui
 *
 * Copyright 2010 Andras Kovacs
 *
 * 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"

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

LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT

ADDPORT_DIALOG DIALOG 6, 18, 245, 47
STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
CAPTION "Helyi port hozzáadása"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT "Adja meg a &hozzáadni kívánt port nevét:", -1, 7, 13, 194, 13, WS_VISIBLE
    EDITTEXT ADDPORT_EDIT, 6, 28, 174, 12, WS_VISIBLE | ES_AUTOHSCROLL
    DEFPUSHBUTTON "OK", IDOK, 199, 10, 40, 14, WS_VISIBLE
    PUSHBUTTON "Mégse", IDCANCEL, 199, 27, 40, 14, WS_VISIBLE
END


LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47
STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
CAPTION "LPT port beállítása"
FONT 8, "MS Shell Dlg"
BEGIN
    GROUPBOX "Időtúllépés (másodperc)", LPTCONFIG_GROUP, 6, 6, 150, 35, BS_GROUPBOX
    LTEXT "Á&tviteli újrapróbálkozás:", -1, 14, 22, 90, 13, WS_VISIBLE
    EDITTEXT LPTCONFIG_EDIT, 112, 20, 32, 13, WS_VISIBLE | ES_NUMBER
    DEFPUSHBUTTON "OK", IDOK, 164, 10, 50, 14, WS_VISIBLE
    PUSHBUTTON "Mégse", IDCANCEL, 164, 27, 50, 14, WS_VISIBLE
END


STRINGTABLE
{
    IDS_LOCALPORT "Helyi port"
    IDS_INVALIDNAME "A(z) '%s' nem egy érvényes portnév"
    IDS_PORTEXISTS "A port: %s már létezik"
    IDS_NOTHINGTOCONFIG "Ennek a portnak nincsenek beállítható tulajdonságai"
}
