/*
 * 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ör&vald sida", IDC_HOME_DEFAULT, 144, 36, 80, 14
    PUSHBUTTON  "&Blank sida", IDC_HOME_BLANK, 230, 36, 80, 14
    GROUPBOX    " Bläddringshistorik ", IDC_STATIC, 4, 60, 312, 46
    LTEXT       "Du kan ta bort cachade sidor, kakor och annan data.",
                IDC_STATIC, 58, 72, 252, 10
    PUSHBUTTON  "Ta bort &filer...", IDC_HISTORY_DELETE, 144, 86, 80, 14
    PUSHBUTTON  "&Inställningar...", IDC_HISTORY_SETTINGS, 230, 86, 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
