/*
 * Locale definitions for Chinese (Taiwan)
 *
 * Copyright 2002 Alexandre Julliard for CodeWeavers
 *
 * 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
 */

#pragma code_page(65001) /* UTF-8 */

STRINGTABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
{
  LOCALE_FONTSIGNATURE L"\x00a3\x8000\x7878\x38c9\x0016\x0000\x0000\x0000\x0000\x0010\x0000\x0000\x0000\x0010\x0000\x0000"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "886"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "0"
  LOCALE_IDATE "2"
  LOCALE_IDAYLZERO "0"
  LOCALE_IDEFAULTANSICODEPAGE "950"
  LOCALE_IDEFAULTCODEPAGE "950"
  LOCALE_IDEFAULTCOUNTRY "886"
  LOCALE_IDEFAULTEBCDICCODEPAGE "500"
  LOCALE_IDEFAULTLANGUAGE "0404"
  LOCALE_IDEFAULTMACCODEPAGE "10002"
  LOCALE_IDEFAULTUNIXCODEPAGE "950"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "6"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0404"
  LOCALE_ILDATE "2"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "0"
  LOCALE_INEGCURR "1"
  LOCALE_INEGNUMBER "1"
  LOCALE_INEGSEPBYSPACE "0"
  LOCALE_INEGSIGNPOSN "3"
  LOCALE_INEGSYMPRECEDES "1"
  LOCALE_INEUTRAL "0"
  LOCALE_IOPTIONALCALENDAR "2"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "0"
  LOCALE_IPOSSIGNPOSN "3"
  LOCALE_IPOSSYMPRECEDES "1"
  LOCALE_IREADINGLAYOUT "0"
  LOCALE_ITIME "0"
  LOCALE_ITIMEMARKPOSN "1"
  LOCALE_ITLZERO "1"
  LOCALE_S1159 "上午"
  LOCALE_S2359 "下午"
  LOCALE_SABBREVCTRYNAME "TWN"
  LOCALE_SABBREVDAYNAME1 "星期一"
  LOCALE_SABBREVDAYNAME2 "星期二"
  LOCALE_SABBREVDAYNAME3 "星期三"
  LOCALE_SABBREVDAYNAME4 "星期四"
  LOCALE_SABBREVDAYNAME5 "星期五"
  LOCALE_SABBREVDAYNAME6 "星期六"
  LOCALE_SABBREVDAYNAME7 "星期日"
  LOCALE_SABBREVLANGNAME "CHT"
  LOCALE_SABBREVMONTHNAME1 "一月"
  LOCALE_SABBREVMONTHNAME2 "二月"
  LOCALE_SABBREVMONTHNAME3 "三月"
  LOCALE_SABBREVMONTHNAME4 "四月"
  LOCALE_SABBREVMONTHNAME5 "五月"
  LOCALE_SABBREVMONTHNAME6 "六月"
  LOCALE_SABBREVMONTHNAME7 "七月"
  LOCALE_SABBREVMONTHNAME8 "八月"
  LOCALE_SABBREVMONTHNAME9 "九月"
  LOCALE_SABBREVMONTHNAME10 "十月"
  LOCALE_SABBREVMONTHNAME11 "十一月"
  LOCALE_SABBREVMONTHNAME12 "十二月"
  LOCALE_SABBREVMONTHNAME13 ""
  LOCALE_SCOUNTRY "Taiwan"
  LOCALE_SCURRENCY "NT$"
  LOCALE_SDATE "/"
  LOCALE_SDAYNAME1 "星期一"
  LOCALE_SDAYNAME2 "星期二"
  LOCALE_SDAYNAME3 "星期三"
  LOCALE_SDAYNAME4 "星期四"
  LOCALE_SDAYNAME5 "星期五"
  LOCALE_SDAYNAME6 "星期六"
  LOCALE_SDAYNAME7 "星期日"
  LOCALE_SDECIMAL "."
  LOCALE_SENGCOUNTRY "Taiwan"
  LOCALE_SENGCURRNAME "New Taiwan Dollar"
  LOCALE_SENGLANGUAGE "Chinese (Traditional)"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "TWD"
  LOCALE_SISO3166CTRYNAME "TW"
  LOCALE_SISO639LANGNAME "zh"
  LOCALE_SLANGUAGE "Chinese (Taiwan)"
  LOCALE_SLIST ","
  LOCALE_SLONGDATE "yyyy'年'M'月'd'日'"
  LOCALE_SMONDECIMALSEP "."
  LOCALE_SMONGROUPING "3;0"
  LOCALE_SMONTHNAME1 "一月"
  LOCALE_SMONTHNAME2 "二月"
  LOCALE_SMONTHNAME3 "三月"
  LOCALE_SMONTHNAME4 "四月"
  LOCALE_SMONTHNAME5 "五月"
  LOCALE_SMONTHNAME6 "六月"
  LOCALE_SMONTHNAME7 "七月"
  LOCALE_SMONTHNAME8 "八月"
  LOCALE_SMONTHNAME9 "九月"
  LOCALE_SMONTHNAME10 "十月"
  LOCALE_SMONTHNAME11 "十一月"
  LOCALE_SMONTHNAME12 "十二月"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP ","
  LOCALE_SNAME "zh-TW"
  LOCALE_SNATIVECTRYNAME "台灣"
  LOCALE_SNATIVECURRNAME "新台幣"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "中文(繁體) (台灣)"
  LOCALE_SNATIVELANGNAME "中文(繁體)"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "ZHT "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Hant;"
  LOCALE_SSHORTDATE "yyyy/M/d"
  LOCALE_SSHORTESTDAYNAME1 "一"
  LOCALE_SSHORTESTDAYNAME2 "二"
  LOCALE_SSHORTESTDAYNAME3 "三"
  LOCALE_SSHORTESTDAYNAME4 "四"
  LOCALE_SSHORTESTDAYNAME5 "五"
  LOCALE_SSHORTESTDAYNAME6 "六"
  LOCALE_SSHORTESTDAYNAME7 "日"
  LOCALE_SSHORTTIME "tt hh:mm"
  LOCALE_SSORTNAME "Stroke Count"
  LOCALE_STHOUSAND ","
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "tt hh:mm:ss"
  LOCALE_SYEARMONTH "yyyy'年'M'月'"

  LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
  LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
  LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
  LGRPID_GREEK+LGRPID_RES_BASE "Greek"
  LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
  LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
  LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
  LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
  LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
  LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
  LGRPID_THAI+LGRPID_RES_BASE "Thai"
  LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
  LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
  LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
  LGRPID_INDIC+LGRPID_RES_BASE "Indic"
  LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
  LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
