/*
 * oledlg dll resources
 * French language support
 *
 * Copyright (C) 2005-2006 Jonathan Ernst
 * Copyright (C) 2009 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

UIINSERTOBJECT DIALOG DISCARDABLE  0, 0, 308, 151
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Insérer objet"
FONT 8, "MS Shell Dlg"
BEGIN
    LISTBOX         IDC_OBJTYPELIST,94,19,131,66,LBS_SORT |
                    LBS_NOINTEGRALHEIGHT | WS_VISIBLE | WS_VSCROLL |
                    WS_TABSTOP
    LTEXT           "Type d'objet :",IDC_OBJTYPELBL,94,7,53,8,WS_VISIBLE
    DEFPUSHBUTTON   "OK",IDOK,233,7,65,14
    PUSHBUTTON      "Annuler",IDCANCEL,233,24,65,14
    GROUPBOX        "Résultat",IDC_RESULT,7,103,218,41
    CONTROL         "Créer nouveau",IDC_CREATENEW,"Button",BS_AUTORADIOBUTTON |
                    WS_GROUP,7,20,62,10
    CONTROL         "Créer un contrôle",IDC_CREATECONTROL,"Button",
                    BS_AUTORADIOBUTTON | NOT WS_VISIBLE,7,54,72,10
    CONTROL         "Créer depuis le fichier",IDC_CREATEFROMFILE,"Button",
                    BS_AUTORADIOBUTTON,7,37,82,10
    LTEXT           "",IDC_RESULTDESC,47,112,173,25
    PUSHBUTTON      "&Ajouter un contrôle...",IDC_ADDCONTROL,94,88,80,14,NOT WS_VISIBLE
    CONTROL         "Afficher comme une icône",IDC_ASICON,"Button",BS_AUTOCHECKBOX |
                    BS_MULTILINE | WS_TABSTOP | NOT WS_VISIBLE,234,51,61,35
    PUSHBUTTON      "Parcourir...",IDC_BROWSE,96,53,50,14,NOT WS_VISIBLE
    LTEXT           "Fichier :",IDC_FILELBL,96,27,27,8, NOT WS_VISIBLE
    EDITTEXT        IDC_FILE,95,37,129,13,ES_AUTOHSCROLL | NOT WS_VISIBLE
END

STRINGTABLE DISCARDABLE
{
  IDS_RESULTOBJDESC	"Insérer un nouvel object %s dans votre document"
  IDS_RESULTFILEOBJDESC	"Insère le contenu du fichier comme un objet dans votre document afin que vous puissiez l'activer en utilisant le programme avec lequel il a été créé."
  IDS_BROWSE            "Parcourir"
  IDS_NOTOLEMOD         "Le fichier ne semble pas être un module OLE valide. Impossible d'enregistrer le contrôle OLE."
  IDS_NOTOLEMODCAPTION  "Ajouter un contrôle"
}

IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 308, 140
STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Collage spécial"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT         "Source :", -1, 6, 9, 30, 8, WS_VISIBLE | WS_GROUP
    CONTROL       "C&oller", IDC_PS_PASTE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE,
                  6, 38, 55, 10
    CONTROL       "Coller le &lien", IDC_PS_PASTELINK, "Button", BS_AUTORADIOBUTTON | WS_VISIBLE,
                  6, 63, 55, 10
    LTEXT         "&Comme :", -1, 65, 25, 31, 8, WS_VISIBLE | WS_GROUP
    LISTBOX       IDC_PS_PASTELIST,     65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
    LISTBOX       IDC_PS_PASTELINKLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
    LISTBOX       IDC_PS_DISPLAYLIST,   65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | WS_VISIBLE
    CONTROL       "OK", IDOK, "Button", BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE, 228, 6, 66, 14
    CONTROL       "Annuler", IDCANCEL, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 228, 23, 66, 14
    CONTROL       "Aid&e", IDC_OLEUIHELP, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 228, 42, 66, 14
    CONTROL       "&Afficher comme une icône", IDC_PS_DISPLAYASICON, "Button", BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP | WS_VISIBLE, 228, 63, 66, 14
    CONTROL       "", IDC_PS_ICONDISPLAY, "Static", SS_ICON | WS_VISIBLE, 224, 84, 21, 20
    CONTROL       "Changer l'&icône...", IDC_PS_CHANGEICON, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 123, 66, 14
    CONTROL       "", IDC_PS_RESULTIMAGE, "Static", SS_ICON | WS_VISIBLE, 12, 103, 21, 20
    CONTROL       "<< le résultat vient ici >>", IDC_PS_RESULTTEXT, "Static", SS_NOPREFIX | WS_VISIBLE, 53, 99, 161, 35
    CONTROL       "Résultat", -1, "Button", BS_GROUPBOX | WS_GROUP | WS_VISIBLE, 6, 90, 212, 48
    CONTROL       "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8
END

STRINGTABLE DISCARDABLE
{
    IDS_PS_PASTE_DATA                     "Insère le contenu du presse-papiers dans votre document comme %s."
    IDS_PS_PASTE_OBJECT                   "Insère le contenu du presse-papiers dans votre document de sorte que vous puissiez l'activer en utilisant %s."
    IDS_PS_PASTE_OBJECT_AS_ICON           "Insère le contenu du presse-papiers dans votre document de sorte que vous puissiez l'activer en utilisant %s. Il sera affiché comme une icône."
    IDS_PS_PASTE_LINK_DATA                "Insère le contenu du presse-papiers dans votre document comme %s. Les données sont liées au fichier source de sorte que les modifications de celles-ci seront répercutées dans votre document."
    IDS_PS_PASTE_LINK_OBJECT              "Insère une image du contenu du presse-papiers dans votre document. L'image est liée au fichier source de sorte que les modifications de celui-ci seront répercutées dans votre document."
    IDS_PS_PASTE_LINK_OBJECT_AS_ICON      "Insère un raccourci qui pointe vers l'emplacement du contenu du presse-papiers. Le raccourci est lié au fichier source de sorte que les modifications de celui-ci seront répercutées dans votre document."
    IDS_PS_NON_OLE                        "Insère le contenu du presse-papiers dans votre document."
    IDS_PS_UNKNOWN_TYPE                   "Type inconnu"
    IDS_PS_UNKNOWN_SRC                    "Source inconnue"
    IDS_PS_UNKNOWN_APP                    "le programme avec lequel il a été créé"
}
