/*
 * 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 "shresdef.h"

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

LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL

MENU_001 MENU DISCARDABLE
BEGIN
	MENUITEM "&Didelės piktogramos",	FCIDM_SHVIEW_BIGICON
	MENUITEM "&Mažos piktogramos",	FCIDM_SHVIEW_SMALLICON
	MENUITEM "&Sąrašas",			FCIDM_SHVIEW_LISTVIEW
	MENUITEM "&Išsamus",			FCIDM_SHVIEW_REPORTVIEW
END

/*
 shellview background menu
*/
MENU_002 MENU DISCARDABLE
BEGIN
	POPUP ""
	BEGIN
	  POPUP "&Rodymas"
	  BEGIN
	    MENUITEM "&Didelės piktogramos",	FCIDM_SHVIEW_BIGICON
	    MENUITEM "&Mažos piktogramos",		FCIDM_SHVIEW_SMALLICON
	    MENUITEM "&Sąrašas",				FCIDM_SHVIEW_LISTVIEW
	    MENUITEM "&Išsamus",				FCIDM_SHVIEW_REPORTVIEW
	  END
	  MENUITEM SEPARATOR
	  POPUP "Išdėstyti &piktogramas"
	  BEGIN
	    MENUITEM "Pagal &vardą",	0x30	/* column 0 */
	    MENUITEM "Pagal &tipą",		0x32	/* column 2 */
	    MENUITEM "Pagal d&ydį",		0x31	/* ... */
	    MENUITEM "Pagal &datą",		0x33
	    MENUITEM SEPARATOR
	    MENUITEM "&Automatiškai išdėstyti",	FCIDM_SHVIEW_AUTOARRANGE
	  END
	  MENUITEM "Sulygiuoti piktogramas",	FCIDM_SHVIEW_SNAPTOGRID
	  MENUITEM SEPARATOR
	  MENUITEM "Atnaujinti",		FCIDM_SHVIEW_REFRESH
	  MENUITEM SEPARATOR
	  MENUITEM "Įdėti",		FCIDM_SHVIEW_INSERT
	  MENUITEM "Įdėti kaip nuorodą",	FCIDM_SHVIEW_INSERTLINK
	  MENUITEM SEPARATOR
	  POPUP "Naujas"
	  BEGIN
	    MENUITEM "Naujas &aplankas",	FCIDM_SHVIEW_NEWFOLDER
	    MENUITEM "Nauja &nuoroda",	FCIDM_SHVIEW_NEWLINK
	    MENUITEM SEPARATOR
	  END
	  MENUITEM SEPARATOR
	  MENUITEM "Savybės",	FCIDM_SHVIEW_PROPERTIES
	END
END

/*
 shellview item menu
*/
MENU_SHV_FILE MENU DISCARDABLE
BEGIN
	POPUP ""
	BEGIN
	  MENUITEM "Iš&rinkti"		FCIDM_SHVIEW_OPEN
	  MENUITEM "Naršy&ti",		FCIDM_SHVIEW_EXPLORE
	  MENUITEM "&Atverti",		FCIDM_SHVIEW_OPEN
	  MENUITEM SEPARATOR
	  MENUITEM "&Iškirpti",		FCIDM_SHVIEW_CUT
	  MENUITEM "&Kopijuoti",		FCIDM_SHVIEW_COPY
	  MENUITEM SEPARATOR
	  MENUITEM "Sukurti &nuorodą",	FCIDM_SHVIEW_CREATELINK
	  MENUITEM "&Šalinti",		FCIDM_SHVIEW_DELETE
	  MENUITEM "&Pervadinti",		FCIDM_SHVIEW_RENAME
	  MENUITEM SEPARATOR
	  MENUITEM "&Savybės",	FCIDM_SHVIEW_PROPERTIES
	END
END

MENU_CPANEL MENU
BEGIN
    POPUP "&Failas"
    BEGIN
        MENUITEM SEPARATOR
        MENUITEM "&Išeiti", IDM_CPANEL_EXIT
    END

    POPUP "&Rodymas"
    BEGIN
        MENUITEM "&Didelės piktogramos", FCIDM_SHVIEW_BIGICON
        MENUITEM "&Mažos piktogramos", FCIDM_SHVIEW_SMALLICON
        MENUITEM "&Sąrašas", FCIDM_SHVIEW_LISTVIEW
        MENUITEM "&Išsamus", FCIDM_SHVIEW_REPORTVIEW
    END

    POPUP "&Žinynas"
    BEGIN
        MENUITEM "&Apie valdymo skydelį...", IDM_CPANEL_ABOUT
    END
END

SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Parinkti aplanką"
FONT 8, "MS Shell Dlg"
{
 DEFPUSHBUTTON "Gerai", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "Atsisakyti", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP
 LTEXT "", IDD_TITLE, 4, 4, 180, 12
 LTEXT "", IDD_STATUS, 4, 25, 180, 12
 CONTROL "", IDD_TREEVIEW, "SysTreeView32",
	TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
	WS_BORDER | WS_TABSTOP,
	4, 40, 180, 120
}

SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Parinkti aplanką"
FONT 8, "MS Shell Dlg"
{
 LTEXT "", IDD_TITLE, 10, 8, 198, 24
 LTEXT "", IDD_STATUS, 10, 25, 198, 12
 LTEXT "Aplankas:", IDD_FOLDER, 10, 156, 40, 12
 CONTROL "", IDD_TREEVIEW, "SysTreeView32",
	TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
	WS_BORDER | WS_TABSTOP,
	12, 38, 194, 105
 EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "&Kurti naują aplanką", IDD_MAKENEWFOLDER, 12, 174, 70, 14, WS_GROUP | WS_TABSTOP
 DEFPUSHBUTTON "Gerai", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "Atsisakyti", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP
}

SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Pranešimas"
FONT 8, "MS Shell Dlg"
{
    DEFPUSHBUTTON "&Taip", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "Taip &visiems", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "&Ne", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "&Atsisakyti", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP
    ICON "", IDD_ICON, 10, 10, 16, 16
    LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0
}

SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 220, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Apie %s"
FONT 10, "MS Shell Dlg"
{
 DEFPUSHBUTTON "Gerai", IDOK, 153, 133, 60, 12, WS_TABSTOP
 PUSHBUTTON "Wine &licencija...", IDC_ABOUT_LICENSE, 153, 113, 60, 12, WS_TABSTOP
 LISTBOX IDC_ABOUT_LISTBOX, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
 ICON "", stc1, 10, 10, 30, 30
 LTEXT "", IDC_ABOUT_STATIC_TEXT1, 42, 10, 170, 10
 LTEXT "", IDC_ABOUT_STATIC_TEXT2, 42, 22, 170, 10
 LTEXT "Paleista su %s", IDC_ABOUT_STATIC_TEXT3, 42, 34, 170, 10
 LTEXT "Prie Wine kūrimo prisidėjo:", IDC_ABOUT_WINE_TEXT, 8, 54, 204, 10
}

SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION ""
FONT 8, "MS Shell Dlg"
{
 ICON "", IDC_RUNDLG_ICON, 7, 11, 18, 20, WS_VISIBLE
 LTEXT "Įrašykite programos pavadinimą, aplanką, dokumentą ar interneto resursą ir Wine jums jį atvers.", IDC_RUNDLG_DESCRIPTION, 36, 11, 182, 18
 LTEXT "&Atverti:", IDC_RUNDLG_LABEL, 7, 39, 24, 10
 CONTROL "", IDC_RUNDLG_EDITPATH, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
 DEFPUSHBUTTON "Gerai", IDOK, 62, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "Atsisakyti", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "&Parinkti...", IDC_RUNDLG_BROWSE, 170, 63, 50, 14, WS_TABSTOP
}

