/*
 * 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
 */

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