/*
 * OleView (Simplified and Traditional Chinese Resources)
 *
 * 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 "resource.h"

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

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

DLG_CREATEINSTON DIALOG 0, 0, 250, 41
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "连接到另外一台计算机"
FONT 9, "MS Shell Dlg"
{
    LTEXT         "计算机名称(&M)：", -1, 5, 6, 190, 8
    EDITTEXT    IDC_MACHINE, 5, 16, 190, 12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    DEFPUSHBUTTON "确定(&O)", IDOK, 200, 5, 45, 14
    PUSHBUTTON    "取消(&C)", IDCANCEL, 200, 22, 45, 14
}

DLG_SYSCONF DIALOG 0, 0, 170, 100
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "系统设置"
FONT 9, "MS Shell Dlg"
{
    LTEXT         "系统设置", -1, 5, 6, 160, 8
    CHECKBOX      "启用分布式CO&M", IDC_ENABLEDCOM, 5, 20, 160, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX
    CHECKBOX      "启用远程连接(限&Win95)", IDC_ENABLEREMOTE, 5, 35, 160, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX
    LTEXT         "这些设置只改变寄存器值(register values)。\n它对Wine的性能没有影响。", -1, 5, 50, 160, 40 /* 译文待议 */
    DEFPUSHBUTTON "确定(&O)", IDOK, 70, 80, 45, 14
    PUSHBUTTON    "取消(&C)", IDCANCEL, 120, 80, 45, 14
}

DLG_DEFAULT_IV DIALOG 0, 0, 280, 50
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "默认界面查看器"
FONT 9, "MS Shell Dlg"
{
    LTEXT   "界面", -1, 5, 6, 50, 8
    LTEXT   "", IDC_LABEL, 60, 6, 145, 8
    LTEXT   "IID：", -1, 5, 16, 50, 8
    LTEXT   "", IDC_IDENTIFIER, 60, 16, 165, 8
    DEFPUSHBUTTON "关闭(&C)", IDCANCEL, 230, 6, 45, 14
    PUSHBUTTON    "查看类型信息(&V)", IDC_VIEWTYPEINFO, 6, 31, 70, 14, WS_DISABLED
}

DLG_IPERSIST_IV DIALOG 0, 0, 280, 29
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "IPersist 界面查看器"
FONT 9, "MS Shell Dlg"
{
    LTEXT   "类别名称：", -1, 5, 6, 50, 8
    LTEXT   "", IDC_LABEL, 60, 6, 145, 8
    LTEXT   "CLSID：", -1, 5, 16, 50, 8
    LTEXT   "", IDC_IDENTIFIER, 60, 16, 165, 8
    DEFPUSHBUTTON "关闭(&C)", IDCANCEL, 230, 6, 45, 14
}

DLG_IPERSISTSTREAM_IV DIALOG 0, 0, 280, 68
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "IPersistStream 界面查看器"
FONT 9, "MS Shell Dlg"
{
    LTEXT   "类别名称：", -1, 5, 6, 50, 8
    LTEXT   "", IDC_LABEL, 60, 6, 145, 8
    LTEXT   "CLSID：", -1, 5, 16, 50, 8
    LTEXT   "", IDC_IDENTIFIER, 60, 16, 165, 8
    DEFPUSHBUTTON "关闭(&C)", IDCANCEL, 230, 6, 45, 14
    PUSHBUTTON    "已修改(&I)", IDC_ISDIRTY_BUTTON, 6, 31, 50, 14
    LTEXT   "???", IDC_ISDIRTY, 60, 34, 145, 8
    PUSHBUTTON    "获取最大(&G)", IDC_GETSIZEMAX_BUTTON, 6, 49, 50, 14
    LTEXT   "???", IDC_GETSIZEMAX, 60, 52, 145, 8
}

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL

DLG_CREATEINSTON DIALOG 0, 0, 250, 41
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "連接到另外一台電腦"
FONT 9, "MS Shell Dlg"
{
    LTEXT         "電腦名稱(&M):", -1, 5, 6, 190, 8
    EDITTEXT    IDC_MACHINE, 5, 16, 190, 12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    DEFPUSHBUTTON "確定(&O)", IDOK, 200, 5, 45, 14
    PUSHBUTTON    "取消(&C)", IDCANCEL, 200, 22, 45, 14
}

DLG_SYSCONF DIALOG 0, 0, 170, 100
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "系統設定"
FONT 9, "MS Shell Dlg"
{
    LTEXT         "系統設定", -1, 5, 6, 160, 8
    CHECKBOX      "啟用分佈式CO&M", IDC_ENABLEDCOM, 5, 20, 160, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX
    CHECKBOX      "啟用遠程連接(限&Win95)", IDC_ENABLEREMOTE, 5, 35, 160, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX
    LTEXT         "這些設定只改變註冊表值.\n它對Wine的性能沒有影響.", -1, 5, 50, 160, 40
    DEFPUSHBUTTON "確定(&O)", IDOK, 70, 80, 45, 14
    PUSHBUTTON    "取消(&C)", IDCANCEL, 120, 80, 45, 14
}

DLG_DEFAULT_IV DIALOG 0, 0, 280, 50
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "默認界面查看器"
FONT 9, "MS Shell Dlg"
{
    LTEXT   "界面", -1, 5, 6, 50, 8
    LTEXT   "", IDC_LABEL, 60, 6, 145, 8
    LTEXT   "IID:", -1, 5, 16, 50, 8
    LTEXT   "", IDC_IDENTIFIER, 60, 16, 165, 8
    DEFPUSHBUTTON "關閉(&C)", IDCANCEL, 230, 6, 45, 14
    PUSHBUTTON    "查看類型資訊(&V)", IDC_VIEWTYPEINFO, 6, 31, 70, 14, WS_DISABLED
}

DLG_IPERSIST_IV DIALOG 0, 0, 280, 29
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "IPersist 界面查看器"
FONT 9, "MS Shell Dlg"
{
    LTEXT   "類別名稱:", -1, 5, 6, 50, 8
    LTEXT   "", IDC_LABEL, 60, 6, 145, 8
    LTEXT   "CLSID:", -1, 5, 16, 50, 8
    LTEXT   "", IDC_IDENTIFIER, 60, 16, 165, 8
    DEFPUSHBUTTON "關閉(&C)", IDCANCEL, 230, 6, 45, 14
}

DLG_IPERSISTSTREAM_IV DIALOG 0, 0, 280, 68
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "IPersistStream 界面查看器"
FONT 9, "MS Shell Dlg"
{
    LTEXT   "類別名稱:", -1, 5, 6, 50, 8
    LTEXT   "", IDC_LABEL, 60, 6, 145, 8
    LTEXT   "CLSID:", -1, 5, 16, 50, 8
    LTEXT   "", IDC_IDENTIFIER, 60, 16, 165, 8
    DEFPUSHBUTTON "關閉(&C)", IDCANCEL, 230, 6, 45, 14
    PUSHBUTTON    "已修改(&I)", IDC_ISDIRTY_BUTTON, 6, 31, 50, 14
    LTEXT   "???", IDC_ISDIRTY, 60, 34, 145, 8
    PUSHBUTTON    "獲取最大(&G)", IDC_GETSIZEMAX_BUTTON, 6, 49, 50, 14
    LTEXT   "???", IDC_GETSIZEMAX, 60, 52, 145, 8
}
