/*
 * Locale definitions for Irish Gaelic
 *
 * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#pragma code_page(65001) /* UTF-8 */

STRINGTABLE LANGUAGE LANG_IRISH, SUBLANG_IRISH_IRELAND
{
  LOCALE_FONTSIGNATURE L"\x002f\x8000\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x01ff\x003f\x8000\xffff"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "0"
  LOCALE_ICOUNTRY "353"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "0"
  LOCALE_IDATE "0"
  LOCALE_IDAYLZERO "0"
  LOCALE_IDEFAULTANSICODEPAGE "1252"
  LOCALE_IDEFAULTCODEPAGE "437"
  LOCALE_IDEFAULTCOUNTRY "353"
  LOCALE_IDEFAULTEBCDICCODEPAGE "20285"
  LOCALE_IDEFAULTLANGUAGE "083c"
  LOCALE_IDEFAULTMACCODEPAGE "10000"
  LOCALE_IDEFAULTUNIXCODEPAGE "28605"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "6"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "083c"
  LOCALE_ILDATE "0"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "1"
  LOCALE_IMONLZERO "0"
  LOCALE_INEGCURR "0"
  LOCALE_INEGNUMBER "1"
  LOCALE_INEGSEPBYSPACE "0"
  LOCALE_INEGSIGNPOSN "0"
  LOCALE_INEGSYMPRECEDES "1"
  LOCALE_INEUTRAL "0"
  LOCALE_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "0"
  LOCALE_IPOSSIGNPOSN "3"
  LOCALE_IPOSSYMPRECEDES "1"
  LOCALE_IREADINGLAYOUT "0"
  LOCALE_ITIME "0"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "0"
  LOCALE_S1159 "AM"
  LOCALE_S2359 "PM"
  LOCALE_SABBREVCTRYNAME "IRL"
  LOCALE_SABBREVDAYNAME1 "Lua"
  LOCALE_SABBREVDAYNAME2 "Mái"
  LOCALE_SABBREVDAYNAME3 "Céa"
  LOCALE_SABBREVDAYNAME4 "Déa"
  LOCALE_SABBREVDAYNAME5 "Aoi"
  LOCALE_SABBREVDAYNAME6 "Sat"
  LOCALE_SABBREVDAYNAME7 "Dom"
  LOCALE_SABBREVLANGNAME "GAE"
  LOCALE_SABBREVMONTHNAME1 "Ean"
  LOCALE_SABBREVMONTHNAME2 "Fea"
  LOCALE_SABBREVMONTHNAME3 "Már"
  LOCALE_SABBREVMONTHNAME4 "Aib"
  LOCALE_SABBREVMONTHNAME5 "Bea"
  LOCALE_SABBREVMONTHNAME6 "Mei"
  LOCALE_SABBREVMONTHNAME7 "Iúi"
  LOCALE_SABBREVMONTHNAME8 "Lún"
  LOCALE_SABBREVMONTHNAME9 "MFó"
  LOCALE_SABBREVMONTHNAME10 "DFó"
  LOCALE_SABBREVMONTHNAME11 "Sam"
  LOCALE_SABBREVMONTHNAME12 "Nol"
  LOCALE_SABBREVMONTHNAME13 ""
  LOCALE_SCOUNTRY "Ireland"
  LOCALE_SCURRENCY "€"
  LOCALE_SDATE "/"
  LOCALE_SDAYNAME1 "Dé Luain"
  LOCALE_SDAYNAME2 "Dé Máirt"
  LOCALE_SDAYNAME3 "Dé Céadaoin"
  LOCALE_SDAYNAME4 "Déardaoin"
  LOCALE_SDAYNAME5 "Dé hAoine"
  LOCALE_SDAYNAME6 "Dé Sathairn"
  LOCALE_SDAYNAME7 "De Domhnaigh"
  LOCALE_SDECIMAL "."
  LOCALE_SENGCOUNTRY "Ireland"
  LOCALE_SENGCURRNAME "Euro"
  LOCALE_SENGLANGUAGE "Irish"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "EUR"
  LOCALE_SISO3166CTRYNAME "IE"
  LOCALE_SISO639LANGNAME "ga"
  LOCALE_SLANGUAGE "Gaeilge (Éire)"
  LOCALE_SLIST ","
  LOCALE_SLONGDATE "dddd, MMMM dd, yyyy"
  LOCALE_SMONDECIMALSEP "."
  LOCALE_SMONGROUPING "3;0"
  LOCALE_SMONTHNAME1 "Eanáir"
  LOCALE_SMONTHNAME2 "Feabhra"
  LOCALE_SMONTHNAME3 "Márta"
  LOCALE_SMONTHNAME4 "Aibreán"
  LOCALE_SMONTHNAME5 "Mí na Bealtaine"
  LOCALE_SMONTHNAME6 "Meitheamh"
  LOCALE_SMONTHNAME7 "Iúil"
  LOCALE_SMONTHNAME8 "Lúnasa"
  LOCALE_SMONTHNAME9 "Meán Fómhair"
  LOCALE_SMONTHNAME10 "Deireadh Fómhair"
  LOCALE_SMONTHNAME11 "Mí na Samhna"
  LOCALE_SMONTHNAME12 "Mí na Nollag"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP ","
  LOCALE_SNAME "ga-IE"
  LOCALE_SNAN "NaN"
  LOCALE_SNATIVECTRYNAME "Éire"
  LOCALE_SNATIVECURRNAME "Euro"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "Gaeilge (Éire)"
  LOCALE_SNATIVELANGNAME "Gaeilge"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "IRI "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Latn;"
  LOCALE_SSHORTDATE "d/M/yy"
  LOCALE_SSHORTESTDAYNAME1 "Lu"
  LOCALE_SSHORTESTDAYNAME2 "Má"
  LOCALE_SSHORTESTDAYNAME3 "Cé"
  LOCALE_SSHORTESTDAYNAME4 "De"
  LOCALE_SSHORTESTDAYNAME5 "Ao"
  LOCALE_SSHORTESTDAYNAME6 "Sa"
  LOCALE_SSHORTESTDAYNAME7 "Do"
  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 "Iarthar na hEorpa agus na Stáit Aontaithe"
  LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Lár na hEorpa"
  LGRPID_BALTIC+LGRPID_RES_BASE "Mhuir Bhailt"
  LGRPID_GREEK+LGRPID_RES_BASE "Gréigis"
  LGRPID_CYRILLIC+LGRPID_RES_BASE "Coireallach"
  LGRPID_TURKISH+LGRPID_RES_BASE "Tuircice"
  LGRPID_JAPANESE+LGRPID_RES_BASE "Seapáinis"
  LGRPID_KOREAN+LGRPID_RES_BASE "Cóiréis"
  LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Sínis Traidisiúnta"
  LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Sínis simplithe"
  LGRPID_THAI+LGRPID_RES_BASE "Téalainnis"
  LGRPID_HEBREW+LGRPID_RES_BASE "Eabhrais"
  LGRPID_ARABIC+LGRPID_RES_BASE "Araibis"
  LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vítneaimis"
  LGRPID_INDIC+LGRPID_RES_BASE "Indic"
  LGRPID_GEORGIAN+LGRPID_RES_BASE "Seoirsis"
  LGRPID_ARMENIAN+LGRPID_RES_BASE "Airméinis"
}
