/*
 * Locale definitions for Serbian (Cyrillic)
 *
 * 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_SERBIAN, SUBLANG_SERBIAN_CYRILLIC
{
  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 "381"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "3"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "0"
  LOCALE_IDEFAULTANSICODEPAGE "1251"
  LOCALE_IDEFAULTCODEPAGE "855"
  LOCALE_IDEFAULTCOUNTRY "381"
  LOCALE_IDEFAULTEBCDICCODEPAGE "21025"
  LOCALE_IDEFAULTLANGUAGE "0c1a"
  LOCALE_IDEFAULTMACCODEPAGE "10007"
  LOCALE_IDEFAULTUNIXCODEPAGE "28595"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0c1a"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "0"
  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 "SPB"
  LOCALE_SABBREVDAYNAME1 "пон"
  LOCALE_SABBREVDAYNAME2 "уто"
  LOCALE_SABBREVDAYNAME3 "сре"
  LOCALE_SABBREVDAYNAME4 "чет"
  LOCALE_SABBREVDAYNAME5 "пет"
  LOCALE_SABBREVDAYNAME6 "суб"
  LOCALE_SABBREVDAYNAME7 "нед"
  LOCALE_SABBREVLANGNAME "SRB"
  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 "Serbia"
  LOCALE_SCURRENCY "Дин."
  LOCALE_SDATE "."
  LOCALE_SDAYNAME1 "понедељак"
  LOCALE_SDAYNAME2 "уторак"
  LOCALE_SDAYNAME3 "среда"
  LOCALE_SDAYNAME4 "четвртак"
  LOCALE_SDAYNAME5 "петак"
  LOCALE_SDAYNAME6 "субота"
  LOCALE_SDAYNAME7 "недеља"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Serbia"
  LOCALE_SENGCURRNAME "Serbian Dinar"
  LOCALE_SENGLANGUAGE "Serbian (Cyrillic)"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "RSD"
  LOCALE_SISO3166CTRYNAME "RS"
  LOCALE_SISO639LANGNAME "sr"
  LOCALE_SLANGUAGE "Serbian (Cyrillic)"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "d. MMMM yyyy"
  LOCALE_SMONDECIMALSEP ","
  LOCALE_SMONGROUPING "3;0"
  LOCALE_SMONTHNAME1 "јануар"
  LOCALE_SMONTHNAME2 "фебруар"
  LOCALE_SMONTHNAME3 "март"
  LOCALE_SMONTHNAME4 "април"
  LOCALE_SMONTHNAME5 "мај"
  LOCALE_SMONTHNAME6 "јун"
  LOCALE_SMONTHNAME7 "јул"
  LOCALE_SMONTHNAME8 "август"
  LOCALE_SMONTHNAME9 "септембар"
  LOCALE_SMONTHNAME10 "октобар"
  LOCALE_SMONTHNAME11 "новембар"
  LOCALE_SMONTHNAME12 "децембар"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP "."
  LOCALE_SNAME "sr-RS"
  LOCALE_SNATIVECTRYNAME "Југославија"
  LOCALE_SNATIVECURRNAME "динар"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "српски (Југославија)"
  LOCALE_SNATIVELANGNAME "српски"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "SRB "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Cyrl;"
  LOCALE_SSHORTDATE "d.M.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"
}
