/*
 * 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) /* UTF-8 */

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_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 "Западный"
  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 "Армянский"
}
