/*
 * Help Viewer (Slovenian Resources)
 *
 * 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)

/* Menu */

MAIN_MENU MENU LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
{
 POPUP "&Datoteka" {
  MENUITEM "&Odpri", MNID_FILE_OPEN
  MENUITEM SEPARATOR
  MENUITEM "&Natisni", MNID_FILE_PRINT
  MENUITEM "Priprava &tiskalnika ...", MNID_FILE_SETUP
   MENUITEM SEPARATOR
  MENUITEM "Iz&hod", MNID_FILE_EXIT
 }
 POPUP "&Urejanje" {
   MENUITEM "&Kopiraj ...", MNID_EDIT_COPYDLG
   MENUITEM SEPARATOR
   MENUITEM "P&ripombe ...", MNID_EDIT_ANNOTATE
 }
 POPUP "&Zaznamki" {
   MENUITEM "Do&loči ...", MNID_BKMK_DEFINE
 }
 POPUP "&Pomoč" {
   MENUITEM "&O pomoči", MNID_HELP_HELPON
   MENUITEM "Vedno na &vrhu", MNID_HELP_HELPTOP
   MENUITEM SEPARATOR
   MENUITEM "&Informacije ...", MNID_HELP_ABOUT
#ifdef WINELIB
   MENUITEM "&O WINE", MNID_HELP_WINE
#endif
 }
}

IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Indeks"
{
    LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
    PUSHBUTTON "&V redu", IDOK, 40, 170, 50, 12
    PUSHBUTTON "&Prekliči", IDCANCEL, 120, 170, 50, 12
}

/* Strings */
STRINGTABLE DISCARDABLE LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
{
STID_WINE_HELP, 	"WINE Pomoč"
STID_WHERROR, 		"NAPAKA"
STID_WARNING,  		"OPOZORILO"
STID_INFO,  		"Informacija"
STID_NOT_IMPLEMENTED, 	"Ni (še) na voljo"
STID_HLPFILE_ERROR_s, 	"Napaka pri branju datoteke s pomočjo `%s'"
STID_CONTENTS, 		"&Teme pomoči"
STID_SEARCH, 		"&Iskanje"
STID_BACK, 		"&Nazaj"
STID_HISTORY, 		"&Zgodovina"
STID_TOPICS,		"&Vsebina"
STID_ALL_FILES, 	"Vse datoteke (*.*)"
STID_HELP_FILES_HLP, 	"Datoteke s pomočjo (*.hlp)"
STID_FILE_NOT_FOUND_s	"Ne najdem datoteke '%s'. Ali jo želite poiskati sami?"
STID_NO_RICHEDIT	"Cannot find a richedit implementation... Aborting"
}

#pragma code_page(default)
