/*
 * shell32 (Traditional Chinese Resource)
 *
 * Copyright 1998 Juergen Schmied
 * Copyright 2002 Tisheng Chen
 * 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 "shresdef.h"

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

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

/*
 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_CPANEL_NAME		"名称"
	IDS_CPANEL_DESCRIPTION	"描述"
END


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_CPANEL_NAME		"名稱"
	IDS_CPANEL_DESCRIPTION	"描述"
END
