/*
 *  Notepad (Italian resources)
 *
 *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
 *  Proofread 1998 by David Lee Lambert <lamber45@egr.msu.edu>
 *  Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
 *  Copyright 2003 Marcelo Duarte
 *  Copyright 2003-2004 Ivan Leo Puoti
 *  Copyright 2006 Antonio Codazzi
 *  Copyright 2009 Luca Bennati
 *
 * 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 "notepad_res.h"

#pragma code_page(65001)

LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL

MAIN_MENU MENU
{
 POPUP "&File" {
  MENUITEM "&Nuovo\tCtrl+N",           CMD_NEW
  MENUITEM "&Apri...\tCtrl+O",     CMD_OPEN
  MENUITEM "&Salva\tCtrl+S",     CMD_SAVE
  MENUITEM "Salva &con nome...",       CMD_SAVE_AS
  MENUITEM SEPARATOR
  MENUITEM "&Stampa...\tCtrl+P",            CMD_PRINT
  MENUITEM "&Imposta pagina...",    CMD_PAGE_SETUP
  MENUITEM "&Configurazione stampante...", CMD_PRINTER_SETUP
  MENUITEM SEPARATOR
  MENUITEM "E&sci",             CMD_EXIT
 }
POPUP "&Modifica" {
  MENUITEM "&Annulla\tCtrl+Z",     CMD_UNDO
  MENUITEM SEPARATOR
  MENUITEM "&Taglia\tCtrl+X",      CMD_CUT
  MENUITEM "&Copia\tCtrl+C",     CMD_COPY
  MENUITEM "&Incolla\tCtrl+V",    CMD_PASTE
  MENUITEM "&Elimina\tDel",      CMD_DELETE
  MENUITEM SEPARATOR
  MENUITEM "Seleziona &tutto\tCtrl+A",       CMD_SELECT_ALL
  MENUITEM "&Ora/Data\tF5",    CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "&A capo automatico",  CMD_WRAP
  MENUITEM "&Imposta carattere...",          CMD_FONT
 }
POPUP "&Trova" {
  MENUITEM "&Trova...\tCtrl+F",   CMD_SEARCH
  MENUITEM "&Trova successivo\tF3",  CMD_SEARCH_NEXT
  MENUITEM "&Sostituisci...\tCtrl+H", CMD_REPLACE
 }
POPUP "&Aiuto" {
  MENUITEM "&Contenuti",         CMD_HELP_CONTENTS
  MENUITEM "&Trova...",        CMD_HELP_SEARCH
  MENUITEM "&Aiuto sulla Guida",     CMD_HELP_ON_HELP
  MENUITEM SEPARATOR
  MENUITEM "&Informazioni sul Blocco Note", 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 "Imposta pagina"
{
LTEXT    "&Note a inizio pagina:",  0x140,   10, 04, 40, 18
EDITTEXT IDC_PAGESETUP_HEADERVALUE,   60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    "&Note a piè di pagina:",  0x142,   10, 23, 40, 18
EDITTEXT IDC_PAGESETUP_FOOTERVALUE,   60, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX "&Margini:",      0x144,     10, 43,160, 45
LTEXT    "&Sinistro:",        0x145,   14, 55, 36, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_LEFTVALUE,     50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Superiore:",         0x148,    14, 73, 36, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_TOPVALUE,      50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Destro:",       0x14B, 100, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_RIGHTVALUE,   130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Inferiore:",      0x14E,100, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_BOTTOMVALUE,  130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP

DEFPUSHBUTTON "OK",         IDOK,                   180,  3, 40, 15, WS_TABSTOP
PUSHBUTTON    "Cancella",     IDCANCEL,               180, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    "&Aiuto",       IDHELP,                180, 39, 40, 15, WS_TABSTOP
}

IDD_OFN_TEMPLATE  DIALOG  DISCARDABLE 50,50,300,15
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER
FONT 8, "MS Shell Dlg"
BEGIN
  LTEXT "Codifica:", -1, 5,0, 50,12
  COMBOBOX IDC_OFN_ENCCOMBO, 53,0, 156,48, WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST
END

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

STRING_NOTEPAD,                                 "Blocco note"
STRING_ERROR,                                   "ERRORE"
STRING_WARNING,                                 "ATTENZIONE"
STRING_INFO,                                    "Info"

STRING_UNTITLED,                                "(senza nome)"

STRING_ALL_FILES,                               "Tutti i file (*.*)"
STRING_TEXT_FILES_TXT,                  "File di testo (*.txt)"

STRING_TOOLARGE,                                "Il file '%s' è troppo grande per il blocco note.\n \
Per favore usare un altro editor."
STRING_NOTEXT,                                  "Non è stato inserito alcun testo. \
\nPer favore digitare qualcosa e riprovare"
STRING_DOESNOTEXIST,                            "Il file '%s'\nnon esiste\n\n \
Creare un nuovo file ?"
STRING_NOTSAVED,                                "Il file '%s'\nè stato modificato\n\n \
Salvare le modifiche ?"
STRING_NOTFOUND,                                        "'%s' non è stato trovato."
STRING_OUT_OF_MEMORY,                   "Memoria insufficiente per completare questa operazione \
\nChiudere una o più applicazioni per aumentare la quantità\n di memoria libera."


STRING_UNICODE_LE,     "Unicode (UTF-16)"
STRING_UNICODE_BE,     "Unicode (UTF-16 big-endian)"

STRING_LOSS_OF_UNICODE_CHARACTERS,         "%s\n\
Questo file contiene caratteri Unicode che verranno persi se\n\
salvi questo file nella codifica %s.\n\
Per mantenere questi caratteri, clicca Annulla e scegli\n\
una delle opzioni Unicode nel menu a tendina Codifica.\n\
Continuare?"
}
