/*
 * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#pragma code_page(65001) /* UTF-8 */

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 "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 "0457"
  LOCALE_IDEFAULTMACCODEPAGE "2"
  LOCALE_IDEFAULTUNIXCODEPAGE "65001"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0457"
  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 "KNK"
  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 "Konkani"
  LOCALE_SGROUPING "3;2;0"
  LOCALE_SINTLSYMBOL "INR"
  LOCALE_SISO3166CTRYNAME "IN"
  LOCALE_SISO639LANGNAME "kok"
  LOCALE_SLANGUAGE "Konkani"
  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 "kok-IN"
  LOCALE_SNAN "NaN"
  LOCALE_SNATIVECTRYNAME "भारत"
  LOCALE_SNATIVECURRNAME "रुपय"
  LOCALE_SNATIVEDIGITS "०१२३४५६७८९"
  LOCALE_SNATIVEDISPLAYNAME "कोंकणी (भारत)"
  LOCALE_SNATIVELANGNAME "कोंकणी"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "KOK "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Deva;"
  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"
}
