/*
 * Swedish resources for the Internet control panel applet
 *
 * Copyright 2010 Anders Jonsson
 *
 * 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 "inetcpl.h"

#pragma code_page(65001)

LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL

/* "General" propsheet */
IDD_GENERAL DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "Allmänt"
BEGIN

    GROUPBOX    " Startsida ", IDC_STATIC, 4, 4, 312, 52
    LTEXT       "Du kan välja vilken adress som ska användas som startsida.",
                IDC_STATIC, 58, 10, 252, 10
    EDITTEXT    IDC_HOME_EDIT, 58, 22, 252, 12, WS_VISIBLE | ES_AUTOHSCROLL
    PUSHBUTTON  "&Aktuell sida", IDC_HOME_CURRENT, 58, 36, 80, 14
    PUSHBUTTON  "&Förvald sida", IDC_HOME_DEFAULT, 144, 36, 80, 14
    PUSHBUTTON  "&Blank sida", IDC_HOME_BLANK, 230, 36, 80, 14

END

/* "Content" propsheet */
IDD_CONTENT DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "Innehåll"
BEGIN

    GROUPBOX    " Certifikat ", IDC_STATIC, 4, 4, 312, 50
    LTEXT       "Certifikat används för din personliga identifikation samt för att identifiera certifikats-auktoriteter och -utgivare.",
                IDC_STATIC, 58, 14, 252, 18
    PUSHBUTTON  "Certifikat...", IDC_CERT, 146, 34, 80, 14
    PUSHBUTTON	"Utgivare...", IDC_CERT_PUBLISHER, 230, 34, 80, 14

END
