/*
 * WineBoot resources
 *
 * Copyright 2007 Jonathan Ernst
 * Copyright 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_ENDTASK DIALOG  0, 0, 186, 79
STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Attente du programme"
FONT 8, "MS Shell Dlg"
BEGIN
    DEFPUSHBUTTON   "Annuler",IDCANCEL,129,58,50,15
    PUSHBUTTON      "Arrêter le programme",IDOK,49,58,76,15
    LTEXT           "Une simulation de déconnexion ou d'extinction de l'ordinateur est en cours, mais ce programme ne répond pas.",
                    IDC_STATIC,7,7,172,25
    LTEXT           "Si vous l'arrêtez, vous pouvez perdre toutes les données non enregistrées.",
                    IDC_STATIC,7,35,172,17
END

IDD_WAITDLG DIALOG 0, 0, 200, 50
STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_DISABLED
CAPTION "Wine"
FONT 8, "MS Shell Dlg"
BEGIN
    ICON "", IDC_WAITICON, 3, 3, 10, 10
    LTEXT "La configuration de Wine est en cours de mise à jour dans %s ; veuillez patienter...",
          IDC_WAITTEXT, 40, 5, 150, 40, SS_NOPREFIX
END
