/*
 * shell32 (Traditional Chinese Resource)
 *
 * Copyright 1998 Juergen Schmied
 * Copyright 2002 Tisheng Chen
 * Copyright 2008 Hongbo Ni <hongbo.at.njstar.com>
 * Copyright 2010 Cheer Xiao <xiaqqaix.at.gmail.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 "shresdef.h"

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

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

MENU_001 MENU DISCARDABLE
BEGIN
	MENUITEM "大图标 (&G)",		FCIDM_SHVIEW_BIGICON
	MENUITEM "小图标 (&M)",		FCIDM_SHVIEW_SMALLICON
	MENUITEM "列表 (&L)",		FCIDM_SHVIEW_LISTVIEW
	MENUITEM "详细信息 (&D)",	FCIDM_SHVIEW_REPORTVIEW
END

/*
 shellview background menu
*/
MENU_002 MENU DISCARDABLE
BEGIN
	POPUP ""
	BEGIN
	  POPUP "查看 (&V)"
	  BEGIN
	    MENUITEM "大图标 (&G)",		FCIDM_SHVIEW_BIGICON
	    MENUITEM "小图标 (&M)",		FCIDM_SHVIEW_SMALLICON
	    MENUITEM "列表 (&L)",		FCIDM_SHVIEW_LISTVIEW
	    MENUITEM "详细信息 (&D)",	FCIDM_SHVIEW_REPORTVIEW
	  END
	  MENUITEM SEPARATOR
	  POPUP "排列图标 (&I)"
	  BEGIN
	    MENUITEM "按名字 (&N)",	0x30	/* column 0 */
	    MENUITEM "按类型 (&T)",	0x32	/* column 2 */
	    MENUITEM "按大小 (&S)",	0x31	/* ... */
	    MENUITEM "按日期 (&D)",	0x33
	    MENUITEM SEPARATOR
	    MENUITEM "自动排列 (&A)",	FCIDM_SHVIEW_AUTOARRANGE
	  END
	  MENUITEM "对齐图标",	FCIDM_SHVIEW_SNAPTOGRID
	  MENUITEM SEPARATOR
	  MENUITEM "刷新",		FCIDM_SHVIEW_REFRESH
	  MENUITEM SEPARATOR
	  MENUITEM "粘贴",		FCIDM_SHVIEW_INSERT
	  MENUITEM "粘贴快捷方式",	FCIDM_SHVIEW_INSERTLINK
	  MENUITEM SEPARATOR
	  POPUP "新建"
	  BEGIN
	    MENUITEM "新文件夹 (&F)",	FCIDM_SHVIEW_NEWFOLDER
	    MENUITEM "新快捷方式 (&L)",	FCIDM_SHVIEW_NEWLINK
	    MENUITEM SEPARATOR
	  END
	  MENUITEM SEPARATOR
	  MENUITEM "属性",	FCIDM_SHVIEW_PROPERTIES
	END
END

/*
 shellview item menu
*/
MENU_SHV_FILE MENU DISCARDABLE
BEGIN
	POPUP ""
	BEGIN
	  MENUITEM "选择(&S)"		FCIDM_SHVIEW_OPEN
	  MENUITEM "文件管理器(&X)",FCIDM_SHVIEW_EXPLORE
	  MENUITEM "打开(&O)",		FCIDM_SHVIEW_OPEN
	  MENUITEM SEPARATOR
	  MENUITEM "剪切(&U)",		FCIDM_SHVIEW_CUT
	  MENUITEM "复制(&C)",		FCIDM_SHVIEW_COPY
	  MENUITEM SEPARATOR
	  MENUITEM "创建快捷方式(&L)",	FCIDM_SHVIEW_CREATELINK
	  MENUITEM "删除(&D)",		FCIDM_SHVIEW_DELETE
	  MENUITEM "改名(&R)",		FCIDM_SHVIEW_RENAME
	  MENUITEM SEPARATOR
	  MENUITEM "属性(&P)",		FCIDM_SHVIEW_PROPERTIES
	END
END

MENU_CPANEL MENU
BEGIN
    POPUP "文件(&F)"
    BEGIN
        MENUITEM SEPARATOR
        MENUITEM "退出(&x)", IDM_CPANEL_EXIT
    END

    POPUP "查看(&V)"
    BEGIN
        MENUITEM "大图标(&g)", FCIDM_SHVIEW_BIGICON
        MENUITEM "小图标(&m)", FCIDM_SHVIEW_SMALLICON
        MENUITEM "列表(&L)", FCIDM_SHVIEW_LISTVIEW
        MENUITEM "详细信息(&D)", FCIDM_SHVIEW_REPORTVIEW
    END

    POPUP "帮助(&H)"
    BEGIN
        MENUITEM "关于控制面板(&A)...", IDM_CPANEL_ABOUT
    END
