/*
 * 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 "&Setup 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: "
}
