/*
 * Locale definitions for Gujarati
 *
 * 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) /* Unicode only */

STRINGTABLE LANGUAGE LANG_GUJARATI, SUBLANG_DEFAULT
{
  LOCALE_FONTSIGNATURE L"\x002f\x8004\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "0"
  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 "0447"
  LOCALE_IDEFAULTMACCODEPAGE "2"
  LOCALE_IDEFAULTUNIXCODEPAGE "65001"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0447"
  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_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "1"
  LOCALE_IPOSSIGNPOSN "4"
  LOCALE_IPOSSYMPRECEDES "1"
  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 "GUJ"
  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 "Gujarati"
  LOCALE_SGROUPING "3;2;0"
  LOCALE_SINTLSYMBOL "INR"
  LOCALE_SISO3166CTRYNAME "IN"
  LOCALE_SISO639LANGNAME "gu"
  LOCALE_SLANGUAGE "Gujarati"
  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 "gu-IN"
  LOCALE_SNATIVECTRYNAME "ભારત"
  LOCALE_SNATIVECURRNAME "રૂપિયો"
  LOCALE_SNATIVEDIGITS "૦૧૨૩૪૫૬૭૮૯"
  LOCALE_SNATIVELANGNAME "ગુજરાતી"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Gujr;"
  LOCALE_SSHORTDATE "dd-MM-yy"
  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"
}
