/*
 * 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_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Cyrl;"
  LOCALE_SSHORTDATE "dd.MM.yyyy"
  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 "Армянский"
}
