/* Italian Language Support
 * Copyright 2005 Antonio Codazzi
 *
 * 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 "wineconsole_res.h"

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

LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL

STRINGTABLE
BEGIN
IDS_EDIT,		"&Modifica"
IDS_DEFAULT,		"Imposta pre&definite"
IDS_PROPERTIES,		"&Proprietà"
IDS_MARK,		"Ma&rca"
IDS_COPY,		"&Copia"
IDS_PASTE,		"&Incolla"
IDS_SELECTALL,		"&Seleziona tutto"
IDS_SCROLL,		"Sc&orri"
IDS_SEARCH,		"C&erca"
IDS_FNT_DISPLAY,	"Il carattere è largo %ld pixel e alto %ld pixel"
IDS_FNT_PREVIEW,	"Questa è una prova"
IDS_DLG_TIT_DEFAULT,    "Impostazioni predefinite"
IDS_DLG_TIT_CURRENT,    "Impostazioni correnti"
IDS_DLG_TIT_ERROR,	"Errore di configurazione"
IDS_DLG_ERR_SBWINSIZE,	"Il buffer dello schermo deve essere uguale o più grande di quello della finestra"

IDS_CMD_INVALID_EVENT_ID   "wineconsole: impossibile analizzare id evento\n"
IDS_CMD_INVALID_BACKEND    "wineconsole: backend non valido\n"
IDS_CMD_INVALID_OPTION     "wineconsole: opzione della linea di comando non riconosciuta\n"
IDS_CMD_ABOUT              "Avvia un programma in una console Wine\n"
IDS_CMD_LAUNCH_FAILED      "wineconsole: impossibile avviare %s.\n"\
                           "Il comando non è valido.\n"

IDS_USAGE_HEADER           "\nUso:\n  wineconsole [opzioni] <comando>\n\nOpzioni:\n"
IDS_USAGE_BACKEND          "  --backend={user|curses}  Scegliere user farà aprire una nuova finestra, curses proverà\n"\
                           "                            a inizializzare il terminale corrente come una console Wine\n"
IDS_USAGE_COMMAND          "  <comando>                 Il programma di Wine da lanciare in una console\n"
IDS_USAGE_FOOTER           "\nEsempio:\n  wineconsole cmd\nAvvia il prompt dei comandi di Wine in una console Wine\n\n"
END

IDD_OPTION DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Opzioni "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Dimensione del cursore", -1, 10, 11, 60, 44, BS_GROUPBOX
	AUTORADIOBUTTON "&Piccolo", IDC_OPT_CURSOR_SMALL, 14, 23, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Medio", IDC_OPT_CURSOR_MEDIUM, 14, 33, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Grande", IDC_OPT_CURSOR_LARGE, 14, 43, 44, 10, WS_TABSTOP

	GROUPBOX "Controlli", -1, 75, 11, 125, 44, BS_GROUPBOX
	LTEXT "Menu a comparsa", -1, 79, 23, 40, 10
	AUTOCHECKBOX "&Controlla", IDC_OPT_CONF_CTRL, 129, 23, 60, 10, WS_TABSTOP
	AUTOCHECKBOX "Sco&rri", IDC_OPT_CONF_SHIFT, 129, 33, 60, 10, WS_TABSTOP
	LTEXT "Modifica rapida", -1, 79, 43, 50, 10
	AUTOCHECKBOX "&Abilita", IDC_OPT_QUICK_EDIT, 129, 43, 60, 10, WS_TABSTOP

	GROUPBOX "Cronologia", -1, 10, 57, 190, 35, BS_GROUPBOX
	LTEXT "&Numero di comandi richiamati :", -1, 14, 67, 78, 18
	EDITTEXT IDC_OPT_HIST_SIZE, 92, 69, 31, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_OPT_HIST_SIZE_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	AUTOCHECKBOX "&Rimuovi doppioni", IDC_OPT_HIST_NODOUBLE, 130, 67, 50, 18, WS_TABSTOP|BS_MULTILINE
}

IDD_FONT DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Carattere "
FONT 8, "MS Shell Dlg"
{
	LTEXT "&Carattere", -1, 5, 5, 24, 8
	LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL
	LTEXT "C&olore", -1, 100, 5, 50, 8
	CONTROL "", IDC_FNT_COLOR_FG, "WineConColorPreview", 0L, 100, 18, 48, 16
	CONTROL "", IDC_FNT_COLOR_BK, "WineConColorPreview", 0L, 100, 40, 48, 16
	LTEXT "&Dimensione", -1, 158, 5, 40, 8
	LISTBOX IDC_FNT_LIST_SIZE, 158, 18, 40, 60, WS_VSCROLL
	CONTROL "", IDC_FNT_PREVIEW, "WineConFontPreview", 0L, 5, 60, 109, 40
	LTEXT "", IDC_FNT_FONT_INFO, 128, 76, 80, 18
}

IDD_CONFIG DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Configurazione "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Buffer", -1, 10, 11, 100, 42, BS_GROUPBOX
	LTEXT "&Larghezza:", -1, 14, 25, 54, 9
	EDITTEXT IDC_CNF_SB_WIDTH, 68, 23, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_SB_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	LTEXT "&Altezza:", -1, 14, 39, 54, 9
	EDITTEXT IDC_CNF_SB_HEIGHT, 68, 37, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_SB_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0

	GROUPBOX "Dimensione finestra", -1, 10, 55, 100, 42
	LTEXT "&Larghezza:", -1, 14, 69, 54, 9
	EDITTEXT IDC_CNF_WIN_WIDTH, 68, 67, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_WIN_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	LTEXT "&Altezza:", -1, 14, 83, 54, 9
	EDITTEXT IDC_CNF_WIN_HEIGHT, 68, 81, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_WIN_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0

	GROUPBOX "Fine del programma", -1, 115, 11, 80, 42, BS_GROUPBOX
	AUTOCHECKBOX "&Chiudi console", IDC_CNF_CLOSE_EXIT, 119, 25, 75, 20, WS_TABSTOP

	GROUPBOX "Edizione", -1, 115, 55, 80, 42
	COMBOBOX IDC_CNF_EDITION_MODE, 119, 69, 75, 20, CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
}

IDD_SAVE_SETTINGS DIALOG 20, 20, 140, 60
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Parametri della console"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "", -1, 10, 10, 120, 31, BS_GROUPBOX
	AUTORADIOBUTTON "Salva queste impostazioni", IDC_SAV_SAVE, 14, 15, 110, 10, WS_TABSTOP
	AUTORADIOBUTTON "Modifica solo la sessione corrente", IDC_SAV_SESSION, 14, 27, 110, 10, WS_TABSTOP

	PUSHBUTTON "OK", IDOK, 20, 45, 35, 12
	PUSHBUTTON "Annulla", IDCANCEL, 65, 45, 35, 12
}
