/*
 * Task termination utility
 * Swedish language support
 *
 * Copyright 2010 Anders Jonsson
 *
 * 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"

#pragma code_page(65001)

LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL

STRINGTABLE
{
    STRING_USAGE, "Användning: taskkill [/?] [/f] [/im Processnamn | /pid Process-ID]\n"
    STRING_INVALID_OPTION, "Fel: Okänt eller ogiltigt kommandoradsval angavs.\n"
    STRING_INVALID_PARAM, "Fel: Ogiltig kommandoradsparameter angavs.\n"
    STRING_MISSING_OPTION, "Fel: Ett av valen /im eller /pid måste anges.\n"
    STRING_MISSING_PARAM, "Fel: Valet %s kräver en kommandoradsparameter.\n"
    STRING_MUTUAL_EXCLUSIVE, "Fel: Valen /im och /pid kan inte användas tillsammans.\n"
    STRING_CLOSE_PID_SEARCH, "Stängningsmeddelande sänt till toppnivåfönster för processen med PID %u.\n"
    STRING_CLOSE_PROC_SRCH, "Stängningsmeddelande sänt till toppnivåfönster för processen \"%s\" med PID %u.\n"
    STRING_TERM_PID_SEARCH, "Tvingade fram nedstängning av processen med PID %u.\n"
    STRING_TERM_PROC_SEARCH, "Tvingade fram nedstängning av processen \"%s\" med PID %u.\n"
    STRING_SEARCH_FAILED, "Fel: Kunde inte hitta processen \"%s\".\n"
    STRING_ENUM_FAILED, "Fel: Kunde inte räkna upp processlistan.\n"
    STRING_TERMINATE_FAILED, "Fel: Kunde inte avbryta processen \"%s\".\n"
}
