/* 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 &Default"
IDS_PROPERTIES,		"&Proprietà"
IDS_MARK,		"Mark&"
IDS_COPY,		"&Copia"
IDS_PASTE,		"&Incolla"
IDS_SELECTALL,		"&Seleziona tutto"
IDS_SCROLL,		"Sc&orri"
IDS_SEARCH,		"C&erca"
IDS_FNT_DISPLAY,	"Il carattere è %ld pixel di larghezza e %ld pixel di altezza"
IDS_FNT_PREVIEW_1,	"Questa è una prova"
IDS_FNT_PREVIEW_2,	""
IDS_DLG_TIT_DEFAULT,    "Impostazioni di Default"
IDS_DLG_TIT_CURRENT,    "Impostazioni correnti"
IDS_DLG_TIT_ERROR,	"Errore di configurazione"
IDS_DLG_ERR_SBWINSIZE,	"Il buffer dello schermo deve essere più grande o uguale a quello della finestra"

IDS_CMD_INVALID_EVENT_ID   "wineconsole: impossibile parse event id\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"\
                           "                            ad inizializzare 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 LOADONCALL MOVEABLE DISCARDABLE 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 "Popup menu", -1, 79, 23, 40, 10
	AUTOCHECKBOX "&Control", IDC_OPT_CONF_CTRL, 129, 23, 60, 10, WS_TABSTOP
	AUTOCHECKBOX "S&hift", 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 LOADONCALL MOVEABLE DISCARDABLE 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Carattere "
FONT 8, "MS Shell Dlg"
{
	LTEXT "&Font", -1, 5, 5, 24, 8
	LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL
	LTEXT "&Colore", -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 LOADONCALL MOVEABLE DISCARDABLE 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 LOADONCALL MOVEABLE DISCARDABLE 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 "Cancella", IDCANCEL, 65, 45, 35, 12
}
