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

LANGUAGE LANG_ROMANSH, SUBLANG_DEFAULT

#pragma code_page(65001)

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

/* Menu */

MAIN_MENU MENU
{
 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
 }
}

/* Strings */
STRINGTABLE
{
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"
}
