/*
 * Locale definitions for Marathi
 *
 * 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_MARATHI, SUBLANG_DEFAULT
{
  LOCALE_FONTSIGNATURE L"\x802f\x8000\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "91"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "2"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "1"
  LOCALE_IDEFAULTANSICODEPAGE "0"
  LOCALE_IDEFAULTCODEPAGE "1"
  LOCALE_IDEFAULTCOUNTRY "91"
  LOCALE_IDEFAULTEBCDICCODEPAGE "500"
  LOCALE_IDEFAULTLANGUAGE "044e"
  LOCALE_IDEFAULTMACCODEPAGE "2"
  LOCALE_IDEFAULTUNIXCODEPAGE "65001"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "044e"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "1"
  LOCALE_INEGCURR "12"
  LOCALE_INEGNUMBER "1"
  LOCALE_INEGSEPBYSPACE "1"
  LOCALE_INEGSIGNPOSN "4"
  LOCALE_INEGSYMPRECEDES "1"
  LOCALE_INEUTRAL "0"
  LOCALE_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "1"
  LOCALE_IPOSSIGNPOSN "4"
  LOCALE_IPOSSYMPRECEDES "1"
  LOCALE_IREADINGLAYOUT "0"
  LOCALE_ITIME "1"
  LOCALE_ITIMEMARKPOSN "1"
  LOCALE_ITLZERO "1"
  LOCALE_S1159 "म.पू."
  LOCALE_S2359 "म.नं."
  LOCALE_SABBREVCTRYNAME "IND"
  LOCALE_SABBREVDAYNAME1 "सोम."
  LOCALE_SABBREVDAYNAME2 "मंगळ."
  LOCALE_SABBREVDAYNAME3 "बुध."
  LOCALE_SABBREVDAYNAME4 "गुरु."
  LOCALE_SABBREVDAYNAME5 "शुक्र."
  LOCALE_SABBREVDAYNAME6 "शनि."
  LOCALE_SABBREVDAYNAME7 "रवि."
  LOCALE_SABBREVLANGNAME "MAR"
  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 "India"
  LOCALE_SCURRENCY "रु"
  LOCALE_SDATE "-"
  LOCALE_SDAYNAME1 "सोमवार"
  LOCALE_SDAYNAME2 "मंगळवार"
  LOCALE_SDAYNAME3 "बुधवार"
  LOCALE_SDAYNAME4 "गुरुवार"
  LOCALE_SDAYNAME5 "शुक्रवार"
  LOCALE_SDAYNAME6 "शनिवार"
  LOCALE_SDAYNAME7 "रविवार"
  LOCALE_SDECIMAL "."
  LOCALE_SENGCOUNTRY "India"
  LOCALE_SENGCURRNAME "Indian Rupee"
  LOCALE_SENGLANGUAGE "Marathi"
  LOCALE_SGROUPING "3;2;0"
  LOCALE_SINTLSYMBOL "INR"
  LOCALE_SISO3166CTRYNAME "IN"
  LOCALE_SISO639LANGNAME "mr"
  LOCALE_SLANGUAGE "Marathi"
  LOCALE_SLIST ","
  LOCALE_SLONGDATE "dd MMMM yyyy"
  LOCALE_SMONDECIMALSEP "."
  LOCALE_SMONGROUPING "3;2;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 "mr-IN"
  LOCALE_SNAN "NaN"
  LOCALE_SNATIVECTRYNAME "भारत"
  LOCALE_SNATIVECURRNAME "रुपया"
  LOCALE_SNATIVEDIGITS "०१२३४५६७८९"
  LOCALE_SNATIVEDISPLAYNAME "मराठी (भारत)"
  LOCALE_SNATIVELANGNAME "मराठी"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "MAR "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Mlym;"
  LOCALE_SSHORTDATE "dd-MM-yyyy"
  LOCALE_SSHORTESTDAYNAME1 "सो"
  LOCALE_SSHORTESTDAYNAME2 "मं"
  LOCALE_SSHORTESTDAYNAME3 "बु"
  LOCALE_SSHORTESTDAYNAME4 "गु"
  LOCALE_SSHORTESTDAYNAME5 "शु"
  LOCALE_SSHORTESTDAYNAME6 "श"
  LOCALE_SSHORTESTDAYNAME7 "र"
  LOCALE_SSHORTTIME "HH:mm"
  LOCALE_SSORTNAME "Default"
  LOCALE_STHOUSAND ","
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "HH: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"
}
