/*
 * Start
 * Lithuanian Language Support
 *
 * Copyright 2009 Aurimas Fišeras <aurimas@gmail.com>
 *
 * 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"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL

STRINGTABLE DISCARDABLE
{
STRING_USAGE, "Paleisti programą ar atverti dokumentą programoje, paprastai naudojamoje failams su tuo prievardžiu.\n\
Naudojimas:\n\
start [parametrai] programos_failo_vardas [...]\n\
start [parametrai] dokumento_failo_vardas\n\
\n\
Parametrai:\n\
/M[inimized] Paleisti programą suskleistą.\n\
/MAX[imized] Paleisti programą išskleistą.\n\
/R[estored]  Paleisti programą normaliai (nei suskleistą, nei išskleistą).\n\
/W[ait]      Laukti kol paleista programa baigs darbą, tada išeiti su jos išėjimo kodu.\n\
/Unix        Naudoti Unix failo vardą ir paleisti failą kaip windows naršyklėje.\n\
/L           Parodyti galutinio naudotojo licenciją.\n\
\n\
start.exe versija 0.2 (C) 2003, Dan Kegel\n\
Start pateikiama BE JOKIŲ GARANTIJŲ; detales rasite paleidę su /L parametru.\n\
Ši programa yra laisva programinė įranga; galite ją platinti\n\
tam tikromis sąlygomis; paleiskite 'start /L' išsamiai informacijai gauti.\n\
"

STRING_LICENSE, "start.exe versija 0.2 (C) 2003, Dan Kegel\n\
Ši programa yra laisva programinė įranga; galite ją platinti ir/ar\n\
modifikuoti GNU laisvosios bendrosios viešosios licencijos (LGPL)\n\
sąlygomis, kurios paskelbtos Laisvosios programinės įrangos fondo\n\
(FSF); 2.1-osios arba (Jūsų pasirinkimu) bet kurios vėlesnės\n\
licencijos versijos sąlygomis.\n\
\n\
Ši programa yra platinama tikintis, kad ji bus naudinga, bet BE JOKIŲ\n\
GARANTIJŲ; net be numanomų PERKAMUMO ar TINKAMUMO KONKREČIAI\n\
UŽDUOČIAI garantijų. Išsamią informaciją rasite GNU laisvojoje\n\
bendrojoje viešojoje licencijoje.\n\
\n\
Jūs turėjote gauti GNU laisvosios bendrosios viešosios licencijos\n\
kopiją kartu su Wine; jei negavote, rašykite adresu\n\
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,\n\
Boston, MA 02110-1301, USA.\n\
\n\
Licencijos informaciją rasite COPYING.LIB faile.\n\
"

STRING_EXECFAIL, "Nepavyko paleisti programos arba nėra programos susietos su nurodytu failu.\nShellExecuteEx nepavyko"

STRING_UNIXFAIL "Nepavyko paversti nurodyto Unix failo pavadinimo į DOS failo pavadinimą."
}
