/*
 * Start
 * Danish Language Support
 *
 * Copyright 2010 Thomas Larsen
 *                Paul Vriens
 *
 * 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_DANISH, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE
{
STRING_USAGE,                                   "Start et program, eller åbn et dokument i programmet, der normalt anvendes til filer med den endelse.\n\
Vejledning:\n\
start [Mulighed] program_filnavn [...]\n\
start [Mulighed] dokument_filnavn\n\
\n\
Mulighed:\n\
/M[inimized] Start programmet minimeret.\n\
/MAX[imized] Start programmet maksimeret.\n\
/R[estored]  Start programmet normalt (hverken minimeret eller maksimeret).\n\
/W[ait]      Vent på startede program afslutter, afslut derefter med dets afslutnings kode.\n\
/Unix        Brug en Unix filnavn og starte filen som Windows Stifinder.\n\
/ProgIDOpen  Åbn et dokument ved hjælp af følgende progID.\n\
/L           Vis slutbrugerlicensaftalen.\n\
\n\
start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
Start leveres med ABSOLUT INGEN GARANTI, for detaljer kør med mulighed /L.\n\
Det er gratis software, og du er velkommen til at redistribuere det\n\
under visse betingelser; kør 'start /L' for yderligere oplysninger.\n\
"

STRING_LICENSE, "start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
This program is free software; you can redistribute it and/or\n\
modify it under the terms of the GNU Lesser Public License\n\
as published by the Free Software Foundation; either version 2.1\n\
of the License, or (at your option) any later version.\n\
\n\
This program is distributed in the hope that it will be useful,\n\
but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\
GNU Lesser Public License for more details.\n\
\n\
You should have received a copy of the GNU Lesser Public License\n\
along with this program; if not, write to the Free Software\n\
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.\n\
\n\
Se COPYING.LIB filen for licens information.\n\
"

STRING_EXECFAIL, "Applikationen kunne ikke starte, eller der ingen applikationer associeret med den specifikke fil.\nShellExecuteEx fejlet"

STRING_UNIXFAIL, "Kunne ikke oversætte det angivne Unix filnavn til et DOS filnavn."
}
