Repository: vacanza/holidays (python)

Issue:
Add Lebanon holidays
Links:
  - https://en.wikipedia.org/wiki/Public_holidays_in_Lebanon
  - https://www.timeanddate.com/holidays/lebanon/
  - https://www.bdl.gov.lb/pages/index/9/154/Official-Banking-Holidays.html

Pull request:
Add Lebanon holidays
<!--
  Thanks for contributing to holidays!
-->

## Proposed change

<!--
  Describe the big picture of your changes.
  Don't forget to link your PR to an existing issue if any.
-->

Add Lebanon holidays.

Fixes #1216.

## Type of change

<!--
  Type of change you want to introduce. Please, check one (1) box only!
  If your PR requires multiple boxes to be checked, most likely it needs to
  be split into multiple PRs.
-->

- [X] New country/market holidays support (thank you!)
- [ ] Supported country/market holidays update (calendar discrepancy fix, localization)
- [ ] Existing code/documentation/test/process quality improvement (best practice, cleanup, refactoring, optimization)
- [ ] Dependency update (version deprecation/pin/upgrade)
- [ ] Bugfix (non-breaking change which fixes an issue)
- [ ] Breaking change (a code change causing existing functionality to break)
- [ ] New feature (new `holidays` functionality in general)

## Checklist

<!--
  Put an `x` in the boxes that apply. You can change them after PR is created.
-->

- [X] I've followed the [contributing guidelines][contributing-guidelines]
- [X] I've successfully run `make check`, all checks and tests are green

<!--
  Thanks again for your contribution!
-->

[contributing-guidelines]: https://github.com/vacanza/holidays/blob/dev/CONTRIBUTING.md
[docs]: https://github.com/vacanza/holidays/tree/dev/docs/source


Patch:
diff --git a/README.md b/README.md
index 78fed16a..0dcfeffe 100644
--- a/README.md
+++ b/README.md
@@ -105,7 +105,7 @@ and detailed information.
 
 ## Available Countries
 
