/*
 * Help Viewer
 *
 * Copyright 1996 Ulrich Schmid
 * Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
 *
 * 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 "winhelp_res.h"

#pragma code_page(65001)

/* Menu */

MAIN_MENU MENU LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
{
 POPUP "&File" {
  MENUITEM "&Apri...", MNID_FILE_OPEN
  MENUITEM SEPARATOR
  MENUITEM "S&tampa", MNID_FILE_PRINT
  MENUITEM "&Installazione stampante...", MNID_FILE_SETUP
   MENUITEM SEPARATOR
  MENUITEM "&Esci", MNID_FILE_EXIT
 }
 POPUP "&Modifica" {
   MENUITEM "&Copia...", MNID_EDIT_COPYDLG
   MENUITEM SEPARATOR
   MENUITEM "&Annota...", MNID_EDIT_ANNOTATE
 }
 POPUP "&Segnalibro" {
   MENUITEM "&Definisci...", MNID_BKMK_DEFINE
 }
 POPUP "&Opzioni" {
   POPUP	"Aiuto sempre visibile"
   BEGIN
     MENUITEM "Predefinito",	MNID_OPTS_HELP_DEFAULT
     MENUITEM "Visibile",	MNID_OPTS_HELP_VISIBLE
     MENUITEM "Non visibile",	MNID_OPTS_HELP_NONVISIBLE
  END
  MENUITEM "Cronologia",		MNID_OPTS_HISTORY
  POPUP    "Caratteri"
  BEGIN
    MENUITEM "Piccolo",		MNID_OPTS_FONTS_SMALL
    MENUITEM "Normale",    	MNID_OPTS_FONTS_NORMAL
    MENUITEM "Grande",     	MNID_OPTS_FONTS_LARGE
  END
  MENUITEM "Usa colori di sistema",	MNID_OPTS_SYSTEM_COLORS
 }
 POPUP "&?" {
   MENUITEM "&Aiuto sulla guida", MNID_HELP_HELPON
   MENUITEM "Sempre in primo &piano", MNID_HELP_HELPTOP
   MENUITEM SEPARATOR
   MENUITEM "&Informazioni su...", MNID_HELP_ABOUT
#ifdef WINELIB
   MENUITEM "&Informazioni su WINE", MNID_HELP_WINE
#endif
 }
}

/* Strings */

STRINGTABLE DISCARDABLE LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
{
STID_WINE_HELP, 	"Guida di WINE"
STID_WHERROR, 		"ERRORE"
STID_WARNING,  		"ATTENZIONE"
STID_INFO,  		"Informazione"
STID_NOT_IMPLEMENTED, 	"Non ancora implementato"
STID_HLPFILE_ERROR_s, 	"Errore di lettura del file della Guida `%s'"
STID_INDEX, 		"Indice"
STID_CONTENTS,		"&Sommario"
STID_BACK, 		"&Precedente"
STID_ALL_FILES, 	"Tutti i file (*.*)"
STID_HELP_FILES_HLP, 	"File della Guida (*.hlp)"
STID_FILE_NOT_FOUND_s	"Non è stato possibile trovare '%s'. Vuoi cercare questo file?"
STID_NO_RICHEDIT	"Non è stato possibile trovare un'implementazione richedit... Annullando"
STID_PSH_INDEX,		"Argomenti di aiuto: "
}
