/*
 * 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

IDM_DEBUG_POPUP MENU
BEGIN
    POPUP ""
    BEGIN
        MENUITEM "&Debug", ID_DEBUG
    END
END

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 \
                    chiudersi. Siamo spiacenti per l'inconveniente.",
                    IDC_STATIC_TXT1,27,10,224,30
    LTEXT           "Questo può essere causato da un problema nel programma o da una mancanza in Wine. \
                    Potresti voler vedere http://appdb.winehq.org per consigli su \
                    questa applicazione.\n\n\
                    Se questo problema non è presente sotto Windows e non è stato ancora riportato, \
                    puoi riportarlo a http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100
    DEFPUSHBUTTON   "Chiudi", IDOK, 205, 151, 60, 16, WS_TABSTOP
END

STRINGTABLE
BEGIN
    IDS_AUTO_CAPTION     "Crash di Wine"
    IDS_INVALID_PARAMS   "Errori interni - ricevuti parametri non validi"
    IDS_UNIDENTIFIED     "(non identificato)"
END
