/*
 * Locale definitions for Azeri (Cyrillic)
 *
 * 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_AZERI, SUBLANG_AZERI_CYRILLIC
{
  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 "994"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "3"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "1"
  LOCALE_IDEFAULTANSICODEPAGE "1251"
  LOCALE_IDEFAULTCODEPAGE "866"
  LOCALE_IDEFAULTCOUNTRY "994"
  LOCALE_IDEFAULTEBCDICCODEPAGE "20880"
  LOCALE_IDEFAULTLANGUAGE "082c"
  LOCALE_IDEFAULTMACCODEPAGE "10007"
  LOCALE_IDEFAULTUNIXCODEPAGE "28595"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "082c"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "1"
  LOCALE_INEGCURR "8"
  LOCALE_INEGNUMBER "1"
  LOCALE_INEGSEPBYSPACE "1"
  LOCALE_INEGSIGNPOSN "1"
  LOCALE_INEGSYMPRECEDES "0"
  LOCALE_INEUTRAL "0"
  LOCALE_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "1"
  LOCALE_IPOSSIGNPOSN "1"
  LOCALE_IPOSSYMPRECEDES "0"
  LOCALE_IREADINGLAYOUT "0"
  LOCALE_ITIME "1"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "0"
  LOCALE_S1159 ""
  LOCALE_S2359 ""
  LOCALE_SABBREVCTRYNAME "AZE"
  LOCALE_SABBREVDAYNAME1 "Бе"
  LOCALE_SABBREVDAYNAME2 "Ча"
  LOCALE_SABBREVDAYNAME3 "Ч"
  LOCALE_SABBREVDAYNAME4 L"\x04b8\x0430"
  LOCALE_SABBREVDAYNAME5 L"\x04b8"
  LOCALE_SABBREVDAYNAME6 "Ш"
  LOCALE_SABBREVDAYNAME7 "Б"
  LOCALE_SABBREVLANGNAME "AZE"
  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 "Azerbaijan"
  LOCALE_SCURRENCY "ман."
  LOCALE_SDATE "."
  LOCALE_SDAYNAME1 L"\x0411\x0430\x0437\x0430\x0440\x00a0\x0435\x0440\x0442\x04d9\x0441\x0438"
  LOCALE_SDAYNAME2 L"\x0427\x04d9\x0440\x0448\x04d9\x043d\x0431\x04d9\x00a0\x0430\x0445\x0448\x0430\x043c\x044b"
  LOCALE_SDAYNAME3 L"\x0427\x04d9\x0440\x0448\x04d9\x043d\x0431\x04d9"
  LOCALE_SDAYNAME4 L"\x04b8\x04af\x043c\x04d9\x00a0\x0430\x0445\x0448\x0430\x043c\x044b"
  LOCALE_SDAYNAME5 L"\x04b8\x04af\x043c\x04d9"
  LOCALE_SDAYNAME6 L"\x0428\x04d9\x043d\x0431\x04d9"
  LOCALE_SDAYNAME7 "Базар"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Azerbaijan"
  LOCALE_SENGCURRNAME "Azerbaijanian Manat"
  LOCALE_SENGLANGUAGE "Azeri (Cyrillic)"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "AZM"
  LOCALE_SISO3166CTRYNAME "AZ"
  LOCALE_SISO639LANGNAME "az"
  LOCALE_SLANGUAGE "Azeri (Cyrillic)"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "d MMMM yyyy"
  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 "az-AZ"
  LOCALE_SNATIVECTRYNAME L"\x0410\x0437\x04d9\x0440\x0431\x0430\x0458\x04b9\x0430\x043d"
  LOCALE_SNATIVECURRNAME "рубль"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME ""
  LOCALE_SNATIVELANGNAME L"\x0410\x0437\x04d9\x0440\x0431\x0430\x0458\x04b9\x0430\x043d"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "AZE "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Arab;"
  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"
}