-We currently support 215 country codes. The standard way to refer to a country is by using its [ISO
+We currently support 216 country codes. The standard way to refer to a country is by using its [ISO
 3166-1 alpha-2 code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes), the same used
 for domain names, and for a subdivision its [ISO 3166-2
 code](https://en.wikipedia.org/wiki/ISO_3166-2). Some countries have common or foreign names or
@@ -896,6 +896,13 @@ any) in brackets, available languages and additional holiday categories. All cou
 <td></td>
 </tr>
 <tr>
+<td>Lebanon</td>
+<td>LB</td>
+<td></td>
+<td><strong>ar</strong>, en_US</td>
+<td>BANK, GOVERNMENT</td>
+</tr>
+<tr>
 <td>Lesotho</td>
 <td>LS</td>
 <td></td>
diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py
index 0b027dba..9ac3d027 100644
--- a/holidays/countries/__init__.py
+++ b/holidays/countries/__init__.py
@@ -124,6 +124,7 @@ from holidays.countries.kuwait import Kuwait, KW, KWT
 from holidays.countries.kyrgyzstan import Kyrgyzstan, KG, KGZ
 from holidays.countries.laos import Laos, LA, LAO
 from holidays.countries.latvia import Latvia, LV, LVA
+from holidays.countries.lebanon import Lebanon, LB, LBN
 from holidays.countries.lesotho import Lesotho, LS, LSO
 from holidays.countries.libya import Libya, LY, LBY
 from holidays.countries.liechtenstein import Liechtenstein, LI, LIE
diff --git a/holidays/countries/lebanon.py b/holidays/countries/lebanon.py
new file mode 100644
index 00000000..0fab16d1
--- /dev/null
+++ b/holidays/countries/lebanon.py
@@ -0,0 +1,448 @@
+#  holidays
+#  --------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+
+from gettext import gettext as tr
+
+from holidays.calendars import _CustomIslamicHolidays
+from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
+from holidays.calendars.julian import JULIAN_CALENDAR
+from holidays.constants import BANK, GOVERNMENT, PUBLIC
+from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
+from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON
+
+
+class Lebanon(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
+    """Lebanon holidays.
+
+    References:
+        * [Decree No. 35 of 1977](https://web.archive.org/web/20250704170408/http://legiliban.ul.edu.lb/LawArticles.aspx?LawTreeSectionID=204659&LawID=202420&language=ar)
+        * [Decree No. 2512 of 1985](https://web.archive.org/web/20250704170328/http://legiliban.ul.edu.lb/LawArticles.aspx?LawTreeSectionID=186992&LawID=184753&language=ar)
+        * [Decree No. 5112 of 1994](https://web.archive.org/web/20250704170257/http://legiliban.ul.edu.lb/LawArticles.aspx?LawTreeSectionID=173902&LawID=171663&language=ar)
+        * [Decree No. 15215 of 2005](https://web.archive.org/web/20250704170428/http://legiliban.ul.edu.lb/LawArticles.aspx?LawTreeSectionID=213954&LawID=211715&language=ar)
+        * [Decree No. 16237 of 2006](https://web.archive.org/web/20250704170424/http://legiliban.ul.edu.lb/LawArticles.aspx?LawTreeSectionID=215180&LawID=212941&language=ar)
+        * [Decree No. 3369 of 2010](https://web.archive.org/web/20250704170437/http://legiliban.ul.edu.lb/LawArticles.aspx?LawTreeSectionID=227216&LawID=224978&language=ar)
+        * <https://web.archive.org/web/20200925173058/https://www.abl.org.lb/english/abl-and-banking-sector-news/official-holidays>
+    """
+
+    country = "LB"
+    default_language = "ar"
+    # %s (estimated).
+    estimated_label = tr("%s (المقدرة)")
+    # %s (observed).
+    observed_label = tr("%s (يُحتفل به)")
+    # %s (observed, estimated).
+    observed_estimated_label = tr("%s (يُحتفل به، المقدرة)")
+    start_year = 1978
+    supported_categories = (BANK, GOVERNMENT, PUBLIC)
+    supported_languages = ("ar", "en_US")
+
+    def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
+        """
+        Args:
+            islamic_show_estimated:
+                Whether to add "estimated" label to Islamic holidays name
+                if holiday date is estimated.
+        """
+        ChristianHolidays.__init__(self)
+        InternationalHolidays.__init__(self)
+        IslamicHolidays.__init__(
+            self, cls=LebanonIslamicHolidays, show_estimated=islamic_show_estimated
+        )
+        super().__init__(*args, **kwargs)
+
+    def _populate_public_holidays(self):
+        # New Year's Day.
+        self._add_new_years_day(tr("رأس السنة الميلادية"))
+
+        if self._year >= 1995:
+            # Armenian Orthodox Christmas Day.
+            self._add_holiday_jan_6(tr("عيد الميلاد عند الطوائف الارمنية الارثوذكسية"))
+
+        # Saint Maron's Day.
+        self._add_holiday_feb_9(tr("عيد مار مارون"))
+
+        if 1995 <= self._year <= 2005 or self._year >= 2010:
+            # Feast of the Annunciation.
+            self._add_holiday_mar_25(tr("عيد بشارة السيدة مريم العذراء"))
+
+        # Catholic Good Friday.
+        catholic_good_friday = self._add_good_friday(tr("الجمعة العظيمة عند الطوائف الكاثوليكية"))
+
+        orthodox_good_friday = self._add_good_friday(
+            # Orthodox Good Friday.
+            tr("الجمعة العظيمة عند الطوائف الأرثوذكسية"),
+            calendar=JULIAN_CALENDAR,
+        )
+
+        if orthodox_good_friday == catholic_good_friday:
+            # Orthodox Holy Saturday.
+            self._add_holy_saturday(tr("سبت النور للطائفة الأرثوذكسية"))
+
+        if 1986 <= self._year <= 1994:
+            catholic_easter_monday = self._add_easter_monday(
+                # Catholic Easter Monday.
+                tr("اثنين الفصح عند الطوائف الكاثوليكية")
+            )
+
+            orthodox_easter_monday = self._add_easter_monday(
+                # Orthodox Easter Monday.
+                tr("اثنين الفصح عند الطوائف الأرثوذكسية"),
+                calendar=JULIAN_CALENDAR,
+            )
+
+            if catholic_easter_monday == orthodox_easter_monday:
+                # Orthodox Easter Tuesday.
+                self._add_easter_tuesday(tr("ثلاثاء الفصح للطوائف الأرثوذكسية"))
+
+        # Labor Day.
+        dt = self._add_labor_day(tr("عيد العمل"))
+        if self._year >= 1995:
+            self._add_observed(dt, rule=SUN_TO_NEXT_MON)
+
+        # Martyrs' Day.
+        name = tr("عيد الشهداء")
+        if self._year <= 1993:
+            self._add_holiday_1st_sun_from_may_6(name)
+        elif self._year >= 2006:
+            self._add_holiday_1st_sun_of_may(name)
+
+        if self._year >= 2006:
+            # Resistance and Liberation Day.
+            self._add_holiday_2nd_sun_of_may(tr("عيد المقاومة والتحرير"))
+
+        # Assumption Day.
+        self._add_assumption_of_mary_day(tr("عيد انتقال العذراء"))
+
+        if 1985 <= self._year <= 1993:
+            # All Saints' Day.
+            self._add_all_saints_day(tr("عيد جميع القديسين"))
+
+        # Independence Day.
+        self._add_holiday_nov_22(tr("ذكرى الاستقلال"))
+
+        # Christmas Day.
+        self._add_christmas_day(tr("عيد الميلاد"))
+
+        # Islamic New Year.
+        self._add_islamic_new_year_day(tr("عيد رأس السنة الهجرية"))
+
+        # Ashura.
+        self._add_ashura_day(tr("عاشوراء"))
+
+        # Prophet's Birthday.
+        self._add_mawlid_day(tr("ذكرى المولد النبوي الشريف"))
+
+        # Eid al-Fitr.
+        name = tr("عيد الفطر")
+        self._add_eid_al_fitr_day(name)
+        if self._year >= 1986:
+            self._add_eid_al_fitr_day_two(name)
+            if self._year <= 1994:
+                self._add_eid_al_fitr_day_three(name)
+
+        # Eid al-Adha.
+        name = tr("عيد الأضحى")
+        self._add_eid_al_adha_day(name)
+        self._add_eid_al_adha_day_two(name)
+        if 1986 <= self._year <= 1993:
+            self._add_eid_al_adha_day_three(name)
+
+    def _populate_bank_holidays(self):
+        if self._year >= 2020:
+            # Rafik Hariri Memorial Day.
+            self._add_holiday_feb_14(tr("يوم ذكرى رفيق الحريري"))
+
+            # Catholic Easter Monday.
+            self._add_easter_monday(tr("اثنين الفصح عند الطوائف الكاثوليكية"))
+
+            self._add_easter_monday(
+                # Orthodox Easter Monday.
+                tr("اثنين الفصح عند الطوائف الأرثوذكسية"),
+                calendar=JULIAN_CALENDAR,
+            )
+
+    def _populate_government_holidays(self):
+        if self._year >= 2020:
+            # Rafik Hariri Memorial Day.
+            self._add_holiday_feb_14(tr("يوم ذكرى رفيق الحريري"))
+
+        if self._year >= 2021:
+            # Anniversary of the tragedy of Beirut port explosion.
+            self._add_holiday_aug_4(tr("ذكرى مأساة انفجار مرفأ بيروت"))
+
+
+class LB(Lebanon):
+    pass
+
+
+class LBN(Lebanon):
+    pass
+
+
+class LebanonIslamicHolidays(_CustomIslamicHolidays):
+    # https://web.archive.org/web/20250426220233/https://www.timeanddate.com/holidays/lebanon/first-day-ashura
+    ASHURA_DATES = {
+        1978: (DEC, 11),
+        1979: (NOV, 30),
+        1980: (NOV, 18),
+        1981: (NOV, 8),
+        1982: (OCT, 28),
+        1983: (OCT, 17),
+        1984: (OCT, 6),
+        1985: (SEP, 25),
+        1986: (SEP, 15),
+        1987: (SEP, 4),
+        1988: (AUG, 23),
+        1989: (AUG, 13),
+        1990: (AUG, 2),
+        1991: (JUL, 22),
+        1992: (JUL, 11),
+        1993: (JUN, 30),
+        1994: (JUN, 19),
+        1995: (JUN, 9),
+        1996: (MAY, 28),
+        1997: (MAY, 18),
+        1998: (MAY, 7),
+        1999: (APR, 26),
+        2000: (APR, 15),
+        2001: (APR, 4),
+        2002: (MAR, 24),
+        2003: (MAR, 14),
+        2004: (MAR, 2),
+        2005: (FEB, 19),
+        2006: (FEB, 9),
+        2007: (JAN, 29),
+        2008: (JAN, 19),
+        2009: ((JAN, 7), (DEC, 27)),
+        2010: (DEC, 17),
+        2011: (DEC, 6),
+        2012: (NOV, 24),
+        2013: (NOV, 14),
+        2014: (NOV, 3),
+        2015: (OCT, 24),
+        2016: (OCT, 12),
+        2017: (OCT, 1),
+        2018: (SEP, 21),
+        2019: (SEP, 10),
+        2020: (AUG, 30),
+        2021: (AUG, 19),
+        2022: (AUG, 9),
+        2023: (JUL, 28),
+        2024: (JUL, 16),
+    }
+
+    # https://web.archive.org/web/20250316072400/https://www.timeanddate.com/holidays/lebanon/eid-al-adha
+    EID_AL_ADHA_DATES = {
+        1978: (NOV, 11),
+        1979: (NOV, 1),
+        1980: (OCT, 20),
+        1981: (OCT, 9),
+        1982: (SEP, 29),
+        1983: (SEP, 18),
+        1984: (SEP, 6),
+        1985: (AUG, 27),
+        1986: (AUG, 16),
+        1987: (AUG, 6),
+        1988: (JUL, 25),
+        1989: (JUL, 14),
+        1990: (JUL, 4),
+        1991: (JUN, 23),
+        1992: (JUN, 11),
+        1993: (JUN, 1),
+        1994: (MAY, 21),
+        1995: (MAY, 10),
+        1996: (APR, 29),
+        1997: (APR, 18),
+        1998: (APR, 8),
+        1999: (MAR, 28),
+        2000: (MAR, 16),
+        2001: (MAR, 6),
+        2002: (FEB, 23),
+        2003: (FEB, 12),
+        2004: (FEB, 2),
+        2005: (JAN, 21),
+        2006: ((JAN, 10), (DEC, 31)),
+        2007: (DEC, 20),
+        2008: (DEC, 9),
+        2009: (NOV, 28),
+        2010: (NOV, 17),
+        2011: (NOV, 7),
+        2012: (OCT, 26),
+        2013: (OCT, 15),
+        2014: (OCT, 5),
+        2015: (SEP, 24),
+        2016: (SEP, 13),
+        2017: (SEP, 2),
+        2018: (AUG, 22),
+        2019: (AUG, 12),
+        2020: (JUL, 31),
+        2021: (JUL, 20),
+        2022: (JUL, 9),
+        2023: (JUN, 28),
+        2024: (JUN, 16),
+        2025: (JUN, 6),
+    }
+
+    # https://web.archive.org/web/20250216042303/https://www.timeanddate.com/holidays/lebanon/eid-al-fitr
+    EID_AL_FITR_DATES = {
+        1978: (SEP, 4),
+        1979: (AUG, 25),
+        1980: (AUG, 13),
+        1981: (AUG, 2),
+        1982: (JUL, 23),
+        1983: (JUL, 12),
+        1984: (JUN, 30),
+        1985: (JUN, 20),
+        1986: (JUN, 9),
+        1987: (MAY, 30),
+        1988: (MAY, 18),
+        1989: (MAY, 7),
+        1990: (APR, 27),
+        1991: (APR, 16),
+        1992: (APR, 4),
+        1993: (MAR, 25),
+        1994: (MAR, 14),
+        1995: (MAR, 3),
+        1996: (FEB, 21),
+        1997: (FEB, 9),
+        1998: (JAN, 30),
+        1999: (JAN, 19),
+        2000: ((JAN, 8), (DEC, 28)),
+        2001: (DEC, 17),
+        2002: (DEC, 6),
+        2003: (NOV, 26),
+        2004: (NOV, 14),
+        2005: (NOV, 4),
+        2006: (OCT, 24),
+        2007: (OCT, 13),
+        2008: (OCT, 2),
+        2009: (SEP, 21),
+        2010: (SEP, 10),
+        2011: (AUG, 31),
+        2012: (AUG, 19),
+        2013: (AUG, 8),
+        2014: (JUL, 29),
+        2015: (JUL, 17),
+        2016: (JUL, 7),
+        2017: (JUN, 26),
+        2018: (JUN, 15),
+        2019: (JUN, 4),
+        2020: (MAY, 24),
+        2021: (MAY, 13),
+        2022: (MAY, 2),
+        2023: (APR, 21),
+        2024: (APR, 10),
+        2025: (MAR, 30),
+    }
+
+    # https://web.archive.org/web/20250428034326/https://www.timeanddate.com/holidays/lebanon/muharram
+    HIJRI_NEW_YEAR_DATES = {
+        1978: (DEC, 2),
+        1979: (NOV, 21),
+        1980: (NOV, 9),
+        1981: (OCT, 30),
+        1982: (OCT, 19),
+        1983: (OCT, 8),
+        1984: (SEP, 27),
+        1985: (SEP, 16),
+        1986: (SEP, 6),
+        1987: (AUG, 26),
+        1988: (AUG, 14),
+        1989: (AUG, 4),
+        1990: (JUL, 24),
+        1991: (JUL, 13),
+        1992: (JUL, 2),
+        1993: (JUN, 21),
+        1994: (JUN, 10),
+        1995: (MAY, 31),
+        1996: (MAY, 19),
+        1997: (MAY, 9),
+        1998: (APR, 28),
+        1999: (APR, 17),
+        2000: (APR, 6),
+        2001: (MAR, 26),
+        2002: (MAR, 15),
+        2003: (MAR, 5),
+        2004: (FEB, 22),
+        2005: (FEB, 10),
+        2006: (JAN, 31),
+        2007: (JAN, 20),
+        2008: ((JAN, 10), (DEC, 29)),
+        2009: (DEC, 18),
+        2010: (DEC, 8),
+        2011: (NOV, 27),
+        2012: (NOV, 15),
+        2013: (NOV, 5),
+        2014: (OCT, 25),
+        2015: (OCT, 14),
+        2016: (OCT, 3),
+        2017: (SEP, 22),
+        2018: (SEP, 11),
+        2019: (AUG, 31),
+        2020: (AUG, 20),
+        2021: (AUG, 9),
+        2022: (JUL, 30),
+        2023: (JUL, 19),
+        2024: (JUL, 7),
+        2025: (JUN, 26),
+    }
+
+    # https://web.archive.org/web/20240908071444/https://www.timeanddate.com/holidays/lebanon/prophet-birthday
+    MAWLID_DATES = {
+        1978: (FEB, 20),
+        1979: (FEB, 10),
+        1980: (JAN, 30),
+        1981: (JAN, 18),
+        1982: ((JAN, 8), (DEC, 28)),
+        1983: (DEC, 17),
+        1984: (DEC, 6),
+        1985: (NOV, 25),
+        1986: (NOV, 15),
+        1987: (NOV, 4),
+        1988: (OCT, 23),
+        1989: (OCT, 13),
+        1990: (OCT, 2),
+        1991: (SEP, 21),
+        1992: (SEP, 10),
+        1993: (AUG, 30),
+        1994: (AUG, 19),
+        1995: (AUG, 9),
+        1996: (JUL, 28),
+        1997: (JUL, 18),
+        1998: (JUL, 7),
+        1999: (JUN, 26),
+        2000: (JUN, 15),
+        2001: (JUN, 4),
+        2002: (MAY, 24),
+        2003: (MAY, 14),
+        2004: (MAY, 2),
+        2005: (APR, 21),
+        2006: (APR, 11),
+        2007: (MAR, 31),
+        2008: (MAR, 20),
+        2009: (MAR, 9),
+        2010: (FEB, 26),
+        2011: (FEB, 16),
+        2012: (FEB, 5),
+        2013: (JAN, 24),
+        2014: (JAN, 14),
+        2015: ((JAN, 3), (DEC, 24)),
+        2016: (DEC, 12),
+        2017: (DEC, 1),
+        2018: (NOV, 20),
+        2019: (NOV, 9),
+        2020: (OCT, 29),
+        2021: (OCT, 18),
+        2022: (OCT, 8),
+        2023: (SEP, 27),
+        2024: (SEP, 15),
+    }
diff --git a/holidays/locale/ar/LC_MESSAGES/LB.po b/holidays/locale/ar/LC_MESSAGES/LB.po
new file mode 100644
index 00000000..dc11133e
--- /dev/null
+++ b/holidays/locale/ar/LC_MESSAGES/LB.po
@@ -0,0 +1,138 @@
+#  holidays
+#  --------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+#
+# Lebanon holidays.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.77\n"
+"POT-Creation-Date: 2025-06-30 00:56+0530\n"
+"PO-Revision-Date: 2025-06-30 00:56+0530\n"
+"Last-Translator: Kriti Birda <workwithkritibirda@gmail.com>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.6\n"
+"X-Source-Language: ar\n"
+
+#. %s (estimated).
+#, c-format
+msgid "%s (المقدرة)"
+msgstr ""
+
+#. %s (observed).
+#, c-format
+msgid "%s (يُحتفل به)"
+msgstr ""
+
+#. %s (observed, estimated).
+#, c-format
+msgid "%s (يُحتفل به، المقدرة)"
+msgstr ""
+
+#. New Year's Day.
+msgid "رأس السنة الميلادية"
+msgstr ""
+
+#. Armenian Orthodox Christmas Day.
+msgid "عيد الميلاد عند الطوائف الارمنية الارثوذكسية"
+msgstr ""
+
+#. Saint Maron's Day.
+msgid "عيد مار مارون"
+msgstr ""
+
+#. Feast of the Annunciation.
+msgid "عيد بشارة السيدة مريم العذراء"
+msgstr ""
+
+#. Catholic Good Friday.
+msgid "الجمعة العظيمة عند الطوائف الكاثوليكية"
+msgstr ""
+
+#. Orthodox Good Friday.
+msgid "الجمعة العظيمة عند الطوائف الأرثوذكسية"
+msgstr ""
+
+#. Orthodox Holy Saturday.
+msgid "سبت النور للطائفة الأرثوذكسية"
+msgstr ""
+
+#. Catholic Easter Monday.
+msgid "اثنين الفصح عند الطوائف الكاثوليكية"
+msgstr ""
+
+#. Orthodox Easter Monday.
+msgid "اثنين الفصح عند الطوائف الأرثوذكسية"
+msgstr ""
+
+#. Orthodox Easter Tuesday.
+msgid "ثلاثاء الفصح للطوائف الأرثوذكسية"
+msgstr ""
+
+#. Labor Day.
+msgid "عيد العمل"
+msgstr ""
+
+#. Martyrs' Day.
+msgid "عيد الشهداء"
+msgstr ""
+
+#. Resistance and Liberation Day.
+msgid "عيد المقاومة والتحرير"
+msgstr ""
+
+#. Assumption Day.
+msgid "عيد انتقال العذراء"
+msgstr ""
+
+#. All Saints' Day.
+msgid "عيد جميع القديسين"
+msgstr ""
+
+#. Independence Day.
+msgid "ذكرى الاستقلال"
+msgstr ""
+
+#. Christmas Day.
+msgid "عيد الميلاد"
+msgstr ""
+
+#. Islamic New Year.
+msgid "عيد رأس السنة الهجرية"
+msgstr ""
+
+#. Ashura.
+msgid "عاشوراء"
+msgstr ""
+
+#. Prophet's Birthday.
+msgid "ذكرى المولد النبوي الشريف"
+msgstr ""
+
+#. Eid al-Fitr.
+msgid "عيد الفطر"
+msgstr ""
+
+#. Eid al-Adha.
+msgid "عيد الأضحى"
+msgstr ""
+
+#. Rafik Hariri Memorial Day.
+msgid "يوم ذكرى رفيق الحريري"
+msgstr ""
+
+#. Anniversary of the tragedy of Beirut port explosion.
+msgid "ذكرى مأساة انفجار مرفأ بيروت"
+msgstr ""
diff --git a/holidays/locale/en_US/LC_MESSAGES/LB.po b/holidays/locale/en_US/LC_MESSAGES/LB.po
new file mode 100644
index 00000000..c2ca2e7d
--- /dev/null
+++ b/holidays/locale/en_US/LC_MESSAGES/LB.po
@@ -0,0 +1,138 @@
+#  holidays
+#  --------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+#
+# Lebanon holidays en_US localization.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.77\n"
+"POT-Creation-Date: 2025-06-30 00:56+0530\n"
+"PO-Revision-Date: 2025-06-30 00:56+0530\n"
+"Last-Translator: Kriti Birda <workwithkritibirda@gmail.com>\n"
+"Language-Team: 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: Lingva 5.0.6\n"
+"X-Source-Language: ar\n"
+
+#. %s (estimated).
+#, c-format
+msgid "%s (المقدرة)"
+msgstr "%s (estimated)"
+
+#. %s (observed).
+#, c-format
+msgid "%s (يُحتفل به)"
+msgstr "%s (observed)"
+
+#. %s (observed, estimated).
+#, c-format
+msgid "%s (يُحتفل به، المقدرة)"
+msgstr "%s (observed, estimated)"
+
+#. New Year's Day.
+msgid "رأس السنة الميلادية"
+msgstr "New Year's Day"
+
+#. Armenian Orthodox Christmas Day.
+msgid "عيد الميلاد عند الطوائف الارمنية الارثوذكسية"
+msgstr "Armenian Orthodox Christmas Day"
+
+#. Saint Maron's Day.
+msgid "عيد مار مارون"
+msgstr "Saint Maron's Day"
+
+#. Feast of the Annunciation.
+msgid "عيد بشارة السيدة مريم العذراء"
+msgstr "Feast of the Annunciation"
+
+#. Catholic Good Friday.
+msgid "الجمعة العظيمة عند الطوائف الكاثوليكية"
+msgstr "Catholic Good Friday"
+
+#. Orthodox Good Friday.
+msgid "الجمعة العظيمة عند الطوائف الأرثوذكسية"
+msgstr "Orthodox Good Friday"
+
+#. Orthodox Holy Saturday.
+msgid "سبت النور للطائفة الأرثوذكسية"
+msgstr "Orthodox Holy Saturday"
+
+#. Catholic Easter Monday.
+msgid "اثنين الفصح عند الطوائف الكاثوليكية"
+msgstr "Catholic Easter Monday"
+
+#. Orthodox Easter Monday.
+msgid "اثنين الفصح عند الطوائف الأرثوذكسية"
+msgstr "Orthodox Easter Monday"
+
+#. Orthodox Easter Tuesday.
+msgid "ثلاثاء الفصح للطوائف الأرثوذكسية"
+msgstr "Orthodox Easter Tuesday"
+
+#. Labor Day.
+msgid "عيد العمل"
+msgstr "Labor Day"
+
+#. Martyrs' Day.
+msgid "عيد الشهداء"
+msgstr "Martyrs' Day"
+
+#. Resistance and Liberation Day.
+msgid "عيد المقاومة والتحرير"
+msgstr "Resistance and Liberation Day"
+
+#. Assumption Day.
+msgid "عيد انتقال العذراء"
+msgstr "Assumption Day"
+
+#. All Saints' Day.
+msgid "عيد جميع القديسين"
+msgstr "All Saints' Day"
+
+#. Independence Day.
+msgid "ذكرى الاستقلال"
+msgstr "Independence Day"
+
+#. Christmas Day.
+msgid "عيد الميلاد"
+msgstr "Christmas Day"
+
+#. Islamic New Year.
+msgid "عيد رأس السنة الهجرية"
+msgstr "Islamic New Year"
+
+#. Ashura.
+msgid "عاشوراء"
+msgstr "Ashura"
+
+#. Prophet's Birthday.
+msgid "ذكرى المولد النبوي الشريف"
+msgstr "Prophet's Birthday"
+
+#. Eid al-Fitr.
+msgid "عيد الفطر"
+msgstr "Eid al-Fitr"
+
+#. Eid al-Adha.
+msgid "عيد الأضحى"
+msgstr "Eid al-Adha"
+
+#. Rafik Hariri Memorial Day.
+msgid "يوم ذكرى رفيق الحريري"
+msgstr "Rafik Hariri Memorial Day"
+
+#. Anniversary of the tragedy of Beirut port explosion.
+msgid "ذكرى مأساة انفجار مرفأ بيروت"
+msgstr "Anniversary of the tragedy of Beirut port explosion"
diff --git a/holidays/registry.py b/holidays/registry.py
index 98736ca5..00d93677 100644
--- a/holidays/registry.py
+++ b/holidays/registry.py
@@ -127,6 +127,7 @@ COUNTRIES: RegistryDict = {
     "kyrgyzstan": ("Kyrgyzstan", "KG", "KGZ"),
     "laos": ("Laos", "LA", "LAO"),
     "latvia": ("Latvia", "LV", "LVA"),
+    "lebanon": ("Lebanon", "LB", "LBN"),
     "lesotho": ("Lesotho", "LS", "LSO"),
     "libya": ("Libya", "LY", "LBY"),
     "liechtenstein": ("Liechtenstein", "LI", "LIE"),


Test patch:
diff --git a/tests/countries/test_lebanon.py b/tests/countries/test_lebanon.py
new file mode 100644
index 00000000..d058ee10
--- /dev/null
+++ b/tests/countries/test_lebanon.py
@@ -0,0 +1,381 @@
+#  holidays
+#  --------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+
+from unittest import TestCase
+
+from holidays.constants import BANK, GOVERNMENT
+from holidays.countries.lebanon import Lebanon, LB, LBN
+from tests.common import CommonCountryTests
+
+
+class TestLebanon(CommonCountryTests, TestCase):
+    @classmethod
+    def setUpClass(cls):
+        years = range(1978, 2050)
+        super().setUpClass(Lebanon, years=years)
+        cls.bank_holidays = Lebanon(categories=BANK, years=years)
+        cls.government_holidays = Lebanon(categories=GOVERNMENT, years=years)
+        cls.no_estimated_holidays = Lebanon(years=years, islamic_show_estimated=False)
+
+    def test_country_aliases(self):
+        self.assertAliases(Lebanon, LB, LBN)
+
+    def test_no_holidays(self):
+        self.assertNoHolidays(Lebanon(years=1977))
+        self.assertNoHolidays(Lebanon(categories=BANK, years=2019))
+        self.assertNoHolidays(Lebanon(categories=GOVERNMENT, years=2019))
+
+    def test_new_years_day(self):
+        self.assertHolidayName(
+            "رأس السنة الميلادية", (f"{year}-01-01" for year in range(1978, 2050))
+        )
+
+    def test_armenian_orthodox_christmas(self):
+        name = "عيد الميلاد عند الطوائف الارمنية الارثوذكسية"
+        self.assertHolidayName(name, (f"{year}-01-06" for year in range(1995, 2050)))
+        self.assertNoHolidayName(name, range(1978, 1995))
+
+    def test_saint_maron_day(self):
+        self.assertHolidayName("عيد مار مارون", (f"{year}-02-09" for year in range(1978, 2050)))
+
+    def test_rafiki_memorial_day(self):
+        name = "يوم ذكرى رفيق الحريري"
+        self.assertNoHolidayName(name)
+        self.assertHolidayName(
+            name, self.bank_holidays, (f"{year}-02-14" for year in range(2020, 2050))
+        )
+        self.assertHolidayName(
+            name, self.government_holidays, (f"{year}-02-14" for year in range(2020, 2050))
+        )
+        self.assertNoHolidayName(name, self.bank_holidays, range(1978, 2019))
+        self.assertNoHolidayName(name, self.government_holidays, range(1978, 2019))
+
+    def test_feast_of_the_annunciation(self):
+        name = "عيد بشارة السيدة مريم العذراء"
+        self.assertHolidayName(
+            name, (f"{year}-03-25" for year in (*range(1995, 2006), *range(2010, 2050)))
+        )
+        self.assertNoHolidayName(name, range(1978, 1995), range(2006, 2010))
+
+    def test_catholic_good_friday(self):
+        name = "الجمعة العظيمة عند الطوائف الكاثوليكية"
+        self.assertHolidayName(
+            name,
+            "2019-04-19",
+            "2020-04-10",
+            "2021-04-02",
+            "2022-04-15",
+            "2023-04-07",
+            "2024-03-29",
+            "2025-04-18",
+        )
+        self.assertHolidayName(name, range(1978, 2050))
+
+    def test_orthodox_good_friday(self):
+        name = "الجمعة العظيمة عند الطوائف الأرثوذكسية"
+        self.assertHolidayName(
+            name,
+            "2019-04-26",
+            "2020-04-17",
+            "2021-04-30",
+            "2022-04-22",
+            "2023-04-14",
+            "2024-05-03",
+            "2025-04-18",
+        )
+        self.assertHolidayName(name, range(1978, 2050))
+
+    def test_orthodox_holy_saturday(self):
+        name = "سبت النور للطائفة الأرثوذكسية"
+        self.assertHolidayName(
+            name,
+            "2010-04-03",
+            "2011-04-23",
+            "2014-04-19",
+            "2017-04-15",
+        )
+        self.assertNoHolidayName(name, set(range(2010, 2025)) - {2010, 2011, 2014, 2017})
+
+    def test_catholic_easter_monday(self):
+        name = "اثنين الفصح عند الطوائف الكاثوليكية"
+        self.assertHolidayName(
+            name,
+            "1986-03-31",
+            "1987-04-20",
+            "1988-04-04",
+            "1989-03-27",
+            "1990-04-16",
+        )
+        self.assertHolidayName(name, range(1986, 1995))
+        self.assertHolidayName(name, self.bank_holidays, range(2020, 2050))
+        self.assertNoHolidayName(name, range(1978, 1986), range(1995, 2050))
+        self.assertNoHolidayName(name, self.bank_holidays, range(1978, 2019))
+
+    def test_orthodox_easter_monday(self):
+        name = "اثنين الفصح عند الطوائف الأرثوذكسية"
+        self.assertHolidayName(
+            name,
+            "1986-05-05",
+            "1987-04-20",
+            "1988-04-11",
+            "1989-05-01",
+            "1990-04-16",
+        )
+        self.assertHolidayName(name, range(1986, 1995))
+        self.assertHolidayName(name, self.bank_holidays, range(2020, 2050))
+        self.assertNoHolidayName(name, range(1978, 1986), range(1995, 2050))
+        self.assertNoHolidayName(name, self.bank_holidays, range(1978, 2019))
+
+    def test_orthodox_easter_tuesday(self):
+        name = "ثلاثاء الفصح للطوائف الأرثوذكسية"
+        self.assertHolidayName(
+            name,
+            "1987-04-21",
+            "1990-04-17",
+        )
+        self.assertNoHolidayName(name, set(range(1978, 2050)) - {1987, 1990})
+
+    def test_labor_day(self):
+        name = "عيد العمل"
+        self.assertHolidayName(name, (f"{year}-05-01" for year in range(1978, 2050)))
+        dt = (
+            "2005-05-02",
+            "2011-05-02",
+            "2016-05-02",
+            "2022-05-02",
+        )
+        self.assertHolidayName(f"{name} (يُحتفل به)", dt)
+
+    def test_martyrs_day(self):
+        name = "عيد الشهداء"
+        self.assertHolidayName(
+            name,
+            "1978-05-07",
+            "1979-05-06",
+            "1992-05-10",
+            "1993-05-09",
+            "2006-05-07",
+            "2007-05-06",
+            "2008-05-04",
+            "2009-05-03",
+        )
+        self.assertHolidayName(name, (*range(1978, 1994), *range(2006, 2050)))
+        self.assertNoHolidayName(name, range(1994, 2006))
+
+    def test_resistance_and_liberation_day(self):
+        name = "عيد المقاومة والتحرير"
+        self.assertHolidayName(
+            name,
+            "2021-05-09",
+            "2022-05-08",
+            "2023-05-14",
+            "2024-05-12",
+            "2025-05-11",
+        )
+        self.assertHolidayName(name, range(2006, 2050))
+        self.assertNoHolidayName(name, range(1978, 2006))
+
+    def test_anniversary_of_the_tragedy_of_beirut_port_explosion(self):
+        name = "ذكرى مأساة انفجار مرفأ بيروت"
+        self.assertNoHolidayName(name)
+        self.assertHolidayName(
+            name, self.government_holidays, (f"{year}-08-04" for year in range(2021, 2050))
+        )
+        self.assertNoHolidayName(name, self.government_holidays, range(1978, 2021))
+        self.assertNoHolidayName(name, self.bank_holidays)
+
+    def test_assumption_day(self):
+        self.assertHolidayName(
+            "عيد انتقال العذراء", (f"{year}-08-15" for year in range(1978, 2050))
+        )
+
+    def test_all_saints_days(self):
+        name = "عيد جميع القديسين"
+        self.assertHolidayName(name, (f"{year}-11-01" for year in range(1985, 1994)))
+        self.assertNoHolidayName(name, range(1978, 1985), range(1994, 2050))
+
+    def test_independence_day(self):
+        self.assertHolidayName("ذكرى الاستقلال", (f"{year}-11-22" for year in range(1978, 2050)))
+
+    def test_christmas_day(self):
+        self.assertHolidayName("عيد الميلاد", (f"{year}-12-25" for year in range(1978, 2050)))
+
+    def test_islamic_new_year(self):
+        name = "عيد رأس السنة الهجرية"
+        self.assertHolidayName(
+            name,
+            "2020-08-20",
+            "2021-08-09",
+            "2022-07-30",
+            "2023-07-19",
+            "2024-07-07",
+            "2025-06-26",
+        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1978, 2050))
+
+    def test_ashura(self):
+        name = "عاشوراء"
+        self.assertHolidayName(
+            name,
+            "2020-08-30",
+            "2021-08-19",
+            "2022-08-09",
+            "2023-07-28",
+            "2024-07-16",
+        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1978, 2050))
+
+    def test_mawlid(self):
+        name = "ذكرى المولد النبوي الشريف"
+        self.assertHolidayName(
+            name,
+            "2020-10-29",
+            "2021-10-18",
+            "2022-10-08",
+            "2023-09-27",
+            "2024-09-15",
+        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1978, 2050))
+
+    def test_eid_al_fitr(self):
+        name = "عيد الفطر"
+        self.assertHolidayName(
+            name,
+            "1985-06-20",
+            "1986-06-10",
+            "1986-06-11",
+            "1994-03-14",
+            "1994-03-15",
+            "1994-03-16",
+            "2020-05-24",
+            "2020-05-25",
+            "2021-05-13",
+            "2021-05-14",
+            "2022-05-02",
+            "2022-05-03",
+            "2023-04-21",
+            "2023-04-22",
+            "2024-04-10",
+            "2024-04-11",
+            "2025-03-30",
+            "2025-03-31",
+        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1978, 2050))
+
+    def test_eid_al_adha(self):
+        name = "عيد الأضحى"
+        self.assertHolidayName(
+            name,
+            "1985-08-27",
+            "1985-08-28",
+            "1986-08-16",
+            "1986-08-17",
+            "1986-08-18",
+            "1994-05-21",
+            "1994-05-22",
+            "2020-07-31",
+            "2020-08-01",
+            "2021-07-20",
+            "2021-07-21",
+            "2022-07-09",
+            "2022-07-10",
+            "2023-06-28",
+            "2023-06-29",
+            "2024-06-16",
+            "2024-06-17",
+            "2025-06-06",
+            "2025-06-07",
+        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1978, 2050))
+
+    def test_2024(self):
+        self.assertHolidays(
+            Lebanon(years=2024),
+            ("2024-01-01", "رأس السنة الميلادية"),
+            ("2024-01-06", "عيد الميلاد عند الطوائف الارمنية الارثوذكسية"),
+            ("2024-02-09", "عيد مار مارون"),
+            ("2024-03-25", "عيد بشارة السيدة مريم العذراء"),
+            ("2024-03-29", "الجمعة العظيمة عند الطوائف الكاثوليكية"),
+            ("2024-04-10", "عيد الفطر"),
+            ("2024-04-11", "عيد الفطر"),
+            ("2024-05-01", "عيد العمل"),
+            ("2024-05-03", "الجمعة العظيمة عند الطوائف الأرثوذكسية"),
+            ("2024-05-05", "عيد الشهداء"),
+            ("2024-05-12", "عيد المقاومة والتحرير"),
+            ("2024-06-16", "عيد الأضحى"),
+            ("2024-06-17", "عيد الأضحى"),
+            ("2024-07-07", "عيد رأس السنة الهجرية"),
+            ("2024-07-16", "عاشوراء"),
+            ("2024-08-15", "عيد انتقال العذراء"),
+            ("2024-09-15", "ذكرى المولد النبوي الشريف"),
+            ("2024-11-22", "ذكرى الاستقلال"),
+            ("2024-12-25", "عيد الميلاد"),
+        )
+
+    def test_l10n_default(self):
+        self.assertLocalizedHolidays(
+            ("2025-01-01", "رأس السنة الميلادية"),
+            ("2025-01-06", "عيد الميلاد عند الطوائف الارمنية الارثوذكسية"),
+            ("2025-02-09", "عيد مار مارون"),
+            ("2025-02-14", "يوم ذكرى رفيق الحريري"),
+            ("2025-03-25", "عيد بشارة السيدة مريم العذراء"),
+            ("2025-03-30", "عيد الفطر"),
+            ("2025-03-31", "عيد الفطر"),
+            (
+                "2025-04-18",
+                "الجمعة العظيمة عند الطوائف الأرثوذكسية; الجمعة العظيمة عند الطوائف الكاثوليكية",
+            ),
+            ("2025-04-19", "سبت النور للطائفة الأرثوذكسية"),
+            (
+                "2025-04-21",
+                "اثنين الفصح عند الطوائف الأرثوذكسية; اثنين الفصح عند الطوائف الكاثوليكية",
+            ),
+            ("2025-05-01", "عيد العمل"),
+            ("2025-05-04", "عيد الشهداء"),
+            ("2025-05-11", "عيد المقاومة والتحرير"),
+            ("2025-06-06", "عيد الأضحى"),
+            ("2025-06-07", "عيد الأضحى"),
+            ("2025-06-26", "عيد رأس السنة الهجرية"),
+            ("2025-07-05", "عاشوراء (المقدرة)"),
+            ("2025-08-04", "ذكرى مأساة انفجار مرفأ بيروت"),
+            ("2025-08-15", "عيد انتقال العذراء"),
+            ("2025-09-04", "ذكرى المولد النبوي الشريف (المقدرة)"),
+            ("2025-11-22", "ذكرى الاستقلال"),
+            ("2025-12-25", "عيد الميلاد"),
+        )
+
+    def test_l10n_en_us(self):
+        self.assertLocalizedHolidays(
+            "en_US",
+            ("2025-01-01", "New Year's Day"),
+            ("2025-01-06", "Armenian Orthodox Christmas Day"),
+            ("2025-02-09", "Saint Maron's Day"),
+            ("2025-02-14", "Rafik Hariri Memorial Day"),
+            ("2025-03-25", "Feast of the Annunciation"),
+            ("2025-03-30", "Eid al-Fitr"),
+            ("2025-03-31", "Eid al-Fitr"),
+            ("2025-04-18", "Catholic Good Friday; Orthodox Good Friday"),
+            ("2025-04-19", "Orthodox Holy Saturday"),
+            ("2025-04-21", "Catholic Easter Monday; Orthodox Easter Monday"),
+            ("2025-05-01", "Labor Day"),
+            ("2025-05-04", "Martyrs' Day"),
+            ("2025-05-11", "Resistance and Liberation Day"),
+            ("2025-06-06", "Eid al-Adha"),
+            ("2025-06-07", "Eid al-Adha"),
+            ("2025-06-26", "Islamic New Year"),
+            ("2025-07-05", "Ashura (estimated)"),
+            ("2025-08-04", "Anniversary of the tragedy of Beirut port explosion"),
+            ("2025-08-15", "Assumption Day"),
+            ("2025-09-04", "Prophet's Birthday (estimated)"),
+            ("2025-11-22", "Independence Day"),
+            ("2025-12-25", "Christmas Day"),
+        )