/*
 * Locale definitions for Georgian
 *
 * 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_GEORGIAN, SUBLANG_DEFAULT
{
  LOCALE_FONTSIGNATURE L"\x002f\x8400\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0013\x0000\x0000\xc5d4"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "995"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "3"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "1"
  LOCALE_IDEFAULTANSICODEPAGE "0"
  LOCALE_IDEFAULTCODEPAGE "1"
  LOCALE_IDEFAULTCOUNTRY "995"
  LOCALE_IDEFAULTEBCDICCODEPAGE "500"
  LOCALE_IDEFAULTLANGUAGE "0437"
  LOCALE_IDEFAULTMACCODEPAGE "2"
  LOCALE_IDEFAULTUNIXCODEPAGE "65001"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0437"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "1"
  LOCALE_INEGCURR "8"
  LOCALE_INEGNUMBER "1"
  LOCALE_INEGSEPBYSPACE "1"
  LOCALE_INEGSIGNPOSN "1"
  LOCALE_INEGSYMPRECEDES "0"
  LOCALE_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "1"
  LOCALE_IPOSSIGNPOSN "1"
  LOCALE_IPOSSYMPRECEDES "0"
  LOCALE_ITIME "1"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "0"
  LOCALE_S1159 ""
  LOCALE_S2359 ""
  LOCALE_SABBREVCTRYNAME "GEO"
  LOCALE_SABBREVDAYNAME1 "ორშაბათი"
  LOCALE_SABBREVDAYNAME2 "სამშაბათი"
  LOCALE_SABBREVDAYNAME3 "ოთხშაბათი"
  LOCALE_SABBREVDAYNAME4 "ხუთშაბათი"
  LOCALE_SABBREVDAYNAME5 "პარასკევი"
  LOCALE_SABBREVDAYNAME6 "შაბათი"
  LOCALE_SABBREVDAYNAME7 "კვირა"
  LOCALE_SABBREVLANGNAME "KAT"
  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 "Georgia"
  LOCALE_SCURRENCY "Lari"
  LOCALE_SDATE "."
  LOCALE_SDAYNAME1 "ორშაბათი"
  LOCALE_SDAYNAME2 "სამშაბათი"
  LOCALE_SDAYNAME3 "ოთხშაბათი"
  LOCALE_SDAYNAME4 "ხუთშაბათი"
  LOCALE_SDAYNAME5 "პარასკევი"
  LOCALE_SDAYNAME6 "შაბათი"
  LOCALE_SDAYNAME7 "კვირა"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Georgia"
  LOCALE_SENGCURRNAME "Lari"
  LOCALE_SENGLANGUAGE "Georgian"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "GE"
  LOCALE_SISO3166CTRYNAME "GE"
  LOCALE_SISO639LANGNAME "ka"
  LOCALE_SLANGUAGE "Georgian"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "yyyy 'წლის' dd MM, dddd"
  LOCALE_SMONDECIMALSEP ","
  LOCALE_SMONGROUPING "3;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 "ka-GE"
  LOCALE_SNATIVECTRYNAME "საქართველო"
  LOCALE_SNATIVECURRNAME "ლარი"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVELANGNAME "ქართული"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Geor;"
  LOCALE_SSHORTDATE "dd.MM.yyyy"
  LOCALE_SSORTNAME "Traditional"
  LOCALE_STHOUSAND " "
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "H: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"
}
