Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -501,7 +501,7 @@ All other default values are highlighted with bold:
* - Israel
- IL
-
-
- en_US, **he**, uk
- OPTIONAL, SCHOOL
* - Italy
- IT
Expand Down
16 changes: 13 additions & 3 deletions holidays/calendars/hebrew.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,17 @@

from holidays.calendars.gregorian import FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC

HANUKKAH = "HANUKKAH"
INDEPENDENCE_DAY = "INDEPENDENCE_DAY"
LAG_BAOMER = "LAG_BAOMER"
PASSOVER = "PASSOVER"
PURIM = "PURIM"
ROSH_HASHANAH = "ROSH_HASHANAH"
SHAVUOT = "SHAVUOT"
SUKKOT = "SUKKOT"
TISHA_BAV = "TISHA_BAV"
YOM_KIPPUR = "YOM_KIPPUR"


class _HebrewLunisolar:
HANUKKAH_DATES = {
Expand Down Expand Up @@ -1587,7 +1598,6 @@ class _HebrewLunisolar:
}

@staticmethod
def hebrew_holiday_date(year: int, hol_type: str) -> Optional[date]:
hol_array = getattr(_HebrewLunisolar, f"{hol_type}_DATES", {})
dt = hol_array.get(year, ())
def _get_holiday(holiday: str, year: int) -> Optional[date]:
dt = getattr(_HebrewLunisolar, f"{holiday}_DATES", {}).get(year, ())
return date(year, *dt) if dt else None
160 changes: 94 additions & 66 deletions holidays/countries/israel.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,20 @@
# License: MIT (see LICENSE file)

from datetime import timedelta as td
from gettext import gettext as tr

