/*
 * Regedit resources (Italian Language Support)
 *
 * Copyright 2002 Robert Dickenson
 * Copyright 2003-2004 Ivan Leo Puoti
 * Copyright 2006 Antonio Codazzi
 * Copyright 2010 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 "resource.h"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL

/*
 * Menu
 */

IDR_REGEDIT_MENU MENU
BEGIN
    POPUP "&Registro"
    BEGIN
        MENUITEM "&Importa...",    ID_REGISTRY_IMPORTREGISTRYFILE
        MENUITEM "&Esporta...",    ID_REGISTRY_EXPORTREGISTRYFILE
        MENUITEM SEPARATOR
        MENUITEM "&Connetti a Registro in rete", ID_REGISTRY_CONNECTNETWORKREGISTRY, GRAYED
        MENUITEM "&Disconnetti da Registro di rete", ID_REGISTRY_DISCONNECTNETWORKREGISTRY, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "&Stampa\tCtrl+P",              ID_REGISTRY_PRINT, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "E&sci",                       ID_REGISTRY_EXIT
    END
    POPUP "&Modifica"
    BEGIN
        MENUITEM "&Modifica",                     ID_EDIT_MODIFY
        MENUITEM SEPARATOR
        POPUP "&Nuovo"
        BEGIN
            MENUITEM "Chiave",                        ID_EDIT_NEW_KEY
            MENUITEM SEPARATOR
            MENUITEM "Valore &stringa",         ID_EDIT_NEW_STRINGVALUE
            MENUITEM "Valore &binario",         ID_EDIT_NEW_BINARYVALUE
            MENUITEM "Valore &DWORD",           ID_EDIT_NEW_DWORDVALUE
            MENUITEM "Valore &multistringa",     ID_EDIT_NEW_MULTI_STRINGVALUE
        END
        MENUITEM SEPARATOR
        MENUITEM "&Elimina\tDel",                ID_EDIT_DELETE
        MENUITEM "&Rinomina\tF2"                 ID_EDIT_RENAME
        MENUITEM SEPARATOR
        MENUITEM "&Copia nome chiave",              ID_EDIT_COPYKEYNAME
        MENUITEM SEPARATOR
        MENUITEM "&Trova\tCtrl+F",               ID_EDIT_FIND, GRAYED
        MENUITEM "&Trova Successivo\tF3",              ID_EDIT_FINDNEXT, GRAYED
    END
    POPUP "&Visualizza"
    BEGIN
        MENUITEM "Barra di &Stato",                 ID_VIEW_STATUSBAR
        MENUITEM SEPARATOR
        MENUITEM "Di&vidi",                      ID_VIEW_SPLIT
        MENUITEM SEPARATOR
        MENUITEM "&Aggiorna\tF5",                ID_VIEW_REFRESH
    END
    POPUP "&Preferiti"
    BEGIN
        MENUITEM "&Aggiungi ai Preferiti...",          ID_FAVORITES_ADDTOFAVORITES
        MENUITEM "&Rimuovi dai Preferiti...",           ID_FAVORITES_REMOVEFAVORITE
    END
    POPUP "&Aiuto"
    BEGIN
        MENUITEM "&Sommario della Guida",                ID_HELP_HELPTOPICS
        MENUITEM SEPARATOR
        MENUITEM "&Informazioni sull'editor del Registro",      ID_HELP_ABOUT
    END
END

