/*
 * NET.EXE - Wine-compatible net 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 "resources.h"

#pragma code_page(65001)

LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL

STRINGTABLE
{
    STRING_USAGE, "La syntaxe de cette commande est :\n\nNET [ HELP | START | STOP | USE ]\n"
    STRING_START_USAGE, "Spécifie le service à démarrer.\n"
    STRING_STOP_USAGE, "Spécifie le service à arrêter.\n"
    STRING_STOP_DEP, "Arrêt du service dépendant : %s\n"
    STRING_CANT_STOP, "Impossible d'arrêter le service %s\n"
    STRING_NO_SCM, "Impossible d'obtenir le gestionnaire de contrôle de service.\n"
    STRING_NO_SVCHANDLE, "Impossible d'obtenir le service.\n"
    STRING_START_SVC, "Le service %s démarre.\n"
    STRING_START_SVC_SUCCESS, "Le service %s a démarré avec succès.\n"
    STRING_START_SVC_FAIL, "Le service %s n'a pas pu être démarré.\n"
    STRING_STOP_SVC, "Le service %s est en train d'être arrêté.\n"
    STRING_STOP_SVC_SUCCESS, "Le service %s a été arrêté avec succès.\n"
    STRING_STOP_SVC_FAIL, "Le service %s n'a pas pu être arrêté.\n"
    STRING_HELP_USAGE, "La syntaxe de cette commande est :\n\nNET HELP commande\n    -ou-\nNET commande /HELP\n\n   Les commandes disponibles sont :\n   NET HELP    NET START    NET STOP    NET USE\n"
    STRING_NO_ENTRIES, "Il n'y a pas d'entrées dans la liste.\n"
    STRING_USE_HEADER, "\nStatut    Local   Distant\n---------------------------------------------------------------\n"
    STRING_USE_ENTRY, "%s      %S      %S      Ressources ouvertes : %lu\n"
}