END

SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "选择文件夹"
FONT 8, "MS Shell Dlg"
{
 DEFPUSHBUTTON "确定", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "取消", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP
 LTEXT "", IDD_TITLE, 4, 4, 180, 12
 LTEXT "", IDD_STATUS, 4, 25, 180, 12
 CONTROL "", IDD_TREEVIEW, "SysTreeView32",
	TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
	WS_BORDER | WS_TABSTOP,
	4, 40, 180, 120
}

SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "选择文件夹"
FONT 8, "MS Shell Dlg"
{
 LTEXT "", IDD_TITLE, 10, 8, 198, 24
 LTEXT "", IDD_STATUS, 10, 25, 198, 12
 LTEXT "文件夹:", IDD_FOLDER, 10, 156, 40, 12
 CONTROL "", IDD_TREEVIEW, "SysTreeView32",
	TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
	WS_BORDER | WS_TABSTOP,
	12, 38, 194, 105
 EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "创建新文件夹 (&M)", IDD_MAKENEWFOLDER, 12, 174, 70, 14, WS_GROUP | WS_TABSTOP
 DEFPUSHBUTTON "确定", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "取消", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP
}

SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "消息"
FONT 8, "MS Shell Dlg"
{
    DEFPUSHBUTTON "是 (&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "全部选是 (&A)", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "否 (&N)", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "取消 (&C)", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP
    ICON "", IDD_ICON, 10, 10, 16, 16
    LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0
}

SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 220, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "关于 %s"
FONT 9, "MS Shell Dlg"
{
 DEFPUSHBUTTON "确定", IDOK, 153, 133, 60, 12, WS_TABSTOP
 PUSHBUTTON "使用许可(&L)...", IDC_ABOUT_LICENSE, 153, 113, 60, 12, WS_TABSTOP
 LISTBOX IDC_ABOUT_LISTBOX, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
 ICON "", stc1, 10, 10, 30, 30
 LTEXT "", IDC_ABOUT_STATIC_TEXT1, 40, 10, 170, 10
 LTEXT "", IDC_ABOUT_STATIC_TEXT2, 40, 22, 170, 10
 LTEXT "运行于 %s", IDC_ABOUT_STATIC_TEXT3, 42, 34, 170, 10
 LTEXT "Wine 开发人员:", IDC_ABOUT_WINE_TEXT, 8, 55, 137, 10
}

SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION ""
FONT 9, "MS Shell Dlg"
{
 ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
 LTEXT "输入程序，目录，文件或者Internet资源名，Wine将为您打开它。", 12289, 36, 11, 182, 18
 LTEXT "打开(&O):", 12305, 7, 39, 24, 10
 CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
 DEFPUSHBUTTON "确定", IDOK, 62, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "取消", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "浏览(&B)...", 12288, 170, 63, 50, 14, WS_TABSTOP
}