IDR_POPUP_MENUS MENU
BEGIN
  POPUP ""
  BEGIN
	MENUITEM "&Modifica",                     ID_EDIT_MODIFY
	MENUITEM "Modifica dati binari",          ID_EDIT_MODIFY_BIN
	MENUITEM SEPARATOR
	MENUITEM "&Elimina\tDel",                ID_EDIT_DELETE
	MENUITEM "&Rinomina",                     ID_EDIT_RENAME
  END
  POPUP ""
  BEGIN
        POPUP "&Nuovo"
        BEGIN
            MENUITEM "&Chiave",                        ID_EDIT_NEW_KEY
            MENUITEM SEPARATOR
            MENUITEM "Valore &stringa",         ID_EDIT_NEW_STRINGVALUE
            MENUITEM "Valore &binario",         ID_EDIT_NEW_BINARYVALUE
            MENUITEM "Valore &DWORD",           ID_EDIT_NEW_DWORDVALUE
            MENUITEM "Valore &multistringa",     ID_EDIT_NEW_MULTI_STRINGVALUE
        END
        MENUITEM SEPARATOR
        MENUITEM "&Elimina\tDel",                ID_EDIT_DELETE
        MENUITEM "&Rinomina\tF2"                 ID_EDIT_RENAME
        MENUITEM SEPARATOR
        MENUITEM "&Esporta...",                  ID_EDIT_EXPORT
        MENUITEM "&Copia nome chiave",              ID_EDIT_COPYKEYNAME
        MENUITEM SEPARATOR
        MENUITEM "&Trova\tCtrl+F",               ID_EDIT_FIND, GRAYED
  END
END

/*
 * Dialog
 */

IDD_EXPORT_TEMPLATE DIALOG  50, 50, 278, 54
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
    WS_BORDER
FONT 8, "MS Shell Dlg"
BEGIN
    GROUPBOX "Esporta registro", IDC_EXPORT_BASE, 6, 6, 266, 42, WS_GROUP
    AUTORADIOBUTTON "&Tutti", IDC_EXPORT_ALL, 12, 15, 244, 12
    AUTORADIOBUTTON "Ramo s&elezionato:", IDC_EXPORT_SELECTED, 12, 30, 70, 12
    EDITTEXT IDC_EXPORT_PATH, 82, 30, 184, 12
END

IDD_FIND DIALOG  22, 17, 210, 85
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Trova"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT           "Trova:",IDC_STATIC,5,7,119,8
EDITTEXT        IDC_VALUE_NAME,40,5,125,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
LTEXT           "Trova in:",IDC_STATIC,5, 22, 119, 8
CHECKBOX        "Chiavi", IDC_FIND_KEYS, 5, 34, 90, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX
CHECKBOX        "Nome (campo)", IDC_FIND_VALUES, 5, 46, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX
CHECKBOX        "Dati (campo)", IDC_FIND_CONTENT, 5, 58, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX
CHECKBOX        "Solo stringhe intere", IDC_FIND_WHOLE, 5, 70, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX
DEFPUSHBUTTON   "Trova",IDOK,175,5,30,11,WS_GROUP
PUSHBUTTON      "Chiudi",IDCANCEL,175,22,30,11, WS_GROUP
END

IDD_ADDFAVORITE DIALOG  22, 17, 210, 55
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Aggiungi preferito"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT           "Nome:",IDC_STATIC,5,5,119,8
EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
DEFPUSHBUTTON   "OK",IDOK,140,40,30,11,WS_GROUP
PUSHBUTTON      "Annulla",IDCANCEL,175,40,30,11, WS_GROUP
END

IDD_DELFAVORITE DIALOG  22, 17, 210, 90
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Rimuovi preferito"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT           "Nome:",IDC_STATIC,5,5,119,8
LISTBOX         IDC_NAME_LIST,5,15,200,52, WS_BORDER | WS_TABSTOP | LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL
DEFPUSHBUTTON   "OK",IDOK,140,73,30,11,WS_GROUP
PUSHBUTTON      "Annulla",IDCANCEL,175,73,30,11, WS_GROUP
END

IDD_EDIT_STRING DIALOG  22, 17, 210, 75
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Modifica stringa"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Nome del valore:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL | WS_DISABLED
    LTEXT           "Dati del valore:",IDC_STATIC,5,30,119,8
    EDITTEXT        IDC_VALUE_DATA,5,40,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    DEFPUSHBUTTON   "OK",IDOK,140,60,30,11,WS_GROUP
    PUSHBUTTON   "Annulla",IDCANCEL,175,60,30,11,WS_GROUP
