Repository: vacanza/holidays (python)

Issue:
Add Togo holidays
Links:
  - https://en.wikipedia.org/wiki/Public_holidays_in_Togo
  - https://www.timeanddate.com/holidays/togo/

Pull request description:
Add Togo holidays
## Proposed change

Add Togo holidays.

Resolves #1287.

## 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 73871407..6759c69f 100644
--- a/README.md
+++ b/README.md
@@ -105,7 +105,7 @@ and detailed information.
 
 ## Available Countries
 
-We currently support 174 country codes. The standard way to refer to a country is by using its [ISO
+We currently support 175 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
@@ -1233,6 +1233,13 @@ any) in brackets, available languages and additional holiday categories. All cou
 <td>GOVERNMENT, WORKDAY</td>
 </tr>
 <tr>
+<td>Togo</td>
+<td>TG</td>
+<td></td>
+<td>en_US, <strong>fr</strong></td>
+<td>WORKDAY</td>
+</tr>
+<tr>
 <td>Tonga</td>
 <td>TO</td>
 <td></td>
diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py
index 9951e8a0..cc8a055d 100644
--- a/holidays/countries/__init__.py
+++ b/holidays/countries/__init__.py
@@ -167,6 +167,7 @@ from .taiwan import Taiwan, TW, TWN
 from .tanzania import Tanzania, TZ, TZA
 from .thailand import Thailand, TH, THA
 from .timor_leste import TimorLeste, TL, TLS
+from .togo import Togo, TG, TGO
 from .tonga import Tonga, TO, TON
 from .trinidad_and_tobago import TrinidadAndTobago, TT, TTO
 from .tunisia import Tunisia, TN, TUN
