/*
 * Locale definitions for Esperanto
 *
 * Esperanto seems not to be supported by Windows
 *
 * TODO: MS numerical ID for language ?
 *
 * I choose 0x8f for esperanto language as it is high enough
 * not to be attributed to another language in the immediate
 * future (as of 19980901 the last official languageID is 0x51)
 *
 * No Windows 125[0-8] codepage has the c^ g^ h^ j^ s^ used by esperanto.
 * And for DOS codepage ?
 *
 * ISO 2 letter code for esperanto is "eo" but as Windows use
 * three letter codes I added an "x" to the end.
 *
 * Copyright 1998 Marcel Baur
 * 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_ESPERANTO, SUBLANG_DEFAULT
{
  LOCALE_FONTSIGNATURE L""
  LOCALE_ICALENDARTYPE L"1"
  LOCALE_ICENTURY L""
  LOCALE_ICOUNTRY L""
  LOCALE_ICURRDIGITS L""
  LOCALE_ICURRENCY L"3"
  LOCALE_IDATE L"1"
  LOCALE_IDAYLZERO L""
  LOCALE_IDEFAULTANSICODEPAGE L""
  LOCALE_IDEFAULTCODEPAGE L""
  LOCALE_IDEFAULTCOUNTRY L""
  LOCALE_IDEFAULTEBCDICCODEPAGE L""
  LOCALE_IDEFAULTLANGUAGE L"048f"
  LOCALE_IDEFAULTMACCODEPAGE L""
  LOCALE_IDEFAULTUNIXCODEPAGE L""
  LOCALE_IDIGITS L"2"
  LOCALE_IDIGITSUBSTITUTION L""
  LOCALE_IFIRSTDAYOFWEEK L""
  LOCALE_IFIRSTWEEKOFYEAR L""
  LOCALE_IINTLCURRDIGITS L""
  LOCALE_ILANGUAGE L"048f"
  LOCALE_ILDATE L""
  LOCALE_ILZERO L"1"
  LOCALE_IMEASURE L"0"
  LOCALE_IMONLZERO L""
  LOCALE_INEGCURR L"8"
  LOCALE_INEGNUMBER L""
  LOCALE_INEGSEPBYSPACE L""
  LOCALE_INEGSIGNPOSN L""
  LOCALE_INEGSYMPRECEDES L""
  LOCALE_IOPTIONALCALENDAR L""
  LOCALE_IPAPERSIZE L""
  LOCALE_IPOSSEPBYSPACE L""
  LOCALE_IPOSSIGNPOSN L""
  LOCALE_IPOSSYMPRECEDES L""
  LOCALE_ITIME L"1"
  LOCALE_ITIMEMARKPOSN L""
  LOCALE_ITLZERO L"1"
  LOCALE_S1159 L""
  LOCALE_S2359 L""
  LOCALE_SABBREVCTRYNAME L""
  LOCALE_SABBREVDAYNAME1 L"lu"
  LOCALE_SABBREVDAYNAME2 L"ma"
  LOCALE_SABBREVDAYNAME3 L"me"
  LOCALE_SABBREVDAYNAME4 L"\x00bca"
  LOCALE_SABBREVDAYNAME5 L"ve"
  LOCALE_SABBREVDAYNAME6 L"sa"
  LOCALE_SABBREVDAYNAME7 L"di"
  LOCALE_SABBREVLANGNAME L"EOX"
  LOCALE_SABBREVMONTHNAME1 L"jan"
  LOCALE_SABBREVMONTHNAME2 L"feb"
  LOCALE_SABBREVMONTHNAME3 L"mar"
  LOCALE_SABBREVMONTHNAME4 L"apr"
  LOCALE_SABBREVMONTHNAME5 L"maj"
  LOCALE_SABBREVMONTHNAME6 L"jun"
  LOCALE_SABBREVMONTHNAME7 L"jul"
  LOCALE_SABBREVMONTHNAME8 L"a\x00fdg"
  LOCALE_SABBREVMONTHNAME9 L"sep"
  LOCALE_SABBREVMONTHNAME10 L"okt"
  LOCALE_SABBREVMONTHNAME11 L"nov"
  LOCALE_SABBREVMONTHNAME12 L"dec"
  LOCALE_SABBREVMONTHNAME13 L""
  LOCALE_SCOUNTRY L""
  LOCALE_SCURRENCY L"\x00a4"
  LOCALE_SDATE L"."
  LOCALE_SDAYNAME1 L"lundo"
  LOCALE_SDAYNAME2 L"mardo"
  LOCALE_SDAYNAME3 L"merkredo"
  LOCALE_SDAYNAME4 L"\x00bca\x00fddo"
  LOCALE_SDAYNAME5 L"vendredo"
  LOCALE_SDAYNAME6 L"sabato"
  LOCALE_SDAYNAME7 L"diman\x00e6o"
  LOCALE_SDECIMAL L","
  LOCALE_SENGCOUNTRY L""
  LOCALE_SENGCURRNAME L""
  LOCALE_SENGLANGUAGE L"Esperanto"
  LOCALE_SGROUPING L""
  LOCALE_SINTLSYMBOL L"EMU"
  LOCALE_SISO3166CTRYNAME L""
  LOCALE_SISO639LANGNAME L"eo"
  LOCALE_SLANGUAGE L"Esperanto"
  LOCALE_SLIST L";"
  LOCALE_SLONGDATE L"ddd, d. MMMM yyyy"
  LOCALE_SMONDECIMALSEP L","
  LOCALE_SMONGROUPING L""
  LOCALE_SMONTHNAME1 L"januaro"
  LOCALE_SMONTHNAME2 L"februaro"
  LOCALE_SMONTHNAME3 L"marto"
  LOCALE_SMONTHNAME4 L"aprilo"
  LOCALE_SMONTHNAME5 L"majo"
  LOCALE_SMONTHNAME6 L"junio"
  LOCALE_SMONTHNAME7 L"julio"
  LOCALE_SMONTHNAME8 L"a\x00fdgusto"
  LOCALE_SMONTHNAME9 L"septembro"
  LOCALE_SMONTHNAME10 L"oktobro"
  LOCALE_SMONTHNAME11 L"novembro"
  LOCALE_SMONTHNAME12 L"decembro"
  LOCALE_SMONTHNAME13 L""
  LOCALE_SMONTHOUSANDSEP L"."
  LOCALE_SNATIVECTRYNAME L""
  LOCALE_SNATIVECURRNAME L""
  LOCALE_SNATIVEDIGITS L""
  LOCALE_SNATIVELANGNAME L"Esperanto"
  LOCALE_SNEGATIVESIGN L""
  LOCALE_SPOSITIVESIGN L""
  LOCALE_SSHORTDATE L"yyyy.mm.dd"
  LOCALE_SSORTNAME L""
  LOCALE_STHOUSAND L"."
  LOCALE_STIME L":"
  LOCALE_STIMEFORMAT L""
  LOCALE_SYEARMONTH L""

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