/*
 * Locale definitions for Konkani
 *
 * 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_KONKANI, 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"0457"
  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"0457"
  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"\x092e.\x092a\x0942."
  LOCALE_S2359 L"\x092e.\x0928\x0902."
  LOCALE_SABBREVCTRYNAME L"IND"
  LOCALE_SABBREVDAYNAME1 L"\x0938\x094b\x092e."
  LOCALE_SABBREVDAYNAME2 L"\x092e\x0902\x0917\x0933."
  LOCALE_SABBREVDAYNAME3 L"\x092c\x0941\x0927."
  LOCALE_SABBREVDAYNAME4 L"\x092c\x093f\x0930\x0947."
  LOCALE_SABBREVDAYNAME5 L"\x0938\x0941\x0915\x094d\x0930."
  LOCALE_SABBREVDAYNAME6 L"\x0936\x0947\x0928."
  LOCALE_SABBREVDAYNAME7 L"\x0906\x092f."
  LOCALE_SABBREVLANGNAME L"KNK"
  LOCALE_SABBREVMONTHNAME1 L"\x091c\x093e\x0928\x0947\x0935\x093e\x0930\x0940"
  LOCALE_SABBREVMONTHNAME2 L"\x092b\x0947\x092c\x094d\x0930\x0941\x0935\x093e\x0930\x0940"
  LOCALE_SABBREVMONTHNAME3 L"\x092e\x093e\x0930\x094d\x091a"
  LOCALE_SABBREVMONTHNAME4 L"\x090f\x092a\x094d\x0930\x093f\x0932"
  LOCALE_SABBREVMONTHNAME5 L"\x092e\x0947"
  LOCALE_SABBREVMONTHNAME6 L"\x091c\x0942\x0928"
  LOCALE_SABBREVMONTHNAME7 L"\x091c\x0941\x0932\x0948"
  LOCALE_SABBREVMONTHNAME8 L"\x0911\x0917\x0938\x094d\x091f"
  LOCALE_SABBREVMONTHNAME9 L"\x0938\x092a\x094d\x091f\x0947\x0902\x092c\x0930"
  LOCALE_SABBREVMONTHNAME10 L"\x0911\x0915\x094d\x091f\x094b\x092c\x0930"
  LOCALE_SABBREVMONTHNAME11 L"\x0928\x094b\x0935\x0947\x092e\x094d\x092c\x0930"
  LOCALE_SABBREVMONTHNAME12 L"\x0921\x093f\x0938\x0947\x0902\x092c\x0930"
  LOCALE_SABBREVMONTHNAME13 L""
  LOCALE_SCOUNTRY L"India"
  LOCALE_SCURRENCY L"\x0930\x0941"
  LOCALE_SDATE L"-"
  LOCALE_SDAYNAME1 L"\x0938\x094b\x092e\x093e\x0930"
  LOCALE_SDAYNAME2 L"\x092e\x0902\x0917\x0933\x093e\x0930"
  LOCALE_SDAYNAME3 L"\x092c\x0941\x0927\x0935\x093e\x0930"
  LOCALE_SDAYNAME4 L"\x092c\x093f\x0930\x0947\x0938\x094d\x0924\x093e\x0930"
  LOCALE_SDAYNAME5 L"\x0938\x0941\x0915\x094d\x0930\x093e\x0930"
  LOCALE_SDAYNAME6 L"\x0936\x0947\x0928\x0935\x093e\x0930"
  LOCALE_SDAYNAME7 L"\x0906\x092f\x0924\x093e\x0930"
  LOCALE_SDECIMAL L"."
  LOCALE_SENGCOUNTRY L"India"
  LOCALE_SENGCURRNAME L"Indian Rupee"
  LOCALE_SENGLANGUAGE L"Konkani"
  LOCALE_SGROUPING L"3;2;0"
  LOCALE_SINTLSYMBOL L"INR"
  LOCALE_SISO3166CTRYNAME L"IN"
  LOCALE_SISO639LANGNAME L"kok"
  LOCALE_SLANGUAGE L"Konkani"
  LOCALE_SLIST L","
  LOCALE_SLONGDATE L"dd MMMM yyyy"
  LOCALE_SMONDECIMALSEP L"."
  LOCALE_SMONGROUPING L"3;2;0"
  LOCALE_SMONTHNAME1 L"\x091c\x093e\x0928\x0947\x0935\x093e\x0930\x0940"
  LOCALE_SMONTHNAME2 L"\x092b\x0947\x092c\x094d\x0930\x0941\x0935\x093e\x0930\x0940"
  LOCALE_SMONTHNAME3 L"\x092e\x093e\x0930\x094d\x091a"
  LOCALE_SMONTHNAME4 L"\x090f\x092a\x094d\x0930\x093f\x0932"
  LOCALE_SMONTHNAME5 L"\x092e\x0947"
  LOCALE_SMONTHNAME6 L"\x091c\x0942\x0928"
  LOCALE_SMONTHNAME7 L"\x091c\x0941\x0932\x0948"
  LOCALE_SMONTHNAME8 L"\x0911\x0917\x0938\x094d\x091f"
  LOCALE_SMONTHNAME9 L"\x0938\x092a\x094d\x091f\x0947\x0902\x092c\x0930"
  LOCALE_SMONTHNAME10 L"\x0911\x0915\x094d\x091f\x094b\x092c\x0930"
  LOCALE_SMONTHNAME11 L"\x0928\x094b\x0935\x0947\x092e\x094d\x092c\x0930"
  LOCALE_SMONTHNAME12 L"\x0921\x093f\x0938\x0947\x0902\x092c\x0930"
  LOCALE_SMONTHNAME13 L""
  LOCALE_SMONTHOUSANDSEP L","
  LOCALE_SNATIVECTRYNAME L"\x092d\x093e\x0930\x0924"
  LOCALE_SNATIVECURRNAME L"\x0930\x0941\x092a\x092f"
  LOCALE_SNATIVEDIGITS L"\x0966\x0967\x0968\x0969\x096a\x096b\x096c\x096d\x096e\x096f"
  LOCALE_SNATIVELANGNAME L"\x0915\x094b\x0902\x0915\x0923\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"
}
