/*
 * XCOPY - Wine-compatible xcopy program
 * French language support
 *
 * Copyright 2007 Jonathan Ernst
 *
 * 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 "xcopy.h"

#pragma code_page(65001)


LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL

STRINGTABLE
{
    STRING_INVPARMS, "Nombre invalide de paramètres - Utilisez xcopy /? pour obtenir de l'aide\n"
    STRING_INVPARM,  "Paramètre invalide « %s » -  Utilisez xcopy /? pour obtenir de l'aide\n"
    STRING_PAUSE,    "Appuyez sur ENTRÉE pour démarrer la copie\n"
    STRING_SIMCOPY,  "%d fichier(s) seront copiés\n"
    STRING_COPY,     "%d fichier(s) copiés\n"
    STRING_QISDIR,   "« %s » est-il un fichier ou un répertoire\n" \
                     "dans la destination ?\n" \
                     "(F - Fichier, R - Répertoire)\n"
    STRING_SRCPROMPT,"%s ? (Oui|Non)\n"
    STRING_OVERWRITE,"Écraser  %s ? (Oui|Non|Tous)\n"
    STRING_COPYFAIL, "La copie de « %s » vers « %s » a échoué avec le code de retour %d\n"
    STRING_OPENFAIL, "Impossible d'ouvrir « %s »\n"
    STRING_READFAIL, "Impossible de lire « %s »\n"
    STRING_YES_CHAR, "O"
    STRING_NO_CHAR,  "N"
    STRING_ALL_CHAR, "T"
    STRING_FILE_CHAR,"F"
    STRING_DIR_CHAR, "R"

    STRING_HELP,
"XCOPY - Copie les fichiers ou répertoires sources vers une destination\n\
\n\
Syntaxe :\n\
XCOPY source [destination] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
\t     [/R] [/H] [/C] [/P] [/A] [/M] [/E] [/D] [/Y] [/-Y]\n\
\n\
où :\n\
\n\
[/I]  Suppose que la destination est un répertoire si elle n'existe pas et que l'on copie plus\n\
\td'un fichier\n\
[/S]  Copie les répertoires et sous-répertoires\n\
[/E]  Copie les répertoires et sous-répertoires, y compris ceux qui sont vides\n\
[/Q]  Ne pas afficher la liste des fichiers copiés (mode silencieux)\n\
[/F]  Afficher les source et destination complètes lors de la copie\n\
[/L]  Simuler la copie, en montrant le nom des fichiers qui seraient copiés\n\
[/W]  Demande avant de démarrer la copie\n\
[/T]  Créer une structure de répertoires vides, mais ne pas copier les fichiers\n\
[/Y]  Ne demande pas de confirmation lors de l'écrasement des fichiers\n\
[/-Y] Demande une confirmation lors de l'écrasement des fichiers\n\
[/P]  Interroge l'utilisateur avant de copier chaque fichier source\n\
[/N]  Copie en utilisant les noms courts\n\
[/U]  Copie uniquement les fichiers qui existent déjà dans la destination\n\
[/R]  Écrase même les fichiers en lecture seule\n\
[/H]  Inclure les fichiers cachés et système dans la copie\n\
[/C]  Continue même si une erreur survient pendant la copie\n\
[/A]  Copie uniquement les fichiers qui ont l'attribut archive défini\n\
[/M]  Copie uniquement les fichiers qui ont l'attribut archive défini ; supprime\n\
\tensuite l'attribut\n\
[/D | /D:m-d-y] Copie uniquement les nouveaux fichiers, ou ceux modifiés après la date spécifiée.\n\
\t\tSi aucune date n'est spécifiée, copie uniquement lorsque le fichier de destination est plus ancien\n\
\t\tque le fichier source\n\n"

}
