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

#include "notepad_res.h"

/* 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
  MENUITEM "置き換える(&R)...\tCtrl+H",  CMD_REPLACE
 }
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
}

IDD_OFN_TEMPLATE  DIALOG  DISCARDABLE 50,50,300,15
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER
FONT 9, "MS Shell Dlg"
BEGIN
  LTEXT "文字コード:", -1, 5,0, 50,12
  COMBOBOX IDC_OFN_ENCCOMBO, 53,0, 156,48, WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST
END

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\
終了して下さい。"
STRING_UNICODE_LE,     "Unicode (UTF-16)"
STRING_UNICODE_BE,     "Unicode (UTF-16 big-endian)"

STRING_LOSS_OF_UNICODE_CHARACTERS,         "%s\n\
このファイルには、%s として保存すると失われてしまう Unicode 文字が含まれています。\n\
これらの文字を保存するには [キャンセル] をクリックし、[文字コード] リストから\n\
Unicode のいずれかを選択してください。\n\
続行しますか?"
}