diff --git a/holidays/countries/togo.py b/holidays/countries/togo.py
new file mode 100644
index 00000000..53a79a9d
--- /dev/null
+++ b/holidays/countries/togo.py
@@ -0,0 +1,182 @@
+#  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 MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV
+from holidays.constants import PUBLIC, WORKDAY
+from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
+from holidays.holiday_base import HolidayBase
+
+
+class Togo(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
+    """Togo holidays.
+
+    References:
+        * <https://en.wikipedia.org/wiki/Public_holidays_in_Togo>
+        * <https://web.archive.org/web/20250507123116/https://www.timeanddate.com/holidays/togo/>
+        * <https://web.archive.org/web/20250507123425/https://www.goethe.de/ins/tg/fr/ueb/fer.html>
+        * <https://web.archive.org/web/20250507123619/https://www.republiquetogolaise.com/politique/2309-3579-23-septembre-le-togo-rend-hommage-a-ses-martyrs>
+        * <https://web.archive.org/web/20250507123840/https://islam.zmo.de/s/westafrica/item/25841#?xywh=-405%2C-94%2C2376%2C1868>
+        * <https://en.wikipedia.org/wiki/1986_Togolese_coup_attempt>
+        * <https://web.archive.org/web/20250507131725/https://www.rfi.fr/fr/afrique/20140112-togo-le-13-janvier-est-plus-jour-fete>
+        * <https://web.archive.org/web/20250507124528/https://islam.zmo.de/s/afrique_ouest/item/25800#?xywh=-1641%2C0%2C4303%2C2363>
+        * <https://web.archive.org/web/20231202052731/https://www.holidayscalendar.com/event/anniversary-of-the-failed-attack-on-lome/>
+
+    Ramadan start dates:
+        * [2015](https://web.archive.org/web/20150825071241/https://www.republicoftogo.com/toutes-les-rubriques/societe/le-mois-du-jeune-debute-le-18-juin)
+        * [2016](https://web.archive.org/web/20250507125256/https://www.republicoftogo.com/toutes-les-rubriques/societe/le-ramadan-debute-le-6-juin)
+        * [2017](https://web.archive.org/web/20250507125353/https://www.tf1info.fr/societe/le-ramadan-2017-1438-commence-le-samedi-27-mai-comment-la-date-du-debut-du-jeune-est-elle-fixee-1512235.html)
+        * [2018](https://web.archive.org/web/20250507125622/https://www.republicoftogo.com/toutes-les-rubriques/societe/debut-du-ramadan-demain)
+        * [2019](https://web.archive.org/web/20250507130404/https://www.republiquetogolaise.com/social/0605-3100-la-communaute-musulmane-du-togo-entame-ce-lundi-le-jeune-du-mois-de-ramadan)
+        * [2020](https://web.archive.org/web/20250507125837/https://www.republiquetogolaise.com/culture/2404-4278-debut-du-mois-de-ramadan)
+        * [2021](https://web.archive.org/web/20250507130643/https://www.republiquetogolaise.com/culture/1304-5393-debut-du-mois-de-ramadan)
+        * [2022](https://web.archive.org/web/20250507130847/https://www.republiquetogolaise.com/culture/0304-6745-debut-du-mois-de-ramadan)
+        * [2023](https://web.archive.org/web/20250507131022/https://www.republiquetogolaise.com/culture/2303-7864-debut-du-mois-de-ramadan)
+        * [2024](https://web.archive.org/web/20250507131215/https://www.republiquetogolaise.com/culture/1103-9017-debut-du-mois-de-ramadan)
+        * [2025](https://web.archive.org/web/20250507131439/https://www.republiquetogolaise.com/culture/2802-10360-le-jeune-de-ramadan-debute-le-1er-mars)
+    """
+
+    country = "TG"
+    default_language = "fr"
+    supported_categories = (PUBLIC, WORKDAY)
+    # %s (estimated).
+    estimated_label = tr("%s (estimé)")
+    supported_languages = ("en_US", "fr")
+    # Togo gained independence on April 27, 1960.
+    start_year = 1961
+
+    def __init__(self, islamic_show_estimated: bool = True, *args, **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=TogoIslamicHolidays, show_estimated=islamic_show_estimated
+        )
+        super().__init__(*args, **kwargs)
+
+    def _populate_public_holidays(self):
+        # New Year's Day.
+        self._add_new_years_day(tr("Jour de l'an"))
+
+        if 1967 <= self._year <= 2013:
+            # Liberation Day.
+            self._add_holiday_jan_13(tr("Fête de la libération nationale"))
+
+        # Easter Monday.
+        self._add_easter_monday(tr("Lundi de Pâques"))
+
+        # Independence Day.
+        self._add_holiday_apr_27(tr("Fête de l'indépendance"))
+
+        # Labor Day.
+        self._add_holiday_may_1(tr("Fête du travail"))
+
+        # Ascension Day.
+        self._add_ascension_thursday(tr("Fête de l'Ascension"))
+
+        # Whit Monday.
+        self._add_whit_monday(tr("Lundi de Pentecôte"))
+
+        # Martyrs' Day.
+        self._add_holiday_jun_21(tr("Fête des Martyrs"))
+
+        # Assumption Day.
+        self._add_holiday_aug_15(tr("Assomption"))
+
+        # All Saints' Day.
+        self._add_all_saints_day(tr("Toussaint"))
+
+        # Christmas Day.
+        self._add_christmas_day(tr("Noël"))
+
+        # First Day of Ramadan.
+        self._add_ramadan_beginning_day(tr("Ramadan"))
+
+        # Eid al-Fitr.
+        self._add_eid_al_fitr_day(tr("l'Aïd El-Fitr"))
+
+        # Eid al-Adha.
+        self._add_eid_al_adha_day(tr("Tabaski"))
+
+    def _populate_workday_holidays(self):
+        if self._year >= 1987:
+            # Anniversary of the Failed Attack on Lomé.
+            self._add_holiday_sep_24(tr("Anniversaire de l'attentat manqué contre Lomé"))
+
+
+class TG(Togo):
+    pass
+
+
+class TGO(Togo):
+    pass
+
+
+class TogoIslamicHolidays(_CustomIslamicHolidays):
+    EID_AL_ADHA_DATES = {
+        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, 11),
+        2020: (JUL, 31),
+        2021: (JUL, 20),
+        2022: (JUL, 9),
+        2023: (JUN, 28),
+        2024: (JUN, 16),
+        2025: (JUN, 7),
+    }
+
+    EID_AL_FITR_DATES = {
+        2010: (SEP, 10),
+        2011: (AUG, 31),
+        2012: (AUG, 19),
+        2013: (AUG, 8),
+        2014: (JUL, 29),
+        2015: (JUL, 18),
+        2016: (JUL, 7),
+        2017: (JUN, 26),
+        2018: (JUN, 15),
+        2019: (JUN, 5),
+        2020: (MAY, 24),
+        2021: (MAY, 13),
+        2022: (MAY, 2),
+        2023: (APR, 21),
+        2024: (APR, 10),
+        2025: (MAR, 30),
+    }
+
+    RAMADAN_BEGINNING_DATES = {
+        2015: (JUN, 18),
+        2016: (JUN, 6),
+        2017: (MAY, 27),
+        2018: (MAY, 17),
+        2019: (MAY, 6),
+        2020: (APR, 24),
+        2021: (APR, 13),
+        2022: (APR, 2),
+        2023: (MAR, 23),
+        2024: (MAR, 11),
+        2025: (MAR, 1),
+    }
diff --git a/holidays/locale/en_US/LC_MESSAGES/TG.po b/holidays/locale/en_US/LC_MESSAGES/TG.po
new file mode 100644
index 00000000..b55ff14e
--- /dev/null
+++ b/holidays/locale/en_US/LC_MESSAGES/TG.po
@@ -0,0 +1,93 @@
+#  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)
+#
+# Togo holidays en_US localization.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.73\n"
+"POT-Creation-Date: 2025-05-07 4:17+0530\n"
+"PO-Revision-Date: 2025-05-07 4:17+0530\n"
+"Last-Translator: Roshan Pradhan <roshanpradhan2048@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.5\n"
+"X-Generator: Poedit 3.6\n"
+"X-Source-Language: fr\n"
+
+#. %s (estimated).
+#, c-format
+msgid "%s (estimé)"
+msgstr "%s (estimated)"
+
+#. New Year's Day.
+msgid "Jour de l'an"
+msgstr "New Year's Day"
+
+#. Liberation Day.
+msgid "Fête de la libération nationale"
+msgstr "Liberation Day"
+
+#. Easter Monday.
+msgid "Lundi de Pâques"
+msgstr "Easter Monday"
+
+#. Independence Day.
+msgid "Fête de l'indépendance"
+msgstr "Independence Day"
+
+#. Labor Day.
+msgid "Fête du travail"
+msgstr "Labor Day"
+
+#. Ascension Day.
+msgid "Fête de l'Ascension"
+msgstr "Ascension Day"
+
+#. Whit Monday.
+msgid "Lundi de Pentecôte"
+msgstr "Whit Monday"
+
+#. Martyrs' Day.
+msgid "Fête des Martyrs"
+msgstr "Martyrs' Day"
+
+#. Assumption Day.
+msgid "Assomption"
+msgstr "Assumption Day"
+
+#. All Saints' Day.
+msgid "Toussaint"
+msgstr "All Saints' Day"
+
+#. Christmas Day.
+msgid "Noël"
+msgstr "Christmas Day"
+
+#. First Day of Ramadan.
+msgid "Ramadan"
+msgstr "First Day of Ramadan"
+
+#. Eid al-Fitr.
+msgid "l'Aïd El-Fitr"
+msgstr "Eid al-Fitr"
+
+#. Eid al-Adha.
+msgid "Tabaski"
+msgstr "Eid al-Adha"
+
+#. Anniversary of the Failed Attack on Lomé.
+msgid "Anniversaire de l'attentat manqué contre Lomé"
+msgstr "Anniversary of the Failed Attack on Lomé"
diff --git a/holidays/locale/fr/LC_MESSAGES/TG.po b/holidays/locale/fr/LC_MESSAGES/TG.po
new file mode 100644
index 00000000..39b89429
--- /dev/null
+++ b/holidays/locale/fr/LC_MESSAGES/TG.po
@@ -0,0 +1,92 @@
+#  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)
+#
+# Togo holidays.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.73\n"
+"POT-Creation-Date: 2025-05-07 4:17+0530\n"
+"PO-Revision-Date: 2025-05-07 4:17+0530\n"
+"Last-Translator: Roshan Pradhan <roshanpradhan2048@gmail.com>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.5\n"
+"X-Source-Language: fr\n"
+
+#. %s (estimated).
+#, c-format
+msgid "%s (estimé)"
+msgstr ""
+
+#. New Year's Day.
+msgid "Jour de l'an"
+msgstr ""
+
+#. Liberation Day.
+msgid "Fête de la libération nationale"
+msgstr ""
+
+#. Easter Monday.
+msgid "Lundi de Pâques"
+msgstr ""
+
+#. Independence Day.
+msgid "Fête de l'indépendance"
+msgstr ""
+
+#. Labor Day.
+msgid "Fête du travail"
+msgstr ""
+
+#. Ascension Day.
+msgid "Fête de l'Ascension"
+msgstr ""
+
+#. Whit Monday.
+msgid "Lundi de Pentecôte"
+msgstr ""
+
+#. Martyrs' Day.
+msgid "Fête des Martyrs"
+msgstr ""
+
+#. Assumption Day.
+msgid "Assomption"
+msgstr ""
+
+#. All Saints' Day.
+msgid "Toussaint"
+msgstr ""
+
+#. Christmas Day.
+msgid "Noël"
+msgstr ""
+
+#. First Day of Ramadan.
+msgid "Ramadan"
+msgstr ""
+
+#. Eid al-Fitr.
+msgid "l'Aïd El-Fitr"
+msgstr ""
+
+#. Eid al-Adha.
+msgid "Tabaski"
+msgstr ""
+
+#. Anniversary of the Failed Attack on Lomé.
+msgid "Anniversaire de l'attentat manqué contre Lomé"
+msgstr ""
diff --git a/holidays/registry.py b/holidays/registry.py
index 02acdd82..f096e265 100644
--- a/holidays/registry.py
+++ b/holidays/registry.py
@@ -175,6 +175,7 @@ COUNTRIES: RegistryDict = {
     "tanzania": ("Tanzania", "TZ", "TZA"),
     "thailand": ("Thailand", "TH", "THA"),
     "timor_leste": ("TimorLeste", "TL", "TLS"),
+    "togo": ("Togo", "TG", "TGO"),
     "tonga": ("Tonga", "TO", "TON"),
     "trinidad_and_tobago": ("TrinidadAndTobago", "TT", "TTO"),
     "tunisia": ("Tunisia", "TN", "TUN"),


Test patch:
diff --git a/tests/countries/test_togo.py b/tests/countries/test_togo.py
new file mode 100644
index 00000000..7ccfaab0
--- /dev/null
+++ b/tests/countries/test_togo.py
@@ -0,0 +1,220 @@
+#  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 WORKDAY
+from holidays.countries.togo import Togo, TG, TGO
+from tests.common import CommonCountryTests
+
+
+class TestTogo(CommonCountryTests, TestCase):
+    @classmethod
+    def setUpClass(cls):
+        years = range(1961, 2050)
+        super().setUpClass(Togo, years=years, years_non_observed=years)
+        cls.no_estimated_holidays = Togo(years=years, islamic_show_estimated=False)
+        cls.workday_holidays = Togo(categories=WORKDAY, years=years)
+
+    def test_country_aliases(self):
+        self.assertAliases(Togo, TG, TGO)
+
+    def test_no_holidays(self):
+        self.assertNoHolidays(Togo(years=1960))
+        self.assertNoHolidays(Togo(categories=WORKDAY, years=1986))
+
+    def test_new_years_day(self):
+        self.assertHolidayName("Jour de l'an", (f"{year}-01-01" for year in range(1961, 2050)))
+
+    def test_liberation_day(self):
+        name = "Fête de la libération nationale"
+        self.assertHolidayName(name, (f"{year}-01-13" for year in range(1967, 2014)))
+        self.assertNoHolidayName(name, range(2014, 2050))
+
+    def test_easter_monday(self):
+        name = "Lundi de Pâques"
+        self.assertHolidayName(
+            name,
+            "2020-04-13",
+            "2021-04-05",
+            "2022-04-18",
+            "2023-04-10",
+            "2024-04-01",
+            "2025-04-21",
+        )
+        self.assertHolidayName(name, range(1961, 2050))
+
+    def test_independence_day(self):
+        self.assertHolidayName(
+            "Fête de l'indépendance", (f"{year}-04-27" for year in range(1961, 2050))
+        )
+
+    def test_labor_day(self):
+        self.assertHolidayName("Fête du travail", (f"{year}-05-01" for year in range(1961, 2050)))
+
+    def test_ascension_day(self):
+        name = "Fête de l'Ascension"
+        self.assertHolidayName(
+            name,
+            "2020-05-21",
+            "2021-05-13",
+            "2022-05-26",
+            "2023-05-18",
+            "2024-05-09",
+            "2025-05-29",
+        )
+        self.assertHolidayName(name, range(1961, 2050))
+
+    def test_whit_monday(self):
+        name = "Lundi de Pentecôte"
+        self.assertHolidayName(
+            name,
+            "2020-06-01",
+            "2021-05-24",
+            "2022-06-06",
+            "2023-05-29",
+            "2024-05-20",
+            "2025-06-09",
+        )
+        self.assertHolidayName(name, range(1961, 2050))
+
+    def test_martyrs_day(self):
+        self.assertHolidayName("Fête des Martyrs", (f"{year}-06-21" for year in range(1961, 2050)))
+
+    def test_assumption_day(self):
+        self.assertHolidayName("Assomption", (f"{year}-08-15" for year in range(1961, 2050)))
+
+    def test_all_saints_day(self):
+        self.assertHolidayName("Toussaint", (f"{year}-11-01" for year in range(1961, 2050)))
+
+    def test_christmas_day(self):
+        self.assertHolidayName("Noël", (f"{year}-12-25" for year in range(1961, 2050)))
+
+    def test_ramadan_beginning_day(self):
+        name = "Ramadan"
+        self.assertHolidayName(
+            name,
+            "2020-04-24",
+            "2021-04-13",
+            "2022-04-02",
+            "2023-03-23",
+            "2024-03-11",
+            "2025-03-01",
+        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1961, 2050))
+
+    def test_eid_al_fitr(self):
+        name = "l'Aïd El-Fitr"
+        self.assertHolidayName(
+            name,
+            "2020-05-24",
+            "2021-05-13",
+            "2022-05-02",
+            "2023-04-21",
+            "2024-04-10",
+            "2025-03-30",
+        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1961, 2050))
+
+    def test_eid_al_adha(self):
+        name = "Tabaski"
+        self.assertHolidayName(
+            name,
+            "2020-07-31",
+            "2021-07-20",
+            "2022-07-09",
+            "2023-06-28",
+            "2024-06-16",
+            "2025-06-07",
+        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1961, 2050))
+
+    def test_anniversary_of_the_failed_attack_on_lome(self):
+        name = "Anniversaire de l'attentat manqué contre Lomé"
+        self.assertHolidayName(
+            name, self.workday_holidays, (f"{year}-09-24" for year in range(1987, 2050))
+        )
+        self.assertNoHolidayName(name, self.workday_holidays, range(1961, 1987))
+        self.assertNoHolidayName(name)
+
+    def test_2024(self):
+        self.assertHolidays(
+            Togo(years=2024),
+            ("2024-01-01", "Jour de l'an"),
+            ("2024-03-11", "Ramadan"),
+            ("2024-04-01", "Lundi de Pâques"),
+            ("2024-04-10", "l'Aïd El-Fitr"),
+            ("2024-04-27", "Fête de l'indépendance"),
+            ("2024-05-01", "Fête du travail"),
+            ("2024-05-09", "Fête de l'Ascension"),
+            ("2024-05-20", "Lundi de Pentecôte"),
+            ("2024-06-16", "Tabaski"),
+            ("2024-06-21", "Fête des Martyrs"),
+            ("2024-08-15", "Assomption"),
+            ("2024-11-01", "Toussaint"),
+            ("2024-12-25", "Noël"),
+        )
+
+    def test_2025(self):
+        self.assertHolidays(
+            Togo(years=2025),
+            ("2025-01-01", "Jour de l'an"),
+            ("2025-03-01", "Ramadan"),
+            ("2025-03-30", "l'Aïd El-Fitr"),
+            ("2025-04-21", "Lundi de Pâques"),
+            ("2025-04-27", "Fête de l'indépendance"),
+            ("2025-05-01", "Fête du travail"),
+            ("2025-05-29", "Fête de l'Ascension"),
+            ("2025-06-07", "Tabaski"),
+            ("2025-06-09", "Lundi de Pentecôte"),
+            ("2025-06-21", "Fête des Martyrs"),
+            ("2025-08-15", "Assomption"),
+            ("2025-11-01", "Toussaint"),
+            ("2025-12-25", "Noël"),
+        )
+
+    def test_l10n_default(self):
+        self.assertLocalizedHolidays(
+            ("2025-01-01", "Jour de l'an"),
+            ("2025-03-01", "Ramadan"),
+            ("2025-03-30", "l'Aïd El-Fitr"),
+            ("2025-04-21", "Lundi de Pâques"),
+            ("2025-04-27", "Fête de l'indépendance"),
+            ("2025-05-01", "Fête du travail"),
+            ("2025-05-29", "Fête de l'Ascension"),
+            ("2025-06-07", "Tabaski"),
+            ("2025-06-09", "Lundi de Pentecôte"),
+            ("2025-06-21", "Fête des Martyrs"),
+            ("2025-08-15", "Assomption"),
+            ("2025-09-24", "Anniversaire de l'attentat manqué contre Lomé"),
+            ("2025-11-01", "Toussaint"),
+            ("2025-12-25", "Noël"),
+        )
+
+    def test_l10n_en_us(self):
+        self.assertLocalizedHolidays(
+            "en_US",
+            ("2025-01-01", "New Year's Day"),
+            ("2025-03-01", "First Day of Ramadan"),
+            ("2025-03-30", "Eid al-Fitr"),
+            ("2025-04-21", "Easter Monday"),
+            ("2025-04-27", "Independence Day"),
+            ("2025-05-01", "Labor Day"),
+            ("2025-05-29", "Ascension Day"),
+            ("2025-06-07", "Eid al-Adha"),
+            ("2025-06-09", "Whit Monday"),
+            ("2025-06-21", "Martyrs' Day"),
+            ("2025-08-15", "Assumption Day"),
+            ("2025-09-24", "Anniversary of the Failed Attack on Lomé"),
+            ("2025-11-01", "All Saints' Day"),
+            ("2025-12-25", "Christmas Day"),
+        )