/*
 * shlwapi (Simplified and Traditional Chinese Resources)
 *
 * 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
 */

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

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "错误!"
FONT 9, "MS Song"
{
 LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20
 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8
 CHECKBOX "不要再显示这个讯息", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON L"确定(&O)" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP
 PUSHBUTTON L"取消(&C)" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP
 PUSHBUTTON L"是(&Y)" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP
 PUSHBUTTON L"否(&N)" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP
}

STRINGTABLE DISCARDABLE
{
    IDS_BYTES_FORMAT    "%ld 字节"
    IDS_TIME_INTERVAL_HOURS    " 小时"
    IDS_TIME_INTERVAL_MINUTES  " 分"
    IDS_TIME_INTERVAL_SECONDS  " 秒"
}

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL

IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "錯誤!"
FONT 8, "PMingLiu"
{
 LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20
 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8
 CHECKBOX "不要再顯示這個訊息", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON L"確定(&O)" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP
 PUSHBUTTON L"取消(&C)" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP
 PUSHBUTTON L"是(&Y)" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP
 PUSHBUTTON L"否(&N)" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP
}

STRINGTABLE DISCARDABLE
{
    IDS_BYTES_FORMAT    "%ld 字節"
    IDS_TIME_INTERVAL_HOURS    " 小時"
    IDS_TIME_INTERVAL_MINUTES  " 分"
    IDS_TIME_INTERVAL_SECONDS  " 秒"
}

#pragma code_page(default)