STRINGTABLE
{
		/*	columns in the shellview	*/
	IDS_SHV_COLUMN1		"文件"
	IDS_SHV_COLUMN2		"大小"
	IDS_SHV_COLUMN3		"类型"
	IDS_SHV_COLUMN4		"修改"
	IDS_SHV_COLUMN5		"属性"
	IDS_SHV_COLUMN6		"使用空间"
	IDS_SHV_COLUMN7		"剩余空间"
	IDS_SHV_COLUMN8		"名称"
	IDS_SHV_COLUMN9		"备注"
	IDS_SHV_COLUMN10	"所有者" /**/
	IDS_SHV_COLUMN11	"群组" /**/
	IDS_SHV_COLUMN_DELFROM	"原位置" /**/
	IDS_SHV_COLUMN_DELDATE	"删除日期"
	IDS_SHV_COL_DOCS	"文档" /**/
	IDS_SHV_COL_STATUS	"状态"
	IDS_SHV_COL_LOCATION	"位置"
	IDS_SHV_COL_MODEL	"型号" /**/

	        /* special folders */
	IDS_DESKTOP		"桌面"
	IDS_MYCOMPUTER		"我的电脑"
	IDS_RECYCLEBIN_FOLDER_NAME      "Trash"
	IDS_CONTROLPANEL	"控制面板"

		/* context menus */
	IDS_VIEW_LARGE		"大图标 (&G)"
	IDS_VIEW_SMALL		"小图标 (&M)"
	IDS_VIEW_LIST		"列表 (&L)"
	IDS_VIEW_DETAILS	"详细信息 (&D)"
	IDS_SELECT		"选择"
	IDS_OPEN		"打开"

	IDS_CREATEFOLDER_DENIED "无法创建新文件夹: 拒绝访问."
	IDS_CREATEFOLDER_CAPTION "创建新文件夹时发生了错误"
	IDS_DELETEITEM_CAPTION "确认删除文件"
	IDS_DELETEFOLDER_CAPTION "确认删除文件夹"
	IDS_DELETEITEM_TEXT "真的删除 '%1'?"
	IDS_DELETEMULTIPLE_TEXT "真的删除这 %1 项?"
	IDS_DELETESELECTED_TEXT "真的删除选中项?"
	IDS_TRASHITEM_TEXT "真的把 '%1' 送入回收站?"
	IDS_TRASHFOLDER_TEXT "真的把 '%1' 及其全部内容送入回收站?"
	IDS_TRASHMULTIPLE_TEXT "真的把这 %1 项送入回收站?"
	IDS_CANTTRASH_TEXT "'%1' 一项无法送入回收站. 要彻底删除吗?"
	IDS_OVERWRITEFILE_TEXT "已存在名为 '%1' 的文件.\n\n要替换吗?"
	IDS_OVERWRITEFILE_CAPTION "确认覆盖文件"
	IDS_OVERWRITEFOLDER_TEXT "已存在名为 '%1' 的文件夹.\n\n"\
	    "若选择合并原有同名文件将被替换. 真的要合并吗?"

	    /* message box strings */
	    IDS_RESTART_TITLE       "重启"
	    IDS_RESTART_PROMPT      "要模拟 Windows 重启吗?"
	    IDS_SHUTDOWN_TITLE      "关闭" /**/
	    IDS_SHUTDOWN_PROMPT     "要关闭 Wine 会话吗?"

	    /* Run File dialog */
	    IDS_RUNDLG_ERROR           "无法显示运行文件对话框 (内部错误)"
	    IDS_RUNDLG_BROWSE_ERROR    "无法显示浏览对话框 (内部错误)"
	    IDS_RUNDLG_BROWSE_CAPTION  "浏览"
	    IDS_RUNDLG_BROWSE_FILTER   "可执行文件\0*.exe\0所有文件\0*.*\0\0"

	    /* shell folder path default values */
	IDS_PROGRAMS                "Start Menu\\Programs"
	IDS_PERSONAL                "My Documents"
	IDS_FAVORITES               "Favorites"
	IDS_STARTUP                 "Start Menu\\Programs\\StartUp"
	IDS_RECENT                  "Recent"
	IDS_SENDTO                  "SendTo"
	IDS_STARTMENU               "Start Menu"
	IDS_MYMUSIC                 "My Music"
	IDS_MYVIDEO                 "My Videos"
	IDS_DESKTOPDIRECTORY        "Desktop"
	IDS_NETHOOD                 "NetHood"
	IDS_TEMPLATES               "Templates"
	IDS_APPDATA                 "Application Data"
	IDS_PRINTHOOD               "PrintHood"
	IDS_LOCAL_APPDATA           "Local Settings\\Application Data"
	IDS_INTERNET_CACHE          "Local Settings\\Temporary Internet Files"
	IDS_COOKIES                 "Cookies"
	IDS_HISTORY                 "Local Settings\\History"
	IDS_PROGRAM_FILES           "Program Files"
	IDS_MYPICTURES              "My Pictures"
	IDS_PROGRAM_FILES_COMMON    "Program Files\\Common Files"
	IDS_COMMON_DOCUMENTS        "Documents"
	IDS_ADMINTOOLS              "Start Menu\\Programs\\Administrative Tools"
	IDS_COMMON_MUSIC            "Music"
	IDS_COMMON_PICTURES         "Pictures"
	IDS_COMMON_VIDEO            "Videos"
	IDS_CDBURN_AREA             "Local Settings\\Application Data\\Microsoft\\CD Burning"

	IDS_NEWFOLDER		"新文件夹" /**/

	IDS_CPANEL_TITLE	"Wine 控制面板"
	IDS_CPANEL_NAME		"名称"
	IDS_CPANEL_DESCRIPTION	"描述"

        IDS_SHLEXEC_NOASSOC         "找不到用于打开此类文件的 Windows 程序."
}

STRINGTABLE
{
IDS_LICENSE_CAPTION,            "Wine 使用许可"
IDS_LICENSE,
"Wine 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.\n\n\
Wine 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.\n\n\
You should have received a copy of the GNU Lesser General Public \
License along with Wine; if not, write to the Free Software \
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA."
}

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL

/*
 shellview item menu
*/
MENU_SHV_FILE MENU DISCARDABLE
BEGIN
	POPUP ""
	BEGIN
	  MENUITEM "選擇(&S)"		FCIDM_SHVIEW_OPEN
	  MENUITEM "檔案管理器(&x)",	FCIDM_SHVIEW_EXPLORE
	  MENUITEM "開啟(&O)",		FCIDM_SHVIEW_OPEN
	  MENUITEM SEPARATOR
	  MENUITEM "剪下(&u)",		FCIDM_SHVIEW_CUT
	  MENUITEM "複製(&C)",		FCIDM_SHVIEW_COPY
	  MENUITEM SEPARATOR
	  MENUITEM "生成連接(&L)",		FCIDM_SHVIEW_CREATELINK
	  MENUITEM "刪除(&D)",		FCIDM_SHVIEW_DELETE
	  MENUITEM "改名(&R)",		FCIDM_SHVIEW_RENAME
	  MENUITEM SEPARATOR
	  MENUITEM "屬性(&P)",		FCIDM_SHVIEW_PROPERTIES
	END
END

MENU_CPANEL MENU
BEGIN
    POPUP "檔案(&F)"
    BEGIN
        MENUITEM SEPARATOR
        MENUITEM "結束(&x)", IDM_CPANEL_EXIT
    END

    POPUP "檢視(&V)"
    BEGIN
        MENUITEM "大圖標(&g)", FCIDM_SHVIEW_BIGICON
        MENUITEM "小圖標(&m)", FCIDM_SHVIEW_SMALLICON
        MENUITEM "列表(&L)", FCIDM_SHVIEW_LISTVIEW
        MENUITEM "詳情(&D)", FCIDM_SHVIEW_REPORTVIEW
    END

    POPUP "幫助(&H)"
    BEGIN
        MENUITEM "關於控制面板(&A)...", IDM_CPANEL_ABOUT
    END
END

SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 220, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "關於 %s"
FONT 9, "MS Shell Dlg"
{
 DEFPUSHBUTTON "確定", IDOK, 153, 133, 60, 12, WS_TABSTOP
 PUSHBUTTON "使用許可(&l)...", IDC_ABOUT_LICENSE, 153, 113, 60, 12, WS_TABSTOP
 LISTBOX IDC_ABOUT_LISTBOX, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
 ICON "", stc1, 10, 10, 30, 30
 LTEXT "", IDC_ABOUT_STATIC_TEXT1, 40, 10, 170, 10
 LTEXT "", IDC_ABOUT_STATIC_TEXT2, 40, 22, 170, 10
 LTEXT "運行於 %s", IDC_ABOUT_STATIC_TEXT3, 42, 34, 170, 10
 LTEXT "Wine 開發人員 :", IDC_ABOUT_WINE_TEXT, 8, 55, 137, 10
}

SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION ""
FONT 9, "MS Shell Dlg"
{
 ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
 LTEXT "輸入程式，目錄，檔案或者Internet資源名，Wine將為您開啟它。", 12289, 36, 11, 182, 18
 LTEXT "打開(&O):", 12305, 7, 39, 24, 10
 CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
 DEFPUSHBUTTON "確定", IDOK, 62, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "取消", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "瀏覽(&B)...", 12288, 170, 63, 50, 14, WS_TABSTOP
}

/*	columns in the shellview	*/
STRINGTABLE
BEGIN
	IDS_SHV_COLUMN1		"檔案"
	IDS_SHV_COLUMN2		"大小"
	IDS_SHV_COLUMN3		"類型"
	IDS_SHV_COLUMN4		"已修改"
	IDS_SHV_COLUMN5		"屬性"
	IDS_SHV_COLUMN6		"使用空間"
	IDS_SHV_COLUMN7		"剩餘空間"
	IDS_SHV_COLUMN8		"名稱"
	IDS_SHV_COLUMN9		"備註"

	IDS_CPANEL_TITLE	"Wine 控制面板"
        IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied."
        IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder"
        IDS_DELETEITEM_CAPTION  "Confirm file deletion"
        IDS_DELETEFOLDER_CAPTION "Confirm folder deletion"
        IDS_DELETEITEM_TEXT     "Are you sure you want to delete '%1'?"
        IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?"
        IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?"
        IDS_TRASHITEM_TEXT      "Are you sure that you want to send '%1' to the Trash?"
        IDS_TRASHFOLDER_TEXT    "Are you sure that you want to send '%1' and all its content to the Trash?"
        IDS_TRASHMULTIPLE_TEXT  "Are you sure that you want to send these %1 items to the Trash?"
        IDS_CANTTRASH_TEXT      "The item '%1' can't be sent to Trash. Do you want to delete it instead?"
        IDS_OVERWRITEFILE_TEXT  "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite"
        IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
            "If the files in the destination folder have the same names as files in the\n"\
            "selected folder they will be replaced. Do you still want to move or copy\n"\
            "the folder?"
        IDS_NEWFOLDER           "New Folder"

	IDS_CPANEL_NAME		"名稱"
	IDS_CPANEL_DESCRIPTION	"描述"
END
