/*
 * 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
{
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."
}
