/*
 * Locale definitions for Punjabi
 *
 * 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_PUNJABI, SUBLANG_DEFAULT
{
  LOCALE_FONTSIGNATURE L"\x002f\x8002\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
  LOCALE_ICALENDARTYPE L"1"
  LOCALE_ICENTURY L"0"
  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"0446"
  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"0446"
  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"0"
  LOCALE_ITIMEMARKPOSN L"1"
  LOCALE_ITLZERO L"1"
  LOCALE_S1159 L"\x0a38\x0a35\x0a47\x0a30\x0a47"
  LOCALE_S2359 L"\x0a36\x0a3e\x0a2e"
  LOCALE_SABBREVCTRYNAME L"IND"
  LOCALE_SABBREVDAYNAME1 L"\x0a38\x0a4b\x0a2e."
  LOCALE_SABBREVDAYNAME2 L"\x0a2e\x0a70\x0a17\x0a32."
  LOCALE_SABBREVDAYNAME3 L"\x0a2c\x0a41\x0a27."
  LOCALE_SABBREVDAYNAME4 L"\x0a35\x0a40\x0a30."
  LOCALE_SABBREVDAYNAME5 L"\x0a36\x0a41\x0a15\x0a30."
  LOCALE_SABBREVDAYNAME6 L"\x0a36\x0a28\x0a40."
  LOCALE_SABBREVDAYNAME7 L"\x0a10\x0a24."
  LOCALE_SABBREVLANGNAME L"PAN"
  LOCALE_SABBREVMONTHNAME1 L"\x0a1c\x0a28\x0a35\x0a30\x0a40"
  LOCALE_SABBREVMONTHNAME2 L"\x0a5e\x0a30\x0a35\x0a30\x0a40"
  LOCALE_SABBREVMONTHNAME3 L"\x0a2e\x0a3e\x0a30\x0a1a"
  LOCALE_SABBREVMONTHNAME4 L"\x0a05\x0a2a\x0a4d\x0a30\x0a48\x0a32"
  LOCALE_SABBREVMONTHNAME5 L"\x0a2e\x0a08"
  LOCALE_SABBREVMONTHNAME6 L"\x0a1c\x0a42\x0a28"
  LOCALE_SABBREVMONTHNAME7 L"\x0a1c\x0a41\x0a32\x0a3e\x0a08"
  LOCALE_SABBREVMONTHNAME8 L"\x0a05\x0a17\x0a38\x0a24"
  LOCALE_SABBREVMONTHNAME9 L"\x0a38\x0a24\x0a70\x0a2c\x0a30"
  LOCALE_SABBREVMONTHNAME10 L"\x0a05\x0a15\x0a24\x0a42\x0a2c\x0a30"
  LOCALE_SABBREVMONTHNAME11 L"\x0a28\x0a35\x0a70\x0a2c\x0a30"
  LOCALE_SABBREVMONTHNAME12 L"\x0a26\x0a38\x0a70\x0a2c\x0a30"
  LOCALE_SABBREVMONTHNAME13 L""
  LOCALE_SCOUNTRY L"India"
  LOCALE_SCURRENCY L"\x0a30\x0a41"
  LOCALE_SDATE L"-"
  LOCALE_SDAYNAME1 L"\x0a38\x0a4b\x0a2e\x0a35\x0a3e\x0a30"
  LOCALE_SDAYNAME2 L"\x0a2e\x0a70\x0a17\x0a32\x0a35\x0a3e\x0a30"
  LOCALE_SDAYNAME3 L"\x0a2c\x0a41\x0a27\x0a35\x0a3e\x0a30"
  LOCALE_SDAYNAME4 L"\x0a35\x0a40\x0a30\x0a35\x0a3e\x0a30"
  LOCALE_SDAYNAME5 L"\x0a36\x0a41\x0a71\x0a15\x0a30\x0a35\x0a3e\x0a30"
  LOCALE_SDAYNAME6 L"\x0a36\x0a28\x0a40\x0a1a\x0a30\x0a35\x0a3e\x0a30"
  LOCALE_SDAYNAME7 L"\x0a10\x0a24\x0a35\x0a3e\x0a30"
  LOCALE_SDECIMAL L"."
  LOCALE_SENGCOUNTRY L"India"
  LOCALE_SENGCURRNAME L"Indian Rupee"
  LOCALE_SENGLANGUAGE L"Punjabi"
  LOCALE_SGROUPING L"3;2;0"
  LOCALE_SINTLSYMBOL L"INR"
  LOCALE_SISO3166CTRYNAME L"IN"
  LOCALE_SISO639LANGNAME L"pa"
  LOCALE_SLANGUAGE L"Punjabi"
  LOCALE_SLIST L","
  LOCALE_SLONGDATE L"dd MMMM yyyy dddd"
  LOCALE_SMONDECIMALSEP L"."
  LOCALE_SMONGROUPING L"3;2;0"
  LOCALE_SMONTHNAME1 L"\x0a1c\x0a28\x0a35\x0a30\x0a40"
  LOCALE_SMONTHNAME2 L"\x0a5e\x0a30\x0a35\x0a30\x0a40"
  LOCALE_SMONTHNAME3 L"\x0a2e\x0a3e\x0a30\x0a1a"
  LOCALE_SMONTHNAME4 L"\x0a05\x0a2a\x0a4d\x0a30\x0a48\x0a32"
  LOCALE_SMONTHNAME5 L"\x0a2e\x0a08"
  LOCALE_SMONTHNAME6 L"\x0a1c\x0a42\x0a28"
  LOCALE_SMONTHNAME7 L"\x0a1c\x0a41\x0a32\x0a3e\x0a08"
  LOCALE_SMONTHNAME8 L"\x0a05\x0a17\x0a38\x0a24"
  LOCALE_SMONTHNAME9 L"\x0a38\x0a24\x0a70\x0a2c\x0a30"
  LOCALE_SMONTHNAME10 L"\x0a05\x0a15\x0a24\x0a42\x0a2c\x0a30"
  LOCALE_SMONTHNAME11 L"\x0a28\x0a35\x0a70\x0a2c\x0a30"
  LOCALE_SMONTHNAME12 L"\x0a26\x0a38\x0a70\x0a2c\x0a30"
  LOCALE_SMONTHNAME13 L""
  LOCALE_SMONTHOUSANDSEP L","
  LOCALE_SNATIVECTRYNAME L"\x0a2d\x0a3e\x0a30\x0a24"
  LOCALE_SNATIVECURRNAME L"\x0a30\x0a41\x0a2a\x0a3f\x0a06"
  LOCALE_SNATIVEDIGITS L"\x0a66\x0a67\x0a68\x0a69\x0a6a\x0a6b\x0a6c\x0a6d\x0a6e\x0a6f"
  LOCALE_SNATIVELANGNAME L"\x0a2a\x0a70\x0a1c\x0a3e\x0a2c\x0a40"
  LOCALE_SNEGATIVESIGN L"-"
  LOCALE_SPOSITIVESIGN L""
  LOCALE_SSHORTDATE L"dd-MM-yy"
  LOCALE_SSORTNAME L"Default"
  LOCALE_STHOUSAND L","
  LOCALE_STIME L":"
  LOCALE_STIMEFORMAT L"tt 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"
}
