/*
 * Help Viewer
 *
 * Copyright 1996 Ulrich Schmid
 * 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_JAPANESE, SUBLANG_DEFAULT

/* UTF-8 */
#pragma code_page(65001)

/* Menu */

MAIN_MENU MENU
{
 POPUP "ファイル(&F)" {
  MENUITEM "開く(&O)", MNID_FILE_OPEN
  MENUITEM SEPARATOR
  MENUITEM "印刷(&P)", MNID_FILE_PRINT
  MENUITEM "プリンタの設定(&S)...", MNID_FILE_SETUP
   MENUITEM SEPARATOR
  MENUITEM "終了(&X)", MNID_FILE_EXIT
 }
 POPUP "編集(&E)" {
   MENUITEM "コピー(&C)...", MNID_EDIT_COPYDLG
   MENUITEM SEPARATOR
   MENUITEM "コメント(&A)...", MNID_EDIT_ANNOTATE
 }
 POPUP "しおり(&B)" {
   MENUITEM "定義(&D)...", MNID_BKMK_DEFINE
 }
 POPUP "オプション(&O)" {
   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 "履歴",		MNID_OPTS_HISTORY
  POPUP    "フォント"
  BEGIN
    MENUITEM "小",		MNID_OPTS_FONTS_SMALL
    MENUITEM "標準",    	MNID_OPTS_FONTS_NORMAL
    MENUITEM "大",     	MNID_OPTS_FONTS_LARGE
  END
  MENUITEM "システム カラーを使う",	MNID_OPTS_SYSTEM_COLORS
 }
 POPUP "ヘルプ(&H)" {
   MENUITEM "ヘルプについてのヘルプ(&O)", MNID_HELP_HELPON
   MENUITEM "常に手前に表示(&T)", MNID_HELP_HELPTOP
   MENUITEM SEPARATOR
   MENUITEM "情報(&I)...", MNID_HELP_ABOUT
 }
}

IDD_INDEX DIALOG 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 9, "MS Shell Dlg"
CAPTION "索引"
{
    LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
}

IDD_SEARCH DIALOG 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 9, "MS Shell Dlg"
CAPTION "検索"
{
    LTEXT  "未実装", -1, 10, 10, 180, 150
}

/* Strings */
STRINGTABLE
{
STID_WINE_HELP, 	"Wine ヘルプ"
STID_WHERROR, 		"エラー"
STID_WARNING,  		"警告"
STID_INFO,  		"情報"
STID_NOT_IMPLEMENTED, 	"非実装"
STID_HLPFILE_ERROR_s, 	"ヘルプファイル `%s' を読み込んでいるときにエラー"
STID_INDEX, 		"索引(&I)"
STID_CONTENTS,		"概要"
STID_BACK, 		"戻る(&B)"
STID_ALL_FILES, 	"すべてのファイル (*.*)"
STID_HELP_FILES_HLP, 	"ヘルプ ファイル (*.hlp)"
STID_FILE_NOT_FOUND_s	"'%s' が見つかりません。自分でこのファイルを探しますか?"
STID_NO_RICHEDIT	"リッチエディット実装が見つかりません... 終了します"
STID_PSH_INDEX,		"ヘルプ トピック: "
}

CONTEXT_MENU MENU
BEGIN
	POPUP ""
	BEGIN
		MENUITEM "コメント...",       MNID_CTXT_ANNOTATE
		MENUITEM "コピー",                MNID_CTXT_COPY
		MENUITEM "印刷...",            MNID_CTXT_PRINT
		POPUP    "フォント"
		BEGIN
			MENUITEM "小",       MNID_CTXT_FONTS_SMALL
			MENUITEM "標準",      MNID_CTXT_FONTS_NORMAL
			MENUITEM "大",       MNID_CTXT_FONTS_LARGE
		END
		POPUP   "Help always visible"
		BEGIN
			MENUITEM "Default",     MNID_CTXT_HELP_DEFAULT
			MENUITEM "Visible",     MNID_CTXT_HELP_VISIBLE
			MENUITEM "Non visible", MNID_CTXT_HELP_NONVISIBLE
		END
		MENUITEM "システム カラーを使う",   MNID_CTXT_SYSTEM_COLORS
	END
END
