/*
 * Copyright 2002, 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
 */

#pragma code_page(65001)

LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT

MENU_001 MENU DISCARDABLE
BEGIN
	MENUITEM "Ve&like ikone",	FCIDM_SHVIEW_BIGICON
	MENUITEM "&Male ikone",	FCIDM_SHVIEW_SMALLICON
	MENUITEM "&Seznam",		FCIDM_SHVIEW_LISTVIEW
	MENUITEM "Po&drobnosti",		FCIDM_SHVIEW_REPORTVIEW
END

/*
 shellview background menu
*/
MENU_002 MENU DISCARDABLE
BEGIN
	POPUP ""
	BEGIN
	  POPUP "&Pogled"
	  BEGIN
	    MENUITEM "Ve&like ikone",	FCIDM_SHVIEW_BIGICON
	    MENUITEM "&Male ikone",	FCIDM_SHVIEW_SMALLICON
	    MENUITEM "&Seznam",		FCIDM_SHVIEW_LISTVIEW
	    MENUITEM "Po&drobnosti",	FCIDM_SHVIEW_REPORTVIEW
	  END
	  MENUITEM SEPARATOR
	  POPUP "Razvrsti &ikone"
	  BEGIN
	    MENUITEM "Po &imenu",	0x30	/* column 0 */
	    MENUITEM "Po &vrsti",	0x32	/* column 2 */
	    MENUITEM "Po &velikosti",	0x31	/* ... */
	    MENUITEM "Po &datumu",	0x33
	    MENUITEM SEPARATOR
	    MENUITEM "&Samodejno",	FCIDM_SHVIEW_AUTOARRANGE
	  END
	  MENUITEM "Poravnaj ikone",	FCIDM_SHVIEW_SNAPTOGRID
	  MENUITEM SEPARATOR
	  MENUITEM "Osveži",		FCIDM_SHVIEW_REFRESH
	  MENUITEM SEPARATOR
	  MENUITEM "Prilepi",		FCIDM_SHVIEW_INSERT
	  MENUITEM "Prilepi kot povezavo",	FCIDM_SHVIEW_INSERTLINK
	  MENUITEM SEPARATOR
	  POPUP "Nova"
	  BEGIN
	    MENUITEM "Nova &mapa",	FCIDM_SHVIEW_NEWFOLDER
	    MENUITEM "Nova &povezava",	FCIDM_SHVIEW_NEWLINK
	    MENUITEM SEPARATOR
	  END
	  MENUITEM SEPARATOR
	  MENUITEM "Lastnosti",	FCIDM_SHVIEW_PROPERTIES
	END
END

/*
 shellview item menu
*/
MENU_SHV_FILE MENU DISCARDABLE
BEGIN
	POPUP ""
	BEGIN
	  MENUITEM "&Izberi"		FCIDM_SHVIEW_OPEN
	  MENUITEM "R&azišči",		FCIDM_SHVIEW_EXPLORE
	  MENUITEM "&Odpri",		FCIDM_SHVIEW_OPEN
	  MENUITEM SEPARATOR
	  MENUITEM "I&zreži",		FCIDM_SHVIEW_CUT
	  MENUITEM "&Kopiraj",		FCIDM_SHVIEW_COPY
	  MENUITEM SEPARATOR
	  MENUITEM "Ustvari po&vezavo",	FCIDM_SHVIEW_CREATELINK
	  MENUITEM "Iz&briši",		FCIDM_SHVIEW_DELETE
	  MENUITEM "P&reimenuj",		FCIDM_SHVIEW_RENAME
	  MENUITEM SEPARATOR
	  MENUITEM "&Lastnosti",	FCIDM_SHVIEW_PROPERTIES
	END
END

MENU_CPANEL MENU
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM SEPARATOR
        MENUITEM "E&xit", IDM_CPANEL_EXIT
    END

    POPUP "&View"
    BEGIN
        MENUITEM "Ve&like ikone", FCIDM_SHVIEW_BIGICON
        MENUITEM "&Male ikone", FCIDM_SHVIEW_SMALLICON
        MENUITEM "&Seznam", FCIDM_SHVIEW_LISTVIEW
        MENUITEM "Po&drobnosti", FCIDM_SHVIEW_REPORTVIEW
    END

    POPUP "&Help"
    BEGIN
        MENUITEM "&About Control Panel...", 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 "Brskanje po mapah"
