/*
 * Italian Language Support
 *
 * 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

IDD_CRASH_DLG DIALOGEX 100, 100, 273, 175
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Errore del programma"
FONT 8, "Tahoma"
BEGIN
    LTEXT           "",IDC_STATIC_BG,0,0,273,52,WS_BORDER,0
    LTEXT           "Il programma %s ha incontrato un errore e deve \
                    essere chiuso. Siamo spiacenti per l'inconveniente.",
                    IDC_STATIC_TXT1,27,10,224,30
    LTEXT           "Ciò può essere causato da un problema nel programma o da una mancanza di Wine. \
                    Potresti voler consultare http://appdb.winehq.org per consigli su \
                    questa applicazione.\n\n\
                    Se questo problema non è presente sotto Windows e non è stato ancora segnalato, \
                    puoi segnalarlo su http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100
    DEFPUSHBUTTON   "Chiudi", IDOK, 205, 151, 60, 16, WS_TABSTOP
END