STRINGTABLE
{
        /* columns in the shellview */
	IDS_SHV_COLUMN1		"Failas"
	IDS_SHV_COLUMN2		"Dydis"
	IDS_SHV_COLUMN3		"Tipas"
	IDS_SHV_COLUMN4		"Modifikuotas"
	IDS_SHV_COLUMN5		"Atributai"
	IDS_SHV_COLUMN6		"Dydis"
	IDS_SHV_COLUMN7		"Prieinamas dydis"
	IDS_SHV_COLUMN8		"Vardas"
	IDS_SHV_COLUMN9		"Komentarai"
	IDS_SHV_COLUMN10	"Savininkas"
	IDS_SHV_COLUMN11	"Grupė"
	IDS_SHV_COLUMN_DELFROM	"Originali vieta"
	IDS_SHV_COLUMN_DELDATE	"Pašalinimo data"

        /* special folders */
	IDS_DESKTOP		"Darbalaukis"
	IDS_MYCOMPUTER		"Kompiuteris"
	IDS_RECYCLEBIN_FOLDER_NAME      "Šiukšlinė"
	IDS_CONTROLPANEL	"Valdymo skydelis"

        /* context menus */
	IDS_VIEW_LARGE		"&Didelės piktogramos"
	IDS_VIEW_SMALL		"&Mažos piktogramos"
	IDS_VIEW_LIST		"&Sąrašas"
	IDS_VIEW_DETAILS	"&Išsamus"
	IDS_SELECT		"Iš&rinkti"
	IDS_OPEN		"&Atverti"

	IDS_CREATEFOLDER_DENIED "Nepavyko sukurti naujo aplanko: neužtenka teisių."
	IDS_CREATEFOLDER_CAPTION "Klaida kuriant naują aplanką"
	IDS_DELETEITEM_CAPTION "Patvirtinti failo šalinimą"
	IDS_DELETEFOLDER_CAPTION "Patvirtinti aplanko šalinimą"
	IDS_DELETEITEM_TEXT "Ar tikrai norite pašalinti '%1'?"
	IDS_DELETEMULTIPLE_TEXT "Ar tikrai norite pašalinti šiuos %1 elementus?"
	IDS_DELETESELECTED_TEXT "Ar tikrai norite pašalinti išrinktus elementus?"
	IDS_TRASHITEM_TEXT "Ar tikrai norite perkelti '%1' į šiukšlinę?"
	IDS_TRASHFOLDER_TEXT "Ar tikrai norite perkelti '%1' ir jo turinį į šiukšlinę?"
	IDS_TRASHMULTIPLE_TEXT "Ar tikrai norite perkelti šiuos %1 elementus į šiukšlinę?"
	IDS_CANTTRASH_TEXT "Šis elementas '%1' negali būti perkeltas į šiukšlinę. Ar norite jį pašalinti vietoj šiukšlinės?"
	IDS_OVERWRITEFILE_TEXT "Šis aplankas jau turi failą vardu '%1'.\n\nAr norite jį pakeisti?"
	IDS_OVERWRITEFILE_CAPTION "Patvirtinti failo perrašymą"
	IDS_OVERWRITEFOLDER_TEXT "Šis aplankas jau turi aplanką vardu '%1'.\n\n"\
	    "Jei failai paskirties aplanke yra pavadinti tais pačiais vardais kaip ir failai\n"\
	    "išrinktame aplanke, tai jie bus pakeisti. Ar vis dar norite perkelti ar kopijuoti\n"\
	    "šį aplanką?"

        /* message box strings */
        IDS_RESTART_TITLE       "Paleisti iš naujo"
        IDS_RESTART_PROMPT      "Ar norite simuliuoti Windows paleidimą iš naujo?"
        IDS_SHUTDOWN_TITLE      "Stabdyti"
        IDS_SHUTDOWN_PROMPT     "Ar norite sustabdyti šią Wine sesiją?"

        /* Run File dialog */
        IDS_RUNDLG_ERROR           "Nepavyko parodyti failo paleidimo dialogo lango (vidinė klaida)"
        IDS_RUNDLG_BROWSE_ERROR    "Nepavyko parodyti parinkimo dialogo lango (vidinė klaida)"
        IDS_RUNDLG_BROWSE_CAPTION  "Parinkti"
        IDS_RUNDLG_BROWSE_FILTER   "Vykdomieji failai\0*.exe\0Visi failai\0*.*\0\0"

        /* shell folder path default values */
	IDS_PROGRAMS                "Pradžios meniu\\Programos"
	IDS_PERSONAL                "Dokumentai"
	IDS_FAVORITES               "Adresynas"
	IDS_STARTUP                 "Pradžios meniu\\Programos\\Paleidimas"
	IDS_RECENT                  "Paskiausi"
	IDS_SENDTO                  "Siųsti"
	IDS_STARTMENU               "Pradžios meniu"
	IDS_MYMUSIC                 "Muzika"
	IDS_MYVIDEO                 "Vaizdai"
	IDS_DESKTOPDIRECTORY        "Darbalaukis"
	IDS_NETHOOD                 "Tinkle"
	IDS_TEMPLATES               "Šablonai"
	IDS_APPDATA                 "Programų duomenys"
	IDS_PRINTHOOD               "Spausdintuvai"
	IDS_LOCAL_APPDATA           "Vietinės nuostatos\\Programų duomenys"
	IDS_INTERNET_CACHE          "Vietinės nuostatos\\Laikini interneto failai"
	IDS_COOKIES                 "Slapukai"
	IDS_HISTORY                 "Vietinės nuostatos\\Istorija"
	IDS_PROGRAM_FILES           "Programų failai"
	IDS_MYPICTURES              "Paveikslai"
	IDS_PROGRAM_FILES_COMMON    "Programų failai\\Bendrieji failai"
	IDS_COMMON_DOCUMENTS        "Dokumentai"
	IDS_ADMINTOOLS              "Pradžios meniu\\Programos\\Administravimo įrankiai"
	IDS_COMMON_MUSIC            "Dokumentai\\Muzika"
	IDS_COMMON_PICTURES         "Dokumentai\\Paveikslai"
	IDS_COMMON_VIDEO            "Dokumentai\\Vaizdai"
	IDS_CDBURN_AREA             "Vietinės nuostatos\\Programų duomenys\\Microsoft\\CD rašymas"

	IDS_NEWFOLDER		"Naujas aplankas"

	IDS_CPANEL_TITLE            "Wine valdymo skydelis"
	IDS_CPANEL_NAME             "Pavadinimas"
	IDS_CPANEL_DESCRIPTION      "Aprašas"

	IDS_SHLEXEC_NOASSOC         "Jokia Windows programa nėra sukonfigūruota atidaryti šio tipo failų."
}

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