/*
 *  Notepad (Simplified and Traditional Chinese resources)
 *
 *  Copyright 2002 liuspider <liuspider@yahoo.com>
 *  Copyright 2008 Hongbo Ni <hongbo.at.njstar.com>
 *
 * 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"

/* Chinese text is encoded in UTF-8 */
#pragma code_page(65001)

MAIN_MENU MENU LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
{
 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 "退出(&E)",             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)",             CMD_SELECT_ALL
  MENUITEM "插入日期、时间(&T)\tF5", CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "自动换行(&W)",        CMD_WRAP
  MENUITEM "字体(&F)...",          CMD_FONT
 }
POPUP "搜索(&S)" {
  MENUITEM "搜索(&S)...",           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
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
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 "确定", 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 LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
{
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请关闭一些程序后再试。"

}

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL

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 "結束(&E)", 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)", CMD_SELECT_ALL
  MENUITEM "插入日期時間(&T)\tF5", CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "自動換行(&W)", CMD_WRAP
  MENUITEM "字型(&F)...",  CMD_FONT
 }
POPUP "搜尋(&S)" {
  MENUITEM "尋找(&S)...", CMD_SEARCH
  MENUITEM "找下一個(&N)\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 "確定", 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請關閉一些程式後再試。"
}
