/*
 * Locale definitions for Russian
 *
 * 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)

STRINGTABLE LANGUAGE LANG_RUSSIAN, 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 "7"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "1"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "1"
  LOCALE_IDEFAULTANSICODEPAGE "1251"
  LOCALE_IDEFAULTCODEPAGE "866"
  LOCALE_IDEFAULTCOUNTRY "7"
  LOCALE_IDEFAULTEBCDICCODEPAGE "20880"
  LOCALE_IDEFAULTLANGUAGE "0419"
  LOCALE_IDEFAULTMACCODEPAGE "10007"
  LOCALE_IDEFAULTUNIXCODEPAGE "20866"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0419"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "1"
  LOCALE_INEGCURR "5"
  LOCALE_INEGNUMBER "1"
  LOCALE_INEGSEPBYSPACE "0"
  LOCALE_INEGSIGNPOSN "1"
  LOCALE_INEGSYMPRECEDES "0"
  LOCALE_INEUTRAL "0"
  LOCALE_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "0"
  LOCALE_IPOSSIGNPOSN "1"
  LOCALE_IPOSSYMPRECEDES "0"
  LOCALE_IREADINGLAYOUT "0"
  LOCALE_ITIME "1"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "0"
  LOCALE_S1159 ""
  LOCALE_S2359 ""
  LOCALE_SABBREVCTRYNAME "RUS"
  LOCALE_SABBREVDAYNAME1 "Пн"
  LOCALE_SABBREVDAYNAME2 "Вт"
  LOCALE_SABBREVDAYNAME3 "Ср"
  LOCALE_SABBREVDAYNAME4 "Чт"
  LOCALE_SABBREVDAYNAME5 "Пт"
  LOCALE_SABBREVDAYNAME6 "Сб"
  LOCALE_SABBREVDAYNAME7 "Вс"
  LOCALE_SABBREVLANGNAME "RUS"
  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 "Russia"
  LOCALE_SCURRENCY "р."
  LOCALE_SDATE "."
  LOCALE_SDAYNAME1 "понедельник"
  LOCALE_SDAYNAME2 "вторник"
  LOCALE_SDAYNAME3 "среда"
  LOCALE_SDAYNAME4 "четверг"
  LOCALE_SDAYNAME5 "пятница"
  LOCALE_SDAYNAME6 "суббота"
  LOCALE_SDAYNAME7 "воскресенье"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Russia"
  LOCALE_SENGCURRNAME "Russian Ruble"
  LOCALE_SENGLANGUAGE "Russian"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "RUR"
  LOCALE_SISO3166CTRYNAME "RU"
  LOCALE_SISO639LANGNAME "ru"
  LOCALE_SLANGUAGE "Russian"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "d MMMM yyyy 'г.'"
  LOCALE_SMONDECIMALSEP ","
  LOCALE_SMONGROUPING "3;0"
  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 "ru-RU"
  LOCALE_SNATIVECTRYNAME "Россия"
  LOCALE_SNATIVECURRNAME "рубль"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "русский (Россия)"
  LOCALE_SNATIVELANGNAME "русский"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "RUS "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Cyrl;"
  LOCALE_SSHORTDATE "dd.MM.yyyy"
  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 "Западный"
  LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Центральноевропейский"
  LGRPID_BALTIC+LGRPID_RES_BASE "Балтийский"
  LGRPID_GREEK+LGRPID_RES_BASE "Греческий"
  LGRPID_CYRILLIC+LGRPID_RES_BASE "Кириллический"
  LGRPID_TURKISH+LGRPID_RES_BASE "Турецкий"
  LGRPID_JAPANESE+LGRPID_RES_BASE "Японский"
  LGRPID_KOREAN+LGRPID_RES_BASE "Корейский"
  LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Китайский традиционный"
  LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Китайский упрощённый"
  LGRPID_THAI+LGRPID_RES_BASE "Тайский"
  LGRPID_HEBREW+LGRPID_RES_BASE "Иврит"
  LGRPID_ARABIC+LGRPID_RES_BASE "Арабский"
  LGRPID_VIETNAMESE+LGRPID_RES_BASE "Вьетнамский"
  LGRPID_INDIC+LGRPID_RES_BASE "Индийский"
  LGRPID_GEORGIAN+LGRPID_RES_BASE "Грузинский"
  LGRPID_ARMENIAN+LGRPID_RES_BASE "Армянский"
}
