/*
 * Start
 * Slovenian Language Support
 *
 * Copyright 2003, 2008 Rok Mandeljc
 *
 * 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_SLOVENIAN, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
{
STRING_USAGE,                                   "Zažene program oziroma odpre dokument v programu, ki je povezan z datotekami te vrste.\n\
Uporaba:\n\
start [možnosti] ime_programa [...]\n\
start [možnosti] ime_dokumenta\n\
\n\
Možnosti:\n\
/M[inimized] Zažene program s pomanjšanim oknom.\n\
/MAX[imized] Zažene program z razširjenim oknom.\n\
/R[estored]  Zažene program z običajno velikostjo okna.\n\
/W[ait]      Počaka, da se zagnani program zaključi, nato se zaključi in vrne izhodno kodo programa.\n\
/ProgIDOpen  Open a document using the following progID.\n\
/L           Prikaže licenčno pogodbo.\n\
\n\
start.exe različica 0.2 Copyright (C) 2003, Dan Kegel\n\
Start comes with ABSOLUTELY NO WARRANTY; for details run with /L option.\n\
This is free software, and you are welcome to redistribute it\n\
under certain conditions; run 'start /L' for details.\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\
See the COPYING.LIB file for license information.\n\
"

STRING_EXECFAIL "Programa ni mogoče zagnati ali pa z datoteko te vrste ni povezan noben program.\nUkaz ShellExecuteEx ni uspel"

STRING_UNIXFAIL "Navedenega Unix imena datoteke ni mogoče prevesti v DOS ime datoteke."
}
