/*
 * Uninstaller (Simplified and Traditional Chinese Resource)
 *
 * 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 DISCARDABLE {
     IDS_APPNAME, "Wine 应有程序卸载管理器"
     IDS_UNINSTALLFAILED, "卸载命令运行失败 '%s', 可能是找不到可运行程序.\r\n你想把这项卸载命令从注册表中删除吗?"
}

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL

STRINGTABLE DISCARDABLE {
     IDS_APPNAME, "Wine 應有程式卸載管理器"
     IDS_UNINSTALLFAILED, "卸載指令執行失敗 '%s', 可能是找不到可執行程式.\r\n你想把這項卸載指令從註冊表中刪除嗎?"
}

#pragma code_page(default)