FONT 8, "MS Shell Dlg"
{
 DEFPUSHBUTTON "V redu", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "Prekliči", 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 "Brskanje po mapah"
FONT 8, "MS Shell Dlg"
{
 LTEXT "", IDD_TITLE, 10, 8, 198, 24
 LTEXT "", IDD_STATUS, 10, 25, 198, 12
 LTEXT "Mapa:", 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 "Ustvari &novo mapo", IDD_MAKENEWFOLDER, 12, 174, 70, 14, WS_GROUP | WS_TABSTOP
 DEFPUSHBUTTON "V redu", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "Prekliči", 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 "Sporočilo"
FONT 8, "MS Shell Dlg"
{
    DEFPUSHBUTTON "&Da", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "Da za &vse", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "&Ne", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "&Prekliči", 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 "O %s"
FONT 10, "MS Shell Dlg"
{
 DEFPUSHBUTTON "V redu", IDOK, 153, 133, 60, 12, WS_TABSTOP
 PUSHBUTTON "&Licenčna pog.", 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 "Različica Wine: %s", IDC_ABOUT_STATIC_TEXT3, 42, 34, 170, 10
 LTEXT "Wine smo ustvarili:", 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 "", 12297, 7, 11, 18, 20, WS_VISIBLE
 LTEXT "Vnesite ime programa, mape, dokumenta ali spletne strani, in Wine ga (jo) bo odprl.", 12289, 36, 11, 182, 18
 LTEXT "&Odpri:", 12305, 7, 39, 24, 10
 CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
 DEFPUSHBUTTON "V redu", IDOK, 62, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "Prekliči", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "&Brskaj ...", 12288, 170, 63, 50, 14, WS_TABSTOP
}

STRINGTABLE
{
        /* columns in the shellview */
	IDS_SHV_COLUMN1		"Datoteka"
	IDS_SHV_COLUMN2		"Velikost"
	IDS_SHV_COLUMN3		"Vrsta"
	IDS_SHV_COLUMN4		"Spremenjena"
	IDS_SHV_COLUMN5		"Atributi"
	IDS_SHV_COLUMN6		"Velikost"
	IDS_SHV_COLUMN7		"Prostor na voljo"
	IDS_SHV_COLUMN8		"Ime"
	IDS_SHV_COLUMN9		"Komentarji"
	IDS_SHV_COLUMN10	"Lastnik"
	IDS_SHV_COLUMN11	"Skupina"
	IDS_SHV_COLUMN_DELFROM	"Prvotna lokacija"
	IDS_SHV_COLUMN_DELDATE	"Datum izbrisa"

        /* special folders */
	IDS_DESKTOP		"Namizje"
	IDS_MYCOMPUTER		"Moj računalnik"
	IDS_RECYCLEBIN_FOLDER_NAME      "Smeti"
	IDS_CONTROLPANEL	"Control Panel"

        /* context menus */
	IDS_VIEW_LARGE		"Ve&like ikone"
	IDS_VIEW_SMALL		"&Male ikone"
	IDS_VIEW_LIST		"&Seznam"
	IDS_VIEW_DETAILS	"Po&drobnosti"
	IDS_SELECT		"Izberi"
	IDS_OPEN		"Odpri"

	IDS_CREATEFOLDER_DENIED "Nove mape ni mogoče ustvariti: Nimate ustreznih dovoljenj."
	IDS_CREATEFOLDER_CAPTION "Napaka pri ustvarjanju nove mape"
	IDS_DELETEITEM_CAPTION "Potrdite brisanje datoteke"
	IDS_DELETEFOLDER_CAPTION "Potrdite brisanje mape"
	IDS_DELETEITEM_TEXT "Ali ste prepričani, da želite izbrisati predmet '%1'?"
	IDS_DELETEMULTIPLE_TEXT "Ali ste prepričani, da želite izbrisati predmete (%1)?"
	IDS_DELETESELECTED_TEXT "Ali ste prepričani, da želite izbrisati izbrane predmente?"
	IDS_TRASHITEM_TEXT "Ali ste prepričani, da želite premakniti predmet '%1' v Smeti?"
	IDS_TRASHFOLDER_TEXT "Ali ste prepričani, da želite premakniti mapo '%1' in njeno vsebino v Smeti?"
	IDS_TRASHMULTIPLE_TEXT "Ali ste prepričani, da želite premakniti predmente (%1) v Smeti?"
	IDS_CANTTRASH_TEXT "Predmeta '%1' ni mogoče premakniti v Smeti. Ali ga želite izbrisati?"
	IDS_OVERWRITEFILE_TEXT "Mapa že vsebuje datoteko z imenom '%1'.\n\nAli jo želite zamenjati?"
	IDS_OVERWRITEFILE_CAPTION "Potrdite prepis datoteke"
	IDS_OVERWRITEFOLDER_TEXT "Mapa že vsebuje mapo z imenom '%1'.\n\n"\
	    "Datoteke v ciljni mapi, ki imajo enaka imena kot datoteke v izvorni mapi\n"\
	    "bodo prepisane. Ali še vedno želite premakniti oziroma kopirati mapo?"

        /* message box strings */
        IDS_RESTART_TITLE       "Ponoven zagon"
        IDS_RESTART_PROMPT      "Ali želite simulirati ponoven zagon Oken?"
        IDS_SHUTDOWN_TITLE      "Izklop"
        IDS_SHUTDOWN_PROMPT     "Ali želite zaključiti vašo Wine sejo?"

        /* shell folder path default values */
	IDS_PROGRAMS                "Meni Start\\Programi"
	IDS_PERSONAL                "Moji dokumenti"
	IDS_FAVORITES               "Priljubljene"
	IDS_STARTUP                 "Meni Start\\Programi\\Zagon"
	IDS_RECENT                  "Nedavni dokumenti"
	IDS_SENDTO                  "Pošlji"
	IDS_STARTMENU               "Meni Start"
	IDS_MYMUSIC                 "Glasba"
	IDS_MYVIDEO                 "Video"
	IDS_DESKTOPDIRECTORY        "Namizje"
	IDS_NETHOOD                 "Omrežje"
	IDS_TEMPLATES               "Predloge"
	IDS_APPDATA                 "Podatki programov"
	IDS_PRINTHOOD               "Tiskalniki"
	IDS_LOCAL_APPDATA           "Lokalne nastavitve\\Podatki programov"
	IDS_INTERNET_CACHE          "Lokalne nastavitve\\Začasne internetne datoteke"
	IDS_COOKIES                 "Piškotki"
	IDS_HISTORY                 "Lokalne nastavitve\\Zgodovina"
	IDS_PROGRAM_FILES           "Programi"
	IDS_MYPICTURES              "Slike"
	IDS_PROGRAM_FILES_COMMON    "Programi\\Skupne datoteke"
	IDS_COMMON_DOCUMENTS        "Dokumenti"
	IDS_ADMINTOOLS              "Meni start\\Programi\\Administrativna orodja"
	IDS_COMMON_MUSIC            "Dokumenti\\Glasba"
	IDS_COMMON_PICTURES         "Dokumenti\\Slike"
	IDS_COMMON_VIDEO            "Dokumenti\\Video"
	IDS_CDBURN_AREA             "Lokalne nastavitve\\Podatki programov\\Microsoft\\Zapisovanje CD-jev"

	IDS_NEWFOLDER		"Nova mapa"

	IDS_CPANEL_TITLE            "Wine Control Panel"
	IDS_CPANEL_NAME             "Name"
	IDS_CPANEL_DESCRIPTION      "Description"
}

STRINGTABLE
{
        IDS_LICENSE_CAPTION,            "Licenčna pogodba za Wine"
IDS_LICENSE,
"Wine 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.\n\n\
Wine 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.\n\n\
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(default)