from holidays.calendars import _HebrewLunisolar
from holidays.calendars.hebrew import (
HANUKKAH,
INDEPENDENCE_DAY,
LAG_BAOMER,
PASSOVER,
PURIM,
ROSH_HASHANAH,
SHAVUOT,
SUKKOT,
YOM_KIPPUR,
)
from holidays.constants import OPTIONAL, PUBLIC, SCHOOL
from holidays.observed_holiday_base import (
ObservedHolidayBase,
Expand All @@ -26,16 +38,28 @@


class Israel(ObservedHolidayBase):
"""
Israel holidays.

References:
- https://en.wikipedia.org/wiki/Public_holidays_in_Israel
- https://web.archive.org/web/20190923042619/https://www.knesset.gov.il/laws/special/heb/jerusalem_day_law.htm # noqa: E501

"""

country = "IL"
observed_label = "%s (Observed)"
default_language = "he"
# %s (Observed).
observed_label = tr("(נצפה) %s")
supported_categories = (OPTIONAL, PUBLIC, SCHOOL)
supported_languages = ("en_US", "he", "uk")

def __init__(self, *args, **kwargs):
kwargs.setdefault("observed_rule", FRI_TO_PREV_THU + SAT_TO_PREV_THU)
super().__init__(*args, **kwargs)

def _get_holiday(self, holiday: str):
return _HebrewLunisolar.hebrew_holiday_date(self._year, holiday)
return _HebrewLunisolar._get_holiday(holiday, self._year)

def _populate_public_holidays(self):
if self._year <= 1947:
Expand All @@ -44,37 +68,40 @@ def _populate_public_holidays(self):
if self._year >= 2101:
raise NotImplementedError

# Rosh Hashanah
rosh_hashanah_dt = self._get_holiday("ROSH_HASHANAH")
name = "Rosh Hashanah"
# Rosh Hashanah (New Year).
name = tr("ראש השנה")
rosh_hashanah_dt = self._get_holiday(ROSH_HASHANAH)
self._add_holiday(name, rosh_hashanah_dt)
self._add_holiday(name, rosh_hashanah_dt + td(days=+1))

# Yom Kippur
self._add_holiday("Yom Kippur", self._get_holiday("YOM_KIPPUR"))

# Sukkot
sukkot_dt = self._get_holiday("SUKKOT")
self._add_holiday("Sukkot", sukkot_dt)
self._add_holiday("Simchat Torah / Shemini Atzeret", sukkot_dt + td(days=+7))

# Passover
passover_dt = self._get_holiday("PASSOVER")
self._add_holiday("Passover", passover_dt)
self._add_holiday("Seventh day of Passover", passover_dt + td(days=+6))

# Independence Day
name = "Independence Day"
independence_day_dt = self._get_holiday("INDEPENDENCE_DAY")
# Yom Kippur (Day of Atonement).
self._add_holiday(tr("יום כיפור"), self._get_holiday(YOM_KIPPUR))

# Sukkot (Feast of Tabernacles).
name = tr("סוכות")
sukkot_dt = self._get_holiday(SUKKOT)
self._add_holiday(name, sukkot_dt)
# Simchat Torah / Shemini Atzeret.
self._add_holiday(tr("שמחת תורה/שמיני עצרת"), sukkot_dt + td(days=+7))

passover_dt = self._get_holiday(PASSOVER)
# Pesach (Passover).
self._add_holiday(tr("פסח"), passover_dt)
# Shvi'i shel Pesach (Seventh day of Passover)
self._add_holiday(tr("שביעי של פסח"), passover_dt + td(days=+6))

# Yom Ha-Atzmaut (Independence Day).
name = tr("יום העצמאות")
independence_day_dt = self._get_holiday(INDEPENDENCE_DAY)
rule = FRI_TO_PREV_THU + SAT_TO_PREV_THU
if self._year >= 2004:
rule += MON_TO_NEXT_TUE
is_obs, _ = self._add_observed(independence_day_dt, name, rule)
if not is_obs:
is_observed, _ = self._add_observed(independence_day_dt, name, rule)
if not is_observed:
self._add_holiday(name, independence_day_dt)

# Shavuot
self._add_holiday("Shavuot", self._get_holiday("SHAVUOT"))
# Shavuot.
self._add_holiday(tr("שבועות"), self._get_holiday(SHAVUOT))

def _populate_optional_holidays(self):
if self._year <= 1947:
Expand All @@ -83,42 +110,43 @@ def _populate_optional_holidays(self):
if self._year >= 2101:
raise NotImplementedError

# Sukkot Chol HaMoed
sukkot_dt = self._get_holiday("SUKKOT")
sukkot_dt = self._get_holiday(SUKKOT)
for offset in range(1, 6):
self._add_holiday("Sukkot", sukkot_dt + td(days=offset))
# Chol HaMoed Sukkot (Feast of Tabernacles holiday).
self._add_holiday(tr("חול המועד סוכות"), sukkot_dt + td(days=offset))

if self._year >= 2008:
# Sigd
self._add_holiday("Sigd", self._get_holiday("YOM_KIPPUR") + td(days=+49))
# Sigd.
self._add_holiday(tr("סיגד"), self._get_holiday(YOM_KIPPUR) + td(days=+49))

# Purim
self._add_holiday("Purim", self._get_holiday("PURIM"))
# Purim.
self._add_holiday(tr("פורים"), self._get_holiday(PURIM))

# Passover (Chol HaMoed Pesach)
passover_dt = self._get_holiday("PASSOVER")
passover_dt = self._get_holiday(PASSOVER)
for offset in range(1, 6):
self._add_holiday("Passover", passover_dt + td(days=offset))
# Chol HaMoed Pesach (Passover holiday).
self._add_holiday(tr("חול המועד פסח"), passover_dt + td(days=offset))

# Memorial Day
if self._year >= 1963:
name = "Memorial Day"
memorial_day_dt = self._get_holiday("INDEPENDENCE_DAY") + td(days=-1)
# Yom Hazikaron (Fallen Soldiers and Victims of Terrorism Remembrance Day).
name = tr("יום הזיכרון לחללי מערכות ישראל ונפגעי פעולות האיבה")
remembrance_day_dt = self._get_holiday(INDEPENDENCE_DAY) + td(days=-1)
rule = THU_TO_PREV_WED + FRI_TO_PREV_WED
if self._year >= 2004:
rule += SUN_TO_NEXT_MON
is_obs, _ = self._add_observed(memorial_day_dt, name, rule)
if not is_obs:
self._add_holiday(name, memorial_day_dt)
is_observed, _ = self._add_observed(remembrance_day_dt, name, rule)
if not is_observed:
self._add_holiday(name, remembrance_day_dt)

# Jerusalem Day
self._add_holiday("Jerusalem Day", self._get_holiday("LAG_BAOMER") + td(days=+10))
if self._year >= 1998:
# Yom Yerushalayim (Jerusalem Day).
self._add_holiday(tr("יום ירושלים"), self._get_holiday(LAG_BAOMER) + td(days=+10))

# Tisha B'Av
name = "Tisha B'Av"
# Tisha B'Av (Tisha B'Av, fast).
name = tr("תשעה באב")
tisha_bav_dt = self._get_holiday("TISHA_BAV")
is_obs, _ = self._add_observed(tisha_bav_dt, name, SAT_TO_NEXT_SUN)
if not is_obs:
is_observed, _ = self._add_observed(tisha_bav_dt, name, SAT_TO_NEXT_SUN)
if not is_observed:
self._add_holiday(name, tisha_bav_dt)

def _populate_school_holidays(self):
Expand All @@ -128,35 +156,35 @@ def _populate_school_holidays(self):
if self._year >= 2101:
raise NotImplementedError

# Sukkot Chol HaMoed
sukkot_dt = self._get_holiday("SUKKOT")
sukkot_dt = self._get_holiday(SUKKOT)
for offset in range(1, 6):
self._add_holiday("Sukkot", sukkot_dt + td(days=offset))
# Chol HaMoed Sukkot (Feast of Tabernacles holiday).
self._add_holiday(tr("חול המועד סוכות"), sukkot_dt + td(days=offset))

# Hanukkah
for yr in (self._year - 1, self._year):
hanukkah_dt = _HebrewLunisolar.hebrew_holiday_date(yr, "HANUKKAH")
for year in (self._year - 1, self._year):
hanukkah_dt = _HebrewLunisolar._get_holiday(HANUKKAH, year)
for offset in range(8):
self._add_holiday("Hanukkah", hanukkah_dt + td(days=offset))
# Hanukkah.
self._add_holiday(tr("חנוכה"), hanukkah_dt + td(days=offset))

# Fast of Esther
name = "Fast of Esther"
purim_dt = self._get_holiday("PURIM")
# Ta`anit Ester (Fast of Esther).
name = tr("תענית אסתר")
purim_dt = self._get_holiday(PURIM)
taanit_ester_dt = purim_dt + td(days=-1)
is_obs, _ = self._add_observed(taanit_ester_dt, name, SAT_TO_PREV_THU)
if not is_obs:
is_observed, _ = self._add_observed(taanit_ester_dt, name, SAT_TO_PREV_THU)
if not is_observed:
self._add_holiday(name, taanit_ester_dt)

# Purim
self._add_holiday("Purim", purim_dt)
# Purim.
self._add_holiday(tr("פורים"), purim_dt)

# Passover (Chol HaMoed Pesach)
passover_dt = self._get_holiday("PASSOVER")
passover_dt = self._get_holiday(PASSOVER)
for offset in range(1, 6):
self._add_holiday("Passover", passover_dt + td(days=offset))
# Chol HaMoed Pesach (Passover holiday).
self._add_holiday(tr("חול המועד פסח"), passover_dt + td(days=offset))

# Lag BaOmer
self._add_holiday("Lag BaOmer", self._get_holiday("LAG_BAOMER"))
# Lag Ba'omer (Lag BaOmer).
self._add_holiday(tr('ל"ג בעומר'), self._get_holiday(LAG_BAOMER))


class IL(Israel):
Expand Down
93 changes: 93 additions & 0 deletions holidays/locale/en_US/LC_MESSAGES/IL.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Israel holidays en_US localization.
# Authors: Arkadii Yakovets <[email protected]>, (c) 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: Python Holidays 0.39\n"
"POT-Creation-Date: 2023-07-18 17:31+0300\n"
"PO-Revision-Date: 2023-07-18 17:57+0300\n"
"Last-Translator: Arkadii Yakovets <[email protected]>\n"
"Language-Team: Python Holidays localization team\n"
"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Lingua 4.15.0\n"
"X-Generator: Poedit 3.2.2\n"

#. Rosh Hashanah (New Year).
msgid "ראש השנה"
msgstr "Rosh Hashanah"

#. Yom Kippur (Day of Atonement).
msgid "יום כיפור"
msgstr "Yom Kippur"

#. Sukkot (Feast of Tabernacles).
msgid "סוכות"
msgstr "Sukkot"

#. Chol HaMoed Sukkot (Feast of Tabernacles holiday).
msgid "חול המועד סוכות"
msgstr "Sukkot holiday"

#. Simchat Torah / Shemini Atzeret.
msgid "שמחת תורה/שמיני עצרת"
msgstr "Simchat Torah / Shemini Atzeret"

#. Pesach (Passover).
msgid "פסח"
msgstr "Pesach"

#. Chol HaMoed Pesach (Passover holiday).
msgid "חול המועד פסח"
msgstr "Pesach holiday"

#. Shvi'i shel Pesach (Seventh day of Passover)
msgid "שביעי של פסח"
msgstr "Seventh day of Pesach"

#. Yom Ha-Atzmaut (Independence Day).
msgid "יום העצמאות"
msgstr "Independence Day"

#. Shavuot.
msgid "שבועות"
msgstr "Shavuot"

#. Sigd.
msgid "סיגד"
msgstr "Sigd"

#. Purim.
msgid "פורים"
msgstr "Purim"

#. Yom Hazikaron (Fallen Soldiers and Victims of Terrorism Remembrance Day).
msgid "יום הזיכרון לחללי מערכות ישראל ונפגעי פעולות האיבה"
msgstr "Remembrance Day"

#. Yom Yerushalayim (Jerusalem Day).
msgid "יום ירושלים"
msgstr "Jerusalem Day"

#. Tisha B'Av (Tisha B'Av, fast).
msgid "תשעה באב"
msgstr "Tisha B'Av"

#. Hanukkah.
msgid "חנוכה"
msgstr "Hanukkah"

#. Ta`anit Ester (Fast of Esther).
msgid "תענית אסתר"
msgstr "Ta'anit Ester"

#. Lag Ba'omer (Lag BaOmer).
msgid "ל\"ג בעומר"
msgstr "Lag BaOmer"

#. %s (Observed).
#, c-format
msgid "(נצפה) %s"
msgstr "%s (Observed)"
Loading