/*
 * Locale definitions for Invariant
 *
 * 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(1252)

STRINGTABLE LANGUAGE LANG_INVARIANT, SUBLANG_NEUTRAL
{
  LOCALE_FONTSIGNATURE L"\x00af\x8000\x38cb\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x8000\x01ff\x003f\x8000\xffff"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "1"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "0"
  LOCALE_IDATE "0"
  LOCALE_IDAYLZERO "1"
  LOCALE_IDEFAULTANSICODEPAGE "1252"
  LOCALE_IDEFAULTCODEPAGE "437"
  LOCALE_IDEFAULTCOUNTRY "1"
  LOCALE_IDEFAULTEBCDICCODEPAGE "037"
  LOCALE_IDEFAULTLANGUAGE "0409"
  LOCALE_IDEFAULTMACCODEPAGE "10000"
  LOCALE_IDEFAULTUNIXCODEPAGE "28591"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "6"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "007f"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "1"
  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 "1"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "1"
  LOCALE_S1159 "AM"
  LOCALE_S2359 "PM"
  LOCALE_SABBREVCTRYNAME "IVC"
  LOCALE_SABBREVDAYNAME1 "Mon"
  LOCALE_SABBREVDAYNAME2 "Tue"
  LOCALE_SABBREVDAYNAME3 "Wed"
  LOCALE_SABBREVDAYNAME4 "Thu"
  LOCALE_SABBREVDAYNAME5 "Fri"
  LOCALE_SABBREVDAYNAME6 "Sat"
  LOCALE_SABBREVDAYNAME7 "Sun"
  LOCALE_SABBREVLANGNAME "IVL"
  LOCALE_SABBREVMONTHNAME1 "Jan"
  LOCALE_SABBREVMONTHNAME2 "Feb"
  LOCALE_SABBREVMONTHNAME3 "Mar"
  LOCALE_SABBREVMONTHNAME4 "Apr"
  LOCALE_SABBREVMONTHNAME5 "May"
  LOCALE_SABBREVMONTHNAME6 "Jun"
  LOCALE_SABBREVMONTHNAME7 "Jul"
  LOCALE_SABBREVMONTHNAME8 "Aug"
  LOCALE_SABBREVMONTHNAME9 "Sep"
  LOCALE_SABBREVMONTHNAME10 "Oct"
  LOCALE_SABBREVMONTHNAME11 "Nov"
  LOCALE_SABBREVMONTHNAME12 "Dec"
  LOCALE_SABBREVMONTHNAME13 ""
  LOCALE_SCOUNTRY "Invariant Country"
  LOCALE_SCURRENCY L"\x00a4"
  LOCALE_SDATE "/"
  LOCALE_SDAYNAME1 "Monday"
  LOCALE_SDAYNAME2 "Tuesday"
  LOCALE_SDAYNAME3 "Wednesday"
  LOCALE_SDAYNAME4 "Thursday"
  LOCALE_SDAYNAME5 "Friday"
  LOCALE_SDAYNAME6 "Saturday"
  LOCALE_SDAYNAME7 "Sunday"
  LOCALE_SDECIMAL "."
  LOCALE_SENGCOUNTRY "Invariant Country"
  LOCALE_SENGCURRNAME "International Monetary Fund"
  LOCALE_SENGLANGUAGE "Invariant Language"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "XDR"
  LOCALE_SISO3166CTRYNAME "IV"
  LOCALE_SISO639LANGNAME "iv"
  LOCALE_SLANGUAGE "Invariant Language (Invariant Country)"
  LOCALE_SLIST ","
  LOCALE_SLONGDATE "dddd, dd MMMM yyyy"
  LOCALE_SMONDECIMALSEP "."
  LOCALE_SMONGROUPING "3;0"
  LOCALE_SMONTHNAME1 "January"
  LOCALE_SMONTHNAME2 "February"
  LOCALE_SMONTHNAME3 "March"
  LOCALE_SMONTHNAME4 "April"
  LOCALE_SMONTHNAME5 "May"
  LOCALE_SMONTHNAME6 "June"
  LOCALE_SMONTHNAME7 "July"
  LOCALE_SMONTHNAME8 "August"
  LOCALE_SMONTHNAME9 "September"
  LOCALE_SMONTHNAME10 "October"
  LOCALE_SMONTHNAME11 "November"
  LOCALE_SMONTHNAME12 "December"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP ","
  LOCALE_SNAME ""
  LOCALE_SNATIVECTRYNAME "Invariant Country"
  LOCALE_SNATIVECURRNAME "International Monetary Fund"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "Invariant Language (Invariant Country)"
  LOCALE_SNATIVELANGNAME "Invariant Language"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "dflt"
  LOCALE_SPOSITIVESIGN "+"
  LOCALE_SSCRIPTS "Latn;"
  LOCALE_SSHORTDATE "MM/dd/yyyy"
  LOCALE_SSHORTTIME "HH:mm"
  LOCALE_SSORTNAME "Math Alphanumerics"
  LOCALE_STHOUSAND ","
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "HH:mm:ss"
  LOCALE_SYEARMONTH "yyyy MMMM"

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