/*
 * Locale definitions for French (Belgium)
 *
 * 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_FRENCH, SUBLANG_FRENCH_BELGIAN
{
  LOCALE_FONTSIGNATURE L"\x002f\x8000\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0013\x0000\x0000\xc5d4"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "32"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "3"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "0"
  LOCALE_IDEFAULTANSICODEPAGE "1252"
  LOCALE_IDEFAULTCODEPAGE "850"
  LOCALE_IDEFAULTCOUNTRY "32"
  LOCALE_IDEFAULTEBCDICCODEPAGE "20297"
  LOCALE_IDEFAULTLANGUAGE "080c"
  LOCALE_IDEFAULTMACCODEPAGE "10000"
  LOCALE_IDEFAULTUNIXCODEPAGE "28605"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "080c"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "1"
  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 "1"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "0"
  LOCALE_S1159 ""
  LOCALE_S2359 ""
  LOCALE_SABBREVCTRYNAME "BEL"
  LOCALE_SABBREVDAYNAME1 "lun."
  LOCALE_SABBREVDAYNAME2 "mar."
  LOCALE_SABBREVDAYNAME3 "mer."
  LOCALE_SABBREVDAYNAME4 "jeu."
  LOCALE_SABBREVDAYNAME5 "ven."
  LOCALE_SABBREVDAYNAME6 "sam."
  LOCALE_SABBREVDAYNAME7 "dim."
  LOCALE_SABBREVLANGNAME "FRB"
  LOCALE_SABBREVMONTHNAME1 "janv."
  LOCALE_SABBREVMONTHNAME2 "févr."
  LOCALE_SABBREVMONTHNAME3 "mars"
  LOCALE_SABBREVMONTHNAME4 "avr."
  LOCALE_SABBREVMONTHNAME5 "mai"
  LOCALE_SABBREVMONTHNAME6 "juin"
  LOCALE_SABBREVMONTHNAME7 "juil."
  LOCALE_SABBREVMONTHNAME8 "août"
  LOCALE_SABBREVMONTHNAME9 "sept."
  LOCALE_SABBREVMONTHNAME10 "oct."
  LOCALE_SABBREVMONTHNAME11 "nov."
  LOCALE_SABBREVMONTHNAME12 "déc."
  LOCALE_SABBREVMONTHNAME13 ""
  LOCALE_SCOUNTRY "Belgium"
  LOCALE_SCURRENCY "€"
  LOCALE_SDATE "/"
  LOCALE_SDAYNAME1 "lundi"
  LOCALE_SDAYNAME2 "mardi"
  LOCALE_SDAYNAME3 "mercredi"
  LOCALE_SDAYNAME4 "jeudi"
  LOCALE_SDAYNAME5 "vendredi"
  LOCALE_SDAYNAME6 "samedi"
  LOCALE_SDAYNAME7 "dimanche"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Belgium"
  LOCALE_SENGCURRNAME "Euro"
  LOCALE_SENGLANGUAGE "French"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "EUR"
  LOCALE_SISO3166CTRYNAME "BE"
  LOCALE_SISO639LANGNAME "fr"
  LOCALE_SLANGUAGE "French (Belgium)"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "dddd d MMMM yyyy"
  LOCALE_SMONDECIMALSEP ","
  LOCALE_SMONGROUPING "3;0"
  LOCALE_SMONTHNAME1 "janvier"
  LOCALE_SMONTHNAME2 "février"
  LOCALE_SMONTHNAME3 "mars"
  LOCALE_SMONTHNAME4 "avril"
  LOCALE_SMONTHNAME5 "mai"
  LOCALE_SMONTHNAME6 "juin"
  LOCALE_SMONTHNAME7 "juillet"
  LOCALE_SMONTHNAME8 "août"
  LOCALE_SMONTHNAME9 "septembre"
  LOCALE_SMONTHNAME10 "octobre"
  LOCALE_SMONTHNAME11 "novembre"
  LOCALE_SMONTHNAME12 "décembre"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP "."
  LOCALE_SNAME "fr-BE"
  LOCALE_SNAN "NaN"
  LOCALE_SNATIVECTRYNAME "Belgique"
  LOCALE_SNATIVECURRNAME "euro"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "français (Belgique)"
  LOCALE_SNATIVELANGNAME "français"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "FRA "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Latn;"
  LOCALE_SSHORTDATE "d/MM/yyyy"
  LOCALE_SSHORTESTDAYNAME1 "lu"
  LOCALE_SSHORTESTDAYNAME2 "ma"
  LOCALE_SSHORTESTDAYNAME3 "me"
  LOCALE_SSHORTESTDAYNAME4 "je"
  LOCALE_SSHORTESTDAYNAME5 "ve"
  LOCALE_SSHORTESTDAYNAME6 "sa"
  LOCALE_SSHORTESTDAYNAME7 "di"
  LOCALE_SSHORTTIME "H:mm"
  LOCALE_SSORTNAME "Default"
  LOCALE_STHOUSAND "."
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "H:mm:ss"
  LOCALE_SYEARMONTH "MMMM yyyy"

  LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Europe occidentale et États-Unis d'Amérique"
  LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Europe centrale"
  LGRPID_BALTIC+LGRPID_RES_BASE "Baltique"
  LGRPID_GREEK+LGRPID_RES_BASE "Grec"
  LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillique"
  LGRPID_TURKISH+LGRPID_RES_BASE "Turc"
  LGRPID_JAPANESE+LGRPID_RES_BASE "Japonais"
  LGRPID_KOREAN+LGRPID_RES_BASE "Coréen"
  LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Chinois traditionnel"
  LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Chinois simplifié"
  LGRPID_THAI+LGRPID_RES_BASE "Thaï"
  LGRPID_HEBREW+LGRPID_RES_BASE "Hébreu"
  LGRPID_ARABIC+LGRPID_RES_BASE "Arabe"
  LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamien"
  LGRPID_INDIC+LGRPID_RES_BASE "Indien"
  LGRPID_GEORGIAN+LGRPID_RES_BASE "Géorgien"
  LGRPID_ARMENIAN+LGRPID_RES_BASE "Arménien"
}
