/*
 * 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
 */

#include "resource.h"

/* 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
