/*
 * 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_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "0"
  LOCALE_IPOSSIGNPOSN "1"
  LOCALE_IPOSSYMPRECEDES "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_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 "Армянский"
}
