/*
 * Locale definitions for Hindi
 *
 * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#pragma code_page(0) /* Unicode only */

STRINGTABLE LANGUAGE LANG_HINDI, SUBLANG_DEFAULT
{
  LOCALE_FONTSIGNATURE L"\x802f\x8000\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
  LOCALE_ICALENDARTYPE L"1"
  LOCALE_ICENTURY L"1"
  LOCALE_ICOUNTRY L"91"
  LOCALE_ICURRDIGITS L"2"
  LOCALE_ICURRENCY L"2"
  LOCALE_IDATE L"1"
  LOCALE_IDAYLZERO L"1"
  LOCALE_IDEFAULTANSICODEPAGE L"0"
  LOCALE_IDEFAULTCODEPAGE L"1"
  LOCALE_IDEFAULTCOUNTRY L"91"
  LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
  LOCALE_IDEFAULTLANGUAGE L"0439"
  LOCALE_IDEFAULTMACCODEPAGE L"2"
  LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
  LOCALE_IDIGITS L"2"
  LOCALE_IDIGITSUBSTITUTION L"1"
  LOCALE_IFIRSTDAYOFWEEK L"0"
  LOCALE_IFIRSTWEEKOFYEAR L"0"
  LOCALE_IINTLCURRDIGITS L"2"
  LOCALE_ILANGUAGE L"0439"
  LOCALE_ILDATE L"1"
  LOCALE_ILZERO L"1"
  LOCALE_IMEASURE L"0"
  LOCALE_IMONLZERO L"1"
  LOCALE_INEGCURR L"12"
  LOCALE_INEGNUMBER L"1"
  LOCALE_INEGSEPBYSPACE L"1"
  LOCALE_INEGSIGNPOSN L"4"
  LOCALE_INEGSYMPRECEDES L"1"
  LOCALE_IOPTIONALCALENDAR L"0"
  LOCALE_IPAPERSIZE L"9"
  LOCALE_IPOSSEPBYSPACE L"1"
  LOCALE_IPOSSIGNPOSN L"4"
  LOCALE_IPOSSYMPRECEDES L"1"
  LOCALE_ITIME L"1"
  LOCALE_ITIMEMARKPOSN L"1"
  LOCALE_ITLZERO L"1"
  LOCALE_S1159 L"\x092a\x0942\x0930\x094d\x0935\x093e\x0939\x094d\x0928"
  LOCALE_S2359 L"\x0905\x092a\x0930\x093e\x0939\x094d\x0928"
  LOCALE_SABBREVCTRYNAME L"IND"
  LOCALE_SABBREVDAYNAME1 L"\x0938\x094b\x092e."
  LOCALE_SABBREVDAYNAME2 L"\x092e\x0902\x0917\x0932."
  LOCALE_SABBREVDAYNAME3 L"\x092c\x0941\x0927."
  LOCALE_SABBREVDAYNAME4 L"\x0917\x0941\x0930\x0941."
  LOCALE_SABBREVDAYNAME5 L"\x0936\x0941\x0915\x094d\x0930."
  LOCALE_SABBREVDAYNAME6 L"\x0936\x0928\x093f."
  LOCALE_SABBREVDAYNAME7 L"\x0930\x0935\x093f."
  LOCALE_SABBREVLANGNAME L"HIN"
  LOCALE_SABBREVMONTHNAME1 L"\x091c\x0928\x0935\x0930\x0940"
  LOCALE_SABBREVMONTHNAME2 L"\x092b\x0930\x0935\x0930\x0940"
  LOCALE_SABBREVMONTHNAME3 L"\x092e\x093e\x0930\x094d\x091a"
  LOCALE_SABBREVMONTHNAME4 L"\x0905\x092a\x094d\x0930\x0948\x0932"
  LOCALE_SABBREVMONTHNAME5 L"\x092e\x0908"
  LOCALE_SABBREVMONTHNAME6 L"\x091c\x0942\x0928"
  LOCALE_SABBREVMONTHNAME7 L"\x091c\x0941\x0932\x093e\x0908"
  LOCALE_SABBREVMONTHNAME8 L"\x0905\x0917\x0938\x094d\x0924"
  LOCALE_SABBREVMONTHNAME9 L"\x0938\x093f\x0924\x092e\x094d\x092c\x0930"
  LOCALE_SABBREVMONTHNAME10 L"\x0905\x0915\x094d\x0924\x0942\x092c\x0930"
  LOCALE_SABBREVMONTHNAME11 L"\x0928\x0935\x092e\x094d\x092c\x0930"
  LOCALE_SABBREVMONTHNAME12 L"\x0926\x093f\x0938\x092e\x094d\x092c\x0930"
  LOCALE_SABBREVMONTHNAME13 L""
  LOCALE_SCOUNTRY L"India"
  LOCALE_SCURRENCY L"\x0930\x0941"
  LOCALE_SDATE L"-"
  LOCALE_SDAYNAME1 L"\x0938\x094b\x092e\x0935\x093e\x0930"
  LOCALE_SDAYNAME2 L"\x092e\x0902\x0917\x0932\x0935\x093e\x0930"
  LOCALE_SDAYNAME3 L"\x092c\x0941\x0927\x0935\x093e\x0930"
  LOCALE_SDAYNAME4 L"\x0917\x0941\x0930\x0941\x0935\x093e\x0930"
  LOCALE_SDAYNAME5 L"\x0936\x0941\x0915\x094d\x0930\x0935\x093e\x0930"
  LOCALE_SDAYNAME6 L"\x0936\x0928\x093f\x0935\x093e\x0930"
  LOCALE_SDAYNAME7 L"\x0930\x0935\x093f\x0935\x093e\x0930"
  LOCALE_SDECIMAL L"."
  LOCALE_SENGCOUNTRY L"India"
  LOCALE_SENGCURRNAME L"Indian Rupee"
  LOCALE_SENGLANGUAGE L"Hindi"
  LOCALE_SGROUPING L"3;2;0"
  LOCALE_SINTLSYMBOL L"INR"
  LOCALE_SISO3166CTRYNAME L"IN"
  LOCALE_SISO639LANGNAME L"hi"
  LOCALE_SLANGUAGE L"Hindi"
  LOCALE_SLIST L","
  LOCALE_SLONGDATE L"dd MMMM yyyy"
  LOCALE_SMONDECIMALSEP L"."
  LOCALE_SMONGROUPING L"3;2;0"
  LOCALE_SMONTHNAME1 L"\x091c\x0928\x0935\x0930\x0940"
  LOCALE_SMONTHNAME2 L"\x092b\x0930\x0935\x0930\x0940"
  LOCALE_SMONTHNAME3 L"\x092e\x093e\x0930\x094d\x091a"
  LOCALE_SMONTHNAME4 L"\x0905\x092a\x094d\x0930\x0948\x0932"
  LOCALE_SMONTHNAME5 L"\x092e\x0908"
  LOCALE_SMONTHNAME6 L"\x091c\x0942\x0928"
  LOCALE_SMONTHNAME7 L"\x091c\x0941\x0932\x093e\x0908"
  LOCALE_SMONTHNAME8 L"\x0905\x0917\x0938\x094d\x0924"
  LOCALE_SMONTHNAME9 L"\x0938\x093f\x0924\x092e\x094d\x092c\x0930"
  LOCALE_SMONTHNAME10 L"\x0905\x0915\x094d\x0924\x0942\x092c\x0930"
  LOCALE_SMONTHNAME11 L"\x0928\x0935\x092e\x094d\x092c\x0930"
  LOCALE_SMONTHNAME12 L"\x0926\x093f\x0938\x092e\x094d\x092c\x0930"
  LOCALE_SMONTHNAME13 L""
  LOCALE_SMONTHOUSANDSEP L","
  LOCALE_SNATIVECTRYNAME L"\x092d\x093e\x0930\x0924"
  LOCALE_SNATIVECURRNAME L"\x0930\x0941\x092a\x092f\x093e"
  LOCALE_SNATIVEDIGITS L"0123456789"
  LOCALE_SNATIVELANGNAME L"\x0939\x093f\x0902\x0926\x0940"
  LOCALE_SNEGATIVESIGN L"-"
  LOCALE_SPOSITIVESIGN L""
  LOCALE_SSHORTDATE L"dd-MM-yyyy"
  LOCALE_SSORTNAME L"Default"
  LOCALE_STHOUSAND L","
  LOCALE_STIME L":"
  LOCALE_STIMEFORMAT L"HH:mm:ss"
  LOCALE_SYEARMONTH L"MMMM, yyyy"

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