/*
 * 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
 */

#include "winhelp_res.h"

#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 "&Opombe ...", MNID_EDIT_ANNOTATE
 }
 POPUP "&Zaznamki" {
   MENUITEM "Do&loči ...", MNID_BKMK_DEFINE
 }
 POPUP "&Možnosti" {
   POPUP	"Pomoč vedno vidna"
   BEGIN
     MENUITEM "Privzeto",	MNID_OPTS_HELP_DEFAULT
     MENUITEM "Vidna",	MNID_OPTS_HELP_VISIBLE
     MENUITEM "Skrita",	MNID_OPTS_HELP_NONVISIBLE
   END
   MENUITEM "Zgodovina",		MNID_OPTS_HISTORY
   POPUP    "Pisava"
   BEGIN
    MENUITEM "Majhna",		MNID_OPTS_FONTS_SMALL
    MENUITEM "Običajna",    	MNID_OPTS_FONTS_NORMAL
    MENUITEM "Velika",     	MNID_OPTS_FONTS_LARGE
   END
   MENUITEM "Uporabi sistemske barve",	MNID_OPTS_SYSTEM_COLORS
  }
  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
}

IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Iskanje"
{
    LTEXT  "Ni (še) na voljo", -1, 10, 10, 180, 150
}

/* 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_INDEX, 		"&Indeks"
STID_CONTENTS, 		"Vsebina"
STID_BACK, 		"&Nazaj"
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	"Ne morem najti knjižnice richedit ... Prekinjam"
STID_PSH_INDEX,		"Teme pomoči: "
}

CONTEXT_MENU MENU LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
BEGIN
	POPUP ""
	BEGIN
		MENUITEM "Opomba ...",       MNID_CTXT_ANNOTATE
		MENUITEM "Kopiraj",                MNID_CTXT_COPY
		MENUITEM "Natisni ...",            MNID_CTXT_PRINT
		POPUP    "Pisava"
		BEGIN
			MENUITEM "Majnha",       MNID_CTXT_FONTS_SMALL
            MENUITEM "Običajna",      MNID_CTXT_FONTS_NORMAL
			MENUITEM "Velika",       MNID_CTXT_FONTS_LARGE
		END
        POPUP   "Pomoč vedno vidna"
		BEGIN
			MENUITEM "Privzeto",     MNID_CTXT_HELP_DEFAULT
			MENUITEM "Vidna",     MNID_CTXT_HELP_VISIBLE
			MENUITEM "Nevidna", MNID_CTXT_HELP_NONVISIBLE
		END
		MENUITEM "Uporabi sistemske barve",   MNID_CTXT_SYSTEM_COLORS
	END
END
