/*
 *  Notepad (Japanese resources)
 *
 *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
 *  Proofread 1998 by David Lee Lambert <lamber45@egr.msu.edu>
 *  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
 */

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

LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT

MAIN_MENU MENU
{
 POPUP "ファイル(&F)" {
  MENUITEM "新規作成(&N)\tCtrl+N",           CMD_NEW
  MENUITEM "開く(&O)...\tCtrl+O",     CMD_OPEN
  MENUITEM "保存(&S)\tCtrl+S",     CMD_SAVE
  MENUITEM "名前を付けて保存(&A)...",       CMD_SAVE_AS
  MENUITEM SEPARATOR
  MENUITEM "印刷(&P)...\tCtrl+P",            CMD_PRINT
  MENUITEM "ページ設定(&T)...",    CMD_PAGE_SETUP
  MENUITEM "プリンタの設定(&R)...", CMD_PRINTER_SETUP
  MENUITEM SEPARATOR
  MENUITEM "終了(&X)",             CMD_EXIT
 }
POPUP "編集(&E)" {
  MENUITEM "元に戻す(&U)\tCtrl+Z",     CMD_UNDO
  MENUITEM SEPARATOR
  MENUITEM "切り取り(&T)\tCtrl+X",      CMD_CUT
  MENUITEM "コピー(&C)\tCtrl+C",     CMD_COPY
  MENUITEM "貼り付け(&P)\tCtrl+V",    CMD_PASTE
  MENUITEM "削除(&D)\tDel",      CMD_DELETE
  MENUITEM SEPARATOR
  MENUITEM "すべて選択(&A)\tCtrl+A",       CMD_SELECT_ALL
  MENUITEM "日付と時刻(&T)\tF5",    CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "長い行を折り返す(&W)",  CMD_WRAP
  MENUITEM "フォント(&F)...",          CMD_FONT
 }
POPUP "検索(&S)" {
  MENUITEM "検索(&S)...\tCtrl+F",   CMD_SEARCH
  MENUITEM "次を検索(&S)\tF3",  CMD_SEARCH_NEXT
 }
POPUP "ヘルプ(&H)" {
  MENUITEM "目次(&C)",         CMD_HELP_CONTENTS
  MENUITEM "検索(&S)...",        CMD_HELP_SEARCH
  MENUITEM "ヘルプの使い方(&H)",     CMD_HELP_ON_HELP
  MENUITEM SEPARATOR
  MENUITEM "メモ帳について(&A)", CMD_HELP_ABOUT_NOTEPAD
 }
}

/* Dialog `Page setup' */

DIALOG_PAGESETUP DIALOG 0, 0, 225, 95
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 9, "MS Shell Dlg"
CAPTION "ページ設定"
{
LTEXT    "ヘッダ(&H):",  0x140,   10, 07, 40, 15
EDITTEXT IDC_PAGESETUP_HEADERVALUE,   60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    "フッタ(&F):",  0x142,   10, 24, 40, 15
EDITTEXT IDC_PAGESETUP_FOOTERVALUE,   60, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX "マージン(&M):",      0x144,     10, 43,160, 45
LTEXT    "左(&L):",        0x145,   20, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_LEFTVALUE,     50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "上(&T):",         0x148,    20, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_TOPVALUE,      50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "右(&R):",       0x14B, 100, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_RIGHTVALUE,   130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "下(&B):",      0x14E,100, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_BOTTOMVALUE,  130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP

DEFPUSHBUTTON "OK",         IDOK,                   180,  3, 40, 15, WS_TABSTOP
PUSHBUTTON    "キャンセル",     IDCANCEL,               180, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    "ヘルプ(&H)",       IDHELP,                180, 39, 40, 15, WS_TABSTOP
}

STRINGTABLE DISCARDABLE
{
STRING_PAGESETUP_HEADERVALUE,   "&f"
STRING_PAGESETUP_FOOTERVALUE,   "&p ページ"

STRING_NOTEPAD,                                 "メモ帳"
STRING_ERROR,                                   "エラー"
STRING_WARNING,                                 "警告"
STRING_INFO,                                    "情報"

STRING_UNTITLED,                                "(無題)"

STRING_ALL_FILES,                               "全てのファイル (*.*)"
STRING_TEXT_FILES_TXT,                  "テキストファイル (*.txt)"

STRING_TOOLARGE,                                "ファイル '%s' のサイズは大きすぎるため、メモ帳では編集できません。\n \
別のエディタを使用して下さい。"
STRING_NOTEXT,                                  "何も入力されていません。\
\n何か入力してから実行して下さい。"
STRING_DOESNOTEXIST,                            "ファイル '%s'\nは存在しません\n\n \
新しいファイルを作成しますか ?"
STRING_NOTSAVED,                                "ファイル '%s'\nは変更されています\n\n \
変更を保存しますか ?"
STRING_NOTFOUND,                                        "'%s' は見つかりませんでした"
STRING_OUT_OF_MEMORY,                   "この操作を実行するためのメモリが\
足りません。\nメモリの空きを増やすためにいくつかのアプリケーションを\n終了して\
下さい。"

}

#pragma code_page(default)
