/*
 * Wininet
 * French language support
 *
 * Copyright 2003 Mike McCormack for CodeWeavers
 * Copyright 2003 Vincent Béron
 * Copyright 2005 Jonathan Ernst
 * Copyright 2009-2010 Frédéric Delanoy
 *
 * 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"

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

LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL

IDD_PROXYDLG DIALOG 36, 24, 218, 150
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Entrez le mot de passe réseau"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Entrez votre nom d'utilisateur et votre mot de passe :", -1, 10, 8, 173, 12
 LTEXT "Serveur mandataire", -1, 10, 28, 50, 17
 LTEXT "Domaine", -1, 10, 50, 50, 10
 LTEXT "Utilisateur", -1, 10, 71, 50, 10
 LTEXT "Mot de passe", -1, 10, 90, 50, 10
 LTEXT "" IDC_PROXY, 58, 28, 150, 14, 0
 LTEXT "" IDC_REALM, 58, 48, 150, 14, 0
 EDITTEXT IDC_USERNAME, 58, 68, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
 EDITTEXT IDC_PASSWORD, 58, 88, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD
 CHECKBOX "&Enregistrer ce mot de passe (risqué)", IDC_SAVEPASSWORD,
           58, 108, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "OK", IDOK, 87, 128, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Annuler", IDCANCEL, 147, 128, 56, 14, WS_GROUP | WS_TABSTOP
}

IDD_AUTHDLG DIALOG 36, 24, 218, 150
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Authentification requise"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Entrez votre nom d'utilisateur et votre mot de passe :", -1, 10, 8, 173, 12
 LTEXT "Serveur", -1, 10, 28, 50, 17
 LTEXT "Domaine", -1, 10, 50, 50, 10
 LTEXT "Utilisateur", -1, 10, 71, 50, 10
 LTEXT "Mot de passe", -1, 10, 90, 50, 10
 LTEXT "" IDC_SERVER, 58, 28, 150, 14, 0
 LTEXT "" IDC_REALM, 58, 48, 150, 14, 0
 EDITTEXT IDC_USERNAME, 58, 68, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
 EDITTEXT IDC_PASSWORD, 58, 88, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD
 CHECKBOX "&Enregistrer ce mot de passe (risqué)", IDC_SAVEPASSWORD,
           58, 108, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "OK", IDOK, 87, 128, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Annuler", IDCANCEL, 147, 128, 56, 14, WS_GROUP | WS_TABSTOP
}

IDD_INVCERTDLG DIALOG 3, 24, 250, 86
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Alerte de sécurité"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Le certificat pour ce site pose problème.", -1, 40, 6, 200, 20
 LTEXT "", IDC_CERT_ERROR, 40, 26, 200, 20
 LTEXT "Voulez-vous tout de même continuer ?", -1, 40, 46, 200, 20
 PUSHBUTTON "Oui", IDOK, 40, 66, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Non", IDCANCEL, 100, 66, 56, 14, WS_GROUP | WS_TABSTOP
}

STRINGTABLE
{
  IDS_LANCONNECTION "Connexion réseau local (LAN)"
  IDS_CERT_CA_INVALID   "Le certificat est délivré par un éditeur inconnu ou non fiable."
  IDS_CERT_DATE_INVALID "La date sur le certificat est invalide."
  IDS_CERT_CN_INVALID   "Le nom sur le certificat ne correspond pas au nom du site."
  IDS_CERT_ERRORS       "Ce certificat comporte au moins un problème de sécurité indéterminé."
}
