/*
 * Task termination utility
 * French language support
 *
 * 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 "taskkill.h"

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

LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL

STRINGTABLE
{
    STRING_USAGE, "Usage : taskkill [/?] [/f] [/im NomProcessus | /pid IdProcessus]\n"
    STRING_INVALID_OPTION, "Erreur : option de ligne de commande inconnue ou invalide.\n"
    STRING_INVALID_PARAM, "Erreur : paramètre de ligne de commande invalide.\n"
    STRING_MISSING_OPTION, "Erreur : une des options /im ou /pid doit être spécifiée.\n"
    STRING_MISSING_PARAM, "Erreur : l'option %s requiert un paramètre de ligne de commande.\n"
    STRING_MUTUAL_EXCLUSIVE, "Erreur : les options /im et /pid sont incompatibles.\n"
    STRING_CLOSE_PID_SEARCH, "Message de fermeture envoyé aux fenêtres supérieures du processus de PID %u.\n"
    STRING_CLOSE_PROC_SRCH, "Message de fermeture envoyé aux fenêtres supérieures du processus \"%s\" de PID %u.\n"
    STRING_TERM_PID_SEARCH, "Le processus de PID %u a été terminé brutalement.\n"
    STRING_TERM_PROC_SEARCH, "Le processus \"%s\" de PID %u a été terminé brutalement.\n"
    STRING_SEARCH_FAILED, "Erreur : processus \"%s\" introuvable.\n"
    STRING_ENUM_FAILED, "Erreur : impossible d'énumérer la liste de processus.\n"
    STRING_TERMINATE_FAILED, "Erreur : impossible de terminer le processus \"%s\".\n"
    STRING_SELF_TERMINATION, "Erreur : un processus ne peut pas s'auto-terminer.\n"
}
