/*
 * Locale definitions for Ukrainian
 *
 * 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_UKRAINIAN, 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 "380"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "3"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "1"
  LOCALE_IDEFAULTANSICODEPAGE "1251"
  LOCALE_IDEFAULTCODEPAGE "866"
  LOCALE_IDEFAULTCOUNTRY "380"
  LOCALE_IDEFAULTEBCDICCODEPAGE "500"
  LOCALE_IDEFAULTLANGUAGE "0422"
  LOCALE_IDEFAULTMACCODEPAGE "10017"
  LOCALE_IDEFAULTUNIXCODEPAGE "21866"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0422"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "1"
  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 "UKR"
  LOCALE_SABBREVDAYNAME1 "Пн"
  LOCALE_SABBREVDAYNAME2 "Вт"
  LOCALE_SABBREVDAYNAME3 "Ср"
  LOCALE_SABBREVDAYNAME4 "Чт"
  LOCALE_SABBREVDAYNAME5 "Пт"
  LOCALE_SABBREVDAYNAME6 "Сб"
  LOCALE_SABBREVDAYNAME7 "Нд"
  LOCALE_SABBREVLANGNAME "UKR"
  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 "Ukraine"
  LOCALE_SCURRENCY "грн."
  LOCALE_SDATE "."
  LOCALE_SDAYNAME1 "понеділок"
  LOCALE_SDAYNAME2 "вівторок"
  LOCALE_SDAYNAME3 "середа"
  LOCALE_SDAYNAME4 "четвер"
  LOCALE_SDAYNAME5 "п'ятниця"
  LOCALE_SDAYNAME6 "субота"
  LOCALE_SDAYNAME7 "неділя"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Ukraine"
  LOCALE_SENGCURRNAME "Ukrainian Hryvnia"
  LOCALE_SENGLANGUAGE "Ukrainian"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "UAH"
  LOCALE_SISO3166CTRYNAME "UA"
  LOCALE_SISO639LANGNAME "uk"
  LOCALE_SLANGUAGE "Ukrainian"
  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 "uk-UA"
  LOCALE_SNAN "NaN"
  LOCALE_SNATIVECTRYNAME "Україна"
  LOCALE_SNATIVECURRNAME "гривня"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "українська (Україна)"
  LOCALE_SNATIVELANGNAME "українська"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "UKR "
  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 "Вірменська"
}
