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

#pragma code_page(65001)

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