/*
 * Locale definitions for Farsi
 *
 * 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_FARSI, SUBLANG_DEFAULT
{
  LOCALE_FONTSIGNATURE L"\x60af\x8000\x3848\x1000\x0008\x0000\x0000\x0800\x0040\x0000\x0000\x2000\x0040\x0000\x0000\x2008"
  LOCALE_ICALENDARTYPE "2"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "981"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "2"
  LOCALE_IDATE "2"
  LOCALE_IDAYLZERO "1"
  LOCALE_IDEFAULTANSICODEPAGE "1256"
  LOCALE_IDEFAULTCODEPAGE "720"
  LOCALE_IDEFAULTCOUNTRY "981"
  LOCALE_IDEFAULTEBCDICCODEPAGE "20420"
  LOCALE_IDEFAULTLANGUAGE "0429"
  LOCALE_IDEFAULTMACCODEPAGE "10004"
  LOCALE_IDEFAULTUNIXCODEPAGE "65001"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "0"
  LOCALE_IFIRSTDAYOFWEEK "6"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0429"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "1"
  LOCALE_INEGCURR "3"
  LOCALE_INEGNUMBER "3"
  LOCALE_INEGSEPBYSPACE "0"
  LOCALE_INEGSIGNPOSN "2"
  LOCALE_INEGSYMPRECEDES "1"
  LOCALE_INEUTRAL "0"
  LOCALE_IOPTIONALCALENDAR "2"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "1"
  LOCALE_IPOSSIGNPOSN "2"
  LOCALE_IPOSSYMPRECEDES "1"
  LOCALE_IREADINGLAYOUT "0"
  LOCALE_ITIME "0"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "1"
  LOCALE_S1159 "ق.ظ"
  LOCALE_S2359 "ب.ظ"
  LOCALE_SABBREVCTRYNAME "IRN"
  LOCALE_SABBREVDAYNAME1 "دوشنبه"
  LOCALE_SABBREVDAYNAME2 "سه شنبه"
  LOCALE_SABBREVDAYNAME3 "چهارشنبه"
  LOCALE_SABBREVDAYNAME4 "پنجشنبه"
  LOCALE_SABBREVDAYNAME5 "جمعه"
  LOCALE_SABBREVDAYNAME6 "شنبه"
  LOCALE_SABBREVDAYNAME7 "يكشنبه"
  LOCALE_SABBREVLANGNAME "FAR"
  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 "Iran"
  LOCALE_SCURRENCY "ريال"
  LOCALE_SDATE "/"
  LOCALE_SDAYNAME1 "دوشنبه"
  LOCALE_SDAYNAME2 "سه شنبه"
  LOCALE_SDAYNAME3 "چهارشنبه"
  LOCALE_SDAYNAME4 "پنجشنبه"
  LOCALE_SDAYNAME5 "جمعه"
  LOCALE_SDAYNAME6 "شنبه"
  LOCALE_SDAYNAME7 "يكشنبه"
  LOCALE_SDECIMAL "."
  LOCALE_SENGCOUNTRY "Iran"
  LOCALE_SENGCURRNAME "Iranian Rial"
  LOCALE_SENGLANGUAGE "Farsi"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "IRR"
  LOCALE_SISO3166CTRYNAME "IR"
  LOCALE_SISO639LANGNAME "fa"
  LOCALE_SLANGUAGE "Farsi"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "yyyy/MM/dd"
  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 "fa-IR"
  LOCALE_SNATIVECTRYNAME "ايران"
  LOCALE_SNATIVECURRNAME "رىال"
  LOCALE_SNATIVEDIGITS L"\x06f0\x06f1\x06f2\x06f3\x06f4\x06f5\x06f6\x06f7\x06f8\x06f9"
  LOCALE_SNATIVEDISPLAYNAME "فارسى (ايران)"
  LOCALE_SNATIVELANGNAME "فارسى"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "FAR "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Arab;"
  LOCALE_SSHORTDATE "yyyy/MM/dd"
  LOCALE_SSHORTESTDAYNAME1 "د"
  LOCALE_SSHORTESTDAYNAME2 "س"
  LOCALE_SSHORTESTDAYNAME3 "چ"
  LOCALE_SSHORTESTDAYNAME4 "پ"
  LOCALE_SSHORTESTDAYNAME5 "ج"
  LOCALE_SSHORTESTDAYNAME6 "ش"
  LOCALE_SSHORTESTDAYNAME7 "ی"
  LOCALE_SSHORTTIME "hh:mm tt"
  LOCALE_SSORTNAME "Default"
  LOCALE_STHOUSAND ","
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "hh:mm:ss tt"
  LOCALE_SYEARMONTH "yyyy/MM"

  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"
}
