/*
 * Locale definitions for Estonian
 *
 * 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_ESTONIAN, SUBLANG_DEFAULT
{
  LOCALE_FONTSIGNATURE L"\x0007\x8000\x3848\x1000\x0000\x0000\x0000\x0000\x0080\x0000\x0000\x0800\x0092\x0000\x0000\xcdd4"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "372"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "3"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "0"
  LOCALE_IDEFAULTANSICODEPAGE "1257"
  LOCALE_IDEFAULTCODEPAGE "775"
  LOCALE_IDEFAULTCOUNTRY "372"
  LOCALE_IDEFAULTEBCDICCODEPAGE "500"
  LOCALE_IDEFAULTLANGUAGE "0425"
  LOCALE_IDEFAULTMACCODEPAGE "10029"
  LOCALE_IDEFAULTUNIXCODEPAGE "28605"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "2"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0425"
  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_INEUTRAL "0"
  LOCALE_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "1"
  LOCALE_IPOSSIGNPOSN "1"
  LOCALE_IPOSSYMPRECEDES "0"
  LOCALE_IREADINGLAYOUT "0"
  LOCALE_ITIME "1"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "0"
  LOCALE_S1159 "EL"
  LOCALE_S2359 "PL"
  LOCALE_SABBREVCTRYNAME "EST"
  LOCALE_SABBREVDAYNAME1 "E"
  LOCALE_SABBREVDAYNAME2 "T"
  LOCALE_SABBREVDAYNAME3 "K"
  LOCALE_SABBREVDAYNAME4 "N"
  LOCALE_SABBREVDAYNAME5 "R"
  LOCALE_SABBREVDAYNAME6 "L"
  LOCALE_SABBREVDAYNAME7 "P"
  LOCALE_SABBREVLANGNAME "ETI"
  LOCALE_SABBREVMONTHNAME1 "jaan"
  LOCALE_SABBREVMONTHNAME2 "veebr"
  LOCALE_SABBREVMONTHNAME3 "märts"
  LOCALE_SABBREVMONTHNAME4 "apr"
  LOCALE_SABBREVMONTHNAME5 "mai"
  LOCALE_SABBREVMONTHNAME6 "juuni"
  LOCALE_SABBREVMONTHNAME7 "juuli"
  LOCALE_SABBREVMONTHNAME8 "aug"
  LOCALE_SABBREVMONTHNAME9 "sept"
  LOCALE_SABBREVMONTHNAME10 "okt"
  LOCALE_SABBREVMONTHNAME11 "nov"
  LOCALE_SABBREVMONTHNAME12 "dets"
  LOCALE_SABBREVMONTHNAME13 ""
  LOCALE_SCOUNTRY "Estonia"
  LOCALE_SCURRENCY "€"
  LOCALE_SDATE "."
  LOCALE_SDAYNAME1 "esmaspäev"
  LOCALE_SDAYNAME2 "teisipäev"
  LOCALE_SDAYNAME3 "kolmapäev"
  LOCALE_SDAYNAME4 "neljapäev"
  LOCALE_SDAYNAME5 "reede"
  LOCALE_SDAYNAME6 "laupäev"
  LOCALE_SDAYNAME7 "pühapäev"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Estonia"
  LOCALE_SENGCURRNAME "Euro"
  LOCALE_SENGLANGUAGE "Estonian"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "EEK"
  LOCALE_SISO3166CTRYNAME "EE"
  LOCALE_SISO639LANGNAME "et"
  LOCALE_SLANGUAGE "Estonian"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "d. MMMM yyyy'. a.'"
  LOCALE_SMONDECIMALSEP "."
  LOCALE_SMONGROUPING "3;0"
  LOCALE_SMONTHNAME1 "jaanuar"
  LOCALE_SMONTHNAME2 "veebruar"
  LOCALE_SMONTHNAME3 "märts"
  LOCALE_SMONTHNAME4 "aprill"
  LOCALE_SMONTHNAME5 "mai"
  LOCALE_SMONTHNAME6 "juuni"
  LOCALE_SMONTHNAME7 "juuli"
  LOCALE_SMONTHNAME8 "august"
  LOCALE_SMONTHNAME9 "september"
  LOCALE_SMONTHNAME10 "oktoober"
  LOCALE_SMONTHNAME11 "november"
  LOCALE_SMONTHNAME12 "detsember"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP " "
  LOCALE_SNAME "et-EE"
  LOCALE_SNATIVECTRYNAME "Eesti"
  LOCALE_SNATIVECURRNAME "Euro"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "eesti (Eesti)"
  LOCALE_SNATIVELANGNAME "eesti"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "ETI "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Latn;"
  LOCALE_SSHORTDATE "d.MM.yyyy"
  LOCALE_SSHORTESTDAYNAME1 "E"
  LOCALE_SSHORTESTDAYNAME2 "T"
  LOCALE_SSHORTESTDAYNAME3 "K"
  LOCALE_SSHORTESTDAYNAME4 "N"
  LOCALE_SSHORTESTDAYNAME5 "R"
  LOCALE_SSHORTESTDAYNAME6 "L"
  LOCALE_SSHORTESTDAYNAME7 "P"
  LOCALE_SSHORTTIME "H:mm"
  LOCALE_SSORTNAME "Default"
  LOCALE_STHOUSAND " "
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "H:mm:ss"
  LOCALE_SYEARMONTH "MMMM yyyy'. a.'"

  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"
}