END

IDD_EDIT_DWORD DIALOG  22, 17, 210, 100
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Modifica DWORD"
FONT 8, "MS Shell Dlg"
BEGIN
   LTEXT           "Nome del valore:",IDC_STATIC,5,5,119,8
   EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
   LTEXT           "Dati del valore:",IDC_STATIC,5,30,90,8
   EDITTEXT        IDC_VALUE_DATA,5,40,90,12, WS_BORDER | WS_TABSTOP
   GROUPBOX        "Base", IDC_DWORD_BASE, 120, 30, 85, 37, BS_GROUPBOX
   AUTORADIOBUTTON "Esadecimale", IDC_DWORD_HEX, 130, 40, 60, 10, WS_TABSTOP
   AUTORADIOBUTTON "Decimale", IDC_DWORD_DEC, 130, 52, 60, 10, WS_TABSTOP
   DEFPUSHBUTTON   "OK",IDOK,140,80,30,11,WS_GROUP
   PUSHBUTTON   "Annulla",IDCANCEL,175,80,30,11,WS_GROUP
END

IDD_EDIT_BINARY DIALOG  22, 17, 210, 100
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Modifica binario"
FONT 8, "MS Shell Dlg"
BEGIN
   LTEXT           "Nome del valore:",IDC_STATIC,5,5,119,8
   EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
   LTEXT           "Dati del valore:",IDC_STATIC,5,30,90,8
   CONTROL         "",IDC_VALUE_DATA,"HexEdit",WS_TABSTOP,4,40,160,40
   DEFPUSHBUTTON   "OK",IDOK,140,80,30,11,WS_GROUP
   PUSHBUTTON   "Annulla",IDCANCEL,175,80,30,11,WS_GROUP
END

IDD_EDIT_MULTI_STRING DIALOG  22, 17, 210, 175
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Modifica multistringa"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Nome del valore:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "Dati del valore:",IDC_STATIC,5,30,119,8
    EDITTEXT        IDC_VALUE_DATA,5,40,200,112, WS_BORDER | WS_TABSTOP | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN
    DEFPUSHBUTTON   "OK",IDOK,120,156,40,15,WS_GROUP
    PUSHBUTTON   "Annulla",IDCANCEL,165,156,40,15,WS_GROUP
END

/*
 * String Table
 */

STRINGTABLE
BEGIN
    IDS_LIST_COLUMN_NAME    "Nome"
    IDS_LIST_COLUMN_TYPE    "Tipo"
    IDS_LIST_COLUMN_DATA    "Dati"
END

STRINGTABLE
BEGIN
    IDS_APP_TITLE           "Editor del Registro"
END

STRINGTABLE
BEGIN
    ID_REGISTRY_MENU        "Contiene i comandi per lavorare su tutto il Registro"
    ID_EDIT_MENU            "Contiene i comandi per modificare valori o chiavi"
    ID_VIEW_MENU            "Contiene i comandi per personalizzare la finestra del Registro"
    ID_FAVORITES_MENU       "Contiene i comandi per accedere alle chiavi usate frequentemente"
    ID_HELP_MENU            "Contiene i comandi per visualizzare la Guida e informazioni sull'editor del Registro"
    ID_EDIT_NEW_MENU        "Contiene i comandi per creare nuove chiavi o valori"
END

STRINGTABLE
BEGIN
    ID_EDIT_MODIFY          "Modifica i dati del valore"
    ID_EDIT_NEW_KEY         "Aggiunge una nuova chiave"
    ID_EDIT_NEW_STRINGVALUE "Aggiunge un nuovo valore stringa"
    ID_EDIT_NEW_BINARYVALUE "Aggiunge un nuovo valore binario"
    ID_EDIT_NEW_DWORDVALUE  "Aggiunge un nuovo valore a doppia parola"
	ID_EDIT_NEW_MULTI_STRINGVALUE "Aggiunge un nuovo valore multistringa"
    ID_REGISTRY_IMPORTREGISTRYFILE "Importa un file di testo nel Registro"
    ID_REGISTRY_EXPORTREGISTRYFILE
                            "Esporta tutto o parte del Registro in un file di testo"
    ID_REGISTRY_CONNECTNETWORKREGISTRY
                            "Si connette al Registro di un computer remoto"
    ID_REGISTRY_DISCONNECTNETWORKREGISTRY
                            "Si disconnette dal Registro di un computer remoto"
    ID_REGISTRY_PRINT       "Stampa tutto o parte del Registro"
