/*
 * XCOPY - Wine-compatible xcopy program
 * Slovenian language support
 *
 * Copyright (C) 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
 */

#pragma code_page(65001)

LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT

STRINGTABLE
{
    STRING_INVPARMS, "Neveljavno število parametrov - za pomoč uporabite xcopy /?\n"
    STRING_INVPARM,  "Neveljaven parameter '%s' -  za pomoč uporabite xcopy /?\n"
    STRING_PAUSE,    "Za začetek kopiranja pritisnite <enter>\n"
    STRING_SIMCOPY,  "Prekopiral bom %d datotek\n"
    STRING_COPY,     "Prekopiral sem %d datotek\n"
    STRING_QISDIR,   "Ali je '%s' ime ciljne datoteke \n" \
                     "ali mape?\n" \
                     "(D - Datoteka, M - Mapa)\n"
    STRING_SRCPROMPT,"%s? (Da|Ne)\n"
    STRING_OVERWRITE,"Ali naj prepišem %s? (Da|Ne|Vse)\n"
    STRING_COPYFAIL, "Kopiranje '%s' v '%s' ni uspelo (koda napake: %d)\n"
    STRING_OPENFAIL, "Napaka pri odpiranju '%s'\n"
    STRING_READFAIL, "Napaka pri branju '%s'\n"
    STRING_YES_CHAR, "D"
    STRING_NO_CHAR,  "N"
    STRING_ALL_CHAR, "V"
    STRING_FILE_CHAR,"D"
    STRING_DIR_CHAR, "M"

    STRING_HELP,
"XCOPY - kopira navedene izvorne datoteke oz. mape v naveden cilj\n\
\n\
Sintaksa:\n\
XCOPY izvor [cilj] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U] \n\
\t     [/R] [/H] [/C] [/P] [/A] [/M] [/E] [/D] [/Y] [/-Y]\n\
\n\
Where:\n\
\n\
[/I]  Če cilj ne obstaja in gre za kopiranje dveh ali več datotek, predpostavi, \n\
\da je cilj mapa\n\
[/S]  Kopiraj mape in podmape\n\
[/E]  Kopiraj mape in podmape, vključno s praznimi mapami\n\
[/Q]  Ne izpisuj imen med kopiranjem (tiho).\n\
[/F]  Med kopiranjem izpiši polno izvorno in ciljno pot\n\
[/L]  Simuliraj operacijo; prikaži imena datotek, ki bi jih kopiral\n\
[/W]  Vključi poziv pred začetkom kopiranja\n\
[/T]  Ustvari mape, vendar ne kopiraj datotek\n\
[/Y]  Onemogoči poziv ob prepisovanju datotek\n\
[/-Y] Omogoči poziv ob prepisovanju datotek\n\
[/P]  Poziv pred kopiranjem vsake datoteke\n\
[/N]  Pri kopiranju uporabi kratka imena\n\
[/U]  Kopiraj samo datoteke, ki že obstajajo na cilju\n\
[/R]  Prepiši datoteke, ki so označene samo za branje\n\
[/H]  V kopiranje vključu tudi skrite in sistemske datoteke\n\
[/C]  Nadaljuj tudi, če pride do napake med kopiranjem\n\
[/A]  Kopiraj samo datoteke, ki imajo atribut arhiva\n\
[/M]  Kopiraj samo datoteke, ki imajo atribut arhiva ter odstrani atribut\n\
\tarhiva\n\
[/D | /D:m-d-y] Kopiraj datoteke, ustvarjene ali spremenjene po navedenem datumu.\n\
\t\tČe datum ni podan, gre za kopiranje datotek, katerih obstoječi cilj je\n\
\t\tod izvora\n\n"

}

#pragma code_page(default)
