/*
 * Locale definitions for Mongolian (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_MONGOLIAN, 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 "0"
  LOCALE_ICOUNTRY "976"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "1"
  LOCALE_IDATE "2"
  LOCALE_IDAYLZERO "1"
  LOCALE_IDEFAULTANSICODEPAGE "1251"
  LOCALE_IDEFAULTCODEPAGE "866"
  LOCALE_IDEFAULTCOUNTRY "976"
  LOCALE_IDEFAULTEBCDICCODEPAGE "20880"
  LOCALE_IDEFAULTLANGUAGE "450"
  LOCALE_IDEFAULTMACCODEPAGE "10007"
  LOCALE_IDEFAULTUNIXCODEPAGE "28595"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "0"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0450"
  LOCALE_ILDATE "2"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "1"
  LOCALE_INEGCURR "5"
  LOCALE_INEGNUMBER "1"
  LOCALE_INEGSEPBYSPACE "0"
  LOCALE_INEGSIGNPOSN "1"
  LOCALE_INEGSYMPRECEDES "0"
  LOCALE_INEUTRAL "0"
  LOCALE_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "0"
  LOCALE_IPOSSIGNPOSN "1"
  LOCALE_IPOSSYMPRECEDES "0"
  LOCALE_IREADINGLAYOUT "3"
  LOCALE_ITIME "1"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "0"
  LOCALE_S1159 ""
  LOCALE_S2359 ""
  LOCALE_SABBREVCTRYNAME "MNG"
  LOCALE_SABBREVDAYNAME1 "Да"
  LOCALE_SABBREVDAYNAME2 "Мя"
  LOCALE_SABBREVDAYNAME3 "Лх"
  LOCALE_SABBREVDAYNAME4 L"\x041f\x04af"
  LOCALE_SABBREVDAYNAME5 "Ба"
  LOCALE_SABBREVDAYNAME6 "Бя"
  LOCALE_SABBREVDAYNAME7 "Ня"
  LOCALE_SABBREVLANGNAME "MON"
  LOCALE_SABBREVMONTHNAME1 "I"
  LOCALE_SABBREVMONTHNAME2 "II"
  LOCALE_SABBREVMONTHNAME3 "III"
  LOCALE_SABBREVMONTHNAME4 "IV"
  LOCALE_SABBREVMONTHNAME5 "V"
  LOCALE_SABBREVMONTHNAME6 "VI"
  LOCALE_SABBREVMONTHNAME7 "VII"
  LOCALE_SABBREVMONTHNAME8 "VШ"
  LOCALE_SABBREVMONTHNAME9 "IX"
  LOCALE_SABBREVMONTHNAME10 "X"
  LOCALE_SABBREVMONTHNAME11 "XI"
  LOCALE_SABBREVMONTHNAME12 "XII"
  LOCALE_SABBREVMONTHNAME13 ""
  LOCALE_SCOUNTRY "Mongolia"
  LOCALE_SCURRENCY L"\x20ae"
  LOCALE_SDATE "."
  LOCALE_SDAYNAME1 "Даваа"
  LOCALE_SDAYNAME2 "Мягмар"
  LOCALE_SDAYNAME3 "Лхагва"
  LOCALE_SDAYNAME4 L"\x041f\x04af\x0440\x044d\x0432"
  LOCALE_SDAYNAME5 "Баасан"
  LOCALE_SDAYNAME6 "Бямба"
  LOCALE_SDAYNAME7 "Ням"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Mongolia"
  LOCALE_SENGCURRNAME "Tugrik"
  LOCALE_SENGLANGUAGE "Mongolian"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "MNT"
  LOCALE_SISO3166CTRYNAME "MN"
  LOCALE_SISO639LANGNAME "mn"
  LOCALE_SLANGUAGE "Mongolian (Cyrillic)"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "yyyy 'оны' MMMM d"
  LOCALE_SMONDECIMALSEP ","
  LOCALE_SMONGROUPING "3;0"
  LOCALE_SMONTHNAME1 L"1\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440"
  LOCALE_SMONTHNAME2 "2 дугаар сар"
  LOCALE_SMONTHNAME3 "3 дугаар сар"
  LOCALE_SMONTHNAME4 L"4\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440"
  LOCALE_SMONTHNAME5 "5 дугаар сар"
  LOCALE_SMONTHNAME6 "6 дугаар сар"
  LOCALE_SMONTHNAME7 "7 дугаар сар"
  LOCALE_SMONTHNAME8 "8 дугаар сар"
  LOCALE_SMONTHNAME9 L"9\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440"
  LOCALE_SMONTHNAME10 "10 дугаар сар"
  LOCALE_SMONTHNAME11 L"11\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440"
  LOCALE_SMONTHNAME12 "12 дугаар сар"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP " "
  LOCALE_SNAME "mn-MN"
  LOCALE_SNATIVECTRYNAME "Монгол улс"
  LOCALE_SNATIVECURRNAME L"\x0422\x04e9\x0433\x0440\x04e9\x0433"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "Монгол хэл (Монгол улс)"
  LOCALE_SNATIVELANGNAME "Монгол хэл"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "MNG "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Cyrl;"
  LOCALE_SSHORTDATE "yy.MM.dd"
  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 "yyyy 'он' MMMM"

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