/*
 * HTML Help (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

STRINGTABLE
BEGIN
    IDS_CONTENTS     "内容(&C)"
    IDS_INDEX        "目录(&N)"
    IDS_SEARCH       "搜寻(&S)"
    IDS_FAVORITES    "最爱(&I)"
END

STRINGTABLE
BEGIN
    IDTB_EXPAND      "显示"
    IDTB_CONTRACT    "隐藏"
    IDTB_STOP        "停止"
    IDTB_REFRESH     "刷新"
    IDTB_BACK        "向后"
    IDTB_HOME        "首页"
    IDTB_SYNC        "同步"
    IDTB_PRINT       "打印"
    IDTB_OPTIONS     "选项"
    IDTB_FORWARD     "向前"
    IDTB_NOTES       "说明"
    IDTB_BROWSE_FWD  "向前"
    IDTB_BROWSE_BACK "向后"
    IDTB_CONTENTS    "内容"
    IDTB_INDEX       "目录"
    IDTB_SEARCH      "搜寻"
    IDTB_HISTORY     "历史"
    IDTB_FAVORITES   "最爱"
    IDTB_JUMP1       "Jump1"
    IDTB_JUMP2       "Jump2"
    IDTB_CUSTOMIZE   "个性化"
    IDTB_ZOOM        "放大"
    IDTB_TOC_NEXT    "后一项"
    IDTB_TOC_PREV    "前一项"
END

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL

STRINGTABLE
BEGIN
    IDS_CONTENTS     "內容(&C)"
    IDS_INDEX        "目錄(&N)"
    IDS_SEARCH       "搜尋(&S)"
    IDS_FAVORITES    "最愛(&I)"
END

STRINGTABLE
BEGIN
    IDTB_EXPAND      "顯示"
    IDTB_CONTRACT    "隱藏"
    IDTB_STOP        "停止"
    IDTB_REFRESH     "刷新"
    IDTB_BACK        "向後"
    IDTB_HOME        "首頁"
    IDTB_SYNC        "同步"
    IDTB_PRINT       "列印"
    IDTB_OPTIONS     "選項"
    IDTB_FORWARD     "向前"
    IDTB_NOTES       "說明"
    IDTB_BROWSE_FWD  "向前"
    IDTB_BROWSE_BACK "向後"
    IDTB_CONTENTS    "內容"
    IDTB_INDEX       "目錄"
    IDTB_SEARCH      "搜尋"
    IDTB_HISTORY     "歷史"
    IDTB_FAVORITES   "最愛"
    IDTB_JUMP1       "Jump1"
    IDTB_JUMP2       "Jump2"
    IDTB_CUSTOMIZE   "個性化"
    IDTB_ZOOM        "放大"
    IDTB_TOC_NEXT    "後一項"
    IDTB_TOC_PREV    "前一項"
END

#pragma code_page(default)
