/*
 * Clock (Italian resources)
 *
 * Copyright 1998 Marcel Baur <mbaur@g26.ethz.ch>
 * Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
 * Copyright 2003 Ivan Leo Puoti
 * Copiright 2009 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 "clock_res.h"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL

MAIN_MENU MENU
{
 POPUP "&Proprietà" {
  MENUITEM "Ana&logico", IDM_ANALOG
  MENUITEM "Digi&tale", IDM_DIGITAL
  MENUITEM SEPARATOR
  MENUITEM "&Carattere...", IDM_FONT
  MENUITEM SEPARATOR
  MENUITEM "&Nascondi la barra del titolo", IDM_NOTITLE
  MENUITEM SEPARATOR
  MENUITEM "&Secondi", IDM_SECONDS
  MENUITEM "&Data", IDM_DATE
  MENUITEM SEPARATOR
  MENUITEM "&Sempre in primo piano", IDM_ONTOP
 }
 POPUP "Inf&o" {
  MENUITEM "&Licenza...", IDM_LICENSE
  MENUITEM "&Garanzia...", IDM_NOWARRANTY
  MENUITEM "&Informazioni sull'orologio...", IDM_ABOUT
 }
}

STRINGTABLE DISCARDABLE
{
IDS_CLOCK, "Orologio"
}

STRINGTABLE DISCARDABLE LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
{
IDS_LICENSE_CAPTION,            "LICENSE"
IDS_LICENSE,
"Questo programma è software libero; puoi redistribuirlo e/o \
modificarlo sotto i termini della GNU Lesser General Public \
License come pubblicata dalla Free Software Foundation; sia \
la versione 2.1 della Licenza, o (a tua scelta) qualunque altra versione più recente.\n\
Questo programma è distribuito nella speranza che sia utile, \
ma SENZA ALCUNA GARANZIA; anche senza la garanzia implicita di \
COMMERCIABILITÀ o IDONEITÀ PER UNO SCOPO PARTICOLARE. Leggere la GNU \
Lesser General Public License per maggiori dettagli.\n\
Dovresti aver ricevuto una copia della GNU Lesser General Public \
License insieme a questo programma; altrimenti, scrivi alla Free Software \
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA"

IDS_WARRANTY_CAPTION, "NESSUNA GARANZIA"
IDS_WARRANTY,
"Questo programma è distribuito nella speranza che sia utile, \
ma SENZA ALCUNA GARANZIA; anche senza la garanzia implicita di \
COMMERCIABILITÀ o IDONEITÀ PER UNO SCOPO PARTICOLARE. Leggere la GNU \
Lesser General Public License per maggiori dettagli."
}
