/*
 * Locale definitions for Lithuanian
 *
 * 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_LITHUANIAN, SUBLANG_LITHUANIAN
{
  LOCALE_FONTSIGNATURE L"\x0007\x8000\x3848\x1000\x0000\x0000\x0000\x0000\x0080\x0000\x0000\x0800\x0092\x0000\x0000\xcdd4"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "370"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "3"
  LOCALE_IDATE "2"
  LOCALE_IDAYLZERO "1"
  LOCALE_IDEFAULTANSICODEPAGE "1257"
  LOCALE_IDEFAULTCODEPAGE "775"
  LOCALE_IDEFAULTCOUNTRY "370"
  LOCALE_IDEFAULTEBCDICCODEPAGE "500"
  LOCALE_IDEFAULTLANGUAGE "0427"
  LOCALE_IDEFAULTMACCODEPAGE "10029"
  LOCALE_IDEFAULTUNIXCODEPAGE "28603"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0427"
  LOCALE_ILDATE "2"
  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 "1"
  LOCALE_S1159 ""
  LOCALE_S2359 ""
  LOCALE_SABBREVCTRYNAME "LTU"
  LOCALE_SABBREVDAYNAME1 "Pr"
  LOCALE_SABBREVDAYNAME2 "An"
  LOCALE_SABBREVDAYNAME3 "Tr"
  LOCALE_SABBREVDAYNAME4 "Kt"
  LOCALE_SABBREVDAYNAME5 "Pn"
  LOCALE_SABBREVDAYNAME6 "Št"
  LOCALE_SABBREVDAYNAME7 "Sk"
  LOCALE_SABBREVLANGNAME "LTH"
  LOCALE_SABBREVMONTHNAME1 "Sau"
  LOCALE_SABBREVMONTHNAME2 "Vas"
  LOCALE_SABBREVMONTHNAME3 "Kov"
  LOCALE_SABBREVMONTHNAME4 "Bal"
  LOCALE_SABBREVMONTHNAME5 "Geg"
  LOCALE_SABBREVMONTHNAME6 "Bir"
  LOCALE_SABBREVMONTHNAME7 "Lie"
  LOCALE_SABBREVMONTHNAME8 "Rgp"
  LOCALE_SABBREVMONTHNAME9 "Rgs"
  LOCALE_SABBREVMONTHNAME10 "Spl"
  LOCALE_SABBREVMONTHNAME11 "Lap"
  LOCALE_SABBREVMONTHNAME12 "Grd"
  LOCALE_SABBREVMONTHNAME13 ""
  LOCALE_SCOUNTRY "Lithuania"
  LOCALE_SCURRENCY "€"
  LOCALE_SDATE "."
  LOCALE_SDAYNAME1 "pirmadienis"
  LOCALE_SDAYNAME2 "antradienis"
  LOCALE_SDAYNAME3 "trečiadienis"
  LOCALE_SDAYNAME4 "ketvirtadienis"
  LOCALE_SDAYNAME5 "penktadienis"
  LOCALE_SDAYNAME6 "šeštadienis"
  LOCALE_SDAYNAME7 "sekmadienis"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Lithuania"
  LOCALE_SENGCURRNAME "Euro"
  LOCALE_SENGLANGUAGE "Lithuanian"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "LTL"
  LOCALE_SISO3166CTRYNAME "LT"
  LOCALE_SISO639LANGNAME "lt"
  LOCALE_SLANGUAGE "Lithuanian"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "yyyy 'm.' MMMM d 'd.'"
  LOCALE_SMONDECIMALSEP ","
  LOCALE_SMONGROUPING "3;0"
  LOCALE_SMONTHNAME1 "sausis\0sausio"
  LOCALE_SMONTHNAME2 "vasaris\0vasario"
  LOCALE_SMONTHNAME3 "kovas\0kovo"
  LOCALE_SMONTHNAME4 "balandis\0balandžio"
  LOCALE_SMONTHNAME5 "gegužė\0gegužės"
  LOCALE_SMONTHNAME6 "birželis\0birželio"
  LOCALE_SMONTHNAME7 "liepa\0liepos"
  LOCALE_SMONTHNAME8 "rugpjūtis\0rugpjūčio"
  LOCALE_SMONTHNAME9 "rugsėjis\0rugsėjo"
  LOCALE_SMONTHNAME10 "spalis\0spalio"
  LOCALE_SMONTHNAME11 "lapkritis\0lapkričio"
  LOCALE_SMONTHNAME12 "gruodis\0gruodžio"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP "."
  LOCALE_SNAME "lt-LT"
  LOCALE_SNAN "NaN"
  LOCALE_SNATIVECTRYNAME "Lietuva"
  LOCALE_SNATIVECURRNAME "Euras"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "lietuvių (Lietuva)"
  LOCALE_SNATIVELANGNAME "lietuvių"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "LTH "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Latn;"
  LOCALE_SSHORTDATE "yyyy.MM.dd"
  LOCALE_SSHORTESTDAYNAME1 "P"
  LOCALE_SSHORTESTDAYNAME2 "A"
  LOCALE_SSHORTESTDAYNAME3 "T"
  LOCALE_SSHORTESTDAYNAME4 "K"
  LOCALE_SSHORTESTDAYNAME5 "Pn"
  LOCALE_SSHORTESTDAYNAME6 "Š"
  LOCALE_SSHORTESTDAYNAME7 "S"
  LOCALE_SSHORTTIME "HH:mm"
  LOCALE_SSORTNAME "Default"
  LOCALE_STHOUSAND "."
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "HH:mm:ss"
  LOCALE_SYEARMONTH "yyyy 'm.' MMMM"

  LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Vakarų Europos ir JAV"
  LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Centrinės Europos"
  LGRPID_BALTIC+LGRPID_RES_BASE "Baltų"
  LGRPID_GREEK+LGRPID_RES_BASE "Graikų"
  LGRPID_CYRILLIC+LGRPID_RES_BASE "Kirilica"
  LGRPID_TURKISH+LGRPID_RES_BASE "Turkų"
  LGRPID_JAPANESE+LGRPID_RES_BASE "Japonų"
  LGRPID_KOREAN+LGRPID_RES_BASE "Korėjiečių"
  LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Kinų tradicinė"
  LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Kinų supaprastinta"
  LGRPID_THAI+LGRPID_RES_BASE "Tajų"
  LGRPID_HEBREW+LGRPID_RES_BASE "Hebrajų"
  LGRPID_ARABIC+LGRPID_RES_BASE "Arabų"
  LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamiečių"
  LGRPID_INDIC+LGRPID_RES_BASE "Indų"
  LGRPID_GEORGIAN+LGRPID_RES_BASE "Gruzinų"
  LGRPID_ARMENIAN+LGRPID_RES_BASE "Armėnų"
}
