/*
 * Locale definitions for Greek
 *
 * 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_GREEK, SUBLANG_DEFAULT
{
  LOCALE_FONTSIGNATURE L"\x008b\x8000\x3849\x1000\x0000\x0000\x0000\x0000\x0008\x0000\x0000\x1000\x0008\x0000\x0000\x1001"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "30"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "3"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "0"
  LOCALE_IDEFAULTANSICODEPAGE "1253"
  LOCALE_IDEFAULTCODEPAGE "737"
  LOCALE_IDEFAULTCOUNTRY "30"
  LOCALE_IDEFAULTEBCDICCODEPAGE "20273"
  LOCALE_IDEFAULTLANGUAGE "0408"
  LOCALE_IDEFAULTMACCODEPAGE "10006"
  LOCALE_IDEFAULTUNIXCODEPAGE "28597"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0408"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "0"
  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 "0"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "0"
  LOCALE_S1159 "πμ"
  LOCALE_S2359 "μμ"
  LOCALE_SABBREVCTRYNAME "GRC"
  LOCALE_SABBREVDAYNAME1 "Δευ"
  LOCALE_SABBREVDAYNAME2 "Τρι"
  LOCALE_SABBREVDAYNAME3 "Τετ"
  LOCALE_SABBREVDAYNAME4 "Πεμ"
  LOCALE_SABBREVDAYNAME5 "Παρ"
  LOCALE_SABBREVDAYNAME6 "Σαβ"
  LOCALE_SABBREVDAYNAME7 "Κυρ"
  LOCALE_SABBREVLANGNAME "ELL"
  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 "Greece"
  LOCALE_SCURRENCY "€"
  LOCALE_SDATE "/"
  LOCALE_SDAYNAME1 "Δευτέρα"
  LOCALE_SDAYNAME2 "Τρίτη"
  LOCALE_SDAYNAME3 "Τετάρτη"
  LOCALE_SDAYNAME4 "Πέμπτη"
  LOCALE_SDAYNAME5 "Παρασκευή"
  LOCALE_SDAYNAME6 "Σάββατο"
  LOCALE_SDAYNAME7 "Κυριακή"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Greece"
  LOCALE_SENGCURRNAME "Euro"
  LOCALE_SENGLANGUAGE "Greek"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "EUR"
  LOCALE_SISO3166CTRYNAME "GR"
  LOCALE_SISO639LANGNAME "el"
  LOCALE_SLANGUAGE "Greek"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "dddd, d MMMM yyyy"
  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 "el-GR"
  LOCALE_SNATIVECTRYNAME "Ελλάδα"
  LOCALE_SNATIVECURRNAME "ευρώ"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "ελληνικά (Ελλάδα)"
  LOCALE_SNATIVELANGNAME "ελληνικά"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "ELL "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Grek;"
  LOCALE_SSHORTDATE "d/M/yyyy"
  LOCALE_SSHORTESTDAYNAME1 "Δε"
  LOCALE_SSHORTESTDAYNAME2 "Τρ"
  LOCALE_SSHORTESTDAYNAME3 "Τε"
  LOCALE_SSHORTESTDAYNAME4 "Πε"
  LOCALE_SSHORTESTDAYNAME5 "Πα"
  LOCALE_SSHORTESTDAYNAME6 "Σα"
  LOCALE_SSHORTESTDAYNAME7 "Κυ"
  LOCALE_SSHORTTIME "h:mm tt"
  LOCALE_SSORTNAME "Default"
  LOCALE_STHOUSAND "."
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "h:mm:ss tt"
  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"
}
