/*
 *  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 "À &propos de l'horloge", IDM_ABOUT
 }
}

STRINGTABLE
{
IDS_CLOCK, "Horloge"
}
