/*
 *  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    "Annulla",     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,   "Pagina &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 andranno persi se\n\
salvi questo file nella codifica %s.\n\
Per mantenere questi caratteri, clicca Annulla e scegli\n\
una delle opzioni Unicode nel menù a tendina Codifica.\n\
Continuare?"
}
