/*
 * NET.EXE - Wine-compatible net program
 * Italian language support
 *
 * Copyright (C) 2010 Luca Bennati
 *
 * 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"

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

LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL

STRINGTABLE
{
    STRING_USAGE, "La sintassi di questo comando è:\n\nNET [ HELP | START | STOP | USE ]\n"
    STRING_START_USAGE, "Specificare il nome del servizio da avviare.\n"
    STRING_STOP_USAGE, "Specificare il nome del servizio da fermare.\n"
    STRING_STOP_DEP, "Fermando il servizio dipendente: %s\n"
    STRING_CANT_STOP, "Impossibile fermare il servizio %s\n"
    STRING_NO_SCM, "Impossibile ottenere l'handle del gestore del controllo del servizio.\n"
    STRING_NO_SVCHANDLE, "Impossibile ottenere l'handle del servizio.\n"
    STRING_START_SVC, "Il servizio %s sarà avviato.\n"
    STRING_START_SVC_SUCCESS, "Il servizio %s è stato avviato con successo.\n"
    STRING_START_SVC_FAIL, "Impossibile avviare il servizio %s.\n"
    STRING_STOP_SVC, "Il servizio %s sarà fermato.\n"
    STRING_STOP_SVC_SUCCESS, "Il servizio %s è stato fermato con successo.\n"
    STRING_STOP_SVC_FAIL, "Impossibile fermare il servizio %s.\n"
    STRING_HELP_USAGE, "La sintassi di questo comando è:\n\nNET HELP comando\n    -o-\nNET comando /HELP\n\n"\
                       "   Comandi disponibili:\n   NET HELP    NET START    NET STOP    NET USE\n"
    STRING_NO_ENTRIES, "Non ci sono elementi nella lista.\n"
    STRING_USE_HEADER, "\nStato  Locale   Remoto\n---------------------------------------------------------------\n"
    STRING_USE_ENTRY,  "%s      %S      %S      Risorse aperte: %lu\n"
}