/*    ID_HELP_HELPTOPICS      "Apre l'aiuto dell'editor del Registro" */
    ID_HELP_ABOUT           "Visualizza informazioni sul programma, numero di versione e copyright"
END

STRINGTABLE
BEGIN
    ID_REGISTRY_EXIT        "Esce dall'editor del Registro"
    ID_FAVORITES_ADDTOFAVORITES "Aggiunge una chiave alla lista dei Preferiti"
    ID_FAVORITES_REMOVEFAVORITE "Rimuove una o più chiavi dalla lista dei preferiti"
    ID_VIEW_STATUSBAR       "Mostra o nasconde la barra di stato"
    ID_VIEW_SPLIT           "Cambia la posizione del separatore tra due pannelli"
    ID_VIEW_REFRESH         "Aggiorna la finestra"
    ID_EDIT_DELETE          "Elimina la selezione"
    ID_EDIT_RENAME          "Rinomina la selezione"
    ID_EDIT_COPYKEYNAME     "Copia il nome della chiave selezionata negli appunti"
    ID_EDIT_FIND            "Trova una stringa di testo in una chiave, un valore o in dei dati"
    ID_EDIT_FINDNEXT        "Trova la volta successiva il testo specificato nella ricerca precedente"
    ID_EDIT_EXPORT          "Esporta il ramo selezionato del registro in un file di testo"
END

STRINGTABLE
BEGIN
    IDS_ERROR		    "Errore"
    IDS_BAD_KEY		    "Impossibile trovare la chiave '%s'"
    IDS_BAD_VALUE           "Impossibile trovare il valore '%s'"
    IDS_UNSUPPORTED_TYPE    "Impossibile modificare valori di questo tipo (%u)"
    IDS_TOO_BIG_VALUE       "Valore troppo grande (%u)"
    IDS_DELETE_BOX_TITLE    "Confermare l'eliminazione del valore"
    IDS_DELETE_BOX_TEXT     "Sei sicuro di volere eliminare il valore '%s'?"
    IDS_DELETE_BOX_TEXT_MULTIPLE "Sei sicuro di volere eliminare questi valori?"
    IDS_NEWKEY              "Nuova chiave #%d"
    IDS_NEWVALUE            "Nuovo valore #%d"
    IDS_NOTFOUND            "Stringa di ricerca '%s' non trovata"
END

STRINGTABLE
BEGIN
    IDS_FILEDIALOG_IMPORT_TITLE   "Importa file di registro"
    IDS_FILEDIALOG_EXPORT_TITLE   "Esporta file di registro"
    IDS_FILEDIALOG_FILTER         "File di registro\0*.reg\0File di registro Win9x/NT4 (REGEDIT4)\0*.reg\0Tutti i file (*.*)\0*.*\0\0"
END

STRINGTABLE
BEGIN
    IDS_REGISTRY_ROOT_NAME           "Il mio computer"
    IDS_REGISTRY_DEFAULT_VALUE       "(Predefinito)"
    IDS_REGISTRY_VALUE_NOT_SET       "(valore non immesso)"
    IDS_REGISTRY_VALUE_CANT_DISPLAY  "(impossibile visualizzare valore)"
    IDS_REGISTRY_UNKNOWN_TYPE        "(%d sconosciuto)"
END

/*****************************************************************/

/*
 * TEXTINCLUDE
 */

1 TEXTINCLUDE
BEGIN
    "resource.h\0"
END

/*****************************************************************/
