/*
 * Help Viewer
 *
 * Copyright 1996 Ulrich Schmid
 * Rumantsch Ladin (Vallader) by mbaur@g26.ethz.ch
 * 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"

/* FIXME: This file is in the Vallader Romansh dialect and not in the
   official Rumantsch Grischun. */

/* Menu */

MAIN_MENU MENU LANGUAGE LANG_ROMANSH, SUBLANG_DEFAULT
{
 POPUP "&Datoteca" {
  MENUITEM "&Rivir", MNID_FILE_OPEN
  MENUITEM SEPARATOR
  MENUITEM "&Stampar tema", MNID_FILE_PRINT
  MENUITEM "&Installaziun dal stampader...", MNID_FILE_SETUP
   MENUITEM SEPARATOR
  MENUITEM "&Finir", MNID_FILE_EXIT
 }
 POPUP "&Lavurar" {
   MENUITEM "Capchar", MNID_EDIT_COPYDLG
   MENUITEM SEPARATOR
   MENUITEM "&Annotaziun...", MNID_EDIT_ANNOTATE
 }
 POPUP "&Marca" {
   MENUITEM "&Definir...", MNID_BKMK_DEFINE
 }
 POPUP "&Options" {
   POPUP	"Help always visible"
   BEGIN
     MENUITEM "Default",	MNID_OPTS_HELP_DEFAULT
     MENUITEM "Visible",	MNID_OPTS_HELP_VISIBLE
     MENUITEM "Non visible",	MNID_OPTS_HELP_NONVISIBLE
  END
  MENUITEM "History",		MNID_OPTS_HISTORY
  POPUP    "Fonts"
  BEGIN
    MENUITEM "Small",		MNID_OPTS_FONTS_SMALL
    MENUITEM "Normal",    	MNID_OPTS_FONTS_NORMAL
    MENUITEM "Large",     	MNID_OPTS_FONTS_LARGE
  END
  MENUITEM "Use system colors",	MNID_OPTS_SYSTEM_COLORS
 }
 POPUP "&Ag�d" {
   MENUITEM "&Douvrar l'ag�d", MNID_HELP_HELPON
   MENUITEM "Ad�na da&vant", MNID_HELP_HELPTOP
   MENUITEM SEPARATOR
   MENUITEM "I&nfuormaziuns", MNID_HELP_ABOUT
#ifdef WINELIB
   MENUITEM "Davart &Wine", MNID_HELP_WINE
#endif
 }
}

/* Strings */
STRINGTABLE DISCARDABLE LANGUAGE LANG_ROMANSH, SUBLANG_DEFAULT
{
STID_WINE_HELP,         "WINE ag�d"
STID_WHERROR,           "SBAGL"
STID_WARNING,           "ATTENZIUN"
STID_INFO,              "INFUORMAZIUN"
STID_NOT_IMPLEMENTED,   "Na implementa"
STID_HLPFILE_ERROR_s,   "Sbagl cun leger la datoteca d'ag�d `%s'"
STID_INDEX,          	"&Cuntgn�"
STID_CONTENTS,          "Summary"
STID_BACK,              "&Inavo"
STID_ALL_FILES,         "Tuot las datotecas (*.*)"
STID_HELP_FILES_HLP,    "Datotecas d'ag�d (*.hlp)"
STID_FILE_NOT_FOUND_s   "Cannot find '%s'. Do you want to find this file yourself?"
STID_NO_RICHEDIT	"Cannot find a richedit implementation... Aborting"
STID_PSH_INDEX,		"Help topics: "
}
