/*
 * Notepad (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)

LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT

MAIN_MENU MENU
{
 POPUP "&Datoteka" {
  MENUITEM "&Nova\tCtrl+N",      CMD_NEW
  MENUITEM "&Odpri ...\tCtrl+O",  CMD_OPEN
  MENUITEM "&Shrani\tCtrl+S",     CMD_SAVE
  MENUITEM "Shrani &kot ...",       CMD_SAVE_AS
  MENUITEM SEPARATOR
  MENUITEM "Na&tisni ...\tCtrl+P",            CMD_PRINT
  MENUITEM "P&riprava strani ...",    CMD_PAGE_SETUP
  MENUITEM "&Tiskalnik ...", CMD_PRINTER_SETUP
  MENUITEM SEPARATOR
  MENUITEM "Iz&hod",             CMD_EXIT
 }
POPUP "&Urejanje" {
  MENUITEM "&Razveljavi\tCtrl+Z",     CMD_UNDO
  MENUITEM SEPARATOR
  MENUITEM "&Izreži\tCtrl+X",      CMD_CUT
  MENUITEM "&Kopiraj\tCtrl+C",     CMD_COPY
  MENUITEM "&Prilepi\tCtrl+V",    CMD_PASTE
  MENUITEM "Iznri&ši\tDel",      CMD_DELETE
  MENUITEM SEPARATOR
  MENUITEM "Izberi &vse\tCtrl+A",       CMD_SELECT_ALL
  MENUITEM "&Datum/čas\tF5",    CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "Pre&lom dolgih vrstic",  CMD_WRAP
  MENUITEM "Pi&sava ...",          CMD_FONT
 }
POPUP "&Iskanje" {
  MENUITEM "&Najdi ...\tCtrl+F",   CMD_SEARCH
  MENUITEM "Najdi na&slednje\tF3",  CMD_SEARCH_NEXT
 }
POPUP "&Pomoč" {
  MENUITEM "&Teme pomoči",         CMD_HELP_CONTENTS
  MENUITEM "&Iskanje ...",        CMD_HELP_SEARCH
  MENUITEM "&O pomoči",     CMD_HELP_ON_HELP
  MENUITEM SEPARATOR
  MENUITEM "&O Beležnici ...", CMD_HELP_ABOUT_NOTEPAD
 }
}

/* Dialog `Page setup' */

DIALOG_PAGESETUP DIALOG 0, 0, 225, 95
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Priprava strani"
{
LTEXT    "&Glava:",  0x140,  10, 07, 40, 15
EDITTEXT IDC_PAGESETUP_HEADERVALUE,   60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    "&Noga:",  0x142,   10, 24, 40, 15
EDITTEXT IDC_PAGESETUP_FOOTERVALUE,   60, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX "&Robovi (v milimeterih):",      0x144,     10, 43,160, 45
LTEXT    "&Levo:",        0x145,   20, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_LEFTVALUE,     50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Zgoraj:",         0x148,    20, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_TOPVALUE,      50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Desno:",       0x14B, 100, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_RIGHTVALUE,   130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Spodaj:",      0x14E,100, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_BOTTOMVALUE,  130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP

DEFPUSHBUTTON "V redu",         IDOK,                   180,  3, 40, 15, WS_TABSTOP
PUSHBUTTON    "Prekliči",     IDCANCEL,               180, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    "&Pomoč",       IDHELP,                180, 39, 40, 15, WS_TABSTOP
}

STRINGTABLE DISCARDABLE
{
STRING_PAGESETUP_HEADERVALUE,   "&f"
STRING_PAGESETUP_FOOTERVALUE,   "Stran &p"

STRING_NOTEPAD,                                 "Beležnica"
STRING_ERROR,                                   "NAPAKA"
STRING_WARNING,                                 "OPOZORILO"
STRING_INFO,                                    "Informacija"

STRING_UNTITLED,                                "Neimenovana"

STRING_ALL_FILES,                               "Vse datoteke (*.*)"
STRING_TEXT_FILES_TXT,                  "Datoteke z besedilom (*.txt)"

STRING_TOOLARGE,                                "Datotka '%s' je prevelika za Beležnico.\n \
Uporabite drug urejevalnik."
STRING_NOTEXT,                                  "Niste vnesli besedila. \
\nVnesite besedilo in poskusite znova."
STRING_DOESNOTEXIST,                            "Datoteka '%s'\nne obstaja\n\n \
Ali jo želite ustvariti?"
STRING_NOTSAVED,                                "Datoteka '%s'\nje bila spremenjena\n\n \
Ali želite shraniti spremembe?"
STRING_NOTFOUND,                                        "Niza '%s' ni mogoče najti."
STRING_OUT_OF_MEMORY,                   "Za dokončanje operacije je na voljo premalo \
pomnilnika. \nZaprite enega ali več programov in poskusite znova."

}

#pragma code_page(default)
