/*
 * NET.EXE - Wine-compatible net program
 * German language support
 *
 * Copyright (C) 2008 Rico Schüller
 *
 * 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
 */

#pragma code_page(65001)

LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL

STRINGTABLE
{
    STRING_USAGE, "Die Syntax von diesem Befehl ist:\n\nNET [ HELP | START | STOP | USE ]\n"
    STRING_START_USAGE, "Gib den zu startenden Dienst an.\n"
    STRING_STOP_USAGE, "Gib den zu stoppenden Dienst an.\n"
    STRING_STOP_DEP, "Stoppe den abbhängigen Dienst: %s\n"
    STRING_CANT_STOP, "Konnte den Dienst nicht stoppen %s\n"
    STRING_NO_SCM, "Konnte den Zeiger von der Dienststeuerung nicht bekommen.\n"
    STRING_NO_SVCHANDLE, "Konnte den Zeiger zum Dienst nicht bekommen.\n"
    STRING_START_SVC, "Der %s Dienst startet.\n"
    STRING_START_SVC_SUCCESS, "Der %s Dienst wurde erfolgreich gestartet.\n"
    STRING_START_SVC_FAIL, "Der Start des %s Dienstes ist fehlgeschlagen.\n"
    STRING_STOP_SVC, "Der %s Dienst wird gestoppt.\n"
    STRING_STOP_SVC_SUCCESS, "Der %s Dienst wurde erfolgreich beendet.\n"
    STRING_STOP_SVC_FAIL, "Der %s Dienst konnte nicht beendet werden.\n"
    STRING_HELP_USAGE, "Die Syntax von diesem Befehl ist:\n\nNET HELP Befehl\n    -or-\nNET Befehl /HELP\n\n"\
                       "   Mögliche Befehle:\n   NET HELP    NET START    NET STOP    NET USE\n"
    STRING_NO_ENTRIES, "Es sind keine Einträge in der Liste.\n"
    STRING_USE_HEADER, "\nStatus  Lokal   Entfernt\n---------------------------------------------------------------\n"
    STRING_USE_ENTRY,  "%s      %S      %S      Offene Ressourcen: %lu\n"
}

#pragma code_page(default)
