/*
 *  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,   "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 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 menu a tendina Codifica.\n\
Continuare?"
}
