/*
 * Locale definitions for Belarusian
 *
 * 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_BELARUSIAN, SUBLANG_DEFAULT
{
  LOCALE_FONTSIGNATURE L"\x0203\x8000\x3848\x0000\x0000\x0000\x0000\x0000\x0004\x0000\x0000\x0002\x0004\x0000\x0000\x0202"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "375"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "3"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "1"
  LOCALE_IDEFAULTANSICODEPAGE "1251"
  LOCALE_IDEFAULTCODEPAGE "866"
  LOCALE_IDEFAULTCOUNTRY "375"
  LOCALE_IDEFAULTEBCDICCODEPAGE "500"
  LOCALE_IDEFAULTLANGUAGE "0423"
  LOCALE_IDEFAULTMACCODEPAGE "10007"
  LOCALE_IDEFAULTUNIXCODEPAGE "1251"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0423"
  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 "BLR"
  LOCALE_SABBREVDAYNAME1 "пн"
  LOCALE_SABBREVDAYNAME2 "аў"
  LOCALE_SABBREVDAYNAME3 "ср"
  LOCALE_SABBREVDAYNAME4 "чц"
  LOCALE_SABBREVDAYNAME5 "пт"
  LOCALE_SABBREVDAYNAME6 "сб"
  LOCALE_SABBREVDAYNAME7 "нд"
  LOCALE_SABBREVLANGNAME "BEL"
  LOCALE_SABBREVMONTHNAME1 "Сту"
  LOCALE_SABBREVMONTHNAME2 "Лют"
  LOCALE_SABBREVMONTHNAME3 "Сак"
  LOCALE_SABBREVMONTHNAME4 "Кра"
  LOCALE_SABBREVMONTHNAME5 "Май"
  LOCALE_SABBREVMONTHNAME6 "Чэр"
  LOCALE_SABBREVMONTHNAME7 "Ліп"
  LOCALE_SABBREVMONTHNAME8 "Жні"
  LOCALE_SABBREVMONTHNAME9 "Вер"
  LOCALE_SABBREVMONTHNAME10 "Кас"
  LOCALE_SABBREVMONTHNAME11 "Ліс"
  LOCALE_SABBREVMONTHNAME12 "Сне"
  LOCALE_SABBREVMONTHNAME13 ""
  LOCALE_SCOUNTRY "Belarus"
  LOCALE_SCURRENCY "руб."
  LOCALE_SDATE "."
  LOCALE_SDAYNAME1 "панядзелак"
  LOCALE_SDAYNAME2 "аўторак"
  LOCALE_SDAYNAME3 "серада"
  LOCALE_SDAYNAME4 "чацвер"
  LOCALE_SDAYNAME5 "пятніца"
  LOCALE_SDAYNAME6 "субота"
  LOCALE_SDAYNAME7 "нядзеля"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Belarus"
  LOCALE_SENGCURRNAME "Belarusian Ruble"
  LOCALE_SENGLANGUAGE "Belarusian"
  LOCALE_SGROUPING "3;3"
  LOCALE_SINTLSYMBOL "BYR"
  LOCALE_SISO3166CTRYNAME "BY"
  LOCALE_SISO639LANGNAME "be"
  LOCALE_SLANGUAGE "Belarusian"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "d MMMM yyyy"
  LOCALE_SMONDECIMALSEP ","
  LOCALE_SMONGROUPING "3;3"
  LOCALE_SMONTHNAME1 "Студзень\0студзеня"
  LOCALE_SMONTHNAME2 "Люты\0лютага"
  LOCALE_SMONTHNAME3 "Сакавік\0сакавіка"
  LOCALE_SMONTHNAME4 "Красавік\0красавіка"
  LOCALE_SMONTHNAME5 "Май\0мая"
  LOCALE_SMONTHNAME6 "Чэрвень\0чэрвеня"
  LOCALE_SMONTHNAME7 "Ліпень\0ліпеня"
  LOCALE_SMONTHNAME8 "Жнівень\0жніўня"
  LOCALE_SMONTHNAME9 "Верасень\0верасня"
  LOCALE_SMONTHNAME10 "Кастрычнік\0кастрычніка"
  LOCALE_SMONTHNAME11 "Лістапад\0лістапада"
  LOCALE_SMONTHNAME12 "Снежань\0снежня"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP " "
  LOCALE_SNAME "be-BY"
  LOCALE_SNAN "NaN"
  LOCALE_SNATIVECTRYNAME "Беларусь"
  LOCALE_SNATIVECURRNAME "рубель"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "Беларуская (Беларусь)"
  LOCALE_SNATIVELANGNAME "Беларуская"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "BEL "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Cyrl;"
  LOCALE_SSHORTDATE "dd.MM.yyyy"
  LOCALE_SSHORTESTDAYNAME1 "пн"
  LOCALE_SSHORTESTDAYNAME2 "аў"
  LOCALE_SSHORTESTDAYNAME3 "ср"
  LOCALE_SSHORTESTDAYNAME4 "чц"
  LOCALE_SSHORTESTDAYNAME5 "пт"
  LOCALE_SSHORTESTDAYNAME6 "сб"
  LOCALE_SSHORTESTDAYNAME7 "нд"
  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 "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"
}
