/*
 * Locale definitions for Kazakh
 *
 * 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_KAZAK, SUBLANG_DEFAULT
{
  LOCALE_FONTSIGNATURE L"\x0203\x8000\x3848\x0000\x0000\x0000\x0000\x0000\x0004\x0000\x0000\x0002\x0004\x0000\x0000\x0202"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "7"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "0"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "1"
  LOCALE_IDEFAULTANSICODEPAGE "1251"
  LOCALE_IDEFAULTCODEPAGE "866"
  LOCALE_IDEFAULTCOUNTRY "7"
  LOCALE_IDEFAULTEBCDICCODEPAGE "20880"
  LOCALE_IDEFAULTLANGUAGE "043f"
  LOCALE_IDEFAULTMACCODEPAGE "10007"
  LOCALE_IDEFAULTUNIXCODEPAGE "28595"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "043f"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "1"
  LOCALE_INEGCURR "1"
  LOCALE_INEGNUMBER "1"
  LOCALE_INEGSEPBYSPACE "0"
  LOCALE_INEGSIGNPOSN "3"
  LOCALE_INEGSYMPRECEDES "1"
  LOCALE_INEUTRAL "0"
  LOCALE_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "0"
  LOCALE_IPOSSIGNPOSN "3"
  LOCALE_IPOSSYMPRECEDES "1"
  LOCALE_IREADINGLAYOUT "0"
  LOCALE_ITIME "1"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "0"
  LOCALE_S1159 ""
  LOCALE_S2359 ""
  LOCALE_SABBREVCTRYNAME "KAZ"
  LOCALE_SABBREVDAYNAME1 "Дс"
  LOCALE_SABBREVDAYNAME2 "Сс"
  LOCALE_SABBREVDAYNAME3 "Ср"
  LOCALE_SABBREVDAYNAME4 "Бс"
  LOCALE_SABBREVDAYNAME5 "Жм"
  LOCALE_SABBREVDAYNAME6 "Сн"
  LOCALE_SABBREVDAYNAME7 "Жк"
  LOCALE_SABBREVLANGNAME "KKZ"
  LOCALE_SABBREVMONTHNAME1 L"\x049a\x0430\x04a3"
  LOCALE_SABBREVMONTHNAME2 L"\x0410\x049b\x043f"
  LOCALE_SABBREVMONTHNAME3 "Нау"
  LOCALE_SABBREVMONTHNAME4 L"\x0421\x04d9\x0443"
  LOCALE_SABBREVMONTHNAME5 "Мам"
  LOCALE_SABBREVMONTHNAME6 "Мау"
  LOCALE_SABBREVMONTHNAME7 "Шіл"
  LOCALE_SABBREVMONTHNAME8 "Там"
  LOCALE_SABBREVMONTHNAME9 L"\x049a\x044b\x0440"
  LOCALE_SABBREVMONTHNAME10 L"\x049a\x0430\x0437"
  LOCALE_SABBREVMONTHNAME11 L"\x049a\x0430\x0440"
  LOCALE_SABBREVMONTHNAME12 "Жел"
  LOCALE_SABBREVMONTHNAME13 ""
  LOCALE_SCOUNTRY "Kazakhstan"
  LOCALE_SCURRENCY "Т"
  LOCALE_SDATE "."
  LOCALE_SDAYNAME1 L"\x0414\x04af\x0439\x0441\x0435\x043d\x0431\x0456"
  LOCALE_SDAYNAME2 "Сейсенбі"
  LOCALE_SDAYNAME3 L"\x0421\x04d9\x0440\x0441\x0435\x043d\x0431\x0456"
  LOCALE_SDAYNAME4 "Бейсенбі"
  LOCALE_SDAYNAME5 L"\x0416\x04b1\x043c\x0430"
  LOCALE_SDAYNAME6 "Сенбі"
  LOCALE_SDAYNAME7 "Жексенбі"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Kazakhstan"
  LOCALE_SENGCURRNAME "Tenge"
  LOCALE_SENGLANGUAGE "Kazakh"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "KZT"
  LOCALE_SISO3166CTRYNAME "KZ"
  LOCALE_SISO639LANGNAME "kk"
  LOCALE_SLANGUAGE "Kazakh"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "d MMMM yyyy 'ж.'"
  LOCALE_SMONDECIMALSEP "-"
  LOCALE_SMONGROUPING "3;0"
  LOCALE_SMONTHNAME1 L"\x049b\x0430\x04a3\x0442\x0430\x0440"
  LOCALE_SMONTHNAME2 L"\x0430\x049b\x043f\x0430\x043d"
  LOCALE_SMONTHNAME3 "наурыз"
  LOCALE_SMONTHNAME4 L"\x0441\x04d9\x0443\x0456\x0440"
  LOCALE_SMONTHNAME5 "мамыр"
  LOCALE_SMONTHNAME6 "маусым"
  LOCALE_SMONTHNAME7 "шілде"
  LOCALE_SMONTHNAME8 "тамыз"
  LOCALE_SMONTHNAME9 L"\x049b\x044b\x0440\x043a\x04af\x0439\x0435\x043a"
  LOCALE_SMONTHNAME10 L"\x049b\x0430\x0437\x0430\x043d"
  LOCALE_SMONTHNAME11 L"\x049b\x0430\x0440\x0430\x0448\x0430"
  LOCALE_SMONTHNAME12 L"\x0436\x0435\x043b\x0442\x043e\x049b\x0441\x0430\x043d"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP " "
  LOCALE_SNAME "kk-KZ"
  LOCALE_SNATIVECTRYNAME L"\x049a\x0430\x0437\x0430\x049b\x0441\x0442\x0430\x043d"
  LOCALE_SNATIVECURRNAME "Т"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME ""
  LOCALE_SNATIVELANGNAME L"\x049a\x0430\x0437\x0430\x049b"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "KAZ "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Cyrl;"
  LOCALE_SSHORTDATE "dd.MM.yyyy"
  LOCALE_SSHORTESTDAYNAME1 "Дс"
  LOCALE_SSHORTESTDAYNAME2 "Сс"
  LOCALE_SSHORTESTDAYNAME3 "Ср"
  LOCALE_SSHORTESTDAYNAME4 "Бс"
  LOCALE_SSHORTESTDAYNAME5 "Жм"
  LOCALE_SSHORTESTDAYNAME6 "Сн"
  LOCALE_SSHORTESTDAYNAME7 "Жк"
  LOCALE_SSHORTTIME "H:mm"
  LOCALE_SSORTNAME "Default"
  LOCALE_STHOUSAND " "
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "H:mm:ss"
  LOCALE_SYEARMONTH "MMMM yyyy"

  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"
}
