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

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

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 "搜索下一个(&S)\tF3", CMD_SEARCH_NEXT
  MENUITEM "替换...\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 "确定", 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
{
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
  MENUITEM "&Replace...\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 "確定", 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
{
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請關閉一些程式後再試。"
}
