/*
 * 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_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""
}
