/*
 *  Clock (French resources)
 *
 * Copyright 1998 Robert Pouliot <krynos@clic.net>
 * Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
 * Copyright 2006 Jonathan Ernst <jonathan@ernstfamily.ch>
 *
 * 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_FRENCH, SUBLANG_NEUTRAL

MAIN_MENU MENU
{
 POPUP "&Propriétés" {
  MENUITEM "Ana&logique", IDM_ANALOG
  MENUITEM "&Numérique", IDM_DIGITAL
  MENUITEM SEPARATOR
  MENUITEM "&Police...", IDM_FONT
  MENUITEM SEPARATOR
  MENUITEM "Sans &barre de titre", IDM_NOTITLE
  MENUITEM SEPARATOR
  MENUITEM "&Secondes", IDM_SECONDS
  MENUITEM "&Date", IDM_DATE
  MENUITEM SEPARATOR
  MENUITEM "&Toujours visible", IDM_ONTOP
 }
 POPUP "Inf&o" {
  MENUITEM "&Licence...", IDM_LICENSE
  MENUITEM "AUCUNE &GARANTIE...", IDM_NOWARRANTY
  MENUITEM "À &propos de l'horloge", IDM_ABOUT
 }
}

STRINGTABLE DISCARDABLE
{
IDS_CLOCK, "Horloge"
}

STRINGTABLE DISCARDABLE LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
{
IDS_LICENSE_CAPTION,            "LICENCE"
IDS_LICENSE,
"Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou \
le modifier suivant les termes de la Licence Générale Publique Limitée GNU \
telle que publiée par la Free Software Foundation ; soit la version 2.1 \
de la Licence, soit (à votre gré) toute version ultérieure.\n\
Ce programme est distribué dans l'espoir qu'il sera utile, mais \
SANS AUCUNE GARANTIE : sans même la garantie implicite de \
COMMERCIALISABILITÉ ou d'ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez \
la Licence Générale Publique Limitée pour plus de détails.\n\
Vous devriez avoir reçu une copie de la Licence Générale Publique Limitée \
GNU avec ce programme ; si ce n'est pas le cas, écrivez à la : \
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, \
MA 02110-1301, USA."

IDS_WARRANTY_CAPTION, "AUCUNE GARANTIE"
IDS_WARRANTY,
"Ce programme est distribué dans l'espoir qu'il sera utile, mais \
SANS AUCUNE GARANTIE : sans même la garantie implicite de \
COMMERCIALISABILITÉ ou d'ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez \
la Licence Générale Publique Limitée pour plus de détails."
}
