From 6db03e74043e7f6bba01e51ad24698d0d242d618 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets Date: Mon, 1 Sep 2025 21:16:08 -0700 Subject: [PATCH 01/34] Initialize v0.81 --- holidays/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holidays/version.py b/holidays/version.py index bb5505f03..be0b3dc4d 100644 --- a/holidays/version.py +++ b/holidays/version.py @@ -10,4 +10,4 @@ # Website: https://github.com/vacanza/holidays # License: MIT (see LICENSE file) -__version__ = "0.80" +__version__ = "0.81" From 20d9bc3789e2d34e9c716b61cb73aff4e9404152 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com> Date: Tue, 2 Sep 2025 09:05:48 -0700 Subject: [PATCH 02/34] Simplify N802 suppression for `common.py` (#2880) --- pyproject.toml | 1 + tests/common.py | 64 ++++++++++++++++++++++++------------------------- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9575e78ad..48baa207e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -57,6 +57,7 @@ target-version = "py39" line-length = 99 lint.select = [ "E4", "E5", "E7", "E9", "F", "N", "PLE", "S", "T", "TC", "UP", "W" ] lint.per-file-ignores."scripts/generate_release_notes.py" = [ "T201" ] +lint.per-file-ignores."tests/common.py" = [ "N802" ] lint.per-file-ignores."tests/test_holiday_base.py" = [ "S301" ] lint.flake8-errmsg.max-string-length = 99 diff --git a/tests/common.py b/tests/common.py index 6104e0750..4b75c36d1 100644 --- a/tests/common.py +++ b/tests/common.py @@ -121,7 +121,7 @@ def _verify_type(self, holidays): "`holidays` object must be a subclass of `HolidayBase`", ) - def assertAliases(self, cls, *aliases): # noqa: N802 + def assertAliases(self, cls, *aliases): """Assert aliases match.""" self.assertTrue( issubclass(cls, HolidayBase), "The entity object must be a subclass of `HolidayBase`" @@ -132,7 +132,7 @@ def assertAliases(self, cls, *aliases): # noqa: N802 self.assertIsNotNone(alias, type_error_message) self.assertTrue(issubclass(alias, cls), type_error_message) - def assertDeprecatedSubdivisions(self, message): # noqa: N802 + def assertDeprecatedSubdivisions(self, message): warnings.simplefilter("always", category=DeprecationWarning) for subdiv in self.test_class._deprecated_subdivisions: with warnings.catch_warnings(record=True) as ctx: @@ -142,7 +142,7 @@ def assertDeprecatedSubdivisions(self, message): # noqa: N802 self.assertIn(message, str(warning.message)) # Holiday. - def _assertHoliday(self, instance_name, *args): # noqa: N802 + def _assertHoliday(self, instance_name, *args): """Helper: assert each date is a holiday.""" holidays, dates = self._parse_arguments(args, instance_name=instance_name) self._verify_type(holidays) @@ -150,16 +150,16 @@ def _assertHoliday(self, instance_name, *args): # noqa: N802 for dt in dates: self.assertIn(dt, holidays, dt) - def assertHoliday(self, *args): # noqa: N802 + def assertHoliday(self, *args): """Assert each date is a holiday.""" self._assertHoliday("holidays", *args) - def assertNonObservedHoliday(self, *args): # noqa: N802 + def assertNonObservedHoliday(self, *args): """Assert each date is a non-observed holiday.""" self._assertHoliday("holidays_non_observed", *args) # Holiday dates. - def _assertHolidayDates(self, instance_name, *args): # noqa: N802 + def _assertHolidayDates(self, instance_name, *args): """Helper: assert holiday dates exactly match expected dates.""" holidays, dates = self._parse_arguments(args, instance_name=instance_name) self._verify_type(holidays) @@ -170,16 +170,16 @@ def _assertHolidayDates(self, instance_name, *args): # noqa: N802 self.assertEqual(len(dates), len(holidays.keys()), set(dates).difference(holidays.keys())) - def assertHolidayDates(self, *args): # noqa: N802 + def assertHolidayDates(self, *args): """Assert holiday dates exactly match expected dates.""" self._assertHolidayDates("holidays", *args) - def assertNonObservedHolidayDates(self, *args): # noqa: N802 + def assertNonObservedHolidayDates(self, *args): """Assert holiday dates exactly match expected dates.""" self._assertHolidayDates("holidays_non_observed", *args) # Holiday name. - def _assertHolidayName(self, name, instance_name, *args): # noqa: N802 + def _assertHolidayName(self, name, instance_name, *args): """Helper: assert either a holiday with a specific name exists or each holiday name matches an expected one depending on the args nature. """ @@ -195,20 +195,20 @@ def _assertHolidayName(self, name, instance_name, *args): # noqa: N802 else: raise ValueError(f"The {arg} wasn't caught by `assertHolidayName()`") - def assertHolidayName(self, name, *args): # noqa: N802 + def assertHolidayName(self, name, *args): """Assert either a holiday with a specific name exists or each holiday name matches an expected one. """ self._assertHolidayName(name, "holidays", *args) - def assertNonObservedHolidayName(self, name, *args): # noqa: N802 + def assertNonObservedHolidayName(self, name, *args): """Assert either a non-observed holiday with a specific name exists or each non-observed holiday name matches an expected one. """ self._assertHolidayName(name, "holidays_non_observed", *args) # Holidays. - def _assertHolidays(self, instance_name, *args): # noqa: N802 + def _assertHolidays(self, instance_name, *args): """Helper: assert holidays exactly match expected holidays.""" holidays, expected_holidays = self._parse_arguments( args, expand_items=False, instance_name=instance_name @@ -228,15 +228,15 @@ def _assertHolidays(self, instance_name, *args): # noqa: N802 ), ) - def assertHolidays(self, *args): # noqa: N802 + def assertHolidays(self, *args): """Assert holidays exactly match expected holidays.""" self._assertHolidays("holidays", *args) - def assertNonObservedHolidays(self, *args): # noqa: N802 + def assertNonObservedHolidays(self, *args): """Assert non-observed holidays exactly match expected holidays.""" self._assertHolidays("holidays_non_observed", *args) - def _assertHolidayNameCount(self, name, count, instance_name, *args): # noqa: N802 + def _assertHolidayNameCount(self, name, count, instance_name, *args): """Helper: assert number of holidays with a specific name in every year matches expected. """ @@ -255,34 +255,34 @@ def _assertHolidayNameCount(self, name, count, instance_name, *args): # noqa: N f"`{name}` occurs {holiday_count} times in year {year}, should be {count}", ) - def assertHolidayNameCount(self, name, count, *args): # noqa: N802 + def assertHolidayNameCount(self, name, count, *args): """Assert number of holidays with a specific name in every year matches expected.""" self._assertHolidayNameCount(name, count, "holidays", *args) - def assertNonObservedHolidayNameCount(self, name, count, *args): # noqa: N802 + def assertNonObservedHolidayNameCount(self, name, count, *args): """Assert number of non-observed holidays with a specific name in every year matches expected. """ self._assertHolidayNameCount(name, count, "holidays_non_observed", *args) # No holiday. - def _assertNoHoliday(self, instance_name, *args): # noqa: N802 + def _assertNoHoliday(self, instance_name, *args): """Helper: assert each date is not a holiday.""" holidays, dates = self._parse_arguments(args, instance_name=instance_name) for dt in dates: self.assertNotIn(dt, holidays, dt) - def assertNoHoliday(self, *args): # noqa: N802 + def assertNoHoliday(self, *args): """Assert each date is not a holiday.""" self._assertNoHoliday("holidays", *args) - def assertNoNonObservedHoliday(self, *args): # noqa: N802 + def assertNoNonObservedHoliday(self, *args): """Assert each date is not a non-observed holiday.""" self._assertNoHoliday("holidays_non_observed", *args) # No holiday name. - def _assertNoHolidayName(self, name, instance_name, *args): # noqa: N802 + def _assertNoHolidayName(self, name, instance_name, *args): """Helper: assert a holiday with a specific name doesn't exist.""" holidays, items = self._parse_arguments( args, instance_name=instance_name, raise_on_empty=False @@ -302,16 +302,16 @@ def _assertNoHolidayName(self, name, instance_name, *args): # noqa: N802 else: raise ValueError(f"The {arg} wasn't caught by `assertNoHolidayName()`") - def assertNoHolidayName(self, name, *args): # noqa: N802 + def assertNoHolidayName(self, name, *args): """Assert a holiday with a specific name doesn't exist.""" self._assertNoHolidayName(name, "holidays", *args) - def assertNoNonObservedHolidayName(self, name, *args): # noqa: N802 + def assertNoNonObservedHolidayName(self, name, *args): """Assert a non-observed holiday with a specific name doesn't exist.""" self._assertNoHolidayName(name, "holidays_non_observed", *args) # No holidays. - def _assertNoHolidays(self, instance_name, *args): # noqa: N802 + def _assertNoHolidays(self, instance_name, *args): """Helper: assert holidays dict is empty.""" holidays, _ = self._parse_arguments( args, instance_name=instance_name, raise_on_empty=False @@ -321,15 +321,15 @@ def _assertNoHolidays(self, instance_name, *args): # noqa: N802 self.assertFalse(holidays) self.assertEqual(0, len(holidays)) - def assertNoHolidays(self, *args): # noqa: N802 + def assertNoHolidays(self, *args): """Assert holidays dict is empty.""" self._assertNoHolidays("holidays", *args) - def assertNoNonObservedHolidays(self, *args): # noqa: N802 + def assertNoNonObservedHolidays(self, *args): """Assert non-observed holidays dict is empty.""" self._assertNoHolidays("holidays_non_observed", *args) - def _assertLocalizedHolidays(self, localized_holidays, language=None): # noqa: N802 + def _assertLocalizedHolidays(self, localized_holidays, language=None): """Helper: assert localized holidays match expected names.""" instance = self.test_class( years=localized_holidays[0][0].split("-")[0], @@ -356,7 +356,7 @@ def _assertLocalizedHolidays(self, localized_holidays, language=None): # noqa: f"Please make sure all holiday names are localized: {actual_holidays}", ) - def assertLocalizedHolidays(self, *args): # noqa: N802 + def assertLocalizedHolidays(self, *args): """Assert localized holidays match expected names.""" arg = args[0] is_string = isinstance(arg, str) @@ -442,7 +442,7 @@ def test_code(self): class SundayHolidays(TestCase): """Common class to test countries with Sundays as a holidays.""" - def assertSundays(self, cls): # noqa: N802 + def assertSundays(self, cls): holidays = cls(years=1989, include_sundays=True) self.assertHoliday(holidays, "1989-12-31") self.assertEqual(53, len([s for s in holidays if s.weekday() == SUN])) @@ -481,7 +481,7 @@ class WorkingDayTests(TestCase): """Common class for testing entity holidays substituted from non-working days.""" # Workday. - def _assertWorkingDay(self, instance_name, *args): # noqa: N802 + def _assertWorkingDay(self, instance_name, *args): """Helper: assert each date is a working day.""" holidays, dates = self._parse_arguments(args, instance_name=instance_name) self._verify_type(holidays) @@ -490,10 +490,10 @@ def _assertWorkingDay(self, instance_name, *args): # noqa: N802 self.assertTrue(holidays._is_weekend(parse(dt))) self.assertTrue(holidays.is_working_day(dt)) - def assertWorkingDay(self, *args): # noqa: N802 + def assertWorkingDay(self, *args): """Assert each date is a working day.""" self._assertWorkingDay("holidays", *args) - def assertNonObservedWorkingDay(self, *args): # noqa: N802 + def assertNonObservedWorkingDay(self, *args): """Assert each date is a non-observed working day.""" self._assertWorkingDay("holidays_non_observed", *args) From 09d3319a9871dd51feebe55de04216f0f007e0ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Sep 2025 21:38:14 -0700 Subject: [PATCH 03/34] Bump cyclonedx-bom from 7.0.0 to 7.1.0 (#2887) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/build.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/build.txt b/requirements/build.txt index e0251fe93..13c58bfc5 100644 --- a/requirements/build.txt +++ b/requirements/build.txt @@ -1,3 +1,3 @@ build==1.3.0 -cyclonedx-bom==7.0.0 +cyclonedx-bom==7.1.0 polib==1.2.0 From 4e4e052be8341a2c49faf729704d3a0486fe53ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:47:12 +0300 Subject: [PATCH 04/34] Bump pygithub from 2.7.0 to 2.8.1 (#2892) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev.txt b/requirements/dev.txt index ecac1f4e4..2cc7cc6ae 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -6,7 +6,7 @@ gitpython==3.1.45 hijridate==2.5.0 lingva==5.0.6 pre-commit==4.3.0 -pygithub==2.7.0 +pygithub==2.8.1 requests==2.32.5 ruff==0.12.10 tox==4.28.4 From 164058521b3ae5dd2fe12c2883be8573a8bcb701 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 08:47:45 +0000 Subject: [PATCH 05/34] Bump tox from 4.28.4 to 4.30.1 (#2891) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev.txt b/requirements/dev.txt index 2cc7cc6ae..8a641570d 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -9,6 +9,6 @@ pre-commit==4.3.0 pygithub==2.8.1 requests==2.32.5 ruff==0.12.10 -tox==4.28.4 +tox==4.30.1 urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From 5d1b0db2f603b61909919fb0a6b46e0aa98f275c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 08:48:19 +0000 Subject: [PATCH 06/34] Bump coverage from 7.10.5 to 7.10.6 (#2890) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/tests.txt b/requirements/tests.txt index bfddc2152..833c46d25 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -1,6 +1,6 @@ # Test requirements. -coverage==7.10.5 +coverage==7.10.6 importlib-metadata==8.7.0; python_version < '3.10' numpy<2.1.0; python_version < '3.10' numpy==2.2.6; python_version == '3.10' From 1f7fd4037fce12cd4711c91b32171cfdb205479c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:48:46 +0300 Subject: [PATCH 07/34] Bump github/codeql-action from 3.29.11 to 3.30.0 (#2889) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-cd.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index d521e512d..f95932025 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -58,12 +58,12 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - name: Initialize CodeQL - uses: github/codeql-action/init@3c3833e0f8c1c83d449a7478aa59c036a9165498 + uses: github/codeql-action/init@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d with: languages: python - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@3c3833e0f8c1c83d449a7478aa59c036a9165498 + uses: github/codeql-action/analyze@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d with: category: '/language:python' From 61e66cb82dc95ee775aaf90eaba2aa3a6b5cb0f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 13:10:20 +0300 Subject: [PATCH 08/34] Bump ruff from 0.12.10 to 0.12.11 (#2893) Signed-off-by: dependabot[bot] Signed-off-by: ~Jhellico Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: ~Jhellico --- requirements/dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev.txt b/requirements/dev.txt index 8a641570d..47210b984 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -8,7 +8,7 @@ lingva==5.0.6 pre-commit==4.3.0 pygithub==2.8.1 requests==2.32.5 -ruff==0.12.10 +ruff==0.12.11 tox==4.30.1 urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From 0e0d533b6668ab58fa892f0df4641624badb45f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 13:10:50 +0300 Subject: [PATCH 09/34] Bump mkdocstrings-python from 1.18.0 to 1.18.2 (#2894) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/docs.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/docs.txt b/requirements/docs.txt index a13cd9488..5fac03964 100644 --- a/requirements/docs.txt +++ b/requirements/docs.txt @@ -4,5 +4,5 @@ markdown-include==0.8.1 mkdocs-gen-files==0.5.0 mkdocs-literate-nav==0.6.2 mkdocs==1.6.1 -mkdocstrings-python==1.18.0 +mkdocstrings-python==1.18.2 zipp==3.23.0 # not directly required, pinned by Snyk to avoid a vulnerability From 649b9864c17d354972555cc8f322080682fa7d1e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 17:32:29 -0700 Subject: [PATCH 10/34] Update pre-commit hooks (#2896) Co-authored-by: arkid15r <2201626+arkid15r@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 37ddecf3a..47562ed5a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,7 +25,7 @@ repos: - --py39-plus - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.12.11 + rev: v0.12.12 hooks: - id: ruff-check - id: ruff-format From 4ea8497a6ea7d7a6dc4ad6480b50d7f93a3276d6 Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Fri, 5 Sep 2025 18:14:36 +0300 Subject: [PATCH 11/34] Update Spain holidays: add Dec 3 holiday in Navarre (#2895) --- holidays/countries/spain.py | 22 ++++++ holidays/locale/en_US/LC_MESSAGES/ES.po | 8 +- holidays/locale/es/LC_MESSAGES/ES.po | 8 +- holidays/locale/uk/LC_MESSAGES/ES.po | 8 +- snapshots/countries/ES_NC.json | 101 ++++++++++++++++++++++++ tests/countries/test_spain.py | 19 +++++ 6 files changed, 160 insertions(+), 6 deletions(-) diff --git a/holidays/countries/spain.py b/holidays/countries/spain.py index 9b9978def..9fc338cda 100644 --- a/holidays/countries/spain.py +++ b/holidays/countries/spain.py @@ -47,6 +47,25 @@ class Spain( * [2024](https://web.archive.org/web/20240401192304/https://www.boe.es/buscar/doc.php?id=BOE-A-2023-22014) * [2025](https://web.archive.org/web/20241226214918/https://www.boe.es/buscar/doc.php?id=BOE-A-2024-21316) + Subdivisions Holidays References: + * Navarra: + * [2010](https://web.archive.org/web/20250903095706/https://www.lexnavarra.navarra.es/detalle.asp?r=8402) + * [2011](https://web.archive.org/web/20250903095217/https://www.lexnavarra.navarra.es/detalle.asp?r=8403) + * [2012](https://web.archive.org/web/20250903095133/https://www.lexnavarra.navarra.es/detalle.asp?r=12993) + * [2013](https://web.archive.org/web/20250903095136/https://www.lexnavarra.navarra.es/detalle.asp?r=26226) + * [2014](https://web.archive.org/web/20250903095123/https://www.lexnavarra.navarra.es/detalle.asp?r=32382) + * [2015](https://web.archive.org/web/20250903095257/https://www.lexnavarra.navarra.es/detalle.asp?r=34276) + * [2016](https://web.archive.org/web/20250903095302/https://www.lexnavarra.navarra.es/detalle.asp?r=36141) + * [2017](https://web.archive.org/web/20250903095306/https://www.lexnavarra.navarra.es/detalle.asp?r=37665) + * [2018](https://web.archive.org/web/20170728130845/https://www.lexnavarra.navarra.es/detalle.asp?r=38904) + * [2019](https://web.archive.org/web/20250903095819/https://www.lexnavarra.navarra.es/detalle.asp?r=50305) + * [2020](https://web.archive.org/web/20250623005808/https://www.lexnavarra.navarra.es/detalle.asp?r=52229) + * [2021](https://web.archive.org/web/20250623010750/https://www.lexnavarra.navarra.es/detalle.asp?r=52748) + * [2022](https://web.archive.org/web/20250623000851/https://www.lexnavarra.navarra.es/detalle.asp?r=53763) + * [2023](https://web.archive.org/web/20250623010106/https://www.lexnavarra.navarra.es/detalle.asp?r=55481) + * [2024](https://web.archive.org/web/20250623001355/https://www.lexnavarra.navarra.es/detalle.asp?r=56116) + * [2025](https://web.archive.org/web/20250622235218/https://www.lexnavarra.navarra.es/detalle.asp?r=57122) + Holidays checked with official sources for 2010-2025 only. """ @@ -641,6 +660,9 @@ def _populate_subdiv_nc_public_holidays(self): if self._year in {2011, 2013, 2015, 2016, 2017} or self._year >= 2022: self._add_saint_james_day(tr("Santiago Apóstol")) + # Saint Francis Xavier's Day. + self._move_holiday(self._add_holiday_dec_3(tr("San Francisco Javier"))) + if self._year == 2020: self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española"))) diff --git a/holidays/locale/en_US/LC_MESSAGES/ES.po b/holidays/locale/en_US/LC_MESSAGES/ES.po index 46824ca5e..61dc35f67 100644 --- a/holidays/locale/en_US/LC_MESSAGES/ES.po +++ b/holidays/locale/en_US/LC_MESSAGES/ES.po @@ -14,9 +14,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.80\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-12-26 19:23+0200\n" -"PO-Revision-Date: 2025-08-26 18:42+0300\n" +"PO-Revision-Date: 2025-09-04 12:50+0300\n" "Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: en_US\n" @@ -202,6 +202,10 @@ msgstr "Eid al-Fitr" msgid "Fiesta del Sacrificio-Aid Al Adha" msgstr "Eid al-Adha" +#. Saint Francis Xavier's Day. +msgid "San Francisco Javier" +msgstr "Saint Francis Xavier's Day" + #. País Vasco Day. msgid "Día del País Vasco" msgstr "País Vasco Day" diff --git a/holidays/locale/es/LC_MESSAGES/ES.po b/holidays/locale/es/LC_MESSAGES/ES.po index c72082ad8..3595dd9ed 100644 --- a/holidays/locale/es/LC_MESSAGES/ES.po +++ b/holidays/locale/es/LC_MESSAGES/ES.po @@ -14,9 +14,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.80\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-12-26 19:23+0200\n" -"PO-Revision-Date: 2025-08-26 18:42+0300\n" +"PO-Revision-Date: 2025-09-04 12:50+0300\n" "Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: es\n" @@ -202,6 +202,10 @@ msgstr "" msgid "Fiesta del Sacrificio-Aid Al Adha" msgstr "" +#. Saint Francis Xavier's Day. +msgid "San Francisco Javier" +msgstr "" + #. País Vasco Day. msgid "Día del País Vasco" msgstr "" diff --git a/holidays/locale/uk/LC_MESSAGES/ES.po b/holidays/locale/uk/LC_MESSAGES/ES.po index 7ad542502..16a491849 100644 --- a/holidays/locale/uk/LC_MESSAGES/ES.po +++ b/holidays/locale/uk/LC_MESSAGES/ES.po @@ -14,9 +14,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.80\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-12-26 19:23+0200\n" -"PO-Revision-Date: 2025-08-26 18:43+0300\n" +"PO-Revision-Date: 2025-09-04 12:50+0300\n" "Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: uk\n" @@ -202,6 +202,10 @@ msgstr "Рамазан-байрам" msgid "Fiesta del Sacrificio-Aid Al Adha" msgstr "Курбан-байрам" +#. Saint Francis Xavier's Day. +msgid "San Francisco Javier" +msgstr "День Святого Франциска Ксаверія" + #. País Vasco Day. msgid "Día del País Vasco" msgstr "День Країни Басків" diff --git a/snapshots/countries/ES_NC.json b/snapshots/countries/ES_NC.json index a7db47630..8f410c82e 100644 --- a/snapshots/countries/ES_NC.json +++ b/snapshots/countries/ES_NC.json @@ -8,6 +8,7 @@ "1950-08-15": "Assumption Day", "1950-10-12": "National Day", "1950-11-01": "All Saints' Day", + "1950-12-04": "Monday following Saint Francis Xavier's Day", "1950-12-06": "Constitution Day", "1950-12-08": "Immaculate Conception", "1950-12-25": "Christmas Day", @@ -20,6 +21,7 @@ "1951-08-15": "Assumption Day", "1951-10-12": "National Day", "1951-11-01": "All Saints' Day", + "1951-12-03": "Saint Francis Xavier's Day", "1951-12-06": "Constitution Day", "1951-12-08": "Immaculate Conception", "1951-12-25": "Christmas Day", @@ -32,6 +34,7 @@ "1952-08-15": "Assumption Day", "1952-10-12": "National Day", "1952-11-01": "All Saints' Day", + "1952-12-03": "Saint Francis Xavier's Day", "1952-12-06": "Constitution Day", "1952-12-08": "Immaculate Conception", "1952-12-25": "Christmas Day", @@ -44,6 +47,7 @@ "1953-08-15": "Assumption Day", "1953-10-12": "National Day", "1953-11-01": "All Saints' Day", + "1953-12-03": "Saint Francis Xavier's Day", "1953-12-06": "Constitution Day", "1953-12-08": "Immaculate Conception", "1953-12-25": "Christmas Day", @@ -56,6 +60,7 @@ "1954-08-15": "Assumption Day", "1954-10-12": "National Day", "1954-11-01": "All Saints' Day", + "1954-12-03": "Saint Francis Xavier's Day", "1954-12-06": "Constitution Day", "1954-12-08": "Immaculate Conception", "1954-12-25": "Christmas Day", @@ -68,6 +73,7 @@ "1955-08-15": "Assumption Day", "1955-10-12": "National Day", "1955-11-01": "All Saints' Day", + "1955-12-03": "Saint Francis Xavier's Day", "1955-12-06": "Constitution Day", "1955-12-08": "Immaculate Conception", "1955-12-25": "Christmas Day", @@ -80,6 +86,7 @@ "1956-08-15": "Assumption Day", "1956-10-12": "National Day", "1956-11-01": "All Saints' Day", + "1956-12-03": "Saint Francis Xavier's Day", "1956-12-06": "Constitution Day", "1956-12-08": "Immaculate Conception", "1956-12-25": "Christmas Day", @@ -92,6 +99,7 @@ "1957-08-15": "Assumption Day", "1957-10-12": "National Day", "1957-11-01": "All Saints' Day", + "1957-12-03": "Saint Francis Xavier's Day", "1957-12-06": "Constitution Day", "1957-12-08": "Immaculate Conception", "1957-12-25": "Christmas Day", @@ -104,6 +112,7 @@ "1958-08-15": "Assumption Day", "1958-10-12": "National Day", "1958-11-01": "All Saints' Day", + "1958-12-03": "Saint Francis Xavier's Day", "1958-12-06": "Constitution Day", "1958-12-08": "Immaculate Conception", "1958-12-25": "Christmas Day", @@ -116,6 +125,7 @@ "1959-08-15": "Assumption Day", "1959-10-12": "National Day", "1959-11-01": "All Saints' Day", + "1959-12-03": "Saint Francis Xavier's Day", "1959-12-06": "Constitution Day", "1959-12-08": "Immaculate Conception", "1959-12-25": "Christmas Day", @@ -128,6 +138,7 @@ "1960-08-15": "Assumption Day", "1960-10-12": "National Day", "1960-11-01": "All Saints' Day", + "1960-12-03": "Saint Francis Xavier's Day", "1960-12-06": "Constitution Day", "1960-12-08": "Immaculate Conception", "1960-12-25": "Christmas Day", @@ -140,6 +151,7 @@ "1961-08-15": "Assumption Day", "1961-10-12": "National Day", "1961-11-01": "All Saints' Day", + "1961-12-04": "Monday following Saint Francis Xavier's Day", "1961-12-06": "Constitution Day", "1961-12-08": "Immaculate Conception", "1961-12-25": "Christmas Day", @@ -152,6 +164,7 @@ "1962-08-15": "Assumption Day", "1962-10-12": "National Day", "1962-11-01": "All Saints' Day", + "1962-12-03": "Saint Francis Xavier's Day", "1962-12-06": "Constitution Day", "1962-12-08": "Immaculate Conception", "1962-12-25": "Christmas Day", @@ -164,6 +177,7 @@ "1963-08-15": "Assumption Day", "1963-10-12": "National Day", "1963-11-01": "All Saints' Day", + "1963-12-03": "Saint Francis Xavier's Day", "1963-12-06": "Constitution Day", "1963-12-08": "Immaculate Conception", "1963-12-25": "Christmas Day", @@ -176,6 +190,7 @@ "1964-08-15": "Assumption Day", "1964-10-12": "National Day", "1964-11-01": "All Saints' Day", + "1964-12-03": "Saint Francis Xavier's Day", "1964-12-06": "Constitution Day", "1964-12-08": "Immaculate Conception", "1964-12-25": "Christmas Day", @@ -188,6 +203,7 @@ "1965-08-15": "Assumption Day", "1965-10-12": "National Day", "1965-11-01": "All Saints' Day", + "1965-12-03": "Saint Francis Xavier's Day", "1965-12-06": "Constitution Day", "1965-12-08": "Immaculate Conception", "1965-12-25": "Christmas Day", @@ -200,6 +216,7 @@ "1966-08-15": "Assumption Day", "1966-10-12": "National Day", "1966-11-01": "All Saints' Day", + "1966-12-03": "Saint Francis Xavier's Day", "1966-12-06": "Constitution Day", "1966-12-08": "Immaculate Conception", "1966-12-25": "Christmas Day", @@ -212,6 +229,7 @@ "1967-08-15": "Assumption Day", "1967-10-12": "National Day", "1967-11-01": "All Saints' Day", + "1967-12-04": "Monday following Saint Francis Xavier's Day", "1967-12-06": "Constitution Day", "1967-12-08": "Immaculate Conception", "1967-12-25": "Christmas Day", @@ -224,6 +242,7 @@ "1968-08-15": "Assumption Day", "1968-10-12": "National Day", "1968-11-01": "All Saints' Day", + "1968-12-03": "Saint Francis Xavier's Day", "1968-12-06": "Constitution Day", "1968-12-08": "Immaculate Conception", "1968-12-25": "Christmas Day", @@ -236,6 +255,7 @@ "1969-08-15": "Assumption Day", "1969-10-12": "National Day", "1969-11-01": "All Saints' Day", + "1969-12-03": "Saint Francis Xavier's Day", "1969-12-06": "Constitution Day", "1969-12-08": "Immaculate Conception", "1969-12-25": "Christmas Day", @@ -248,6 +268,7 @@ "1970-08-15": "Assumption Day", "1970-10-12": "National Day", "1970-11-01": "All Saints' Day", + "1970-12-03": "Saint Francis Xavier's Day", "1970-12-06": "Constitution Day", "1970-12-08": "Immaculate Conception", "1970-12-25": "Christmas Day", @@ -260,6 +281,7 @@ "1971-08-15": "Assumption Day", "1971-10-12": "National Day", "1971-11-01": "All Saints' Day", + "1971-12-03": "Saint Francis Xavier's Day", "1971-12-06": "Constitution Day", "1971-12-08": "Immaculate Conception", "1971-12-25": "Christmas Day", @@ -272,6 +294,7 @@ "1972-08-15": "Assumption Day", "1972-10-12": "National Day", "1972-11-01": "All Saints' Day", + "1972-12-04": "Monday following Saint Francis Xavier's Day", "1972-12-06": "Constitution Day", "1972-12-08": "Immaculate Conception", "1972-12-25": "Christmas Day", @@ -284,6 +307,7 @@ "1973-08-15": "Assumption Day", "1973-10-12": "National Day", "1973-11-01": "All Saints' Day", + "1973-12-03": "Saint Francis Xavier's Day", "1973-12-06": "Constitution Day", "1973-12-08": "Immaculate Conception", "1973-12-25": "Christmas Day", @@ -296,6 +320,7 @@ "1974-08-15": "Assumption Day", "1974-10-12": "National Day", "1974-11-01": "All Saints' Day", + "1974-12-03": "Saint Francis Xavier's Day", "1974-12-06": "Constitution Day", "1974-12-08": "Immaculate Conception", "1974-12-25": "Christmas Day", @@ -308,6 +333,7 @@ "1975-08-15": "Assumption Day", "1975-10-12": "National Day", "1975-11-01": "All Saints' Day", + "1975-12-03": "Saint Francis Xavier's Day", "1975-12-06": "Constitution Day", "1975-12-08": "Immaculate Conception", "1975-12-25": "Christmas Day", @@ -320,6 +346,7 @@ "1976-08-15": "Assumption Day", "1976-10-12": "National Day", "1976-11-01": "All Saints' Day", + "1976-12-03": "Saint Francis Xavier's Day", "1976-12-06": "Constitution Day", "1976-12-08": "Immaculate Conception", "1976-12-25": "Christmas Day", @@ -332,6 +359,7 @@ "1977-08-15": "Assumption Day", "1977-10-12": "National Day", "1977-11-01": "All Saints' Day", + "1977-12-03": "Saint Francis Xavier's Day", "1977-12-06": "Constitution Day", "1977-12-08": "Immaculate Conception", "1977-12-25": "Christmas Day", @@ -344,6 +372,7 @@ "1978-08-15": "Assumption Day", "1978-10-12": "National Day", "1978-11-01": "All Saints' Day", + "1978-12-04": "Monday following Saint Francis Xavier's Day", "1978-12-06": "Constitution Day", "1978-12-08": "Immaculate Conception", "1978-12-25": "Christmas Day", @@ -356,6 +385,7 @@ "1979-08-15": "Assumption Day", "1979-10-12": "National Day", "1979-11-01": "All Saints' Day", + "1979-12-03": "Saint Francis Xavier's Day", "1979-12-06": "Constitution Day", "1979-12-08": "Immaculate Conception", "1979-12-25": "Christmas Day", @@ -368,6 +398,7 @@ "1980-08-15": "Assumption Day", "1980-10-12": "National Day", "1980-11-01": "All Saints' Day", + "1980-12-03": "Saint Francis Xavier's Day", "1980-12-06": "Constitution Day", "1980-12-08": "Immaculate Conception", "1980-12-25": "Christmas Day", @@ -380,6 +411,7 @@ "1981-08-15": "Assumption Day", "1981-10-12": "National Day", "1981-11-01": "All Saints' Day", + "1981-12-03": "Saint Francis Xavier's Day", "1981-12-06": "Constitution Day", "1981-12-08": "Immaculate Conception", "1981-12-25": "Christmas Day", @@ -392,6 +424,7 @@ "1982-08-15": "Assumption Day", "1982-10-12": "National Day", "1982-11-01": "All Saints' Day", + "1982-12-03": "Saint Francis Xavier's Day", "1982-12-06": "Constitution Day", "1982-12-08": "Immaculate Conception", "1982-12-25": "Christmas Day", @@ -404,6 +437,7 @@ "1983-08-15": "Assumption Day", "1983-10-12": "National Day", "1983-11-01": "All Saints' Day", + "1983-12-03": "Saint Francis Xavier's Day", "1983-12-06": "Constitution Day", "1983-12-08": "Immaculate Conception", "1983-12-25": "Christmas Day", @@ -416,6 +450,7 @@ "1984-08-15": "Assumption Day", "1984-10-12": "National Day", "1984-11-01": "All Saints' Day", + "1984-12-03": "Saint Francis Xavier's Day", "1984-12-06": "Constitution Day", "1984-12-08": "Immaculate Conception", "1984-12-25": "Christmas Day", @@ -428,6 +463,7 @@ "1985-08-15": "Assumption Day", "1985-10-12": "National Day", "1985-11-01": "All Saints' Day", + "1985-12-03": "Saint Francis Xavier's Day", "1985-12-06": "Constitution Day", "1985-12-08": "Immaculate Conception", "1985-12-25": "Christmas Day", @@ -440,6 +476,7 @@ "1986-08-15": "Assumption Day", "1986-10-12": "National Day", "1986-11-01": "All Saints' Day", + "1986-12-03": "Saint Francis Xavier's Day", "1986-12-06": "Constitution Day", "1986-12-08": "Immaculate Conception", "1986-12-25": "Christmas Day", @@ -452,6 +489,7 @@ "1987-08-15": "Assumption Day", "1987-10-12": "National Day", "1987-11-01": "All Saints' Day", + "1987-12-03": "Saint Francis Xavier's Day", "1987-12-06": "Constitution Day", "1987-12-08": "Immaculate Conception", "1987-12-25": "Christmas Day", @@ -464,6 +502,7 @@ "1988-08-15": "Assumption Day", "1988-10-12": "National Day", "1988-11-01": "All Saints' Day", + "1988-12-03": "Saint Francis Xavier's Day", "1988-12-06": "Constitution Day", "1988-12-08": "Immaculate Conception", "1988-12-25": "Christmas Day", @@ -476,6 +515,7 @@ "1989-08-15": "Assumption Day", "1989-10-12": "National Day", "1989-11-01": "All Saints' Day", + "1989-12-04": "Monday following Saint Francis Xavier's Day", "1989-12-06": "Constitution Day", "1989-12-08": "Immaculate Conception", "1989-12-25": "Christmas Day", @@ -488,6 +528,7 @@ "1990-08-15": "Assumption Day", "1990-10-12": "National Day", "1990-11-01": "All Saints' Day", + "1990-12-03": "Saint Francis Xavier's Day", "1990-12-06": "Constitution Day", "1990-12-08": "Immaculate Conception", "1990-12-25": "Christmas Day", @@ -500,6 +541,7 @@ "1991-08-15": "Assumption Day", "1991-10-12": "National Day", "1991-11-01": "All Saints' Day", + "1991-12-03": "Saint Francis Xavier's Day", "1991-12-06": "Constitution Day", "1991-12-08": "Immaculate Conception", "1991-12-25": "Christmas Day", @@ -512,6 +554,7 @@ "1992-08-15": "Assumption Day", "1992-10-12": "National Day", "1992-11-01": "All Saints' Day", + "1992-12-03": "Saint Francis Xavier's Day", "1992-12-06": "Constitution Day", "1992-12-08": "Immaculate Conception", "1992-12-25": "Christmas Day", @@ -524,6 +567,7 @@ "1993-08-15": "Assumption Day", "1993-10-12": "National Day", "1993-11-01": "All Saints' Day", + "1993-12-03": "Saint Francis Xavier's Day", "1993-12-06": "Constitution Day", "1993-12-08": "Immaculate Conception", "1993-12-25": "Christmas Day", @@ -536,6 +580,7 @@ "1994-08-15": "Assumption Day", "1994-10-12": "National Day", "1994-11-01": "All Saints' Day", + "1994-12-03": "Saint Francis Xavier's Day", "1994-12-06": "Constitution Day", "1994-12-08": "Immaculate Conception", "1994-12-25": "Christmas Day", @@ -548,6 +593,7 @@ "1995-08-15": "Assumption Day", "1995-10-12": "National Day", "1995-11-01": "All Saints' Day", + "1995-12-04": "Monday following Saint Francis Xavier's Day", "1995-12-06": "Constitution Day", "1995-12-08": "Immaculate Conception", "1995-12-25": "Christmas Day", @@ -560,6 +606,7 @@ "1996-08-15": "Assumption Day", "1996-10-12": "National Day", "1996-11-01": "All Saints' Day", + "1996-12-03": "Saint Francis Xavier's Day", "1996-12-06": "Constitution Day", "1996-12-08": "Immaculate Conception", "1996-12-25": "Christmas Day", @@ -572,6 +619,7 @@ "1997-08-15": "Assumption Day", "1997-10-12": "National Day", "1997-11-01": "All Saints' Day", + "1997-12-03": "Saint Francis Xavier's Day", "1997-12-06": "Constitution Day", "1997-12-08": "Immaculate Conception", "1997-12-25": "Christmas Day", @@ -584,6 +632,7 @@ "1998-08-15": "Assumption Day", "1998-10-12": "National Day", "1998-11-01": "All Saints' Day", + "1998-12-03": "Saint Francis Xavier's Day", "1998-12-06": "Constitution Day", "1998-12-08": "Immaculate Conception", "1998-12-25": "Christmas Day", @@ -596,6 +645,7 @@ "1999-08-15": "Assumption Day", "1999-10-12": "National Day", "1999-11-01": "All Saints' Day", + "1999-12-03": "Saint Francis Xavier's Day", "1999-12-06": "Constitution Day", "1999-12-08": "Immaculate Conception", "1999-12-25": "Christmas Day", @@ -608,6 +658,7 @@ "2000-08-15": "Assumption Day", "2000-10-12": "National Day", "2000-11-01": "All Saints' Day", + "2000-12-04": "Monday following Saint Francis Xavier's Day", "2000-12-06": "Constitution Day", "2000-12-08": "Immaculate Conception", "2000-12-25": "Christmas Day", @@ -620,6 +671,7 @@ "2001-08-15": "Assumption Day", "2001-10-12": "National Day", "2001-11-01": "All Saints' Day", + "2001-12-03": "Saint Francis Xavier's Day", "2001-12-06": "Constitution Day", "2001-12-08": "Immaculate Conception", "2001-12-25": "Christmas Day", @@ -632,6 +684,7 @@ "2002-08-15": "Assumption Day", "2002-10-12": "National Day", "2002-11-01": "All Saints' Day", + "2002-12-03": "Saint Francis Xavier's Day", "2002-12-06": "Constitution Day", "2002-12-08": "Immaculate Conception", "2002-12-25": "Christmas Day", @@ -644,6 +697,7 @@ "2003-08-15": "Assumption Day", "2003-10-12": "National Day", "2003-11-01": "All Saints' Day", + "2003-12-03": "Saint Francis Xavier's Day", "2003-12-06": "Constitution Day", "2003-12-08": "Immaculate Conception", "2003-12-25": "Christmas Day", @@ -656,6 +710,7 @@ "2004-08-15": "Assumption Day", "2004-10-12": "National Day", "2004-11-01": "All Saints' Day", + "2004-12-03": "Saint Francis Xavier's Day", "2004-12-06": "Constitution Day", "2004-12-08": "Immaculate Conception", "2004-12-25": "Christmas Day", @@ -668,6 +723,7 @@ "2005-08-15": "Assumption Day", "2005-10-12": "National Day", "2005-11-01": "All Saints' Day", + "2005-12-03": "Saint Francis Xavier's Day", "2005-12-06": "Constitution Day", "2005-12-08": "Immaculate Conception", "2005-12-25": "Christmas Day", @@ -680,6 +736,7 @@ "2006-08-15": "Assumption Day", "2006-10-12": "National Day", "2006-11-01": "All Saints' Day", + "2006-12-04": "Monday following Saint Francis Xavier's Day", "2006-12-06": "Constitution Day", "2006-12-08": "Immaculate Conception", "2006-12-25": "Christmas Day", @@ -692,6 +749,7 @@ "2007-08-15": "Assumption Day", "2007-10-12": "National Day", "2007-11-01": "All Saints' Day", + "2007-12-03": "Saint Francis Xavier's Day", "2007-12-06": "Constitution Day", "2007-12-08": "Immaculate Conception", "2007-12-25": "Christmas Day", @@ -704,6 +762,7 @@ "2008-08-15": "Assumption Day", "2008-10-12": "National Day", "2008-11-01": "All Saints' Day", + "2008-12-03": "Saint Francis Xavier's Day", "2008-12-06": "Constitution Day", "2008-12-08": "Immaculate Conception", "2008-12-25": "Christmas Day", @@ -716,6 +775,7 @@ "2009-08-15": "Assumption Day", "2009-10-12": "National Day", "2009-11-01": "All Saints' Day", + "2009-12-03": "Saint Francis Xavier's Day", "2009-12-06": "Constitution Day", "2009-12-08": "Immaculate Conception", "2009-12-25": "Christmas Day", @@ -728,6 +788,7 @@ "2010-05-01": "Labor Day", "2010-10-12": "National Day", "2010-11-01": "All Saints' Day", + "2010-12-03": "Saint Francis Xavier's Day", "2010-12-06": "Constitution Day", "2010-12-08": "Immaculate Conception", "2010-12-25": "Christmas Day", @@ -740,6 +801,7 @@ "2011-08-15": "Assumption Day", "2011-10-12": "National Day", "2011-11-01": "All Saints' Day", + "2011-12-03": "Saint Francis Xavier's Day", "2011-12-06": "Constitution Day", "2011-12-08": "Immaculate Conception", "2011-12-26": "Monday following Christmas Day", @@ -752,6 +814,7 @@ "2012-08-15": "Assumption Day", "2012-10-12": "National Day", "2012-11-01": "All Saints' Day", + "2012-12-03": "Saint Francis Xavier's Day", "2012-12-06": "Constitution Day", "2012-12-08": "Immaculate Conception", "2012-12-25": "Christmas Day", @@ -765,6 +828,7 @@ "2013-08-15": "Assumption Day", "2013-10-12": "National Day", "2013-11-01": "All Saints' Day", + "2013-12-03": "Saint Francis Xavier's Day", "2013-12-06": "Constitution Day", "2013-12-25": "Christmas Day", "2014-01-01": "New Year's Day", @@ -776,6 +840,7 @@ "2014-05-01": "Labor Day", "2014-08-15": "Assumption Day", "2014-11-01": "All Saints' Day", + "2014-12-03": "Saint Francis Xavier's Day", "2014-12-06": "Constitution Day", "2014-12-08": "Immaculate Conception", "2014-12-25": "Christmas Day", @@ -789,6 +854,7 @@ "2015-07-25": "Saint James' Day", "2015-08-15": "Assumption Day", "2015-10-12": "National Day", + "2015-12-03": "Saint Francis Xavier's Day", "2015-12-08": "Immaculate Conception", "2015-12-25": "Christmas Day", "2016-01-01": "New Year's Day", @@ -800,6 +866,7 @@ "2016-08-15": "Assumption Day", "2016-10-12": "National Day", "2016-11-01": "All Saints' Day", + "2016-12-03": "Saint Francis Xavier's Day", "2016-12-06": "Constitution Day", "2016-12-08": "Immaculate Conception", "2016-12-26": "Monday following Christmas Day", @@ -812,6 +879,7 @@ "2017-08-15": "Assumption Day", "2017-10-12": "National Day", "2017-11-01": "All Saints' Day", + "2017-12-04": "Monday following Saint Francis Xavier's Day", "2017-12-06": "Constitution Day", "2017-12-08": "Immaculate Conception", "2017-12-25": "Christmas Day", @@ -824,6 +892,7 @@ "2018-08-15": "Assumption Day", "2018-10-12": "National Day", "2018-11-01": "All Saints' Day", + "2018-12-03": "Saint Francis Xavier's Day", "2018-12-06": "Constitution Day", "2018-12-08": "Immaculate Conception", "2018-12-25": "Christmas Day", @@ -837,6 +906,7 @@ "2019-08-15": "Assumption Day", "2019-10-12": "National Day", "2019-11-01": "All Saints' Day", + "2019-12-03": "Saint Francis Xavier's Day", "2019-12-06": "Constitution Day", "2019-12-25": "Christmas Day", "2020-01-01": "New Year's Day", @@ -848,6 +918,7 @@ "2020-05-01": "Labor Day", "2020-08-15": "Assumption Day", "2020-10-12": "National Day", + "2020-12-03": "Saint Francis Xavier's Day", "2020-12-07": "Monday following Constitution Day", "2020-12-08": "Immaculate Conception", "2020-12-25": "Christmas Day", @@ -860,6 +931,7 @@ "2021-05-01": "Labor Day", "2021-10-12": "National Day", "2021-11-01": "All Saints' Day", + "2021-12-03": "Saint Francis Xavier's Day", "2021-12-06": "Constitution Day", "2021-12-08": "Immaculate Conception", "2021-12-25": "Christmas Day", @@ -872,6 +944,7 @@ "2022-08-15": "Assumption Day", "2022-10-12": "National Day", "2022-11-01": "All Saints' Day", + "2022-12-03": "Saint Francis Xavier's Day", "2022-12-06": "Constitution Day", "2022-12-08": "Immaculate Conception", "2022-12-26": "Monday following Christmas Day", @@ -884,6 +957,7 @@ "2023-08-15": "Assumption Day", "2023-10-12": "National Day", "2023-11-01": "All Saints' Day", + "2023-12-04": "Monday following Saint Francis Xavier's Day", "2023-12-06": "Constitution Day", "2023-12-08": "Immaculate Conception", "2023-12-25": "Christmas Day", @@ -897,6 +971,7 @@ "2024-08-15": "Assumption Day", "2024-10-12": "National Day", "2024-11-01": "All Saints' Day", + "2024-12-03": "Saint Francis Xavier's Day", "2024-12-06": "Constitution Day", "2024-12-25": "Christmas Day", "2025-01-01": "New Year's Day", @@ -908,6 +983,7 @@ "2025-07-25": "Saint James' Day", "2025-08-15": "Assumption Day", "2025-11-01": "All Saints' Day", + "2025-12-03": "Saint Francis Xavier's Day", "2025-12-06": "Constitution Day", "2025-12-08": "Immaculate Conception", "2025-12-25": "Christmas Day", @@ -921,6 +997,7 @@ "2026-08-15": "Assumption Day", "2026-10-12": "National Day", "2026-11-01": "All Saints' Day", + "2026-12-03": "Saint Francis Xavier's Day", "2026-12-06": "Constitution Day", "2026-12-08": "Immaculate Conception", "2026-12-25": "Christmas Day", @@ -934,6 +1011,7 @@ "2027-08-15": "Assumption Day", "2027-10-12": "National Day", "2027-11-01": "All Saints' Day", + "2027-12-03": "Saint Francis Xavier's Day", "2027-12-06": "Constitution Day", "2027-12-08": "Immaculate Conception", "2027-12-25": "Christmas Day", @@ -947,6 +1025,7 @@ "2028-08-15": "Assumption Day", "2028-10-12": "National Day", "2028-11-01": "All Saints' Day", + "2028-12-04": "Monday following Saint Francis Xavier's Day", "2028-12-06": "Constitution Day", "2028-12-08": "Immaculate Conception", "2028-12-25": "Christmas Day", @@ -960,6 +1039,7 @@ "2029-08-15": "Assumption Day", "2029-10-12": "National Day", "2029-11-01": "All Saints' Day", + "2029-12-03": "Saint Francis Xavier's Day", "2029-12-06": "Constitution Day", "2029-12-08": "Immaculate Conception", "2029-12-25": "Christmas Day", @@ -973,6 +1053,7 @@ "2030-08-15": "Assumption Day", "2030-10-12": "National Day", "2030-11-01": "All Saints' Day", + "2030-12-03": "Saint Francis Xavier's Day", "2030-12-06": "Constitution Day", "2030-12-08": "Immaculate Conception", "2030-12-25": "Christmas Day", @@ -986,6 +1067,7 @@ "2031-08-15": "Assumption Day", "2031-10-12": "National Day", "2031-11-01": "All Saints' Day", + "2031-12-03": "Saint Francis Xavier's Day", "2031-12-06": "Constitution Day", "2031-12-08": "Immaculate Conception", "2031-12-25": "Christmas Day", @@ -999,6 +1081,7 @@ "2032-08-15": "Assumption Day", "2032-10-12": "National Day", "2032-11-01": "All Saints' Day", + "2032-12-03": "Saint Francis Xavier's Day", "2032-12-06": "Constitution Day", "2032-12-08": "Immaculate Conception", "2032-12-25": "Christmas Day", @@ -1012,6 +1095,7 @@ "2033-08-15": "Assumption Day", "2033-10-12": "National Day", "2033-11-01": "All Saints' Day", + "2033-12-03": "Saint Francis Xavier's Day", "2033-12-06": "Constitution Day", "2033-12-08": "Immaculate Conception", "2033-12-25": "Christmas Day", @@ -1025,6 +1109,7 @@ "2034-08-15": "Assumption Day", "2034-10-12": "National Day", "2034-11-01": "All Saints' Day", + "2034-12-04": "Monday following Saint Francis Xavier's Day", "2034-12-06": "Constitution Day", "2034-12-08": "Immaculate Conception", "2034-12-25": "Christmas Day", @@ -1038,6 +1123,7 @@ "2035-08-15": "Assumption Day", "2035-10-12": "National Day", "2035-11-01": "All Saints' Day", + "2035-12-03": "Saint Francis Xavier's Day", "2035-12-06": "Constitution Day", "2035-12-08": "Immaculate Conception", "2035-12-25": "Christmas Day", @@ -1051,6 +1137,7 @@ "2036-08-15": "Assumption Day", "2036-10-12": "National Day", "2036-11-01": "All Saints' Day", + "2036-12-03": "Saint Francis Xavier's Day", "2036-12-06": "Constitution Day", "2036-12-08": "Immaculate Conception", "2036-12-25": "Christmas Day", @@ -1064,6 +1151,7 @@ "2037-08-15": "Assumption Day", "2037-10-12": "National Day", "2037-11-01": "All Saints' Day", + "2037-12-03": "Saint Francis Xavier's Day", "2037-12-06": "Constitution Day", "2037-12-08": "Immaculate Conception", "2037-12-25": "Christmas Day", @@ -1077,6 +1165,7 @@ "2038-08-15": "Assumption Day", "2038-10-12": "National Day", "2038-11-01": "All Saints' Day", + "2038-12-03": "Saint Francis Xavier's Day", "2038-12-06": "Constitution Day", "2038-12-08": "Immaculate Conception", "2038-12-25": "Christmas Day", @@ -1090,6 +1179,7 @@ "2039-08-15": "Assumption Day", "2039-10-12": "National Day", "2039-11-01": "All Saints' Day", + "2039-12-03": "Saint Francis Xavier's Day", "2039-12-06": "Constitution Day", "2039-12-08": "Immaculate Conception", "2039-12-25": "Christmas Day", @@ -1103,6 +1193,7 @@ "2040-08-15": "Assumption Day", "2040-10-12": "National Day", "2040-11-01": "All Saints' Day", + "2040-12-03": "Saint Francis Xavier's Day", "2040-12-06": "Constitution Day", "2040-12-08": "Immaculate Conception", "2040-12-25": "Christmas Day", @@ -1116,6 +1207,7 @@ "2041-08-15": "Assumption Day", "2041-10-12": "National Day", "2041-11-01": "All Saints' Day", + "2041-12-03": "Saint Francis Xavier's Day", "2041-12-06": "Constitution Day", "2041-12-08": "Immaculate Conception", "2041-12-25": "Christmas Day", @@ -1129,6 +1221,7 @@ "2042-08-15": "Assumption Day", "2042-10-12": "National Day", "2042-11-01": "All Saints' Day", + "2042-12-03": "Saint Francis Xavier's Day", "2042-12-06": "Constitution Day", "2042-12-08": "Immaculate Conception", "2042-12-25": "Christmas Day", @@ -1142,6 +1235,7 @@ "2043-08-15": "Assumption Day", "2043-10-12": "National Day", "2043-11-01": "All Saints' Day", + "2043-12-03": "Saint Francis Xavier's Day", "2043-12-06": "Constitution Day", "2043-12-08": "Immaculate Conception", "2043-12-25": "Christmas Day", @@ -1155,6 +1249,7 @@ "2044-08-15": "Assumption Day", "2044-10-12": "National Day", "2044-11-01": "All Saints' Day", + "2044-12-03": "Saint Francis Xavier's Day", "2044-12-06": "Constitution Day", "2044-12-08": "Immaculate Conception", "2044-12-25": "Christmas Day", @@ -1168,6 +1263,7 @@ "2045-08-15": "Assumption Day", "2045-10-12": "National Day", "2045-11-01": "All Saints' Day", + "2045-12-04": "Monday following Saint Francis Xavier's Day", "2045-12-06": "Constitution Day", "2045-12-08": "Immaculate Conception", "2045-12-25": "Christmas Day", @@ -1181,6 +1277,7 @@ "2046-08-15": "Assumption Day", "2046-10-12": "National Day", "2046-11-01": "All Saints' Day", + "2046-12-03": "Saint Francis Xavier's Day", "2046-12-06": "Constitution Day", "2046-12-08": "Immaculate Conception", "2046-12-25": "Christmas Day", @@ -1194,6 +1291,7 @@ "2047-08-15": "Assumption Day", "2047-10-12": "National Day", "2047-11-01": "All Saints' Day", + "2047-12-03": "Saint Francis Xavier's Day", "2047-12-06": "Constitution Day", "2047-12-08": "Immaculate Conception", "2047-12-25": "Christmas Day", @@ -1207,6 +1305,7 @@ "2048-08-15": "Assumption Day", "2048-10-12": "National Day", "2048-11-01": "All Saints' Day", + "2048-12-03": "Saint Francis Xavier's Day", "2048-12-06": "Constitution Day", "2048-12-08": "Immaculate Conception", "2048-12-25": "Christmas Day", @@ -1220,6 +1319,7 @@ "2049-08-15": "Assumption Day", "2049-10-12": "National Day", "2049-11-01": "All Saints' Day", + "2049-12-03": "Saint Francis Xavier's Day", "2049-12-06": "Constitution Day", "2049-12-08": "Immaculate Conception", "2049-12-25": "Christmas Day", @@ -1233,6 +1333,7 @@ "2050-08-15": "Assumption Day", "2050-10-12": "National Day", "2050-11-01": "All Saints' Day", + "2050-12-03": "Saint Francis Xavier's Day", "2050-12-06": "Constitution Day", "2050-12-08": "Immaculate Conception", "2050-12-25": "Christmas Day" diff --git a/tests/countries/test_spain.py b/tests/countries/test_spain.py index b9b77086d..ba8c49bd2 100644 --- a/tests/countries/test_spain.py +++ b/tests/countries/test_spain.py @@ -288,6 +288,7 @@ def test_variable_holidays_2010(self): (SEP, 15): {"CB"}, (OCT, 9): {"VC"}, (NOV, 17): {"CE", "ML"}, + (DEC, 3): {"NC"}, } self._assertVariableDays(2010, province_days) @@ -332,6 +333,7 @@ def test_variable_holidays_2011(self): (SEP, 15): {"CB"}, (OCT, 25): {"PV"}, (NOV, 7): {"CE", "ML"}, + (DEC, 3): {"NC"}, (DEC, 26): {"AN", "AR", "AS", "CE", "CL", "CN", "CT", "EX", "IB", "ML", "NC"}, } self._assertVariableDays(2011, province_days) @@ -377,6 +379,7 @@ def test_variable_holidays_2012(self): (OCT, 25): {"PV"}, (OCT, 26): {"ML"}, (OCT, 27): {"CE"}, + (DEC, 3): {"NC"}, (DEC, 26): {"CT"}, } self._assertVariableDays(2012, province_days) @@ -435,6 +438,7 @@ def test_variable_holidays_2013(self): (OCT, 9): {"VC"}, (OCT, 15): {"CE", "ML"}, (OCT, 25): {"PV"}, + (DEC, 3): {"NC"}, (DEC, 9): {"AN", "AR", "AS", "CE", "CL", "EX", "MC", "RI"}, (DEC, 26): {"CT", "IB"}, } @@ -481,6 +485,7 @@ def test_variable_holidays_2014(self): (OCT, 9): {"VC"}, (OCT, 13): {"AN", "AR", "AS", "CE", "CL", "EX"}, (OCT, 25): {"PV"}, + (DEC, 3): {"NC"}, (DEC, 26): {"CT", "IB"}, } self._assertVariableDays(2014, province_days) @@ -523,6 +528,7 @@ def test_variable_holidays_2015(self): (SEP, 25): {"CE", "ML"}, (OCT, 9): {"VC"}, (NOV, 2): {"AN", "AR", "AS", "CB", "CE", "CL", "CN", "EX", "GA", "IB"}, + (DEC, 3): {"NC"}, (DEC, 7): {"AN", "AR", "AS", "CE", "CL", "CM", "EX", "IB", "MC", "ML", "RI", "VC"}, (DEC, 26): {"CT"}, } @@ -570,6 +576,7 @@ def test_variable_holidays_2016(self): (SEP, 12): {"CE", "ML"}, (SEP, 15): {"CB"}, (OCT, 7): {"PV"}, + (DEC, 3): {"NC"}, (DEC, 26): { "AN", "AR", @@ -633,6 +640,7 @@ def test_variable_holidays_2017(self): (SEP, 11): {"CT"}, (SEP, 15): {"CB"}, (OCT, 9): {"VC"}, + (DEC, 4): {"NC"}, (DEC, 26): {"CT"}, } self._assertVariableDays(2017, province_days) @@ -674,6 +682,7 @@ def test_variable_holidays_2018(self): (SEP, 11): {"CT"}, (SEP, 15): {"CB"}, (OCT, 9): {"VC"}, + (DEC, 3): {"NC"}, (DEC, 26): {"CT"}, } self._assertVariableDays(2018, province_days) @@ -718,6 +727,7 @@ def test_variable_holidays_2019(self): (SEP, 9): {"AS", "EX"}, (SEP, 11): {"CT"}, (OCT, 9): {"VC"}, + (DEC, 3): {"NC"}, (DEC, 9): {"AN", "AR", "AS", "CB", "CL", "EX", "MD", "ML", "RI"}, (DEC, 26): {"CT", "IB"}, } @@ -763,6 +773,7 @@ def test_variable_holidays_2020(self): (SEP, 15): {"CB"}, (OCT, 9): {"VC"}, (NOV, 2): {"AN", "AR", "AS", "CL", "EX", "MD"}, + (DEC, 3): {"NC"}, (DEC, 7): { "AN", "AR", @@ -823,6 +834,7 @@ def test_variable_holidays_2021(self): (SEP, 11): {"CT"}, (SEP, 15): {"CB"}, (OCT, 9): {"VC"}, + (DEC, 3): {"NC"}, } self._assertVariableDays(2021, province_days) @@ -871,6 +883,7 @@ def test_variable_holidays_2022(self): (SEP, 6): {"PV"}, (SEP, 8): {"AS", "EX"}, (SEP, 15): {"CB"}, + (DEC, 3): {"NC"}, (DEC, 26): { "AN", "AR", @@ -935,6 +948,7 @@ def test_variable_holidays_2023(self): (SEP, 11): {"CT"}, (SEP, 15): {"CB"}, (OCT, 9): {"VC"}, + (DEC, 4): {"NC"}, (DEC, 26): {"CT"}, } self._assertVariableDays(2023, province_days) @@ -978,6 +992,7 @@ def test_variable_holidays_2024(self): (SEP, 9): {"AS"}, (SEP, 11): {"CT"}, (OCT, 9): {"VC"}, + (DEC, 3): {"NC"}, (DEC, 9): {"AN", "AR", "AS", "CL", "EX", "MC", "ML"}, (DEC, 26): {"CT"}, } @@ -1026,6 +1041,7 @@ def test_variable_holidays_2025(self): (SEP, 15): {"CB"}, (OCT, 9): {"VC"}, (OCT, 13): {"AN", "AR", "AS", "CL", "EX"}, + (DEC, 3): {"NC"}, (DEC, 26): {"CT", "IB"}, } self._assertVariableDays(2025, province_days) @@ -1063,6 +1079,7 @@ def test_l10n_default(self): ("2023-10-09", "Día de la Comunidad Valenciana"), ("2023-10-12", "Fiesta Nacional de España"), ("2023-11-01", "Todos los Santos"), + ("2023-12-04", "Lunes siguiente a San Francisco Javier"), ("2023-12-06", "Día de la Constitución Española"), ("2023-12-08", "Inmaculada Concepción"), ("2023-12-25", "Natividad del Señor"), @@ -1103,6 +1120,7 @@ def test_l10n_en_us(self): ("2023-10-09", "Valencian Community Day"), ("2023-10-12", "National Day"), ("2023-11-01", "All Saints' Day"), + ("2023-12-04", "Monday following Saint Francis Xavier's Day"), ("2023-12-06", "Constitution Day"), ("2023-12-08", "Immaculate Conception"), ("2023-12-25", "Christmas Day"), @@ -1143,6 +1161,7 @@ def test_l10n_uk(self): ("2023-10-09", "День Валенсії"), ("2023-10-12", "Національний день Іспанії"), ("2023-11-01", "День усіх святих"), + ("2023-12-04", "Понеділок після День Святого Франциска Ксаверія"), ("2023-12-06", "День Конституції Іспанії"), ("2023-12-08", "Непорочне зачаття Діви Марії"), ("2023-12-25", "Різдво Христове"), From 267e160489db645d649173719585a30326593bad Mon Sep 17 00:00:00 2001 From: Abheelash Mishra Date: Sat, 6 Sep 2025 07:13:43 +0530 Subject: [PATCH 12/34] Add Saint Helena, Ascension and Tristan da Cunha holidays (#2820) Co-authored-by: Arkadii Yakovets --- README.md | 9 +- holidays/countries/__init__.py | 5 + ...t_helena_ascension_and_tristan_da_cunha.py | 197 ++++++++++++ holidays/locale/en_GB/LC_MESSAGES/SH.po | 104 +++++++ holidays/locale/en_US/LC_MESSAGES/SH.po | 104 +++++++ holidays/registry.py | 5 + ...t_helena_ascension_and_tristan_da_cunha.py | 287 ++++++++++++++++++ 7 files changed, 710 insertions(+), 1 deletion(-) create mode 100644 holidays/countries/saint_helena_ascension_and_tristan_da_cunha.py create mode 100644 holidays/locale/en_GB/LC_MESSAGES/SH.po create mode 100644 holidays/locale/en_US/LC_MESSAGES/SH.po create mode 100644 tests/countries/test_saint_helena_ascension_and_tristan_da_cunha.py diff --git a/README.md b/README.md index 7b1b4231b..a1028f574 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ and detailed information. ## Available Countries -We currently support 240 country codes. The standard way to refer to a country is by using its [ISO +We currently support 241 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 @@ -1400,6 +1400,13 @@ any) in brackets, available languages and additional holiday categories. All cou +Saint Helena, Ascension and Tristan da Cunha +SH +Subdivisions: AC (Ascension), HL (Saint Helena), TA (Tristan da Cunha) +en_GB, en_US +GOVERNMENT + + Saint Kitts and Nevis KN diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py index 0e9e57d48..b7808f3da 100644 --- a/holidays/countries/__init__.py +++ b/holidays/countries/__init__.py @@ -196,6 +196,11 @@ from holidays.countries.russia import Russia, RU, RUS from holidays.countries.rwanda import Rwanda, RW, RWA from holidays.countries.saint_barthelemy import SaintBarthelemy, BL, BLM, HolidaysBL +from holidays.countries.saint_helena_ascension_and_tristan_da_cunha import ( + SaintHelenaAscensionAndTristanDaCunha, + SH, + SHN, +) from holidays.countries.saint_kitts_and_nevis import SaintKittsAndNevis, KN, KNA from holidays.countries.saint_lucia import SaintLucia, LC, LCA from holidays.countries.saint_martin import SaintMartin, MF, MAF, HolidaysMF diff --git a/holidays/countries/saint_helena_ascension_and_tristan_da_cunha.py b/holidays/countries/saint_helena_ascension_and_tristan_da_cunha.py new file mode 100644 index 000000000..04a71a3bb --- /dev/null +++ b/holidays/countries/saint_helena_ascension_and_tristan_da_cunha.py @@ -0,0 +1,197 @@ +# 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 (c) 2017-2023 +# ryanss (c) 2014-2017 +# Website: https://github.com/vacanza/holidays +# License: MIT (see LICENSE file) + +from gettext import gettext as tr + +from holidays.calendars.gregorian import JAN, FEB, APR, MAY, JUN, SEP +from holidays.constants import GOVERNMENT, PUBLIC +from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays +from holidays.observed_holiday_base import ( + ObservedHolidayBase, + SAT_TO_PREV_FRI, + SUN_TO_NEXT_MON, + SAT_SUN_TO_NEXT_MON, + SAT_SUN_TO_NEXT_MON_TUE, +) + + +class SaintHelenaAscensionAndTristanDaCunha( + ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays +): + """Saint Helena, Ascension and Tristan da Cunha holidays. + + References: + * + + Saint Helena: + * + * [Public Holidays Ordinance](https://web.archive.org/web/20231129081100/https://www.sainthelena.gov.sh/wp-content/uploads/2013/01/Public-Holidays-Ordinance.pdf) + * [2015](https://web.archive.org/web/20241219152350/https://www.sainthelena.gov.sh/wp-content/uploads/2012/08/Public-Holidays-2015.pdf) + * [2020](https://web.archive.org/web/20250831203105/https://www.sainthelena.gov.sh/wp-content/uploads/2019/11/Public-Holidays-2020.pdf) + * [2021](https://web.archive.org/web/20240626101426/https://www.sainthelena.gov.sh/wp-content/uploads/2020/08/200824_Public-Holidays-2021.pdf) + * [2022](https://web.archive.org/web/20230922215102/https://www.sainthelena.gov.sh/wp-content/uploads/2021/11/PUBLIC-HOLIDAYS-2022.pdf) + * [Saint Helena Day 2023](https://web.archive.org/web/20250519085755/https://www.sainthelena.gov.sh/wp-content/uploads/2022/09/EX-GAZ-100-Proclamation-St-Helena-Day-2023.pdf) + * [2024](https://web.archive.org/web/20250614201000/https://www.sainthelena.gov.sh/2023/news/public-and-government-holidays-2024/) + * [2025](https://web.archive.org/web/20241005191212/https://www.sainthelena.gov.sh/wp-content/uploads/2024/08/Public-Notice-Public-Holidays-2025.pdf) + * [2026](https://web.archive.org/web/20250831200128/https://www.sainthelena.gov.sh/wp-content/uploads/2025/08/Public-Notice-Public-Holidays-2026.pdf) + + Ascension: + * [Public Holidays Ordinance](https://web.archive.org/web/20240610184146/https://www.sainthelena.gov.sh/wp-content/uploads/2017/12/Public-Holidays-Asc-Ordinance.pdf) + + Tristan da Cunha: + * [Ratting Day](https://web.archive.org/web/20250826151056/https://www.tristandc.com/newsratting.php) + """ + + country = "SH" + default_language = "en_GB" + # %s (observed). + observed_label = tr("%s (observed)") + # Earliest year of holidays with an accessible online record. + start_year = 2015 + subdivisions = ( + "AC", # Ascension. + "HL", # Saint Helena. + "TA", # Tristan da Cunha. + ) + subdivisions_aliases = { + "Ascension": "AC", + "Saint Helena": "HL", + "Tristan da Cunha": "TA", + } + supported_categories = (GOVERNMENT, PUBLIC) + supported_languages = ("en_GB", "en_US") + + def __init__(self, *args, **kwargs): + ChristianHolidays.__init__(self) + InternationalHolidays.__init__(self) + StaticHolidays.__init__(self, cls=SaintHelenaAscensionAndTristanDaCunhaStaticHolidays) + kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_MON) + super().__init__(*args, **kwargs) + + def _populate_public_holidays(self): + # Good Friday. + self._add_good_friday(tr("Good Friday")) + + # Easter Monday. + self._add_easter_monday(tr("Easter Monday")) + + if self._year <= 2022: + # Queen's Birthday. + name = tr("Queen's Birthday") + if self._year <= 2019: + self._add_holiday_3rd_mon_of_jun(name) + else: + self._add_holiday_2nd_mon_of_jun(name) + else: + # King's Birthday. + name = tr("King's Birthday") + if self._year == 2023: + self._add_holiday_jun_19(name) + else: + self._add_holiday_1st_fri_from_nov_11(name) + + self._add_observed( + # Christmas Day. + self._add_christmas_day(tr("Christmas Day")), + rule=SAT_SUN_TO_NEXT_MON_TUE, + ) + + self._add_observed( + # Boxing Day. + self._add_christmas_day_two(tr("Boxing Day")), + rule=SAT_SUN_TO_NEXT_MON_TUE, + ) + + def _populate_subdiv_ac_public_holidays(self): + # Ascension Day. + self._add_ascension_thursday(tr("Ascension Day")) + + def _populate_subdiv_hl_public_holidays(self): + self._add_observed( + # Saint Helena Day. + self._add_holiday_may_21(tr("Saint Helena Day")), + rule=SAT_TO_PREV_FRI + SUN_TO_NEXT_MON, + ) + + def _populate_subdiv_ta_public_holidays(self): + # Ascension Day. + self._add_ascension_thursday(tr("Ascension Day")) + + ratting_day_dates = { + 2015: (MAY, 16), + 2016: (APR, 30), + 2017: (MAY, 26), + 2018: (JUN, 2), + 2019: (MAY, 24), + 2020: (APR, 25), + 2021: (APR, 9), + 2023: (JUN, 2), + 2025: (MAY, 30), + } + # Ratting Day. + name = tr("Ratting Day") + if dt := ratting_day_dates.get(self._year): + self._add_holiday(name, dt) + + # Anniversary Day. + self._add_holiday_aug_14(tr("Anniversary Day")) + + def _populate_government_holidays(self): + # New Year's Day. + self._add_observed(self._add_new_years_day(tr("New Year's Day"))) + + # Whit Monday. + self._add_whit_monday(tr("Whit Monday")) + + def _populate_subdiv_ac_government_holidays(self): + # August Bank Holiday. + self._add_holiday_last_mon_of_aug(tr("August Bank Holiday")) + + def _populate_subdiv_hl_government_holidays(self): + # August Bank Holiday. + self._add_holiday_last_mon_of_aug(tr("August Bank Holiday")) + + +class SH(SaintHelenaAscensionAndTristanDaCunha): + pass + + +class SHN(SaintHelenaAscensionAndTristanDaCunha): + pass + + +class SaintHelenaAscensionAndTristanDaCunhaStaticHolidays: + """Saint Helena, Ascension and Tristan da Cunha special holidays. + + References: + * + * [The Duke of Edinburgh's Visit](https://web.archive.org/web/20250719002906/https://www.sainthelena.gov.sh/2024/news/public-holiday-declared-to-mark-visit-of-his-royal-highness-the-duke-of-edinburgh-public-events-announced/) + * [Queen Elizabeth II's State Funeral](https://web.archive.org/web/20250513122736/https://www.sainthelena.gov.sh/wp-content/uploads/2022/09/EX-GAZ-94-Proclamation-Proclaiming-His-Majesty-Public-Holiday-HM-Queen-II-Funeral-STH-ASC.pdf) + * [Coronation of His Majesty King Charles III](https://web.archive.org/web/20250719085105/https://www.sainthelena.gov.sh/2023/news/governors-deputy-declares-public-holiday-to-mark-the-coronation-of-his-majesty-king-charles-iii/) + """ + + special_public_holidays = { + # Final Departure of R.M.S. St Helena. + 2018: (FEB, 9, tr("Final Departure of R.M.S. St Helena")), + 2022: ( + # Queen Elizabeth II's Platinum Jubilee. + (JUN, 3, tr("Queen Elizabeth II's Platinum Jubilee")), + # Queen Elizabeth II's State Funeral. + (SEP, 19, tr("Queen Elizabeth II's State Funeral")), + ), + 2023: ( + # The Duke of Edinburgh's Visit. + (JAN, 24, tr("The Duke of Edinburgh's Visit")), + # Coronation of His Majesty King Charles III. + (MAY, 8, tr("Coronation of His Majesty King Charles III")), + ), + } diff --git a/holidays/locale/en_GB/LC_MESSAGES/SH.po b/holidays/locale/en_GB/LC_MESSAGES/SH.po new file mode 100644 index 000000000..1d25c6c3c --- /dev/null +++ b/holidays/locale/en_GB/LC_MESSAGES/SH.po @@ -0,0 +1,104 @@ +# 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 (c) 2017-2023 +# ryanss (c) 2014-2017 +# Website: https://github.com/vacanza/holidays +# License: MIT (see LICENSE file) +# +# Saint Helena, Ascension and Tristan da Cunha holidays. +# +msgid "" +msgstr "" +"Project-Id-Version: Holidays 0.81\n" +"POT-Creation-Date: 2025-08-31 16:41+0000\n" +"PO-Revision-Date: 2025-08-31 16:41+0000\n" +"Last-Translator: Abheelash Mishra \n" +"Language-Team: Holidays Localization Team\n" +"Language: en_GB\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: en_GB\n" + +#. %s (observed). +#, c-format +msgid "%s (observed)" +msgstr "" + +#. Good Friday. +msgid "Good Friday" +msgstr "" + +#. Easter Monday. +msgid "Easter Monday" +msgstr "" + +#. Queen's Birthday. +msgid "Queen's Birthday" +msgstr "" + +#. King's Birthday. +msgid "King's Birthday" +msgstr "" + +#. Christmas Day. +msgid "Christmas Day" +msgstr "" + +#. Boxing Day. +msgid "Boxing Day" +msgstr "" + +#. Ascension Day. +msgid "Ascension Day" +msgstr "" + +#. Saint Helena Day. +msgid "Saint Helena Day" +msgstr "" + +#. Ratting Day. +msgid "Ratting Day" +msgstr "" + +#. Anniversary Day. +msgid "Anniversary Day" +msgstr "" + +#. New Year's Day. +msgid "New Year's Day" +msgstr "" + +#. Whit Monday. +msgid "Whit Monday" +msgstr "" + +#. August Bank Holiday. +msgid "August Bank Holiday" +msgstr "" + +#. Final Departure of R.M.S. St Helena. +msgid "Final Departure of R.M.S. St Helena" +msgstr "" + +#. Queen Elizabeth II's Platinum Jubilee. +msgid "Queen Elizabeth II's Platinum Jubilee" +msgstr "" + +#. Queen Elizabeth II's State Funeral. +msgid "Queen Elizabeth II's State Funeral" +msgstr "" + +#. The Duke of Edinburgh's Visit. +msgid "The Duke of Edinburgh's Visit" +msgstr "" + +#. Coronation of His Majesty King Charles III. +msgid "Coronation of His Majesty King Charles III" +msgstr "" diff --git a/holidays/locale/en_US/LC_MESSAGES/SH.po b/holidays/locale/en_US/LC_MESSAGES/SH.po new file mode 100644 index 000000000..927df9786 --- /dev/null +++ b/holidays/locale/en_US/LC_MESSAGES/SH.po @@ -0,0 +1,104 @@ +# 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 (c) 2017-2023 +# ryanss (c) 2014-2017 +# Website: https://github.com/vacanza/holidays +# License: MIT (see LICENSE file) +# +# Saint Helena, Ascension and Tristan da Cunha holidays en_US localization. +# +msgid "" +msgstr "" +"Project-Id-Version: Holidays 0.81\n" +"POT-Creation-Date: 2025-08-31 16:41+0000\n" +"PO-Revision-Date: 2025-08-31 16:41+0000\n" +"Last-Translator: Abheelash Mishra \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: en_GB\n" + +#. %s (observed). +#, c-format +msgid "%s (observed)" +msgstr "%s (observed)" + +#. Good Friday. +msgid "Good Friday" +msgstr "Good Friday" + +#. Easter Monday. +msgid "Easter Monday" +msgstr "Easter Monday" + +#. Queen's Birthday. +msgid "Queen's Birthday" +msgstr "Queen's Birthday" + +#. King's Birthday. +msgid "King's Birthday" +msgstr "King's Birthday" + +#. Christmas Day. +msgid "Christmas Day" +msgstr "Christmas Day" + +#. Boxing Day. +msgid "Boxing Day" +msgstr "Boxing Day" + +#. Ascension Day. +msgid "Ascension Day" +msgstr "Ascension Day" + +#. Saint Helena Day. +msgid "Saint Helena Day" +msgstr "Saint Helena Day" + +#. Ratting Day. +msgid "Ratting Day" +msgstr "Ratting Day" + +#. Anniversary Day. +msgid "Anniversary Day" +msgstr "Anniversary Day" + +#. New Year's Day. +msgid "New Year's Day" +msgstr "New Year's Day" + +#. Whit Monday. +msgid "Whit Monday" +msgstr "Whit Monday" + +#. August Bank Holiday. +msgid "August Bank Holiday" +msgstr "August Bank Holiday" + +#. Final Departure of R.M.S. St Helena. +msgid "Final Departure of R.M.S. St Helena" +msgstr "Final Departure of R.M.S. St Helena" + +#. Queen Elizabeth II's Platinum Jubilee. +msgid "Queen Elizabeth II's Platinum Jubilee" +msgstr "Queen Elizabeth II's Platinum Jubilee" + +#. Queen Elizabeth II's State Funeral. +msgid "Queen Elizabeth II's State Funeral" +msgstr "Queen Elizabeth II's State Funeral" + +#. The Duke of Edinburgh's Visit. +msgid "The Duke of Edinburgh's Visit" +msgstr "The Duke of Edinburgh's Visit" + +#. Coronation of His Majesty King Charles III. +msgid "Coronation of His Majesty King Charles III" +msgstr "Coronation of His Majesty King Charles III" diff --git a/holidays/registry.py b/holidays/registry.py index 30f4cec77..2ecbd5d3e 100644 --- a/holidays/registry.py +++ b/holidays/registry.py @@ -199,6 +199,11 @@ "russia": ("Russia", "RU", "RUS"), "rwanda": ("Rwanda", "RW", "RWA"), "saint_barthelemy": ("SaintBarthelemy", "BL", "BLM", "HolidaysBL"), + "saint_helena_ascension_and_tristan_da_cunha": ( + "SaintHelenaAscensionAndTristanDaCunha", + "SH", + "SHN", + ), "saint_kitts_and_nevis": ("SaintKittsAndNevis", "KN", "KNA"), "saint_lucia": ("SaintLucia", "LC", "LCA"), "saint_martin": ("SaintMartin", "MF", "MAF", "HolidaysMF"), diff --git a/tests/countries/test_saint_helena_ascension_and_tristan_da_cunha.py b/tests/countries/test_saint_helena_ascension_and_tristan_da_cunha.py new file mode 100644 index 000000000..c1f77cecc --- /dev/null +++ b/tests/countries/test_saint_helena_ascension_and_tristan_da_cunha.py @@ -0,0 +1,287 @@ +# 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 (c) 2017-2023 +# ryanss (c) 2014-2017 +# Website: https://github.com/vacanza/holidays +# License: MIT (see LICENSE file) + +from unittest import TestCase + +from holidays.constants import GOVERNMENT +from holidays.countries.saint_helena_ascension_and_tristan_da_cunha import ( + SaintHelenaAscensionAndTristanDaCunha, + SH, + SHN, +) +from tests.common import CommonCountryTests + + +class TestSaintHelenaAscensionAndTristanDaCunha(CommonCountryTests, TestCase): + @classmethod + def setUpClass(cls): + years = range(2015, 2050) + super().setUpClass( + SaintHelenaAscensionAndTristanDaCunha, years=years, years_non_observed=years + ) + cls.government_holidays = SaintHelenaAscensionAndTristanDaCunha( + categories=GOVERNMENT, years=years + ) + cls.government_holidays_non_observed = SaintHelenaAscensionAndTristanDaCunha( + categories=GOVERNMENT, observed=False, years=years + ) + cls.subdiv_holidays = { + subdiv: SaintHelenaAscensionAndTristanDaCunha(subdiv=subdiv, years=years) + for subdiv in SaintHelenaAscensionAndTristanDaCunha.subdivisions + } + cls.subdiv_holidays_non_observed = { + subdiv: SaintHelenaAscensionAndTristanDaCunha( + subdiv=subdiv, observed=False, years=years + ) + for subdiv in SaintHelenaAscensionAndTristanDaCunha.subdivisions + } + cls.subdiv_government_holidays = { + subdiv: SaintHelenaAscensionAndTristanDaCunha( + subdiv=subdiv, categories=GOVERNMENT, years=years + ) + for subdiv in SaintHelenaAscensionAndTristanDaCunha.subdivisions + } + + def test_country_aliases(self): + self.assertAliases(SaintHelenaAscensionAndTristanDaCunha, SH, SHN) + + def test_no_holidays(self): + self.assertNoHolidays(SaintHelenaAscensionAndTristanDaCunha(years=2014)) + + def test_special_holidays(self): + for dt, name in ( + ("2018-02-09", "Final Departure of R.M.S. St Helena"), + ("2022-06-03", "Queen Elizabeth II's Platinum Jubilee"), + ("2022-09-19", "Queen Elizabeth II's State Funeral"), + ("2023-01-24", "The Duke of Edinburgh's Visit"), + ("2023-05-08", "Coronation of His Majesty King Charles III"), + ): + self.assertHolidayName(name, dt) + + def test_new_years_day(self): + name = "New Year's Day" + self.assertNoHolidayName(name) + self.assertHolidayName( + name, self.government_holidays, (f"{year}-01-01" for year in range(2015, 2050)) + ) + obs_dt = ( + "2017-01-02", + "2022-01-03", + "2023-01-02", + ) + self.assertHolidayName(f"{name} (observed)", self.government_holidays, obs_dt) + self.assertNoNonObservedHoliday(self.government_holidays_non_observed, obs_dt) + + def test_good_friday(self): + name = "Good Friday" + self.assertHolidayName( + name, + "2020-04-10", + "2021-04-02", + "2022-04-15", + "2023-04-07", + "2024-03-29", + "2025-04-18", + ) + self.assertHolidayName(name, range(2015, 2050)) + + def test_easter_monday(self): + name = "Easter Monday" + 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(2015, 2050)) + + def test_queens_birthday(self): + name = "Queen's Birthday" + self.assertHolidayName( + name, + "2018-06-18", + "2019-06-17", + "2020-06-08", + "2021-06-14", + "2022-06-13", + ) + self.assertHolidayName(name, range(2015, 2023)) + self.assertNoHolidayName(name, range(2023, 2050)) + + def test_kings_birthday(self): + name = "King's Birthday" + self.assertHolidayName( + name, + "2023-06-19", + "2024-11-15", + "2025-11-14", + ) + self.assertHolidayName(name, range(2023, 2050)) + self.assertNoHolidayName(name, range(2015, 2023)) + + def test_christmas_day(self): + name = "Christmas Day" + self.assertHolidayName(name, (f"{year}-12-25" for year in range(2015, 2050))) + obs_dt = ( + "2016-12-27", + "2021-12-27", + "2022-12-27", + ) + self.assertHolidayName(f"{name} (observed)", obs_dt) + self.assertNoNonObservedHoliday(obs_dt) + + def test_boxing_day(self): + name = "Boxing Day" + self.assertHolidayName(name, (f"{year}-12-26" for year in range(2015, 2050))) + obs_dt = ( + "2015-12-28", + "2020-12-28", + "2021-12-28", + ) + self.assertHolidayName(f"{name} (observed)", obs_dt) + self.assertNoNonObservedHoliday(obs_dt) + + def test_whit_monday(self): + name = "Whit Monday" + self.assertNoHolidayName(name) + self.assertHolidayName( + name, + self.government_holidays, + "2020-06-01", + "2021-05-24", + "2022-06-06", + "2023-05-29", + "2024-05-20", + "2025-06-09", + ) + self.assertHolidayName(name, self.government_holidays, range(2015, 2050)) + + def test_ascension_day(self): + name = "Ascension Day" + self.assertNoHolidayName(name) + dt = ( + "2020-05-21", + "2021-05-13", + "2022-05-26", + "2023-05-18", + "2024-05-09", + "2025-05-29", + ) + for subdiv, holidays in self.subdiv_holidays.items(): + if subdiv in {"AC", "TA"}: + self.assertHolidayName(name, holidays, dt) + else: + self.assertNoHolidayName(name, holidays) + + def test_saint_helena_day(self): + name = "Saint Helena Day" + self.assertNoHolidayName(name) + obs_dt = ( + "2016-05-20", + "2017-05-22", + "2022-05-20", + "2023-05-22", + ) + for subdiv, holidays in self.subdiv_holidays.items(): + if subdiv == "HL": + self.assertHolidayName( + name, holidays, (f"{year}-05-21" for year in range(2015, 2050)) + ) + self.assertHolidayName(f"{name} (observed)", holidays, obs_dt) + self.assertNoNonObservedHoliday(self.subdiv_holidays_non_observed[subdiv], obs_dt) + else: + self.assertNoHolidayName(name, holidays) + + def test_ratting_day(self): + name = "Ratting Day" + self.assertNoHolidayName(name) + dt = ( + "2015-05-16", + "2016-04-30", + "2017-05-26", + "2018-06-02", + "2019-05-24", + "2020-04-25", + "2021-04-09", + "2023-06-02", + "2025-05-30", + ) + for subdiv, holidays in self.subdiv_holidays.items(): + if subdiv == "TA": + self.assertHolidayName(name, holidays, dt) + else: + self.assertNoHolidayName(name, holidays) + + def test_anniversary_day(self): + name = "Anniversary Day" + self.assertNoHolidayName(name) + for subdiv, holidays in self.subdiv_holidays.items(): + if subdiv == "TA": + self.assertHolidayName( + name, holidays, (f"{year}-08-14" for year in range(2015, 2050)) + ) + else: + self.assertNoHolidayName(name, holidays) + + def test_august_bank_holiday(self): + name = "August Bank Holiday" + self.assertNoHolidayName(name) + dt = ( + "2020-08-31", + "2021-08-30", + "2022-08-29", + "2023-08-28", + "2024-08-26", + "2025-08-25", + ) + for subdiv, holidays in self.subdiv_government_holidays.items(): + if subdiv in {"AC", "HL"}: + self.assertHolidayName(name, holidays, dt) + self.assertHolidayName(name, holidays, range(2015, 2050)) + else: + self.assertNoHolidayName(name, holidays) + + def test_l10n_default(self): + self.assertLocalizedHolidays( + ("2025-01-01", "New Year's Day"), + ("2025-04-18", "Good Friday"), + ("2025-04-21", "Easter Monday"), + ("2025-05-21", "Saint Helena Day"), + ("2025-05-29", "Ascension Day"), + ("2025-05-30", "Ratting Day"), + ("2025-06-09", "Whit Monday"), + ("2025-08-14", "Anniversary Day"), + ("2025-08-25", "August Bank Holiday"), + ("2025-11-14", "King's Birthday"), + ("2025-12-25", "Christmas Day"), + ("2025-12-26", "Boxing Day"), + ) + + def test_l10n_en_us(self): + self.assertLocalizedHolidays( + "en_US", + ("2025-01-01", "New Year's Day"), + ("2025-04-18", "Good Friday"), + ("2025-04-21", "Easter Monday"), + ("2025-05-21", "Saint Helena Day"), + ("2025-05-29", "Ascension Day"), + ("2025-05-30", "Ratting Day"), + ("2025-06-09", "Whit Monday"), + ("2025-08-14", "Anniversary Day"), + ("2025-08-25", "August Bank Holiday"), + ("2025-11-14", "King's Birthday"), + ("2025-12-25", "Christmas Day"), + ("2025-12-26", "Boxing Day"), + ) From a94bcfa5562af79bfafa3985696c97c65322c6ff Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 5 Sep 2025 19:09:40 -0700 Subject: [PATCH 13/34] chore: Update snapshots (#2897) Co-authored-by: github-merge-queue[bot] <118344674+github-merge-queue[bot]@users.noreply.github.com> --- snapshots/countries/SH_AC.json | 363 ++++++++++++++++++++++++++++ snapshots/countries/SH_COMMON.json | 291 ++++++++++++++++++++++ snapshots/countries/SH_HL.json | 371 ++++++++++++++++++++++++++++ snapshots/countries/SH_TA.json | 372 +++++++++++++++++++++++++++++ 4 files changed, 1397 insertions(+) create mode 100644 snapshots/countries/SH_AC.json create mode 100644 snapshots/countries/SH_COMMON.json create mode 100644 snapshots/countries/SH_HL.json create mode 100644 snapshots/countries/SH_TA.json diff --git a/snapshots/countries/SH_AC.json b/snapshots/countries/SH_AC.json new file mode 100644 index 000000000..7fbb9645b --- /dev/null +++ b/snapshots/countries/SH_AC.json @@ -0,0 +1,363 @@ +{ + "2015-01-01": "New Year's Day", + "2015-04-03": "Good Friday", + "2015-04-06": "Easter Monday", + "2015-05-14": "Ascension Day", + "2015-05-25": "Whit Monday", + "2015-06-15": "Queen's Birthday", + "2015-08-31": "August Bank Holiday", + "2015-12-25": "Christmas Day", + "2015-12-26": "Boxing Day", + "2015-12-28": "Boxing Day (observed)", + "2016-01-01": "New Year's Day", + "2016-03-25": "Good Friday", + "2016-03-28": "Easter Monday", + "2016-05-05": "Ascension Day", + "2016-05-16": "Whit Monday", + "2016-06-20": "Queen's Birthday", + "2016-08-29": "August Bank Holiday", + "2016-12-25": "Christmas Day", + "2016-12-26": "Boxing Day", + "2016-12-27": "Christmas Day (observed)", + "2017-01-01": "New Year's Day", + "2017-01-02": "New Year's Day (observed)", + "2017-04-14": "Good Friday", + "2017-04-17": "Easter Monday", + "2017-05-25": "Ascension Day", + "2017-06-05": "Whit Monday", + "2017-06-19": "Queen's Birthday", + "2017-08-28": "August Bank Holiday", + "2017-12-25": "Christmas Day", + "2017-12-26": "Boxing Day", + "2018-01-01": "New Year's Day", + "2018-02-09": "Final Departure of R.M.S. St Helena", + "2018-03-30": "Good Friday", + "2018-04-02": "Easter Monday", + "2018-05-10": "Ascension Day", + "2018-05-21": "Whit Monday", + "2018-06-18": "Queen's Birthday", + "2018-08-27": "August Bank Holiday", + "2018-12-25": "Christmas Day", + "2018-12-26": "Boxing Day", + "2019-01-01": "New Year's Day", + "2019-04-19": "Good Friday", + "2019-04-22": "Easter Monday", + "2019-05-30": "Ascension Day", + "2019-06-10": "Whit Monday", + "2019-06-17": "Queen's Birthday", + "2019-08-26": "August Bank Holiday", + "2019-12-25": "Christmas Day", + "2019-12-26": "Boxing Day", + "2020-01-01": "New Year's Day", + "2020-04-10": "Good Friday", + "2020-04-13": "Easter Monday", + "2020-05-21": "Ascension Day", + "2020-06-01": "Whit Monday", + "2020-06-08": "Queen's Birthday", + "2020-08-31": "August Bank Holiday", + "2020-12-25": "Christmas Day", + "2020-12-26": "Boxing Day", + "2020-12-28": "Boxing Day (observed)", + "2021-01-01": "New Year's Day", + "2021-04-02": "Good Friday", + "2021-04-05": "Easter Monday", + "2021-05-13": "Ascension Day", + "2021-05-24": "Whit Monday", + "2021-06-14": "Queen's Birthday", + "2021-08-30": "August Bank Holiday", + "2021-12-25": "Christmas Day", + "2021-12-26": "Boxing Day", + "2021-12-27": "Christmas Day (observed)", + "2021-12-28": "Boxing Day (observed)", + "2022-01-01": "New Year's Day", + "2022-01-03": "New Year's Day (observed)", + "2022-04-15": "Good Friday", + "2022-04-18": "Easter Monday", + "2022-05-26": "Ascension Day", + "2022-06-03": "Queen Elizabeth II's Platinum Jubilee", + "2022-06-06": "Whit Monday", + "2022-06-13": "Queen's Birthday", + "2022-08-29": "August Bank Holiday", + "2022-09-19": "Queen Elizabeth II's State Funeral", + "2022-12-25": "Christmas Day", + "2022-12-26": "Boxing Day", + "2022-12-27": "Christmas Day (observed)", + "2023-01-01": "New Year's Day", + "2023-01-02": "New Year's Day (observed)", + "2023-01-24": "The Duke of Edinburgh's Visit", + "2023-04-07": "Good Friday", + "2023-04-10": "Easter Monday", + "2023-05-08": "Coronation of His Majesty King Charles III", + "2023-05-18": "Ascension Day", + "2023-05-29": "Whit Monday", + "2023-06-19": "King's Birthday", + "2023-08-28": "August Bank Holiday", + "2023-12-25": "Christmas Day", + "2023-12-26": "Boxing Day", + "2024-01-01": "New Year's Day", + "2024-03-29": "Good Friday", + "2024-04-01": "Easter Monday", + "2024-05-09": "Ascension Day", + "2024-05-20": "Whit Monday", + "2024-08-26": "August Bank Holiday", + "2024-11-15": "King's Birthday", + "2024-12-25": "Christmas Day", + "2024-12-26": "Boxing Day", + "2025-01-01": "New Year's Day", + "2025-04-18": "Good Friday", + "2025-04-21": "Easter Monday", + "2025-05-29": "Ascension Day", + "2025-06-09": "Whit Monday", + "2025-08-25": "August Bank Holiday", + "2025-11-14": "King's Birthday", + "2025-12-25": "Christmas Day", + "2025-12-26": "Boxing Day", + "2026-01-01": "New Year's Day", + "2026-04-03": "Good Friday", + "2026-04-06": "Easter Monday", + "2026-05-14": "Ascension Day", + "2026-05-25": "Whit Monday", + "2026-08-31": "August Bank Holiday", + "2026-11-13": "King's Birthday", + "2026-12-25": "Christmas Day", + "2026-12-26": "Boxing Day", + "2026-12-28": "Boxing Day (observed)", + "2027-01-01": "New Year's Day", + "2027-03-26": "Good Friday", + "2027-03-29": "Easter Monday", + "2027-05-06": "Ascension Day", + "2027-05-17": "Whit Monday", + "2027-08-30": "August Bank Holiday", + "2027-11-12": "King's Birthday", + "2027-12-25": "Christmas Day", + "2027-12-26": "Boxing Day", + "2027-12-27": "Christmas Day (observed)", + "2027-12-28": "Boxing Day (observed)", + "2028-01-01": "New Year's Day", + "2028-01-03": "New Year's Day (observed)", + "2028-04-14": "Good Friday", + "2028-04-17": "Easter Monday", + "2028-05-25": "Ascension Day", + "2028-06-05": "Whit Monday", + "2028-08-28": "August Bank Holiday", + "2028-11-17": "King's Birthday", + "2028-12-25": "Christmas Day", + "2028-12-26": "Boxing Day", + "2029-01-01": "New Year's Day", + "2029-03-30": "Good Friday", + "2029-04-02": "Easter Monday", + "2029-05-10": "Ascension Day", + "2029-05-21": "Whit Monday", + "2029-08-27": "August Bank Holiday", + "2029-11-16": "King's Birthday", + "2029-12-25": "Christmas Day", + "2029-12-26": "Boxing Day", + "2030-01-01": "New Year's Day", + "2030-04-19": "Good Friday", + "2030-04-22": "Easter Monday", + "2030-05-30": "Ascension Day", + "2030-06-10": "Whit Monday", + "2030-08-26": "August Bank Holiday", + "2030-11-15": "King's Birthday", + "2030-12-25": "Christmas Day", + "2030-12-26": "Boxing Day", + "2031-01-01": "New Year's Day", + "2031-04-11": "Good Friday", + "2031-04-14": "Easter Monday", + "2031-05-22": "Ascension Day", + "2031-06-02": "Whit Monday", + "2031-08-25": "August Bank Holiday", + "2031-11-14": "King's Birthday", + "2031-12-25": "Christmas Day", + "2031-12-26": "Boxing Day", + "2032-01-01": "New Year's Day", + "2032-03-26": "Good Friday", + "2032-03-29": "Easter Monday", + "2032-05-06": "Ascension Day", + "2032-05-17": "Whit Monday", + "2032-08-30": "August Bank Holiday", + "2032-11-12": "King's Birthday", + "2032-12-25": "Christmas Day", + "2032-12-26": "Boxing Day", + "2032-12-27": "Christmas Day (observed)", + "2032-12-28": "Boxing Day (observed)", + "2033-01-01": "New Year's Day", + "2033-01-03": "New Year's Day (observed)", + "2033-04-15": "Good Friday", + "2033-04-18": "Easter Monday", + "2033-05-26": "Ascension Day", + "2033-06-06": "Whit Monday", + "2033-08-29": "August Bank Holiday", + "2033-11-11": "King's Birthday", + "2033-12-25": "Christmas Day", + "2033-12-26": "Boxing Day", + "2033-12-27": "Christmas Day (observed)", + "2034-01-01": "New Year's Day", + "2034-01-02": "New Year's Day (observed)", + "2034-04-07": "Good Friday", + "2034-04-10": "Easter Monday", + "2034-05-18": "Ascension Day", + "2034-05-29": "Whit Monday", + "2034-08-28": "August Bank Holiday", + "2034-11-17": "King's Birthday", + "2034-12-25": "Christmas Day", + "2034-12-26": "Boxing Day", + "2035-01-01": "New Year's Day", + "2035-03-23": "Good Friday", + "2035-03-26": "Easter Monday", + "2035-05-03": "Ascension Day", + "2035-05-14": "Whit Monday", + "2035-08-27": "August Bank Holiday", + "2035-11-16": "King's Birthday", + "2035-12-25": "Christmas Day", + "2035-12-26": "Boxing Day", + "2036-01-01": "New Year's Day", + "2036-04-11": "Good Friday", + "2036-04-14": "Easter Monday", + "2036-05-22": "Ascension Day", + "2036-06-02": "Whit Monday", + "2036-08-25": "August Bank Holiday", + "2036-11-14": "King's Birthday", + "2036-12-25": "Christmas Day", + "2036-12-26": "Boxing Day", + "2037-01-01": "New Year's Day", + "2037-04-03": "Good Friday", + "2037-04-06": "Easter Monday", + "2037-05-14": "Ascension Day", + "2037-05-25": "Whit Monday", + "2037-08-31": "August Bank Holiday", + "2037-11-13": "King's Birthday", + "2037-12-25": "Christmas Day", + "2037-12-26": "Boxing Day", + "2037-12-28": "Boxing Day (observed)", + "2038-01-01": "New Year's Day", + "2038-04-23": "Good Friday", + "2038-04-26": "Easter Monday", + "2038-06-03": "Ascension Day", + "2038-06-14": "Whit Monday", + "2038-08-30": "August Bank Holiday", + "2038-11-12": "King's Birthday", + "2038-12-25": "Christmas Day", + "2038-12-26": "Boxing Day", + "2038-12-27": "Christmas Day (observed)", + "2038-12-28": "Boxing Day (observed)", + "2039-01-01": "New Year's Day", + "2039-01-03": "New Year's Day (observed)", + "2039-04-08": "Good Friday", + "2039-04-11": "Easter Monday", + "2039-05-19": "Ascension Day", + "2039-05-30": "Whit Monday", + "2039-08-29": "August Bank Holiday", + "2039-11-11": "King's Birthday", + "2039-12-25": "Christmas Day", + "2039-12-26": "Boxing Day", + "2039-12-27": "Christmas Day (observed)", + "2040-01-01": "New Year's Day", + "2040-01-02": "New Year's Day (observed)", + "2040-03-30": "Good Friday", + "2040-04-02": "Easter Monday", + "2040-05-10": "Ascension Day", + "2040-05-21": "Whit Monday", + "2040-08-27": "August Bank Holiday", + "2040-11-16": "King's Birthday", + "2040-12-25": "Christmas Day", + "2040-12-26": "Boxing Day", + "2041-01-01": "New Year's Day", + "2041-04-19": "Good Friday", + "2041-04-22": "Easter Monday", + "2041-05-30": "Ascension Day", + "2041-06-10": "Whit Monday", + "2041-08-26": "August Bank Holiday", + "2041-11-15": "King's Birthday", + "2041-12-25": "Christmas Day", + "2041-12-26": "Boxing Day", + "2042-01-01": "New Year's Day", + "2042-04-04": "Good Friday", + "2042-04-07": "Easter Monday", + "2042-05-15": "Ascension Day", + "2042-05-26": "Whit Monday", + "2042-08-25": "August Bank Holiday", + "2042-11-14": "King's Birthday", + "2042-12-25": "Christmas Day", + "2042-12-26": "Boxing Day", + "2043-01-01": "New Year's Day", + "2043-03-27": "Good Friday", + "2043-03-30": "Easter Monday", + "2043-05-07": "Ascension Day", + "2043-05-18": "Whit Monday", + "2043-08-31": "August Bank Holiday", + "2043-11-13": "King's Birthday", + "2043-12-25": "Christmas Day", + "2043-12-26": "Boxing Day", + "2043-12-28": "Boxing Day (observed)", + "2044-01-01": "New Year's Day", + "2044-04-15": "Good Friday", + "2044-04-18": "Easter Monday", + "2044-05-26": "Ascension Day", + "2044-06-06": "Whit Monday", + "2044-08-29": "August Bank Holiday", + "2044-11-11": "King's Birthday", + "2044-12-25": "Christmas Day", + "2044-12-26": "Boxing Day", + "2044-12-27": "Christmas Day (observed)", + "2045-01-01": "New Year's Day", + "2045-01-02": "New Year's Day (observed)", + "2045-04-07": "Good Friday", + "2045-04-10": "Easter Monday", + "2045-05-18": "Ascension Day", + "2045-05-29": "Whit Monday", + "2045-08-28": "August Bank Holiday", + "2045-11-17": "King's Birthday", + "2045-12-25": "Christmas Day", + "2045-12-26": "Boxing Day", + "2046-01-01": "New Year's Day", + "2046-03-23": "Good Friday", + "2046-03-26": "Easter Monday", + "2046-05-03": "Ascension Day", + "2046-05-14": "Whit Monday", + "2046-08-27": "August Bank Holiday", + "2046-11-16": "King's Birthday", + "2046-12-25": "Christmas Day", + "2046-12-26": "Boxing Day", + "2047-01-01": "New Year's Day", + "2047-04-12": "Good Friday", + "2047-04-15": "Easter Monday", + "2047-05-23": "Ascension Day", + "2047-06-03": "Whit Monday", + "2047-08-26": "August Bank Holiday", + "2047-11-15": "King's Birthday", + "2047-12-25": "Christmas Day", + "2047-12-26": "Boxing Day", + "2048-01-01": "New Year's Day", + "2048-04-03": "Good Friday", + "2048-04-06": "Easter Monday", + "2048-05-14": "Ascension Day", + "2048-05-25": "Whit Monday", + "2048-08-31": "August Bank Holiday", + "2048-11-13": "King's Birthday", + "2048-12-25": "Christmas Day", + "2048-12-26": "Boxing Day", + "2048-12-28": "Boxing Day (observed)", + "2049-01-01": "New Year's Day", + "2049-04-16": "Good Friday", + "2049-04-19": "Easter Monday", + "2049-05-27": "Ascension Day", + "2049-06-07": "Whit Monday", + "2049-08-30": "August Bank Holiday", + "2049-11-12": "King's Birthday", + "2049-12-25": "Christmas Day", + "2049-12-26": "Boxing Day", + "2049-12-27": "Christmas Day (observed)", + "2049-12-28": "Boxing Day (observed)", + "2050-01-01": "New Year's Day", + "2050-01-03": "New Year's Day (observed)", + "2050-04-08": "Good Friday", + "2050-04-11": "Easter Monday", + "2050-05-19": "Ascension Day", + "2050-05-30": "Whit Monday", + "2050-08-29": "August Bank Holiday", + "2050-11-11": "King's Birthday", + "2050-12-25": "Christmas Day", + "2050-12-26": "Boxing Day", + "2050-12-27": "Christmas Day (observed)" +} diff --git a/snapshots/countries/SH_COMMON.json b/snapshots/countries/SH_COMMON.json new file mode 100644 index 000000000..8b1d6704a --- /dev/null +++ b/snapshots/countries/SH_COMMON.json @@ -0,0 +1,291 @@ +{ + "2015-01-01": "New Year's Day", + "2015-04-03": "Good Friday", + "2015-04-06": "Easter Monday", + "2015-05-25": "Whit Monday", + "2015-06-15": "Queen's Birthday", + "2015-12-25": "Christmas Day", + "2015-12-26": "Boxing Day", + "2015-12-28": "Boxing Day (observed)", + "2016-01-01": "New Year's Day", + "2016-03-25": "Good Friday", + "2016-03-28": "Easter Monday", + "2016-05-16": "Whit Monday", + "2016-06-20": "Queen's Birthday", + "2016-12-25": "Christmas Day", + "2016-12-26": "Boxing Day", + "2016-12-27": "Christmas Day (observed)", + "2017-01-01": "New Year's Day", + "2017-01-02": "New Year's Day (observed)", + "2017-04-14": "Good Friday", + "2017-04-17": "Easter Monday", + "2017-06-05": "Whit Monday", + "2017-06-19": "Queen's Birthday", + "2017-12-25": "Christmas Day", + "2017-12-26": "Boxing Day", + "2018-01-01": "New Year's Day", + "2018-02-09": "Final Departure of R.M.S. St Helena", + "2018-03-30": "Good Friday", + "2018-04-02": "Easter Monday", + "2018-05-21": "Whit Monday", + "2018-06-18": "Queen's Birthday", + "2018-12-25": "Christmas Day", + "2018-12-26": "Boxing Day", + "2019-01-01": "New Year's Day", + "2019-04-19": "Good Friday", + "2019-04-22": "Easter Monday", + "2019-06-10": "Whit Monday", + "2019-06-17": "Queen's Birthday", + "2019-12-25": "Christmas Day", + "2019-12-26": "Boxing Day", + "2020-01-01": "New Year's Day", + "2020-04-10": "Good Friday", + "2020-04-13": "Easter Monday", + "2020-06-01": "Whit Monday", + "2020-06-08": "Queen's Birthday", + "2020-12-25": "Christmas Day", + "2020-12-26": "Boxing Day", + "2020-12-28": "Boxing Day (observed)", + "2021-01-01": "New Year's Day", + "2021-04-02": "Good Friday", + "2021-04-05": "Easter Monday", + "2021-05-24": "Whit Monday", + "2021-06-14": "Queen's Birthday", + "2021-12-25": "Christmas Day", + "2021-12-26": "Boxing Day", + "2021-12-27": "Christmas Day (observed)", + "2021-12-28": "Boxing Day (observed)", + "2022-01-01": "New Year's Day", + "2022-01-03": "New Year's Day (observed)", + "2022-04-15": "Good Friday", + "2022-04-18": "Easter Monday", + "2022-06-03": "Queen Elizabeth II's Platinum Jubilee", + "2022-06-06": "Whit Monday", + "2022-06-13": "Queen's Birthday", + "2022-09-19": "Queen Elizabeth II's State Funeral", + "2022-12-25": "Christmas Day", + "2022-12-26": "Boxing Day", + "2022-12-27": "Christmas Day (observed)", + "2023-01-01": "New Year's Day", + "2023-01-02": "New Year's Day (observed)", + "2023-01-24": "The Duke of Edinburgh's Visit", + "2023-04-07": "Good Friday", + "2023-04-10": "Easter Monday", + "2023-05-08": "Coronation of His Majesty King Charles III", + "2023-05-29": "Whit Monday", + "2023-06-19": "King's Birthday", + "2023-12-25": "Christmas Day", + "2023-12-26": "Boxing Day", + "2024-01-01": "New Year's Day", + "2024-03-29": "Good Friday", + "2024-04-01": "Easter Monday", + "2024-05-20": "Whit Monday", + "2024-11-15": "King's Birthday", + "2024-12-25": "Christmas Day", + "2024-12-26": "Boxing Day", + "2025-01-01": "New Year's Day", + "2025-04-18": "Good Friday", + "2025-04-21": "Easter Monday", + "2025-06-09": "Whit Monday", + "2025-11-14": "King's Birthday", + "2025-12-25": "Christmas Day", + "2025-12-26": "Boxing Day", + "2026-01-01": "New Year's Day", + "2026-04-03": "Good Friday", + "2026-04-06": "Easter Monday", + "2026-05-25": "Whit Monday", + "2026-11-13": "King's Birthday", + "2026-12-25": "Christmas Day", + "2026-12-26": "Boxing Day", + "2026-12-28": "Boxing Day (observed)", + "2027-01-01": "New Year's Day", + "2027-03-26": "Good Friday", + "2027-03-29": "Easter Monday", + "2027-05-17": "Whit Monday", + "2027-11-12": "King's Birthday", + "2027-12-25": "Christmas Day", + "2027-12-26": "Boxing Day", + "2027-12-27": "Christmas Day (observed)", + "2027-12-28": "Boxing Day (observed)", + "2028-01-01": "New Year's Day", + "2028-01-03": "New Year's Day (observed)", + "2028-04-14": "Good Friday", + "2028-04-17": "Easter Monday", + "2028-06-05": "Whit Monday", + "2028-11-17": "King's Birthday", + "2028-12-25": "Christmas Day", + "2028-12-26": "Boxing Day", + "2029-01-01": "New Year's Day", + "2029-03-30": "Good Friday", + "2029-04-02": "Easter Monday", + "2029-05-21": "Whit Monday", + "2029-11-16": "King's Birthday", + "2029-12-25": "Christmas Day", + "2029-12-26": "Boxing Day", + "2030-01-01": "New Year's Day", + "2030-04-19": "Good Friday", + "2030-04-22": "Easter Monday", + "2030-06-10": "Whit Monday", + "2030-11-15": "King's Birthday", + "2030-12-25": "Christmas Day", + "2030-12-26": "Boxing Day", + "2031-01-01": "New Year's Day", + "2031-04-11": "Good Friday", + "2031-04-14": "Easter Monday", + "2031-06-02": "Whit Monday", + "2031-11-14": "King's Birthday", + "2031-12-25": "Christmas Day", + "2031-12-26": "Boxing Day", + "2032-01-01": "New Year's Day", + "2032-03-26": "Good Friday", + "2032-03-29": "Easter Monday", + "2032-05-17": "Whit Monday", + "2032-11-12": "King's Birthday", + "2032-12-25": "Christmas Day", + "2032-12-26": "Boxing Day", + "2032-12-27": "Christmas Day (observed)", + "2032-12-28": "Boxing Day (observed)", + "2033-01-01": "New Year's Day", + "2033-01-03": "New Year's Day (observed)", + "2033-04-15": "Good Friday", + "2033-04-18": "Easter Monday", + "2033-06-06": "Whit Monday", + "2033-11-11": "King's Birthday", + "2033-12-25": "Christmas Day", + "2033-12-26": "Boxing Day", + "2033-12-27": "Christmas Day (observed)", + "2034-01-01": "New Year's Day", + "2034-01-02": "New Year's Day (observed)", + "2034-04-07": "Good Friday", + "2034-04-10": "Easter Monday", + "2034-05-29": "Whit Monday", + "2034-11-17": "King's Birthday", + "2034-12-25": "Christmas Day", + "2034-12-26": "Boxing Day", + "2035-01-01": "New Year's Day", + "2035-03-23": "Good Friday", + "2035-03-26": "Easter Monday", + "2035-05-14": "Whit Monday", + "2035-11-16": "King's Birthday", + "2035-12-25": "Christmas Day", + "2035-12-26": "Boxing Day", + "2036-01-01": "New Year's Day", + "2036-04-11": "Good Friday", + "2036-04-14": "Easter Monday", + "2036-06-02": "Whit Monday", + "2036-11-14": "King's Birthday", + "2036-12-25": "Christmas Day", + "2036-12-26": "Boxing Day", + "2037-01-01": "New Year's Day", + "2037-04-03": "Good Friday", + "2037-04-06": "Easter Monday", + "2037-05-25": "Whit Monday", + "2037-11-13": "King's Birthday", + "2037-12-25": "Christmas Day", + "2037-12-26": "Boxing Day", + "2037-12-28": "Boxing Day (observed)", + "2038-01-01": "New Year's Day", + "2038-04-23": "Good Friday", + "2038-04-26": "Easter Monday", + "2038-06-14": "Whit Monday", + "2038-11-12": "King's Birthday", + "2038-12-25": "Christmas Day", + "2038-12-26": "Boxing Day", + "2038-12-27": "Christmas Day (observed)", + "2038-12-28": "Boxing Day (observed)", + "2039-01-01": "New Year's Day", + "2039-01-03": "New Year's Day (observed)", + "2039-04-08": "Good Friday", + "2039-04-11": "Easter Monday", + "2039-05-30": "Whit Monday", + "2039-11-11": "King's Birthday", + "2039-12-25": "Christmas Day", + "2039-12-26": "Boxing Day", + "2039-12-27": "Christmas Day (observed)", + "2040-01-01": "New Year's Day", + "2040-01-02": "New Year's Day (observed)", + "2040-03-30": "Good Friday", + "2040-04-02": "Easter Monday", + "2040-05-21": "Whit Monday", + "2040-11-16": "King's Birthday", + "2040-12-25": "Christmas Day", + "2040-12-26": "Boxing Day", + "2041-01-01": "New Year's Day", + "2041-04-19": "Good Friday", + "2041-04-22": "Easter Monday", + "2041-06-10": "Whit Monday", + "2041-11-15": "King's Birthday", + "2041-12-25": "Christmas Day", + "2041-12-26": "Boxing Day", + "2042-01-01": "New Year's Day", + "2042-04-04": "Good Friday", + "2042-04-07": "Easter Monday", + "2042-05-26": "Whit Monday", + "2042-11-14": "King's Birthday", + "2042-12-25": "Christmas Day", + "2042-12-26": "Boxing Day", + "2043-01-01": "New Year's Day", + "2043-03-27": "Good Friday", + "2043-03-30": "Easter Monday", + "2043-05-18": "Whit Monday", + "2043-11-13": "King's Birthday", + "2043-12-25": "Christmas Day", + "2043-12-26": "Boxing Day", + "2043-12-28": "Boxing Day (observed)", + "2044-01-01": "New Year's Day", + "2044-04-15": "Good Friday", + "2044-04-18": "Easter Monday", + "2044-06-06": "Whit Monday", + "2044-11-11": "King's Birthday", + "2044-12-25": "Christmas Day", + "2044-12-26": "Boxing Day", + "2044-12-27": "Christmas Day (observed)", + "2045-01-01": "New Year's Day", + "2045-01-02": "New Year's Day (observed)", + "2045-04-07": "Good Friday", + "2045-04-10": "Easter Monday", + "2045-05-29": "Whit Monday", + "2045-11-17": "King's Birthday", + "2045-12-25": "Christmas Day", + "2045-12-26": "Boxing Day", + "2046-01-01": "New Year's Day", + "2046-03-23": "Good Friday", + "2046-03-26": "Easter Monday", + "2046-05-14": "Whit Monday", + "2046-11-16": "King's Birthday", + "2046-12-25": "Christmas Day", + "2046-12-26": "Boxing Day", + "2047-01-01": "New Year's Day", + "2047-04-12": "Good Friday", + "2047-04-15": "Easter Monday", + "2047-06-03": "Whit Monday", + "2047-11-15": "King's Birthday", + "2047-12-25": "Christmas Day", + "2047-12-26": "Boxing Day", + "2048-01-01": "New Year's Day", + "2048-04-03": "Good Friday", + "2048-04-06": "Easter Monday", + "2048-05-25": "Whit Monday", + "2048-11-13": "King's Birthday", + "2048-12-25": "Christmas Day", + "2048-12-26": "Boxing Day", + "2048-12-28": "Boxing Day (observed)", + "2049-01-01": "New Year's Day", + "2049-04-16": "Good Friday", + "2049-04-19": "Easter Monday", + "2049-06-07": "Whit Monday", + "2049-11-12": "King's Birthday", + "2049-12-25": "Christmas Day", + "2049-12-26": "Boxing Day", + "2049-12-27": "Christmas Day (observed)", + "2049-12-28": "Boxing Day (observed)", + "2050-01-01": "New Year's Day", + "2050-01-03": "New Year's Day (observed)", + "2050-04-08": "Good Friday", + "2050-04-11": "Easter Monday", + "2050-05-30": "Whit Monday", + "2050-11-11": "King's Birthday", + "2050-12-25": "Christmas Day", + "2050-12-26": "Boxing Day", + "2050-12-27": "Christmas Day (observed)" +} diff --git a/snapshots/countries/SH_HL.json b/snapshots/countries/SH_HL.json new file mode 100644 index 000000000..9fbd5b0e8 --- /dev/null +++ b/snapshots/countries/SH_HL.json @@ -0,0 +1,371 @@ +{ + "2015-01-01": "New Year's Day", + "2015-04-03": "Good Friday", + "2015-04-06": "Easter Monday", + "2015-05-21": "Saint Helena Day", + "2015-05-25": "Whit Monday", + "2015-06-15": "Queen's Birthday", + "2015-08-31": "August Bank Holiday", + "2015-12-25": "Christmas Day", + "2015-12-26": "Boxing Day", + "2015-12-28": "Boxing Day (observed)", + "2016-01-01": "New Year's Day", + "2016-03-25": "Good Friday", + "2016-03-28": "Easter Monday", + "2016-05-16": "Whit Monday", + "2016-05-20": "Saint Helena Day (observed)", + "2016-05-21": "Saint Helena Day", + "2016-06-20": "Queen's Birthday", + "2016-08-29": "August Bank Holiday", + "2016-12-25": "Christmas Day", + "2016-12-26": "Boxing Day", + "2016-12-27": "Christmas Day (observed)", + "2017-01-01": "New Year's Day", + "2017-01-02": "New Year's Day (observed)", + "2017-04-14": "Good Friday", + "2017-04-17": "Easter Monday", + "2017-05-21": "Saint Helena Day", + "2017-05-22": "Saint Helena Day (observed)", + "2017-06-05": "Whit Monday", + "2017-06-19": "Queen's Birthday", + "2017-08-28": "August Bank Holiday", + "2017-12-25": "Christmas Day", + "2017-12-26": "Boxing Day", + "2018-01-01": "New Year's Day", + "2018-02-09": "Final Departure of R.M.S. St Helena", + "2018-03-30": "Good Friday", + "2018-04-02": "Easter Monday", + "2018-05-21": "Saint Helena Day; Whit Monday", + "2018-06-18": "Queen's Birthday", + "2018-08-27": "August Bank Holiday", + "2018-12-25": "Christmas Day", + "2018-12-26": "Boxing Day", + "2019-01-01": "New Year's Day", + "2019-04-19": "Good Friday", + "2019-04-22": "Easter Monday", + "2019-05-21": "Saint Helena Day", + "2019-06-10": "Whit Monday", + "2019-06-17": "Queen's Birthday", + "2019-08-26": "August Bank Holiday", + "2019-12-25": "Christmas Day", + "2019-12-26": "Boxing Day", + "2020-01-01": "New Year's Day", + "2020-04-10": "Good Friday", + "2020-04-13": "Easter Monday", + "2020-05-21": "Saint Helena Day", + "2020-06-01": "Whit Monday", + "2020-06-08": "Queen's Birthday", + "2020-08-31": "August Bank Holiday", + "2020-12-25": "Christmas Day", + "2020-12-26": "Boxing Day", + "2020-12-28": "Boxing Day (observed)", + "2021-01-01": "New Year's Day", + "2021-04-02": "Good Friday", + "2021-04-05": "Easter Monday", + "2021-05-21": "Saint Helena Day", + "2021-05-24": "Whit Monday", + "2021-06-14": "Queen's Birthday", + "2021-08-30": "August Bank Holiday", + "2021-12-25": "Christmas Day", + "2021-12-26": "Boxing Day", + "2021-12-27": "Christmas Day (observed)", + "2021-12-28": "Boxing Day (observed)", + "2022-01-01": "New Year's Day", + "2022-01-03": "New Year's Day (observed)", + "2022-04-15": "Good Friday", + "2022-04-18": "Easter Monday", + "2022-05-20": "Saint Helena Day (observed)", + "2022-05-21": "Saint Helena Day", + "2022-06-03": "Queen Elizabeth II's Platinum Jubilee", + "2022-06-06": "Whit Monday", + "2022-06-13": "Queen's Birthday", + "2022-08-29": "August Bank Holiday", + "2022-09-19": "Queen Elizabeth II's State Funeral", + "2022-12-25": "Christmas Day", + "2022-12-26": "Boxing Day", + "2022-12-27": "Christmas Day (observed)", + "2023-01-01": "New Year's Day", + "2023-01-02": "New Year's Day (observed)", + "2023-01-24": "The Duke of Edinburgh's Visit", + "2023-04-07": "Good Friday", + "2023-04-10": "Easter Monday", + "2023-05-08": "Coronation of His Majesty King Charles III", + "2023-05-21": "Saint Helena Day", + "2023-05-22": "Saint Helena Day (observed)", + "2023-05-29": "Whit Monday", + "2023-06-19": "King's Birthday", + "2023-08-28": "August Bank Holiday", + "2023-12-25": "Christmas Day", + "2023-12-26": "Boxing Day", + "2024-01-01": "New Year's Day", + "2024-03-29": "Good Friday", + "2024-04-01": "Easter Monday", + "2024-05-20": "Whit Monday", + "2024-05-21": "Saint Helena Day", + "2024-08-26": "August Bank Holiday", + "2024-11-15": "King's Birthday", + "2024-12-25": "Christmas Day", + "2024-12-26": "Boxing Day", + "2025-01-01": "New Year's Day", + "2025-04-18": "Good Friday", + "2025-04-21": "Easter Monday", + "2025-05-21": "Saint Helena Day", + "2025-06-09": "Whit Monday", + "2025-08-25": "August Bank Holiday", + "2025-11-14": "King's Birthday", + "2025-12-25": "Christmas Day", + "2025-12-26": "Boxing Day", + "2026-01-01": "New Year's Day", + "2026-04-03": "Good Friday", + "2026-04-06": "Easter Monday", + "2026-05-21": "Saint Helena Day", + "2026-05-25": "Whit Monday", + "2026-08-31": "August Bank Holiday", + "2026-11-13": "King's Birthday", + "2026-12-25": "Christmas Day", + "2026-12-26": "Boxing Day", + "2026-12-28": "Boxing Day (observed)", + "2027-01-01": "New Year's Day", + "2027-03-26": "Good Friday", + "2027-03-29": "Easter Monday", + "2027-05-17": "Whit Monday", + "2027-05-21": "Saint Helena Day", + "2027-08-30": "August Bank Holiday", + "2027-11-12": "King's Birthday", + "2027-12-25": "Christmas Day", + "2027-12-26": "Boxing Day", + "2027-12-27": "Christmas Day (observed)", + "2027-12-28": "Boxing Day (observed)", + "2028-01-01": "New Year's Day", + "2028-01-03": "New Year's Day (observed)", + "2028-04-14": "Good Friday", + "2028-04-17": "Easter Monday", + "2028-05-21": "Saint Helena Day", + "2028-05-22": "Saint Helena Day (observed)", + "2028-06-05": "Whit Monday", + "2028-08-28": "August Bank Holiday", + "2028-11-17": "King's Birthday", + "2028-12-25": "Christmas Day", + "2028-12-26": "Boxing Day", + "2029-01-01": "New Year's Day", + "2029-03-30": "Good Friday", + "2029-04-02": "Easter Monday", + "2029-05-21": "Saint Helena Day; Whit Monday", + "2029-08-27": "August Bank Holiday", + "2029-11-16": "King's Birthday", + "2029-12-25": "Christmas Day", + "2029-12-26": "Boxing Day", + "2030-01-01": "New Year's Day", + "2030-04-19": "Good Friday", + "2030-04-22": "Easter Monday", + "2030-05-21": "Saint Helena Day", + "2030-06-10": "Whit Monday", + "2030-08-26": "August Bank Holiday", + "2030-11-15": "King's Birthday", + "2030-12-25": "Christmas Day", + "2030-12-26": "Boxing Day", + "2031-01-01": "New Year's Day", + "2031-04-11": "Good Friday", + "2031-04-14": "Easter Monday", + "2031-05-21": "Saint Helena Day", + "2031-06-02": "Whit Monday", + "2031-08-25": "August Bank Holiday", + "2031-11-14": "King's Birthday", + "2031-12-25": "Christmas Day", + "2031-12-26": "Boxing Day", + "2032-01-01": "New Year's Day", + "2032-03-26": "Good Friday", + "2032-03-29": "Easter Monday", + "2032-05-17": "Whit Monday", + "2032-05-21": "Saint Helena Day", + "2032-08-30": "August Bank Holiday", + "2032-11-12": "King's Birthday", + "2032-12-25": "Christmas Day", + "2032-12-26": "Boxing Day", + "2032-12-27": "Christmas Day (observed)", + "2032-12-28": "Boxing Day (observed)", + "2033-01-01": "New Year's Day", + "2033-01-03": "New Year's Day (observed)", + "2033-04-15": "Good Friday", + "2033-04-18": "Easter Monday", + "2033-05-20": "Saint Helena Day (observed)", + "2033-05-21": "Saint Helena Day", + "2033-06-06": "Whit Monday", + "2033-08-29": "August Bank Holiday", + "2033-11-11": "King's Birthday", + "2033-12-25": "Christmas Day", + "2033-12-26": "Boxing Day", + "2033-12-27": "Christmas Day (observed)", + "2034-01-01": "New Year's Day", + "2034-01-02": "New Year's Day (observed)", + "2034-04-07": "Good Friday", + "2034-04-10": "Easter Monday", + "2034-05-21": "Saint Helena Day", + "2034-05-22": "Saint Helena Day (observed)", + "2034-05-29": "Whit Monday", + "2034-08-28": "August Bank Holiday", + "2034-11-17": "King's Birthday", + "2034-12-25": "Christmas Day", + "2034-12-26": "Boxing Day", + "2035-01-01": "New Year's Day", + "2035-03-23": "Good Friday", + "2035-03-26": "Easter Monday", + "2035-05-14": "Whit Monday", + "2035-05-21": "Saint Helena Day", + "2035-08-27": "August Bank Holiday", + "2035-11-16": "King's Birthday", + "2035-12-25": "Christmas Day", + "2035-12-26": "Boxing Day", + "2036-01-01": "New Year's Day", + "2036-04-11": "Good Friday", + "2036-04-14": "Easter Monday", + "2036-05-21": "Saint Helena Day", + "2036-06-02": "Whit Monday", + "2036-08-25": "August Bank Holiday", + "2036-11-14": "King's Birthday", + "2036-12-25": "Christmas Day", + "2036-12-26": "Boxing Day", + "2037-01-01": "New Year's Day", + "2037-04-03": "Good Friday", + "2037-04-06": "Easter Monday", + "2037-05-21": "Saint Helena Day", + "2037-05-25": "Whit Monday", + "2037-08-31": "August Bank Holiday", + "2037-11-13": "King's Birthday", + "2037-12-25": "Christmas Day", + "2037-12-26": "Boxing Day", + "2037-12-28": "Boxing Day (observed)", + "2038-01-01": "New Year's Day", + "2038-04-23": "Good Friday", + "2038-04-26": "Easter Monday", + "2038-05-21": "Saint Helena Day", + "2038-06-14": "Whit Monday", + "2038-08-30": "August Bank Holiday", + "2038-11-12": "King's Birthday", + "2038-12-25": "Christmas Day", + "2038-12-26": "Boxing Day", + "2038-12-27": "Christmas Day (observed)", + "2038-12-28": "Boxing Day (observed)", + "2039-01-01": "New Year's Day", + "2039-01-03": "New Year's Day (observed)", + "2039-04-08": "Good Friday", + "2039-04-11": "Easter Monday", + "2039-05-20": "Saint Helena Day (observed)", + "2039-05-21": "Saint Helena Day", + "2039-05-30": "Whit Monday", + "2039-08-29": "August Bank Holiday", + "2039-11-11": "King's Birthday", + "2039-12-25": "Christmas Day", + "2039-12-26": "Boxing Day", + "2039-12-27": "Christmas Day (observed)", + "2040-01-01": "New Year's Day", + "2040-01-02": "New Year's Day (observed)", + "2040-03-30": "Good Friday", + "2040-04-02": "Easter Monday", + "2040-05-21": "Saint Helena Day; Whit Monday", + "2040-08-27": "August Bank Holiday", + "2040-11-16": "King's Birthday", + "2040-12-25": "Christmas Day", + "2040-12-26": "Boxing Day", + "2041-01-01": "New Year's Day", + "2041-04-19": "Good Friday", + "2041-04-22": "Easter Monday", + "2041-05-21": "Saint Helena Day", + "2041-06-10": "Whit Monday", + "2041-08-26": "August Bank Holiday", + "2041-11-15": "King's Birthday", + "2041-12-25": "Christmas Day", + "2041-12-26": "Boxing Day", + "2042-01-01": "New Year's Day", + "2042-04-04": "Good Friday", + "2042-04-07": "Easter Monday", + "2042-05-21": "Saint Helena Day", + "2042-05-26": "Whit Monday", + "2042-08-25": "August Bank Holiday", + "2042-11-14": "King's Birthday", + "2042-12-25": "Christmas Day", + "2042-12-26": "Boxing Day", + "2043-01-01": "New Year's Day", + "2043-03-27": "Good Friday", + "2043-03-30": "Easter Monday", + "2043-05-18": "Whit Monday", + "2043-05-21": "Saint Helena Day", + "2043-08-31": "August Bank Holiday", + "2043-11-13": "King's Birthday", + "2043-12-25": "Christmas Day", + "2043-12-26": "Boxing Day", + "2043-12-28": "Boxing Day (observed)", + "2044-01-01": "New Year's Day", + "2044-04-15": "Good Friday", + "2044-04-18": "Easter Monday", + "2044-05-20": "Saint Helena Day (observed)", + "2044-05-21": "Saint Helena Day", + "2044-06-06": "Whit Monday", + "2044-08-29": "August Bank Holiday", + "2044-11-11": "King's Birthday", + "2044-12-25": "Christmas Day", + "2044-12-26": "Boxing Day", + "2044-12-27": "Christmas Day (observed)", + "2045-01-01": "New Year's Day", + "2045-01-02": "New Year's Day (observed)", + "2045-04-07": "Good Friday", + "2045-04-10": "Easter Monday", + "2045-05-21": "Saint Helena Day", + "2045-05-22": "Saint Helena Day (observed)", + "2045-05-29": "Whit Monday", + "2045-08-28": "August Bank Holiday", + "2045-11-17": "King's Birthday", + "2045-12-25": "Christmas Day", + "2045-12-26": "Boxing Day", + "2046-01-01": "New Year's Day", + "2046-03-23": "Good Friday", + "2046-03-26": "Easter Monday", + "2046-05-14": "Whit Monday", + "2046-05-21": "Saint Helena Day", + "2046-08-27": "August Bank Holiday", + "2046-11-16": "King's Birthday", + "2046-12-25": "Christmas Day", + "2046-12-26": "Boxing Day", + "2047-01-01": "New Year's Day", + "2047-04-12": "Good Friday", + "2047-04-15": "Easter Monday", + "2047-05-21": "Saint Helena Day", + "2047-06-03": "Whit Monday", + "2047-08-26": "August Bank Holiday", + "2047-11-15": "King's Birthday", + "2047-12-25": "Christmas Day", + "2047-12-26": "Boxing Day", + "2048-01-01": "New Year's Day", + "2048-04-03": "Good Friday", + "2048-04-06": "Easter Monday", + "2048-05-21": "Saint Helena Day", + "2048-05-25": "Whit Monday", + "2048-08-31": "August Bank Holiday", + "2048-11-13": "King's Birthday", + "2048-12-25": "Christmas Day", + "2048-12-26": "Boxing Day", + "2048-12-28": "Boxing Day (observed)", + "2049-01-01": "New Year's Day", + "2049-04-16": "Good Friday", + "2049-04-19": "Easter Monday", + "2049-05-21": "Saint Helena Day", + "2049-06-07": "Whit Monday", + "2049-08-30": "August Bank Holiday", + "2049-11-12": "King's Birthday", + "2049-12-25": "Christmas Day", + "2049-12-26": "Boxing Day", + "2049-12-27": "Christmas Day (observed)", + "2049-12-28": "Boxing Day (observed)", + "2050-01-01": "New Year's Day", + "2050-01-03": "New Year's Day (observed)", + "2050-04-08": "Good Friday", + "2050-04-11": "Easter Monday", + "2050-05-20": "Saint Helena Day (observed)", + "2050-05-21": "Saint Helena Day", + "2050-05-30": "Whit Monday", + "2050-08-29": "August Bank Holiday", + "2050-11-11": "King's Birthday", + "2050-12-25": "Christmas Day", + "2050-12-26": "Boxing Day", + "2050-12-27": "Christmas Day (observed)" +} diff --git a/snapshots/countries/SH_TA.json b/snapshots/countries/SH_TA.json new file mode 100644 index 000000000..6bc959761 --- /dev/null +++ b/snapshots/countries/SH_TA.json @@ -0,0 +1,372 @@ +{ + "2015-01-01": "New Year's Day", + "2015-04-03": "Good Friday", + "2015-04-06": "Easter Monday", + "2015-05-14": "Ascension Day", + "2015-05-16": "Ratting Day", + "2015-05-25": "Whit Monday", + "2015-06-15": "Queen's Birthday", + "2015-08-14": "Anniversary Day", + "2015-12-25": "Christmas Day", + "2015-12-26": "Boxing Day", + "2015-12-28": "Boxing Day (observed)", + "2016-01-01": "New Year's Day", + "2016-03-25": "Good Friday", + "2016-03-28": "Easter Monday", + "2016-04-30": "Ratting Day", + "2016-05-05": "Ascension Day", + "2016-05-16": "Whit Monday", + "2016-06-20": "Queen's Birthday", + "2016-08-14": "Anniversary Day", + "2016-12-25": "Christmas Day", + "2016-12-26": "Boxing Day", + "2016-12-27": "Christmas Day (observed)", + "2017-01-01": "New Year's Day", + "2017-01-02": "New Year's Day (observed)", + "2017-04-14": "Good Friday", + "2017-04-17": "Easter Monday", + "2017-05-25": "Ascension Day", + "2017-05-26": "Ratting Day", + "2017-06-05": "Whit Monday", + "2017-06-19": "Queen's Birthday", + "2017-08-14": "Anniversary Day", + "2017-12-25": "Christmas Day", + "2017-12-26": "Boxing Day", + "2018-01-01": "New Year's Day", + "2018-02-09": "Final Departure of R.M.S. St Helena", + "2018-03-30": "Good Friday", + "2018-04-02": "Easter Monday", + "2018-05-10": "Ascension Day", + "2018-05-21": "Whit Monday", + "2018-06-02": "Ratting Day", + "2018-06-18": "Queen's Birthday", + "2018-08-14": "Anniversary Day", + "2018-12-25": "Christmas Day", + "2018-12-26": "Boxing Day", + "2019-01-01": "New Year's Day", + "2019-04-19": "Good Friday", + "2019-04-22": "Easter Monday", + "2019-05-24": "Ratting Day", + "2019-05-30": "Ascension Day", + "2019-06-10": "Whit Monday", + "2019-06-17": "Queen's Birthday", + "2019-08-14": "Anniversary Day", + "2019-12-25": "Christmas Day", + "2019-12-26": "Boxing Day", + "2020-01-01": "New Year's Day", + "2020-04-10": "Good Friday", + "2020-04-13": "Easter Monday", + "2020-04-25": "Ratting Day", + "2020-05-21": "Ascension Day", + "2020-06-01": "Whit Monday", + "2020-06-08": "Queen's Birthday", + "2020-08-14": "Anniversary Day", + "2020-12-25": "Christmas Day", + "2020-12-26": "Boxing Day", + "2020-12-28": "Boxing Day (observed)", + "2021-01-01": "New Year's Day", + "2021-04-02": "Good Friday", + "2021-04-05": "Easter Monday", + "2021-04-09": "Ratting Day", + "2021-05-13": "Ascension Day", + "2021-05-24": "Whit Monday", + "2021-06-14": "Queen's Birthday", + "2021-08-14": "Anniversary Day", + "2021-12-25": "Christmas Day", + "2021-12-26": "Boxing Day", + "2021-12-27": "Christmas Day (observed)", + "2021-12-28": "Boxing Day (observed)", + "2022-01-01": "New Year's Day", + "2022-01-03": "New Year's Day (observed)", + "2022-04-15": "Good Friday", + "2022-04-18": "Easter Monday", + "2022-05-26": "Ascension Day", + "2022-06-03": "Queen Elizabeth II's Platinum Jubilee", + "2022-06-06": "Whit Monday", + "2022-06-13": "Queen's Birthday", + "2022-08-14": "Anniversary Day", + "2022-09-19": "Queen Elizabeth II's State Funeral", + "2022-12-25": "Christmas Day", + "2022-12-26": "Boxing Day", + "2022-12-27": "Christmas Day (observed)", + "2023-01-01": "New Year's Day", + "2023-01-02": "New Year's Day (observed)", + "2023-01-24": "The Duke of Edinburgh's Visit", + "2023-04-07": "Good Friday", + "2023-04-10": "Easter Monday", + "2023-05-08": "Coronation of His Majesty King Charles III", + "2023-05-18": "Ascension Day", + "2023-05-29": "Whit Monday", + "2023-06-02": "Ratting Day", + "2023-06-19": "King's Birthday", + "2023-08-14": "Anniversary Day", + "2023-12-25": "Christmas Day", + "2023-12-26": "Boxing Day", + "2024-01-01": "New Year's Day", + "2024-03-29": "Good Friday", + "2024-04-01": "Easter Monday", + "2024-05-09": "Ascension Day", + "2024-05-20": "Whit Monday", + "2024-08-14": "Anniversary Day", + "2024-11-15": "King's Birthday", + "2024-12-25": "Christmas Day", + "2024-12-26": "Boxing Day", + "2025-01-01": "New Year's Day", + "2025-04-18": "Good Friday", + "2025-04-21": "Easter Monday", + "2025-05-29": "Ascension Day", + "2025-05-30": "Ratting Day", + "2025-06-09": "Whit Monday", + "2025-08-14": "Anniversary Day", + "2025-11-14": "King's Birthday", + "2025-12-25": "Christmas Day", + "2025-12-26": "Boxing Day", + "2026-01-01": "New Year's Day", + "2026-04-03": "Good Friday", + "2026-04-06": "Easter Monday", + "2026-05-14": "Ascension Day", + "2026-05-25": "Whit Monday", + "2026-08-14": "Anniversary Day", + "2026-11-13": "King's Birthday", + "2026-12-25": "Christmas Day", + "2026-12-26": "Boxing Day", + "2026-12-28": "Boxing Day (observed)", + "2027-01-01": "New Year's Day", + "2027-03-26": "Good Friday", + "2027-03-29": "Easter Monday", + "2027-05-06": "Ascension Day", + "2027-05-17": "Whit Monday", + "2027-08-14": "Anniversary Day", + "2027-11-12": "King's Birthday", + "2027-12-25": "Christmas Day", + "2027-12-26": "Boxing Day", + "2027-12-27": "Christmas Day (observed)", + "2027-12-28": "Boxing Day (observed)", + "2028-01-01": "New Year's Day", + "2028-01-03": "New Year's Day (observed)", + "2028-04-14": "Good Friday", + "2028-04-17": "Easter Monday", + "2028-05-25": "Ascension Day", + "2028-06-05": "Whit Monday", + "2028-08-14": "Anniversary Day", + "2028-11-17": "King's Birthday", + "2028-12-25": "Christmas Day", + "2028-12-26": "Boxing Day", + "2029-01-01": "New Year's Day", + "2029-03-30": "Good Friday", + "2029-04-02": "Easter Monday", + "2029-05-10": "Ascension Day", + "2029-05-21": "Whit Monday", + "2029-08-14": "Anniversary Day", + "2029-11-16": "King's Birthday", + "2029-12-25": "Christmas Day", + "2029-12-26": "Boxing Day", + "2030-01-01": "New Year's Day", + "2030-04-19": "Good Friday", + "2030-04-22": "Easter Monday", + "2030-05-30": "Ascension Day", + "2030-06-10": "Whit Monday", + "2030-08-14": "Anniversary Day", + "2030-11-15": "King's Birthday", + "2030-12-25": "Christmas Day", + "2030-12-26": "Boxing Day", + "2031-01-01": "New Year's Day", + "2031-04-11": "Good Friday", + "2031-04-14": "Easter Monday", + "2031-05-22": "Ascension Day", + "2031-06-02": "Whit Monday", + "2031-08-14": "Anniversary Day", + "2031-11-14": "King's Birthday", + "2031-12-25": "Christmas Day", + "2031-12-26": "Boxing Day", + "2032-01-01": "New Year's Day", + "2032-03-26": "Good Friday", + "2032-03-29": "Easter Monday", + "2032-05-06": "Ascension Day", + "2032-05-17": "Whit Monday", + "2032-08-14": "Anniversary Day", + "2032-11-12": "King's Birthday", + "2032-12-25": "Christmas Day", + "2032-12-26": "Boxing Day", + "2032-12-27": "Christmas Day (observed)", + "2032-12-28": "Boxing Day (observed)", + "2033-01-01": "New Year's Day", + "2033-01-03": "New Year's Day (observed)", + "2033-04-15": "Good Friday", + "2033-04-18": "Easter Monday", + "2033-05-26": "Ascension Day", + "2033-06-06": "Whit Monday", + "2033-08-14": "Anniversary Day", + "2033-11-11": "King's Birthday", + "2033-12-25": "Christmas Day", + "2033-12-26": "Boxing Day", + "2033-12-27": "Christmas Day (observed)", + "2034-01-01": "New Year's Day", + "2034-01-02": "New Year's Day (observed)", + "2034-04-07": "Good Friday", + "2034-04-10": "Easter Monday", + "2034-05-18": "Ascension Day", + "2034-05-29": "Whit Monday", + "2034-08-14": "Anniversary Day", + "2034-11-17": "King's Birthday", + "2034-12-25": "Christmas Day", + "2034-12-26": "Boxing Day", + "2035-01-01": "New Year's Day", + "2035-03-23": "Good Friday", + "2035-03-26": "Easter Monday", + "2035-05-03": "Ascension Day", + "2035-05-14": "Whit Monday", + "2035-08-14": "Anniversary Day", + "2035-11-16": "King's Birthday", + "2035-12-25": "Christmas Day", + "2035-12-26": "Boxing Day", + "2036-01-01": "New Year's Day", + "2036-04-11": "Good Friday", + "2036-04-14": "Easter Monday", + "2036-05-22": "Ascension Day", + "2036-06-02": "Whit Monday", + "2036-08-14": "Anniversary Day", + "2036-11-14": "King's Birthday", + "2036-12-25": "Christmas Day", + "2036-12-26": "Boxing Day", + "2037-01-01": "New Year's Day", + "2037-04-03": "Good Friday", + "2037-04-06": "Easter Monday", + "2037-05-14": "Ascension Day", + "2037-05-25": "Whit Monday", + "2037-08-14": "Anniversary Day", + "2037-11-13": "King's Birthday", + "2037-12-25": "Christmas Day", + "2037-12-26": "Boxing Day", + "2037-12-28": "Boxing Day (observed)", + "2038-01-01": "New Year's Day", + "2038-04-23": "Good Friday", + "2038-04-26": "Easter Monday", + "2038-06-03": "Ascension Day", + "2038-06-14": "Whit Monday", + "2038-08-14": "Anniversary Day", + "2038-11-12": "King's Birthday", + "2038-12-25": "Christmas Day", + "2038-12-26": "Boxing Day", + "2038-12-27": "Christmas Day (observed)", + "2038-12-28": "Boxing Day (observed)", + "2039-01-01": "New Year's Day", + "2039-01-03": "New Year's Day (observed)", + "2039-04-08": "Good Friday", + "2039-04-11": "Easter Monday", + "2039-05-19": "Ascension Day", + "2039-05-30": "Whit Monday", + "2039-08-14": "Anniversary Day", + "2039-11-11": "King's Birthday", + "2039-12-25": "Christmas Day", + "2039-12-26": "Boxing Day", + "2039-12-27": "Christmas Day (observed)", + "2040-01-01": "New Year's Day", + "2040-01-02": "New Year's Day (observed)", + "2040-03-30": "Good Friday", + "2040-04-02": "Easter Monday", + "2040-05-10": "Ascension Day", + "2040-05-21": "Whit Monday", + "2040-08-14": "Anniversary Day", + "2040-11-16": "King's Birthday", + "2040-12-25": "Christmas Day", + "2040-12-26": "Boxing Day", + "2041-01-01": "New Year's Day", + "2041-04-19": "Good Friday", + "2041-04-22": "Easter Monday", + "2041-05-30": "Ascension Day", + "2041-06-10": "Whit Monday", + "2041-08-14": "Anniversary Day", + "2041-11-15": "King's Birthday", + "2041-12-25": "Christmas Day", + "2041-12-26": "Boxing Day", + "2042-01-01": "New Year's Day", + "2042-04-04": "Good Friday", + "2042-04-07": "Easter Monday", + "2042-05-15": "Ascension Day", + "2042-05-26": "Whit Monday", + "2042-08-14": "Anniversary Day", + "2042-11-14": "King's Birthday", + "2042-12-25": "Christmas Day", + "2042-12-26": "Boxing Day", + "2043-01-01": "New Year's Day", + "2043-03-27": "Good Friday", + "2043-03-30": "Easter Monday", + "2043-05-07": "Ascension Day", + "2043-05-18": "Whit Monday", + "2043-08-14": "Anniversary Day", + "2043-11-13": "King's Birthday", + "2043-12-25": "Christmas Day", + "2043-12-26": "Boxing Day", + "2043-12-28": "Boxing Day (observed)", + "2044-01-01": "New Year's Day", + "2044-04-15": "Good Friday", + "2044-04-18": "Easter Monday", + "2044-05-26": "Ascension Day", + "2044-06-06": "Whit Monday", + "2044-08-14": "Anniversary Day", + "2044-11-11": "King's Birthday", + "2044-12-25": "Christmas Day", + "2044-12-26": "Boxing Day", + "2044-12-27": "Christmas Day (observed)", + "2045-01-01": "New Year's Day", + "2045-01-02": "New Year's Day (observed)", + "2045-04-07": "Good Friday", + "2045-04-10": "Easter Monday", + "2045-05-18": "Ascension Day", + "2045-05-29": "Whit Monday", + "2045-08-14": "Anniversary Day", + "2045-11-17": "King's Birthday", + "2045-12-25": "Christmas Day", + "2045-12-26": "Boxing Day", + "2046-01-01": "New Year's Day", + "2046-03-23": "Good Friday", + "2046-03-26": "Easter Monday", + "2046-05-03": "Ascension Day", + "2046-05-14": "Whit Monday", + "2046-08-14": "Anniversary Day", + "2046-11-16": "King's Birthday", + "2046-12-25": "Christmas Day", + "2046-12-26": "Boxing Day", + "2047-01-01": "New Year's Day", + "2047-04-12": "Good Friday", + "2047-04-15": "Easter Monday", + "2047-05-23": "Ascension Day", + "2047-06-03": "Whit Monday", + "2047-08-14": "Anniversary Day", + "2047-11-15": "King's Birthday", + "2047-12-25": "Christmas Day", + "2047-12-26": "Boxing Day", + "2048-01-01": "New Year's Day", + "2048-04-03": "Good Friday", + "2048-04-06": "Easter Monday", + "2048-05-14": "Ascension Day", + "2048-05-25": "Whit Monday", + "2048-08-14": "Anniversary Day", + "2048-11-13": "King's Birthday", + "2048-12-25": "Christmas Day", + "2048-12-26": "Boxing Day", + "2048-12-28": "Boxing Day (observed)", + "2049-01-01": "New Year's Day", + "2049-04-16": "Good Friday", + "2049-04-19": "Easter Monday", + "2049-05-27": "Ascension Day", + "2049-06-07": "Whit Monday", + "2049-08-14": "Anniversary Day", + "2049-11-12": "King's Birthday", + "2049-12-25": "Christmas Day", + "2049-12-26": "Boxing Day", + "2049-12-27": "Christmas Day (observed)", + "2049-12-28": "Boxing Day (observed)", + "2050-01-01": "New Year's Day", + "2050-01-03": "New Year's Day (observed)", + "2050-04-08": "Good Friday", + "2050-04-11": "Easter Monday", + "2050-05-19": "Ascension Day", + "2050-05-30": "Whit Monday", + "2050-08-14": "Anniversary Day", + "2050-11-11": "King's Birthday", + "2050-12-25": "Christmas Day", + "2050-12-26": "Boxing Day", + "2050-12-27": "Christmas Day (observed)" +} From 158141b076d066b3aff59b2171885442ba9cb83f Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets Date: Sat, 6 Sep 2025 21:09:06 -0700 Subject: [PATCH 14/34] Add check holiday updates test workflow --- .github/workflows/check-holiday-updates.yml | 55 +++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 .github/workflows/check-holiday-updates.yml diff --git a/.github/workflows/check-holiday-updates.yml b/.github/workflows/check-holiday-updates.yml new file mode 100644 index 000000000..7ccd9b932 --- /dev/null +++ b/.github/workflows/check-holiday-updates.yml @@ -0,0 +1,55 @@ +name: Check holiday updates + +on: + workflow_dispatch: + inputs: + dry_run: + description: 'Run in dry-run mode (no issues created)' + required: false + default: true + type: boolean + paths: + description: 'Multiline list of paths/globs to check (one per line, leave empty for default)' + required: false + default: '' + type: string + threshold_days: + description: 'Age threshold for files in days' + required: false + default: '120' + type: string + +jobs: + check-updates: + runs-on: ubuntu-latest + permissions: + contents: read + issues: write + steps: + - name: Checkout holidays repository + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 + with: + fetch-depth: 0 # Get full commit history to accurately determine when each file was last modified + repository: vacanza/holidays + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Check holiday updates + id: check-updates + uses: vacanza/aux/.github/actions/check-holiday-updates@main + with: + dry_run: ${{ inputs.dry_run || false }} + github_token: ${{ secrets.GITHUB_TOKEN }} + paths: ${{ inputs.paths || 'holidays/countries/*.py' }} + threshold_days: ${{ inputs.threshold_days || '120' }} + + - name: Display results + run: | + echo "📊 Check Holiday Updates Results:" + echo " • Outdated files found: ${{ steps.check-updates.outputs.outdated_files_count }}" + echo " • Issues created: ${{ steps.check-updates.outputs.issues_created_count }}" + + if [ "${{ steps.check-updates.outputs.outdated_files_count }}" -gt "0" ]; then + echo "⚠️ Some holiday files may need updating!" + else + echo "✅ All holiday files are up to date!" + fi From 3be8c80fe244052aa0921a76c1156b31cfeeac06 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets Date: Sat, 6 Sep 2025 22:58:48 -0700 Subject: [PATCH 15/34] Pin check-holiday-updates version --- .github/workflows/check-holiday-updates.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-holiday-updates.yml b/.github/workflows/check-holiday-updates.yml index 7ccd9b932..d535ebde5 100644 --- a/.github/workflows/check-holiday-updates.yml +++ b/.github/workflows/check-holiday-updates.yml @@ -35,7 +35,7 @@ jobs: - name: Check holiday updates id: check-updates - uses: vacanza/aux/.github/actions/check-holiday-updates@main + uses: vacanza/aux/.github/actions/check-holiday-updates@46f7899c8ed2178d1f5f019d9c88a4b1db503060 with: dry_run: ${{ inputs.dry_run || false }} github_token: ${{ secrets.GITHUB_TOKEN }} From e01daef396abaa73e0db3a159707eb0dfdee9e77 Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Wed, 10 Sep 2025 15:49:42 +0300 Subject: [PATCH 16/34] chore: Update reference link --- holidays/countries/tajikistan.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holidays/countries/tajikistan.py b/holidays/countries/tajikistan.py index 3bc170434..1f6661905 100644 --- a/holidays/countries/tajikistan.py +++ b/holidays/countries/tajikistan.py @@ -107,7 +107,7 @@ class TJK(Tajikistan): class TajikistanIslamicHolidays(_CustomIslamicHolidays): - # https://www.timeanddate.com/holidays/tajikistan/eid-al-fitr + # https://web.archive.org/web/20240911001624/https://www.timeanddate.com/holidays/tajikistan/eid-al-fitr EID_AL_FITR_DATES_CONFIRMED_YEARS = (1992, 2025) EID_AL_FITR_DATES = { 2023: (APR, 22), From d1e4d1c4a7d869ce55e27fa3f472988da2787650 Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Wed, 10 Sep 2025 20:40:11 +0300 Subject: [PATCH 17/34] Update Philippines holidays: add 2026 holidays (#2912) --- holidays/countries/philippines.py | 13 +++++++++++-- holidays/locale/en_PH/LC_MESSAGES/PH.po | 14 +++++++++----- holidays/locale/en_US/LC_MESSAGES/PH.po | 16 ++++++++++------ holidays/locale/fil/LC_MESSAGES/PH.po | 16 ++++++++++------ holidays/locale/th/LC_MESSAGES/PH.po | 16 ++++++++++------ snapshots/countries/PH_COMMON.json | 2 ++ tests/countries/test_philippines.py | 3 +++ 7 files changed, 55 insertions(+), 25 deletions(-) diff --git a/holidays/countries/philippines.py b/holidays/countries/philippines.py index b795dfbc8..afbdbc50e 100644 --- a/holidays/countries/philippines.py +++ b/holidays/countries/philippines.py @@ -53,6 +53,7 @@ class Philippines( * [Proclamation No. 839/2025](https://archive.org/details/20250320-proc-839-frm_202506) * [Proclamation No. 878/2025](https://archive.org/details/20250506-proc-878-frm_202506) * [Proclamation No. 911/2025](https://archive.org/details/20250521-proc-911-frm_20250606_1800) + * [Proclamation No. 1006/2025](https://archive.org/details/20250903-proc-1006-frm) """ country = "PH" @@ -240,9 +241,13 @@ class PhilippinesIslamicHolidays(_CustomIslamicHolidays): class PhilippinesStaticHolidays: # Additional special (non-working) day. additional_special = tr("Additional special (non-working) day") + # Elections special (non-working) day. election_special = tr("Elections special (non-working) day") + # Christmas Eve. + christmas_eve = tr("Christmas Eve") + special_public_holidays = { 2008: ( (DEC, 26, additional_special), @@ -309,7 +314,11 @@ class PhilippinesStaticHolidays: (JUL, 27, additional_special), # All Saints' Day Eve. (OCT, 31, tr("All Saints' Day Eve")), - # Christmas Eve. - (DEC, 24, tr("Christmas Eve")), + (DEC, 24, christmas_eve), + ), + 2026: ( + # All Souls' Day. + (NOV, 2, tr("All Souls' Day")), + (DEC, 24, christmas_eve), ), } diff --git a/holidays/locale/en_PH/LC_MESSAGES/PH.po b/holidays/locale/en_PH/LC_MESSAGES/PH.po index 646433302..1cd04f1fa 100644 --- a/holidays/locale/en_PH/LC_MESSAGES/PH.po +++ b/holidays/locale/en_PH/LC_MESSAGES/PH.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.60\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2024-10-30 02:45+0700\n" -"PO-Revision-Date: 2024-11-02 01:47+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-09 23:22+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: en_PH\n" "MIME-Version: 1.0\n" @@ -120,10 +120,14 @@ msgstr "" msgid "Elections special (non-working) day" msgstr "" +#. Christmas Eve. +msgid "Christmas Eve" +msgstr "" + #. All Saints' Day Eve. msgid "All Saints' Day Eve" msgstr "" -#. Christmas Eve. -msgid "Christmas Eve" +#. All Souls' Day. +msgid "All Souls' Day" msgstr "" diff --git a/holidays/locale/en_US/LC_MESSAGES/PH.po b/holidays/locale/en_US/LC_MESSAGES/PH.po index f16637f86..647360090 100644 --- a/holidays/locale/en_US/LC_MESSAGES/PH.po +++ b/holidays/locale/en_US/LC_MESSAGES/PH.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.60\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2024-10-30 02:45+0700\n" -"PO-Revision-Date: 2024-11-02 01:48+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-09 23:22+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: en_US\n" "MIME-Version: 1.0\n" @@ -120,10 +120,14 @@ msgstr "Additional special (non-working) day" msgid "Elections special (non-working) day" msgstr "Elections special (non-working) day" +#. Christmas Eve. +msgid "Christmas Eve" +msgstr "Christmas Eve" + #. All Saints' Day Eve. msgid "All Saints' Day Eve" msgstr "All Saints' Day Eve" -#. Christmas Eve. -msgid "Christmas Eve" -msgstr "Christmas Eve" +#. All Souls' Day. +msgid "All Souls' Day" +msgstr "All Souls' Day" diff --git a/holidays/locale/fil/LC_MESSAGES/PH.po b/holidays/locale/fil/LC_MESSAGES/PH.po index 11120d55e..0cc47935a 100644 --- a/holidays/locale/fil/LC_MESSAGES/PH.po +++ b/holidays/locale/fil/LC_MESSAGES/PH.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.60\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2024-10-30 02:45+0700\n" -"PO-Revision-Date: 2024-11-02 01:48+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-09 23:22+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: fil\n" "MIME-Version: 1.0\n" @@ -120,10 +120,14 @@ msgstr "Karagdagang Espesyal na Araw (Walang Trabajo)" msgid "Elections special (non-working) day" msgstr "Araw ng Halalan (Walang Trabajo)" +#. Christmas Eve. +msgid "Christmas Eve" +msgstr "Bisperas ng Pasko" + #. All Saints' Day Eve. msgid "All Saints' Day Eve" msgstr "Bisperas ng Araw ng mga Santo" -#. Christmas Eve. -msgid "Christmas Eve" -msgstr "Bisperas ng Pasko" +#. All Souls' Day. +msgid "All Souls' Day" +msgstr "Araw ng mga Kaluluwa" diff --git a/holidays/locale/th/LC_MESSAGES/PH.po b/holidays/locale/th/LC_MESSAGES/PH.po index 7ea26ea86..09735396a 100644 --- a/holidays/locale/th/LC_MESSAGES/PH.po +++ b/holidays/locale/th/LC_MESSAGES/PH.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.60\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2024-10-30 02:45+0700\n" -"PO-Revision-Date: 2024-11-02 01:48+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-09 23:23+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: th\n" "MIME-Version: 1.0\n" @@ -120,10 +120,14 @@ msgstr "วันหยุดพิเศษ (เพิ่มเติม)" msgid "Elections special (non-working) day" msgstr "วันหยุดพิเศษ (เลือกตั้ง)" +#. Christmas Eve. +msgid "Christmas Eve" +msgstr "วันคริสต์มาสอีฟ" + #. All Saints' Day Eve. msgid "All Saints' Day Eve" msgstr "วันก่อนวันสมโภชนักบุญทั้งหลาย" -#. Christmas Eve. -msgid "Christmas Eve" -msgstr "วันคริสต์มาสอีฟ" +#. All Souls' Day. +msgid "All Souls' Day" +msgstr "วันภาวนาอุทิศแด่ผู้ล่วงลับ" diff --git a/snapshots/countries/PH_COMMON.json b/snapshots/countries/PH_COMMON.json index 6104d2c3a..b4d598770 100644 --- a/snapshots/countries/PH_COMMON.json +++ b/snapshots/countries/PH_COMMON.json @@ -620,8 +620,10 @@ "2026-08-21": "Ninoy Aquino Day", "2026-08-31": "National Heroes Day", "2026-11-01": "All Saints' Day", + "2026-11-02": "All Souls' Day", "2026-11-30": "Bonifacio Day", "2026-12-08": "Immaculate Conception", + "2026-12-24": "Christmas Eve", "2026-12-25": "Christmas Day", "2026-12-30": "Rizal Day", "2026-12-31": "New Year's Eve", diff --git a/tests/countries/test_philippines.py b/tests/countries/test_philippines.py index 2e865e105..b52f5ee06 100644 --- a/tests/countries/test_philippines.py +++ b/tests/countries/test_philippines.py @@ -73,6 +73,8 @@ def test_special_holidays(self): "2025-07-27", "2025-10-31", "2025-12-24", + "2026-11-02", + "2026-12-24", ) def test_new_years_day(self): @@ -95,6 +97,7 @@ def test_chinese_new_year(self): "2022-02-01", "2024-02-10", "2025-01-29", + "2026-02-17", ) self.assertNoHolidayName(name, range(1988, 2012), 2023) From cece3e11005419fd16ab7d363f60b568c5149425 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 22:30:18 +0000 Subject: [PATCH 18/34] Bump tox from 4.30.1 to 4.30.2 (#2921) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev.txt b/requirements/dev.txt index 47210b984..646f822e5 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -9,6 +9,6 @@ pre-commit==4.3.0 pygithub==2.8.1 requests==2.32.5 ruff==0.12.11 -tox==4.30.1 +tox==4.30.2 urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From 837e92de7a210ad16aa65c1aa6e21b1e4dbecf5e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 15:47:44 -0700 Subject: [PATCH 19/34] Bump github/codeql-action from 3.30.0 to 3.30.3 (#2914) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-cd.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index f95932025..becd4190a 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -58,12 +58,12 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - name: Initialize CodeQL - uses: github/codeql-action/init@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d + uses: github/codeql-action/init@192325c86100d080feab897ff886c34abd4c83a3 with: languages: python - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d + uses: github/codeql-action/analyze@192325c86100d080feab897ff886c34abd4c83a3 with: category: '/language:python' From 40a641669143d3c80aa28bbcc39b2fdc9aea32aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 15:55:59 -0700 Subject: [PATCH 20/34] Bump pytest from 8.4.1 to 8.4.2 (#2920) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/tests.txt b/requirements/tests.txt index 833c46d25..1be07ae81 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -8,5 +8,5 @@ numpy==2.3.2; python_version >= '3.11' polib==1.2.0 pytest-cov==6.2.1 pytest-xdist==3.8.0 -pytest==8.4.1 +pytest==8.4.2 zipp>=3.19.1; python_version < '3.10' # not directly required, pinned by Snyk to avoid a vulnerability From b5f406a9314e135e17bf095056fa0f9b8da77e28 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 16:07:58 -0700 Subject: [PATCH 21/34] Bump codecov/codecov-action from 5.5.0 to 5.5.1 (#2913) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index becd4190a..6426276a7 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -111,7 +111,7 @@ jobs: make test - name: Upload coverage to Codecov - uses: codecov/codecov-action@fdcc8476540edceab3de004e990f80d881c6cc00 + uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 with: token: ${{ secrets.CODECOV_TOKEN }} From e62941fdb3f572a15e1de84063a132a10494210f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 16:30:04 -0700 Subject: [PATCH 22/34] Bump pypa/gh-action-pypi-publish from 1.12.4 to 1.13.0 (#2916) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 6426276a7..f97ec1c62 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -251,7 +251,7 @@ jobs: path: dist - name: Publish package distributions to PyPI - uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e sign-artifacts: name: Create SHA1 checksums and Sigstore signatures From 724413e328f960cbf37e43b02a85fd5198d37714 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 16:42:51 -0700 Subject: [PATCH 23/34] Bump actions/labeler from 5.0.0 to 6.0.1 (#2917) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/prl-labeler.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prl-labeler.yml b/.github/workflows/prl-labeler.yml index d00a1d2ad..672d85bdb 100644 --- a/.github/workflows/prl-labeler.yml +++ b/.github/workflows/prl-labeler.yml @@ -10,4 +10,4 @@ jobs: pull-requests: write runs-on: ubuntu-24.04 steps: - - uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 + - uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b From b4d882f3aaf0b44239fdf7b5f4fb9835f5c68a0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 16:56:07 -0700 Subject: [PATCH 24/34] Bump pytest-cov from 6.2.1 to 7.0.0 (#2915) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/tests.txt b/requirements/tests.txt index 1be07ae81..4f300f60b 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -6,7 +6,7 @@ numpy<2.1.0; python_version < '3.10' numpy==2.2.6; python_version == '3.10' numpy==2.3.2; python_version >= '3.11' polib==1.2.0 -pytest-cov==6.2.1 +pytest-cov==7.0.0 pytest-xdist==3.8.0 pytest==8.4.2 zipp>=3.19.1; python_version < '3.10' # not directly required, pinned by Snyk to avoid a vulnerability From 211847676844d1440f637b9d05070daadf512937 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 17:07:55 -0700 Subject: [PATCH 25/34] Bump ruff from 0.12.11 to 0.13.0 (#2919) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev.txt b/requirements/dev.txt index 646f822e5..7594a8e70 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -8,7 +8,7 @@ lingva==5.0.6 pre-commit==4.3.0 pygithub==2.8.1 requests==2.32.5 -ruff==0.12.11 +ruff==0.13.0 tox==4.30.2 urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From e2f7410476b88bef4108d7f7bebceb872e37eca9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 17:24:11 -0700 Subject: [PATCH 26/34] Update pre-commit hooks (#2922) Co-authored-by: arkid15r <2201626+arkid15r@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 47562ed5a..69e10da33 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,7 +25,7 @@ repos: - --py39-plus - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.12.12 + rev: v0.13.0 hooks: - id: ruff-check - id: ruff-format From 0128617d51501ebde0fa7f4b5360b96ab546d3a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 17:24:37 -0700 Subject: [PATCH 27/34] Bump actions/setup-python from 5.6.0 to 6.0.0 (#2918) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-cd.yml | 10 +++++----- .github/workflows/pre-commit-autoupdate.yml | 2 +- .github/workflows/update-snapshots.yml | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index f97ec1c62..640bc5221 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -38,7 +38,7 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c with: check-latest: true python-version: '3.13' @@ -90,7 +90,7 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c with: allow-prereleases: true cache: pip @@ -124,7 +124,7 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c with: cache: pip cache-dependency-path: | @@ -179,7 +179,7 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c with: cache: pip cache-dependency-path: | @@ -214,7 +214,7 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - name: Set Up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c with: cache: pip cache-dependency-path: requirements/docs.txt diff --git a/.github/workflows/pre-commit-autoupdate.yml b/.github/workflows/pre-commit-autoupdate.yml index 0dedca89d..bb8561ccc 100644 --- a/.github/workflows/pre-commit-autoupdate.yml +++ b/.github/workflows/pre-commit-autoupdate.yml @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c with: cache: pip python-version: '3.13' diff --git a/.github/workflows/update-snapshots.yml b/.github/workflows/update-snapshots.yml index 44720a2cf..917abef43 100644 --- a/.github/workflows/update-snapshots.yml +++ b/.github/workflows/update-snapshots.yml @@ -19,7 +19,7 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c with: cache: pip cache-dependency-path: | From a6840fc9cf24adcfbc732720de18838d4105868a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 12 Sep 2025 17:53:37 -0700 Subject: [PATCH 28/34] Update pre-commit hooks (#2925) Co-authored-by: arkid15r <2201626+arkid15r@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 69e10da33..b51eed813 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,7 +47,7 @@ repos: exclude: ^(docs) - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.17.1 + rev: v1.18.1 hooks: - id: mypy additional_dependencies: From 342b9a7df4dd53d44f16e16308e71d3615827941 Mon Sep 17 00:00:00 2001 From: Ansh Anand Date: Sat, 13 Sep 2025 23:23:40 +0530 Subject: [PATCH 29/34] Add Sudan holidays (#2854) --- README.md | 9 +- holidays/countries/__init__.py | 1 + holidays/countries/sudan.py | 115 +++++++++++++++++ holidays/groups/islamic.py | 10 ++ holidays/locale/ar_SD/LC_MESSAGES/SD.po | 64 +++++++++ holidays/locale/en_US/LC_MESSAGES/SD.po | 64 +++++++++ holidays/registry.py | 1 + tests/countries/test_sudan.py | 165 ++++++++++++++++++++++++ 8 files changed, 428 insertions(+), 1 deletion(-) create mode 100644 holidays/countries/sudan.py create mode 100644 holidays/locale/ar_SD/LC_MESSAGES/SD.po create mode 100644 holidays/locale/en_US/LC_MESSAGES/SD.po create mode 100644 tests/countries/test_sudan.py diff --git a/README.md b/README.md index a1028f574..0c861affe 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ and detailed information. ## Available Countries -We currently support 241 country codes. The standard way to refer to a country is by using its [ISO +We currently support 242 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 @@ -1582,6 +1582,13 @@ any) in brackets, available languages and additional holiday categories. All cou BANK, GOVERNMENT, WORKDAY +Sudan +SD + +ar_SD, en_US + + + Suriname SR diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py index b7808f3da..df86f3639 100644 --- a/holidays/countries/__init__.py +++ b/holidays/countries/__init__.py @@ -239,6 +239,7 @@ from holidays.countries.south_sudan import SouthSudan, SS, SSD from holidays.countries.spain import Spain, ES, ESP from holidays.countries.sri_lanka import SriLanka, LK, LKA +from holidays.countries.sudan import Sudan, SD, SDN from holidays.countries.suriname import Suriname, SR, SUR from holidays.countries.svalbard_and_jan_mayen import SvalbardAndJanMayen, SJ, SJM, HolidaysSJ from holidays.countries.sweden import Sweden, SE, SWE diff --git a/holidays/countries/sudan.py b/holidays/countries/sudan.py new file mode 100644 index 000000000..1104fd907 --- /dev/null +++ b/holidays/countries/sudan.py @@ -0,0 +1,115 @@ +# 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 (c) 2017-2023 +# ryanss (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 MAY, JUL, AUG, SEP, FRI, SAT +from holidays.calendars.julian import JULIAN_CALENDAR +from holidays.groups import ChristianHolidays, IslamicHolidays +from holidays.holiday_base import HolidayBase + + +class Sudan(HolidayBase, ChristianHolidays, IslamicHolidays): + """Sudan holidays. + + References: + * + * + * [Christian Holidays 2011-2018](https://web.archive.org/web/20250827155208/https://evangelicalfocus.com/world/5014/christmas-celebrations-mark-progress-of-religious-freedom-in-sudan) + """ + + country = "SD" + default_language = "ar_SD" + # %s (estimated). + estimated_label = tr("%s (المقدرة)") + supported_languages = ("ar_SD", "en_US") + start_year = 1985 + + def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs): + ChristianHolidays.__init__(self) + IslamicHolidays.__init__( + self, cls=SudanIslamicHolidays, show_estimated=islamic_show_estimated + ) + super().__init__(*args, **kwargs) + + def _populate_public_holidays(self): + # The resting days are Friday and Saturday since January 26th, 2008. + # https://sudantribune.com/article25544/ + self.weekend = {FRI, SAT} if self._year >= 2008 else {FRI} + + # Independence Day. + self._add_holiday_jan_1(tr("عيد الإستقلال")) + + # Christian public holidays were suspended 2011–2018 and reinstated in 2019. + if self._year <= 2010 or self._year >= 2019: + # Coptic Christmas Day. + self._add_christmas_day(tr("عيد الميلاد المجيد"), calendar=JULIAN_CALENDAR) + + # Coptic Easter. + self._add_easter_sunday(tr("عيد الفصح القبطي"), calendar=JULIAN_CALENDAR) + + # Christmas Day. + self._add_christmas_day(tr("عيد الميلاد")) + + # Islamic New Year. + self._add_islamic_new_year_day(tr("رأس السنة الهجرية")) + + # Prophet's Birthday. + self._add_mawlid_day(tr("المولد النبوي الشريف")) + + # Eid al-Fitr. + name = tr("عيد الفطر المبارك") + self._add_eid_al_fitr_day(name) + self._add_eid_al_fitr_day_two(name) + self._add_eid_al_fitr_day_three(name) + + if self._year >= 2020: + self._add_eid_al_fitr_day_four(name) + + # Eid al-Adha. + name = tr("عيد الأضحى المبارك") + self._add_arafah_day(name) + self._add_eid_al_adha_day(name) + self._add_eid_al_adha_day_two(name) + self._add_eid_al_adha_day_three(name) + self._add_eid_al_adha_day_four(name) + + +class SD(Sudan): + pass + + +class SDN(Sudan): + pass + + +class SudanIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2020, 2025) + EID_AL_ADHA_DATES = { + 2022: (JUL, 10), + } + + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2020, 2025) + EID_AL_FITR_DATES = { + 2022: (MAY, 1), + } + + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2020, 2025) + HIJRI_NEW_YEAR_DATES = { + 2021: (AUG, 11), + } + + MAWLID_DATES_CONFIRMED_YEARS = (2020, 2025) + MAWLID_DATES = { + 2023: (SEP, 28), + } diff --git a/holidays/groups/islamic.py b/holidays/groups/islamic.py index ff1471789..36a0033cb 100644 --- a/holidays/groups/islamic.py +++ b/holidays/groups/islamic.py @@ -182,6 +182,16 @@ def _add_eid_al_fitr_day_three(self, name) -> set[date]: name, self._islamic_calendar.eid_al_fitr_dates(self._year), days_delta=+2 ) + def _add_eid_al_fitr_day_four(self, name) -> set[date]: + """ + Add Eid al-Fitr Day Four. + + https://en.wikipedia.org/wiki/Eid_al-Fitr + """ + return self._add_islamic_calendar_holiday( + name, self._islamic_calendar.eid_al_fitr_dates(self._year), days_delta=+3 + ) + def _add_eid_al_fitr_eve(self, name) -> set[date]: """ Add Eid al-Fitr Eve (last day of 9th month of Islamic calendar). diff --git a/holidays/locale/ar_SD/LC_MESSAGES/SD.po b/holidays/locale/ar_SD/LC_MESSAGES/SD.po new file mode 100644 index 000000000..81871b0a7 --- /dev/null +++ b/holidays/locale/ar_SD/LC_MESSAGES/SD.po @@ -0,0 +1,64 @@ +# 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 (c) 2017-2023 +# ryanss (c) 2014-2017 +# Website: https://github.com/vacanza/holidays +# License: MIT (see LICENSE file) +# +# Sudan holidays. +# +msgid "" +msgstr "" +"Project-Id-Version: Holidays 0.81\n" +"POT-Creation-Date: 2025-07-12 01:31+0530\n" +"PO-Revision-Date: 2025-07-12 01:31+0530\n" +"Last-Translator: Ansh Anand \n" +"Language-Team: Holidays Localization Team\n" +"Language: ar_SD\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_SD\n" + +#. %s (estimated). +#, c-format +msgid "%s (المقدرة)" +msgstr "" + +#. Independence Day. +msgid "عيد الإستقلال" +msgstr "" + +#. Coptic Christmas Day. +msgid "عيد الميلاد المجيد" +msgstr "" + +#. Coptic Easter. +msgid "عيد الفصح القبطي" +msgstr "" + +#. Christmas Day. +msgid "عيد الميلاد" +msgstr "" + +#. Islamic New Year. +msgid "رأس السنة الهجرية" +msgstr "" + +#. Prophet's Birthday. +msgid "المولد النبوي الشريف" +msgstr "" + +#. Eid al-Fitr. +msgid "عيد الفطر المبارك" +msgstr "" + +#. Eid al-Adha. +msgid "عيد الأضحى المبارك" +msgstr "" diff --git a/holidays/locale/en_US/LC_MESSAGES/SD.po b/holidays/locale/en_US/LC_MESSAGES/SD.po new file mode 100644 index 000000000..ba73260c7 --- /dev/null +++ b/holidays/locale/en_US/LC_MESSAGES/SD.po @@ -0,0 +1,64 @@ +# 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 (c) 2017-2023 +# ryanss (c) 2014-2017 +# Website: https://github.com/vacanza/holidays +# License: MIT (see LICENSE file) +# +# Sudan holidays en_US localization. +# +msgid "" +msgstr "" +"Project-Id-Version: Holidays 0.81\n" +"POT-Creation-Date: 2025-07-12 01:31+0530\n" +"PO-Revision-Date: 2025-07-12 01:31+0530\n" +"Last-Translator: Ansh Anand \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_SD\n" + +#. %s (estimated). +#, c-format +msgid "%s (المقدرة)" +msgstr "%s (estimated)" + +#. Independence Day. +msgid "عيد الإستقلال" +msgstr "Independence Day" + +#. Coptic Christmas Day. +msgid "عيد الميلاد المجيد" +msgstr "Coptic Christmas" + +#. Coptic Easter. +msgid "عيد الفصح القبطي" +msgstr "Coptic Easter" + +#. Christmas Day. +msgid "عيد الميلاد" +msgstr "Christmas Day" + +#. Islamic New Year. +msgid "رأس السنة الهجرية" +msgstr "Islamic New Year" + +#. Prophet's Birthday. +msgid "المولد النبوي الشريف" +msgstr "Prophet's Birthday" + +#. Eid al-Fitr. +msgid "عيد الفطر المبارك" +msgstr "Eid al-Fitr" + +#. Eid al-Adha. +msgid "عيد الأضحى المبارك" +msgstr "Eid al-Adha" diff --git a/holidays/registry.py b/holidays/registry.py index 2ecbd5d3e..2e36f1f59 100644 --- a/holidays/registry.py +++ b/holidays/registry.py @@ -233,6 +233,7 @@ "south_sudan": ("SouthSudan", "SS", "SSD"), "spain": ("Spain", "ES", "ESP"), "sri_lanka": ("SriLanka", "LK", "LKA"), + "sudan": ("Sudan", "SD", "SDN"), "suriname": ("Suriname", "SR", "SUR"), "svalbard_and_jan_mayen": ("SvalbardAndJanMayen", "SJ", "SJM", "HolidaysSJ"), "sweden": ("Sweden", "SE", "SWE"), diff --git a/tests/countries/test_sudan.py b/tests/countries/test_sudan.py new file mode 100644 index 000000000..f6e2e9c31 --- /dev/null +++ b/tests/countries/test_sudan.py @@ -0,0 +1,165 @@ +# 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 (c) 2017-2023 +# ryanss (c) 2014-2017 +# Website: https://github.com/vacanza/holidays +# License: MIT (see LICENSE file) + +from unittest import TestCase + +from holidays.countries.sudan import Sudan, SD, SDN +from tests.common import CommonCountryTests + + +class TestSudan(CommonCountryTests, TestCase): + @classmethod + def setUpClass(cls): + years = range(1985, 2050) + super().setUpClass(Sudan, years=years) + cls.no_estimated_holidays = Sudan(years=years, islamic_show_estimated=False) + + def test_country_aliases(self): + self.assertAliases(Sudan, SD, SDN) + + def test_no_holidays(self): + self.assertNoHolidays(Sudan(years=1984)) + + def test_independence_day(self): + self.assertHolidayName("عيد الإستقلال", (f"{year}-01-01" for year in range(1985, 2050))) + + def test_coptic_christmas(self): + name = "عيد الميلاد المجيد" + self.assertHolidayName( + name, (f"{year}-01-07" for year in (*range(1985, 2011), *range(2019, 2050))) + ) + self.assertNoHolidayName(name, range(2011, 2019)) + + def test_christmas_day(self): + name = "عيد الميلاد" + self.assertHolidayName( + name, (f"{year}-12-25" for year in (*range(1985, 2011), *range(2019, 2050))) + ) + self.assertNoHolidayName(name, range(2011, 2019)) + + def test_coptic_easter(self): + name = "عيد الفصح القبطي" + self.assertHolidayName( + name, + "2019-04-28", + "2020-04-19", + "2021-05-02", + "2022-04-24", + "2023-04-16", + "2024-05-05", + "2025-04-20", + ) + self.assertHolidayName(name, range(1985, 2011), range(2019, 2050)) + self.assertNoHolidayName(name, range(2011, 2019)) + + def test_islamic_new_year(self): + name = "رأس السنة الهجرية" + self.assertHolidayName( + name, + "2020-08-20", + "2021-08-11", + "2022-07-30", + "2023-07-19", + "2024-07-07", + "2025-06-26", + ) + self.assertHolidayName(name, self.no_estimated_holidays, range(1985, 2050)) + + def test_prophets_birthday(self): + name = "المولد النبوي الشريف" + self.assertHolidayName( + name, + "2020-10-29", + "2021-10-18", + "2022-10-08", + "2023-09-28", + "2024-09-15", + "2025-09-04", + ) + self.assertHolidayName(name, self.no_estimated_holidays, range(1985, 2050)) + + def test_eid_al_fitr(self): + name = "عيد الفطر المبارك" + self.assertHolidayName( + name, + "2020-05-24", + "2021-05-13", + "2022-05-01", + "2023-04-21", + "2024-04-10", + "2025-03-30", + ) + self.assertHolidayName(name, self.no_estimated_holidays, range(1985, 2050)) + self.assertHolidayNameCount( + name, 3, self.no_estimated_holidays, set(range(1985, 2020)) - {2000} + ) + self.assertHolidayNameCount( + name, 4, self.no_estimated_holidays, set(range(2020, 2050)) - {2033} + ) + + def test_eid_al_adha(self): + name = "عيد الأضحى المبارك" + self.assertHolidayName( + name, + "2020-07-31", + "2021-07-20", + "2022-07-10", + "2023-06-28", + "2024-06-16", + "2025-06-06", + ) + self.assertHolidayName(name, self.no_estimated_holidays, range(1985, 2050)) + self.assertHolidayNameCount( + name, + 5, + self.no_estimated_holidays, + set(range(1985, 2050)) - {2006, 2007, 2039}, + ) + + def test_l10n_default(self): + self.assertLocalizedHolidays( + ("2022-01-01", "عيد الإستقلال"), + ("2022-01-07", "عيد الميلاد المجيد"), + ("2022-04-24", "عيد الفصح القبطي"), + ("2022-05-01", "عيد الفطر المبارك"), + ("2022-05-02", "عيد الفطر المبارك"), + ("2022-05-03", "عيد الفطر المبارك"), + ("2022-05-04", "عيد الفطر المبارك"), + ("2022-07-09", "عيد الأضحى المبارك"), + ("2022-07-10", "عيد الأضحى المبارك"), + ("2022-07-11", "عيد الأضحى المبارك"), + ("2022-07-12", "عيد الأضحى المبارك"), + ("2022-07-13", "عيد الأضحى المبارك"), + ("2022-07-30", "رأس السنة الهجرية"), + ("2022-10-08", "المولد النبوي الشريف"), + ("2022-12-25", "عيد الميلاد"), + ) + + def test_l10n_en_us(self): + self.assertLocalizedHolidays( + "en_US", + ("2022-01-01", "Independence Day"), + ("2022-01-07", "Coptic Christmas"), + ("2022-04-24", "Coptic Easter"), + ("2022-05-01", "Eid al-Fitr"), + ("2022-05-02", "Eid al-Fitr"), + ("2022-05-03", "Eid al-Fitr"), + ("2022-05-04", "Eid al-Fitr"), + ("2022-07-09", "Eid al-Adha"), + ("2022-07-10", "Eid al-Adha"), + ("2022-07-11", "Eid al-Adha"), + ("2022-07-12", "Eid al-Adha"), + ("2022-07-13", "Eid al-Adha"), + ("2022-07-30", "Islamic New Year"), + ("2022-10-08", "Prophet's Birthday"), + ("2022-12-25", "Christmas Day"), + ) From 9068084b799e7ff7f88d9810c02f8895714f356f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Sep 2025 11:20:42 -0700 Subject: [PATCH 30/34] chore: Update snapshots (#2926) Co-authored-by: github-merge-queue[bot] <118344674+github-merge-queue[bot]@users.noreply.github.com> --- snapshots/countries/SD_COMMON.json | 950 +++++++++++++++++++++++++++++ 1 file changed, 950 insertions(+) create mode 100644 snapshots/countries/SD_COMMON.json diff --git a/snapshots/countries/SD_COMMON.json b/snapshots/countries/SD_COMMON.json new file mode 100644 index 000000000..ff9e7359f --- /dev/null +++ b/snapshots/countries/SD_COMMON.json @@ -0,0 +1,950 @@ +{ + "1985-01-01": "Independence Day", + "1985-01-07": "Coptic Christmas", + "1985-04-14": "Coptic Easter", + "1985-06-19": "Eid al-Fitr (estimated)", + "1985-06-20": "Eid al-Fitr (estimated)", + "1985-06-21": "Eid al-Fitr (estimated)", + "1985-08-25": "Eid al-Adha (estimated)", + "1985-08-26": "Eid al-Adha (estimated)", + "1985-08-27": "Eid al-Adha (estimated)", + "1985-08-28": "Eid al-Adha (estimated)", + "1985-08-29": "Eid al-Adha (estimated)", + "1985-09-15": "Islamic New Year (estimated)", + "1985-11-24": "Prophet's Birthday (estimated)", + "1985-12-25": "Christmas Day", + "1986-01-01": "Independence Day", + "1986-01-07": "Coptic Christmas", + "1986-05-04": "Coptic Easter", + "1986-06-08": "Eid al-Fitr (estimated)", + "1986-06-09": "Eid al-Fitr (estimated)", + "1986-06-10": "Eid al-Fitr (estimated)", + "1986-08-14": "Eid al-Adha (estimated)", + "1986-08-15": "Eid al-Adha (estimated)", + "1986-08-16": "Eid al-Adha (estimated)", + "1986-08-17": "Eid al-Adha (estimated)", + "1986-08-18": "Eid al-Adha (estimated)", + "1986-09-05": "Islamic New Year (estimated)", + "1986-11-14": "Prophet's Birthday (estimated)", + "1986-12-25": "Christmas Day", + "1987-01-01": "Independence Day", + "1987-01-07": "Coptic Christmas", + "1987-04-19": "Coptic Easter", + "1987-05-28": "Eid al-Fitr (estimated)", + "1987-05-29": "Eid al-Fitr (estimated)", + "1987-05-30": "Eid al-Fitr (estimated)", + "1987-08-03": "Eid al-Adha (estimated)", + "1987-08-04": "Eid al-Adha (estimated)", + "1987-08-05": "Eid al-Adha (estimated)", + "1987-08-06": "Eid al-Adha (estimated)", + "1987-08-07": "Eid al-Adha (estimated)", + "1987-08-25": "Islamic New Year (estimated)", + "1987-11-03": "Prophet's Birthday (estimated)", + "1987-12-25": "Christmas Day", + "1988-01-01": "Independence Day", + "1988-01-07": "Coptic Christmas", + "1988-04-10": "Coptic Easter", + "1988-05-16": "Eid al-Fitr (estimated)", + "1988-05-17": "Eid al-Fitr (estimated)", + "1988-05-18": "Eid al-Fitr (estimated)", + "1988-07-22": "Eid al-Adha (estimated)", + "1988-07-23": "Eid al-Adha (estimated)", + "1988-07-24": "Eid al-Adha (estimated)", + "1988-07-25": "Eid al-Adha (estimated)", + "1988-07-26": "Eid al-Adha (estimated)", + "1988-08-13": "Islamic New Year (estimated)", + "1988-10-22": "Prophet's Birthday (estimated)", + "1988-12-25": "Christmas Day", + "1989-01-01": "Independence Day", + "1989-01-07": "Coptic Christmas", + "1989-04-30": "Coptic Easter", + "1989-05-06": "Eid al-Fitr (estimated)", + "1989-05-07": "Eid al-Fitr (estimated)", + "1989-05-08": "Eid al-Fitr (estimated)", + "1989-07-12": "Eid al-Adha (estimated)", + "1989-07-13": "Eid al-Adha (estimated)", + "1989-07-14": "Eid al-Adha (estimated)", + "1989-07-15": "Eid al-Adha (estimated)", + "1989-07-16": "Eid al-Adha (estimated)", + "1989-08-02": "Islamic New Year (estimated)", + "1989-10-11": "Prophet's Birthday (estimated)", + "1989-12-25": "Christmas Day", + "1990-01-01": "Independence Day", + "1990-01-07": "Coptic Christmas", + "1990-04-15": "Coptic Easter", + "1990-04-26": "Eid al-Fitr (estimated)", + "1990-04-27": "Eid al-Fitr (estimated)", + "1990-04-28": "Eid al-Fitr (estimated)", + "1990-07-01": "Eid al-Adha (estimated)", + "1990-07-02": "Eid al-Adha (estimated)", + "1990-07-03": "Eid al-Adha (estimated)", + "1990-07-04": "Eid al-Adha (estimated)", + "1990-07-05": "Eid al-Adha (estimated)", + "1990-07-23": "Islamic New Year (estimated)", + "1990-10-01": "Prophet's Birthday (estimated)", + "1990-12-25": "Christmas Day", + "1991-01-01": "Independence Day", + "1991-01-07": "Coptic Christmas", + "1991-04-07": "Coptic Easter", + "1991-04-15": "Eid al-Fitr (estimated)", + "1991-04-16": "Eid al-Fitr (estimated)", + "1991-04-17": "Eid al-Fitr (estimated)", + "1991-06-21": "Eid al-Adha (estimated)", + "1991-06-22": "Eid al-Adha (estimated)", + "1991-06-23": "Eid al-Adha (estimated)", + "1991-06-24": "Eid al-Adha (estimated)", + "1991-06-25": "Eid al-Adha (estimated)", + "1991-07-12": "Islamic New Year (estimated)", + "1991-09-20": "Prophet's Birthday (estimated)", + "1991-12-25": "Christmas Day", + "1992-01-01": "Independence Day", + "1992-01-07": "Coptic Christmas", + "1992-04-04": "Eid al-Fitr (estimated)", + "1992-04-05": "Eid al-Fitr (estimated)", + "1992-04-06": "Eid al-Fitr (estimated)", + "1992-04-26": "Coptic Easter", + "1992-06-10": "Eid al-Adha (estimated)", + "1992-06-11": "Eid al-Adha (estimated)", + "1992-06-12": "Eid al-Adha (estimated)", + "1992-06-13": "Eid al-Adha (estimated)", + "1992-06-14": "Eid al-Adha (estimated)", + "1992-07-01": "Islamic New Year (estimated)", + "1992-09-09": "Prophet's Birthday (estimated)", + "1992-12-25": "Christmas Day", + "1993-01-01": "Independence Day", + "1993-01-07": "Coptic Christmas", + "1993-03-24": "Eid al-Fitr (estimated)", + "1993-03-25": "Eid al-Fitr (estimated)", + "1993-03-26": "Eid al-Fitr (estimated)", + "1993-04-18": "Coptic Easter", + "1993-05-30": "Eid al-Adha (estimated)", + "1993-05-31": "Eid al-Adha (estimated)", + "1993-06-01": "Eid al-Adha (estimated)", + "1993-06-02": "Eid al-Adha (estimated)", + "1993-06-03": "Eid al-Adha (estimated)", + "1993-06-21": "Islamic New Year (estimated)", + "1993-08-29": "Prophet's Birthday (estimated)", + "1993-12-25": "Christmas Day", + "1994-01-01": "Independence Day", + "1994-01-07": "Coptic Christmas", + "1994-03-13": "Eid al-Fitr (estimated)", + "1994-03-14": "Eid al-Fitr (estimated)", + "1994-03-15": "Eid al-Fitr (estimated)", + "1994-05-01": "Coptic Easter", + "1994-05-19": "Eid al-Adha (estimated)", + "1994-05-20": "Eid al-Adha (estimated)", + "1994-05-21": "Eid al-Adha (estimated)", + "1994-05-22": "Eid al-Adha (estimated)", + "1994-05-23": "Eid al-Adha (estimated)", + "1994-06-10": "Islamic New Year (estimated)", + "1994-08-19": "Prophet's Birthday (estimated)", + "1994-12-25": "Christmas Day", + "1995-01-01": "Independence Day", + "1995-01-07": "Coptic Christmas", + "1995-03-02": "Eid al-Fitr (estimated)", + "1995-03-03": "Eid al-Fitr (estimated)", + "1995-03-04": "Eid al-Fitr (estimated)", + "1995-04-23": "Coptic Easter", + "1995-05-08": "Eid al-Adha (estimated)", + "1995-05-09": "Eid al-Adha (estimated)", + "1995-05-10": "Eid al-Adha (estimated)", + "1995-05-11": "Eid al-Adha (estimated)", + "1995-05-12": "Eid al-Adha (estimated)", + "1995-05-30": "Islamic New Year (estimated)", + "1995-08-08": "Prophet's Birthday (estimated)", + "1995-12-25": "Christmas Day", + "1996-01-01": "Independence Day", + "1996-01-07": "Coptic Christmas", + "1996-02-19": "Eid al-Fitr (estimated)", + "1996-02-20": "Eid al-Fitr (estimated)", + "1996-02-21": "Eid al-Fitr (estimated)", + "1996-04-14": "Coptic Easter", + "1996-04-26": "Eid al-Adha (estimated)", + "1996-04-27": "Eid al-Adha (estimated)", + "1996-04-28": "Eid al-Adha (estimated)", + "1996-04-29": "Eid al-Adha (estimated)", + "1996-04-30": "Eid al-Adha (estimated)", + "1996-05-18": "Islamic New Year (estimated)", + "1996-07-27": "Prophet's Birthday (estimated)", + "1996-12-25": "Christmas Day", + "1997-01-01": "Independence Day", + "1997-01-07": "Coptic Christmas", + "1997-02-08": "Eid al-Fitr (estimated)", + "1997-02-09": "Eid al-Fitr (estimated)", + "1997-02-10": "Eid al-Fitr (estimated)", + "1997-04-16": "Eid al-Adha (estimated)", + "1997-04-17": "Eid al-Adha (estimated)", + "1997-04-18": "Eid al-Adha (estimated)", + "1997-04-19": "Eid al-Adha (estimated)", + "1997-04-20": "Eid al-Adha (estimated)", + "1997-04-27": "Coptic Easter", + "1997-05-07": "Islamic New Year (estimated)", + "1997-07-16": "Prophet's Birthday (estimated)", + "1997-12-25": "Christmas Day", + "1998-01-01": "Independence Day", + "1998-01-07": "Coptic Christmas", + "1998-01-29": "Eid al-Fitr (estimated)", + "1998-01-30": "Eid al-Fitr (estimated)", + "1998-01-31": "Eid al-Fitr (estimated)", + "1998-04-06": "Eid al-Adha (estimated)", + "1998-04-07": "Eid al-Adha (estimated)", + "1998-04-08": "Eid al-Adha (estimated)", + "1998-04-09": "Eid al-Adha (estimated)", + "1998-04-10": "Eid al-Adha (estimated)", + "1998-04-19": "Coptic Easter", + "1998-04-27": "Islamic New Year (estimated)", + "1998-07-06": "Prophet's Birthday (estimated)", + "1998-12-25": "Christmas Day", + "1999-01-01": "Independence Day", + "1999-01-07": "Coptic Christmas", + "1999-01-18": "Eid al-Fitr (estimated)", + "1999-01-19": "Eid al-Fitr (estimated)", + "1999-01-20": "Eid al-Fitr (estimated)", + "1999-03-26": "Eid al-Adha (estimated)", + "1999-03-27": "Eid al-Adha (estimated)", + "1999-03-28": "Eid al-Adha (estimated)", + "1999-03-29": "Eid al-Adha (estimated)", + "1999-03-30": "Eid al-Adha (estimated)", + "1999-04-11": "Coptic Easter", + "1999-04-17": "Islamic New Year (estimated)", + "1999-06-26": "Prophet's Birthday (estimated)", + "1999-12-25": "Christmas Day", + "2000-01-01": "Independence Day", + "2000-01-07": "Coptic Christmas", + "2000-01-08": "Eid al-Fitr (estimated)", + "2000-01-09": "Eid al-Fitr (estimated)", + "2000-01-10": "Eid al-Fitr (estimated)", + "2000-03-15": "Eid al-Adha (estimated)", + "2000-03-16": "Eid al-Adha (estimated)", + "2000-03-17": "Eid al-Adha (estimated)", + "2000-03-18": "Eid al-Adha (estimated)", + "2000-03-19": "Eid al-Adha (estimated)", + "2000-04-06": "Islamic New Year (estimated)", + "2000-04-30": "Coptic Easter", + "2000-06-14": "Prophet's Birthday (estimated)", + "2000-12-25": "Christmas Day", + "2000-12-27": "Eid al-Fitr (estimated)", + "2000-12-28": "Eid al-Fitr (estimated)", + "2000-12-29": "Eid al-Fitr (estimated)", + "2001-01-01": "Independence Day", + "2001-01-07": "Coptic Christmas", + "2001-03-04": "Eid al-Adha (estimated)", + "2001-03-05": "Eid al-Adha (estimated)", + "2001-03-06": "Eid al-Adha (estimated)", + "2001-03-07": "Eid al-Adha (estimated)", + "2001-03-08": "Eid al-Adha (estimated)", + "2001-03-26": "Islamic New Year (estimated)", + "2001-04-15": "Coptic Easter", + "2001-06-04": "Prophet's Birthday (estimated)", + "2001-12-16": "Eid al-Fitr (estimated)", + "2001-12-17": "Eid al-Fitr (estimated)", + "2001-12-18": "Eid al-Fitr (estimated)", + "2001-12-25": "Christmas Day", + "2002-01-01": "Independence Day", + "2002-01-07": "Coptic Christmas", + "2002-02-21": "Eid al-Adha (estimated)", + "2002-02-22": "Eid al-Adha (estimated)", + "2002-02-23": "Eid al-Adha (estimated)", + "2002-02-24": "Eid al-Adha (estimated)", + "2002-02-25": "Eid al-Adha (estimated)", + "2002-03-15": "Islamic New Year (estimated)", + "2002-05-05": "Coptic Easter", + "2002-05-24": "Prophet's Birthday (estimated)", + "2002-12-05": "Eid al-Fitr (estimated)", + "2002-12-06": "Eid al-Fitr (estimated)", + "2002-12-07": "Eid al-Fitr (estimated)", + "2002-12-25": "Christmas Day", + "2003-01-01": "Independence Day", + "2003-01-07": "Coptic Christmas", + "2003-02-10": "Eid al-Adha (estimated)", + "2003-02-11": "Eid al-Adha (estimated)", + "2003-02-12": "Eid al-Adha (estimated)", + "2003-02-13": "Eid al-Adha (estimated)", + "2003-02-14": "Eid al-Adha (estimated)", + "2003-03-04": "Islamic New Year (estimated)", + "2003-04-27": "Coptic Easter", + "2003-05-13": "Prophet's Birthday (estimated)", + "2003-11-25": "Eid al-Fitr (estimated)", + "2003-11-26": "Eid al-Fitr (estimated)", + "2003-11-27": "Eid al-Fitr (estimated)", + "2003-12-25": "Christmas Day", + "2004-01-01": "Independence Day", + "2004-01-07": "Coptic Christmas", + "2004-01-31": "Eid al-Adha (estimated)", + "2004-02-01": "Eid al-Adha (estimated)", + "2004-02-02": "Eid al-Adha (estimated)", + "2004-02-03": "Eid al-Adha (estimated)", + "2004-02-04": "Eid al-Adha (estimated)", + "2004-02-21": "Islamic New Year (estimated)", + "2004-04-11": "Coptic Easter", + "2004-05-01": "Prophet's Birthday (estimated)", + "2004-11-14": "Eid al-Fitr (estimated)", + "2004-11-15": "Eid al-Fitr (estimated)", + "2004-11-16": "Eid al-Fitr (estimated)", + "2004-12-25": "Christmas Day", + "2005-01-01": "Independence Day", + "2005-01-07": "Coptic Christmas", + "2005-01-20": "Eid al-Adha (estimated)", + "2005-01-21": "Eid al-Adha (estimated)", + "2005-01-22": "Eid al-Adha (estimated)", + "2005-01-23": "Eid al-Adha (estimated)", + "2005-01-24": "Eid al-Adha (estimated)", + "2005-02-10": "Islamic New Year (estimated)", + "2005-04-21": "Prophet's Birthday (estimated)", + "2005-05-01": "Coptic Easter", + "2005-11-03": "Eid al-Fitr (estimated)", + "2005-11-04": "Eid al-Fitr (estimated)", + "2005-11-05": "Eid al-Fitr (estimated)", + "2005-12-25": "Christmas Day", + "2006-01-01": "Independence Day", + "2006-01-07": "Coptic Christmas", + "2006-01-09": "Eid al-Adha (estimated)", + "2006-01-10": "Eid al-Adha (estimated)", + "2006-01-11": "Eid al-Adha (estimated)", + "2006-01-12": "Eid al-Adha (estimated)", + "2006-01-13": "Eid al-Adha (estimated)", + "2006-01-31": "Islamic New Year (estimated)", + "2006-04-10": "Prophet's Birthday (estimated)", + "2006-04-23": "Coptic Easter", + "2006-10-23": "Eid al-Fitr (estimated)", + "2006-10-24": "Eid al-Fitr (estimated)", + "2006-10-25": "Eid al-Fitr (estimated)", + "2006-12-25": "Christmas Day", + "2006-12-30": "Eid al-Adha (estimated)", + "2006-12-31": "Eid al-Adha (estimated)", + "2007-01-01": "Eid al-Adha (estimated); Independence Day", + "2007-01-02": "Eid al-Adha (estimated)", + "2007-01-03": "Eid al-Adha (estimated)", + "2007-01-07": "Coptic Christmas", + "2007-01-20": "Islamic New Year (estimated)", + "2007-03-31": "Prophet's Birthday (estimated)", + "2007-04-08": "Coptic Easter", + "2007-10-13": "Eid al-Fitr (estimated)", + "2007-10-14": "Eid al-Fitr (estimated)", + "2007-10-15": "Eid al-Fitr (estimated)", + "2007-12-19": "Eid al-Adha (estimated)", + "2007-12-20": "Eid al-Adha (estimated)", + "2007-12-21": "Eid al-Adha (estimated)", + "2007-12-22": "Eid al-Adha (estimated)", + "2007-12-23": "Eid al-Adha (estimated)", + "2007-12-25": "Christmas Day", + "2008-01-01": "Independence Day", + "2008-01-07": "Coptic Christmas", + "2008-01-10": "Islamic New Year (estimated)", + "2008-03-20": "Prophet's Birthday (estimated)", + "2008-04-27": "Coptic Easter", + "2008-10-01": "Eid al-Fitr (estimated)", + "2008-10-02": "Eid al-Fitr (estimated)", + "2008-10-03": "Eid al-Fitr (estimated)", + "2008-12-07": "Eid al-Adha (estimated)", + "2008-12-08": "Eid al-Adha (estimated)", + "2008-12-09": "Eid al-Adha (estimated)", + "2008-12-10": "Eid al-Adha (estimated)", + "2008-12-11": "Eid al-Adha (estimated)", + "2008-12-25": "Christmas Day", + "2008-12-29": "Islamic New Year (estimated)", + "2009-01-01": "Independence Day", + "2009-01-07": "Coptic Christmas", + "2009-03-09": "Prophet's Birthday (estimated)", + "2009-04-19": "Coptic Easter", + "2009-09-20": "Eid al-Fitr (estimated)", + "2009-09-21": "Eid al-Fitr (estimated)", + "2009-09-22": "Eid al-Fitr (estimated)", + "2009-11-26": "Eid al-Adha (estimated)", + "2009-11-27": "Eid al-Adha (estimated)", + "2009-11-28": "Eid al-Adha (estimated)", + "2009-11-29": "Eid al-Adha (estimated)", + "2009-11-30": "Eid al-Adha (estimated)", + "2009-12-18": "Islamic New Year (estimated)", + "2009-12-25": "Christmas Day", + "2010-01-01": "Independence Day", + "2010-01-07": "Coptic Christmas", + "2010-02-26": "Prophet's Birthday (estimated)", + "2010-04-04": "Coptic Easter", + "2010-09-10": "Eid al-Fitr (estimated)", + "2010-09-11": "Eid al-Fitr (estimated)", + "2010-09-12": "Eid al-Fitr (estimated)", + "2010-11-15": "Eid al-Adha (estimated)", + "2010-11-16": "Eid al-Adha (estimated)", + "2010-11-17": "Eid al-Adha (estimated)", + "2010-11-18": "Eid al-Adha (estimated)", + "2010-11-19": "Eid al-Adha (estimated)", + "2010-12-07": "Islamic New Year (estimated)", + "2010-12-25": "Christmas Day", + "2011-01-01": "Independence Day", + "2011-02-15": "Prophet's Birthday (estimated)", + "2011-08-30": "Eid al-Fitr (estimated)", + "2011-08-31": "Eid al-Fitr (estimated)", + "2011-09-01": "Eid al-Fitr (estimated)", + "2011-11-05": "Eid al-Adha (estimated)", + "2011-11-06": "Eid al-Adha (estimated)", + "2011-11-07": "Eid al-Adha (estimated)", + "2011-11-08": "Eid al-Adha (estimated)", + "2011-11-09": "Eid al-Adha (estimated)", + "2011-11-26": "Islamic New Year (estimated)", + "2012-01-01": "Independence Day", + "2012-02-04": "Prophet's Birthday (estimated)", + "2012-08-19": "Eid al-Fitr (estimated)", + "2012-08-20": "Eid al-Fitr (estimated)", + "2012-08-21": "Eid al-Fitr (estimated)", + "2012-10-25": "Eid al-Adha (estimated)", + "2012-10-26": "Eid al-Adha (estimated)", + "2012-10-27": "Eid al-Adha (estimated)", + "2012-10-28": "Eid al-Adha (estimated)", + "2012-10-29": "Eid al-Adha (estimated)", + "2012-11-15": "Islamic New Year (estimated)", + "2013-01-01": "Independence Day", + "2013-01-24": "Prophet's Birthday (estimated)", + "2013-08-08": "Eid al-Fitr (estimated)", + "2013-08-09": "Eid al-Fitr (estimated)", + "2013-08-10": "Eid al-Fitr (estimated)", + "2013-10-14": "Eid al-Adha (estimated)", + "2013-10-15": "Eid al-Adha (estimated)", + "2013-10-16": "Eid al-Adha (estimated)", + "2013-10-17": "Eid al-Adha (estimated)", + "2013-10-18": "Eid al-Adha (estimated)", + "2013-11-04": "Islamic New Year (estimated)", + "2014-01-01": "Independence Day", + "2014-01-13": "Prophet's Birthday (estimated)", + "2014-07-28": "Eid al-Fitr (estimated)", + "2014-07-29": "Eid al-Fitr (estimated)", + "2014-07-30": "Eid al-Fitr (estimated)", + "2014-10-03": "Eid al-Adha (estimated)", + "2014-10-04": "Eid al-Adha (estimated)", + "2014-10-05": "Eid al-Adha (estimated)", + "2014-10-06": "Eid al-Adha (estimated)", + "2014-10-07": "Eid al-Adha (estimated)", + "2014-10-25": "Islamic New Year (estimated)", + "2015-01-01": "Independence Day", + "2015-01-03": "Prophet's Birthday (estimated)", + "2015-07-17": "Eid al-Fitr (estimated)", + "2015-07-18": "Eid al-Fitr (estimated)", + "2015-07-19": "Eid al-Fitr (estimated)", + "2015-09-22": "Eid al-Adha (estimated)", + "2015-09-23": "Eid al-Adha (estimated)", + "2015-09-24": "Eid al-Adha (estimated)", + "2015-09-25": "Eid al-Adha (estimated)", + "2015-09-26": "Eid al-Adha (estimated)", + "2015-10-14": "Islamic New Year (estimated)", + "2015-12-23": "Prophet's Birthday (estimated)", + "2016-01-01": "Independence Day", + "2016-07-06": "Eid al-Fitr (estimated)", + "2016-07-07": "Eid al-Fitr (estimated)", + "2016-07-08": "Eid al-Fitr (estimated)", + "2016-09-10": "Eid al-Adha (estimated)", + "2016-09-11": "Eid al-Adha (estimated)", + "2016-09-12": "Eid al-Adha (estimated)", + "2016-09-13": "Eid al-Adha (estimated)", + "2016-09-14": "Eid al-Adha (estimated)", + "2016-10-02": "Islamic New Year (estimated)", + "2016-12-11": "Prophet's Birthday (estimated)", + "2017-01-01": "Independence Day", + "2017-06-25": "Eid al-Fitr (estimated)", + "2017-06-26": "Eid al-Fitr (estimated)", + "2017-06-27": "Eid al-Fitr (estimated)", + "2017-08-31": "Eid al-Adha (estimated)", + "2017-09-01": "Eid al-Adha (estimated)", + "2017-09-02": "Eid al-Adha (estimated)", + "2017-09-03": "Eid al-Adha (estimated)", + "2017-09-04": "Eid al-Adha (estimated)", + "2017-09-21": "Islamic New Year (estimated)", + "2017-11-30": "Prophet's Birthday (estimated)", + "2018-01-01": "Independence Day", + "2018-06-15": "Eid al-Fitr (estimated)", + "2018-06-16": "Eid al-Fitr (estimated)", + "2018-06-17": "Eid al-Fitr (estimated)", + "2018-08-20": "Eid al-Adha (estimated)", + "2018-08-21": "Eid al-Adha (estimated)", + "2018-08-22": "Eid al-Adha (estimated)", + "2018-08-23": "Eid al-Adha (estimated)", + "2018-08-24": "Eid al-Adha (estimated)", + "2018-09-11": "Islamic New Year (estimated)", + "2018-11-20": "Prophet's Birthday (estimated)", + "2019-01-01": "Independence Day", + "2019-01-07": "Coptic Christmas", + "2019-04-28": "Coptic Easter", + "2019-06-04": "Eid al-Fitr (estimated)", + "2019-06-05": "Eid al-Fitr (estimated)", + "2019-06-06": "Eid al-Fitr (estimated)", + "2019-08-10": "Eid al-Adha (estimated)", + "2019-08-11": "Eid al-Adha (estimated)", + "2019-08-12": "Eid al-Adha (estimated)", + "2019-08-13": "Eid al-Adha (estimated)", + "2019-08-14": "Eid al-Adha (estimated)", + "2019-08-31": "Islamic New Year (estimated)", + "2019-11-09": "Prophet's Birthday (estimated)", + "2019-12-25": "Christmas Day", + "2020-01-01": "Independence Day", + "2020-01-07": "Coptic Christmas", + "2020-04-19": "Coptic Easter", + "2020-05-24": "Eid al-Fitr", + "2020-05-25": "Eid al-Fitr", + "2020-05-26": "Eid al-Fitr", + "2020-05-27": "Eid al-Fitr", + "2020-07-30": "Eid al-Adha", + "2020-07-31": "Eid al-Adha", + "2020-08-01": "Eid al-Adha", + "2020-08-02": "Eid al-Adha", + "2020-08-03": "Eid al-Adha", + "2020-08-20": "Islamic New Year", + "2020-10-29": "Prophet's Birthday", + "2020-12-25": "Christmas Day", + "2021-01-01": "Independence Day", + "2021-01-07": "Coptic Christmas", + "2021-05-02": "Coptic Easter", + "2021-05-13": "Eid al-Fitr", + "2021-05-14": "Eid al-Fitr", + "2021-05-15": "Eid al-Fitr", + "2021-05-16": "Eid al-Fitr", + "2021-07-19": "Eid al-Adha", + "2021-07-20": "Eid al-Adha", + "2021-07-21": "Eid al-Adha", + "2021-07-22": "Eid al-Adha", + "2021-07-23": "Eid al-Adha", + "2021-08-11": "Islamic New Year", + "2021-10-18": "Prophet's Birthday", + "2021-12-25": "Christmas Day", + "2022-01-01": "Independence Day", + "2022-01-07": "Coptic Christmas", + "2022-04-24": "Coptic Easter", + "2022-05-01": "Eid al-Fitr", + "2022-05-02": "Eid al-Fitr", + "2022-05-03": "Eid al-Fitr", + "2022-05-04": "Eid al-Fitr", + "2022-07-09": "Eid al-Adha", + "2022-07-10": "Eid al-Adha", + "2022-07-11": "Eid al-Adha", + "2022-07-12": "Eid al-Adha", + "2022-07-13": "Eid al-Adha", + "2022-07-30": "Islamic New Year", + "2022-10-08": "Prophet's Birthday", + "2022-12-25": "Christmas Day", + "2023-01-01": "Independence Day", + "2023-01-07": "Coptic Christmas", + "2023-04-16": "Coptic Easter", + "2023-04-21": "Eid al-Fitr", + "2023-04-22": "Eid al-Fitr", + "2023-04-23": "Eid al-Fitr", + "2023-04-24": "Eid al-Fitr", + "2023-06-27": "Eid al-Adha", + "2023-06-28": "Eid al-Adha", + "2023-06-29": "Eid al-Adha", + "2023-06-30": "Eid al-Adha", + "2023-07-01": "Eid al-Adha", + "2023-07-19": "Islamic New Year", + "2023-09-28": "Prophet's Birthday", + "2023-12-25": "Christmas Day", + "2024-01-01": "Independence Day", + "2024-01-07": "Coptic Christmas", + "2024-04-10": "Eid al-Fitr", + "2024-04-11": "Eid al-Fitr", + "2024-04-12": "Eid al-Fitr", + "2024-04-13": "Eid al-Fitr", + "2024-05-05": "Coptic Easter", + "2024-06-15": "Eid al-Adha", + "2024-06-16": "Eid al-Adha", + "2024-06-17": "Eid al-Adha", + "2024-06-18": "Eid al-Adha", + "2024-06-19": "Eid al-Adha", + "2024-07-07": "Islamic New Year", + "2024-09-15": "Prophet's Birthday", + "2024-12-25": "Christmas Day", + "2025-01-01": "Independence Day", + "2025-01-07": "Coptic Christmas", + "2025-03-30": "Eid al-Fitr", + "2025-03-31": "Eid al-Fitr", + "2025-04-01": "Eid al-Fitr", + "2025-04-02": "Eid al-Fitr", + "2025-04-20": "Coptic Easter", + "2025-06-05": "Eid al-Adha", + "2025-06-06": "Eid al-Adha", + "2025-06-07": "Eid al-Adha", + "2025-06-08": "Eid al-Adha", + "2025-06-09": "Eid al-Adha", + "2025-06-26": "Islamic New Year", + "2025-09-04": "Prophet's Birthday", + "2025-12-25": "Christmas Day", + "2026-01-01": "Independence Day", + "2026-01-07": "Coptic Christmas", + "2026-03-20": "Eid al-Fitr (estimated)", + "2026-03-21": "Eid al-Fitr (estimated)", + "2026-03-22": "Eid al-Fitr (estimated)", + "2026-03-23": "Eid al-Fitr (estimated)", + "2026-04-12": "Coptic Easter", + "2026-05-26": "Eid al-Adha (estimated)", + "2026-05-27": "Eid al-Adha (estimated)", + "2026-05-28": "Eid al-Adha (estimated)", + "2026-05-29": "Eid al-Adha (estimated)", + "2026-05-30": "Eid al-Adha (estimated)", + "2026-06-16": "Islamic New Year (estimated)", + "2026-08-25": "Prophet's Birthday (estimated)", + "2026-12-25": "Christmas Day", + "2027-01-01": "Independence Day", + "2027-01-07": "Coptic Christmas", + "2027-03-09": "Eid al-Fitr (estimated)", + "2027-03-10": "Eid al-Fitr (estimated)", + "2027-03-11": "Eid al-Fitr (estimated)", + "2027-03-12": "Eid al-Fitr (estimated)", + "2027-05-02": "Coptic Easter", + "2027-05-15": "Eid al-Adha (estimated)", + "2027-05-16": "Eid al-Adha (estimated)", + "2027-05-17": "Eid al-Adha (estimated)", + "2027-05-18": "Eid al-Adha (estimated)", + "2027-05-19": "Eid al-Adha (estimated)", + "2027-06-06": "Islamic New Year (estimated)", + "2027-08-14": "Prophet's Birthday (estimated)", + "2027-12-25": "Christmas Day", + "2028-01-01": "Independence Day", + "2028-01-07": "Coptic Christmas", + "2028-02-26": "Eid al-Fitr (estimated)", + "2028-02-27": "Eid al-Fitr (estimated)", + "2028-02-28": "Eid al-Fitr (estimated)", + "2028-02-29": "Eid al-Fitr (estimated)", + "2028-04-16": "Coptic Easter", + "2028-05-04": "Eid al-Adha (estimated)", + "2028-05-05": "Eid al-Adha (estimated)", + "2028-05-06": "Eid al-Adha (estimated)", + "2028-05-07": "Eid al-Adha (estimated)", + "2028-05-08": "Eid al-Adha (estimated)", + "2028-05-25": "Islamic New Year (estimated)", + "2028-08-03": "Prophet's Birthday (estimated)", + "2028-12-25": "Christmas Day", + "2029-01-01": "Independence Day", + "2029-01-07": "Coptic Christmas", + "2029-02-14": "Eid al-Fitr (estimated)", + "2029-02-15": "Eid al-Fitr (estimated)", + "2029-02-16": "Eid al-Fitr (estimated)", + "2029-02-17": "Eid al-Fitr (estimated)", + "2029-04-08": "Coptic Easter", + "2029-04-23": "Eid al-Adha (estimated)", + "2029-04-24": "Eid al-Adha (estimated)", + "2029-04-25": "Eid al-Adha (estimated)", + "2029-04-26": "Eid al-Adha (estimated)", + "2029-04-27": "Eid al-Adha (estimated)", + "2029-05-14": "Islamic New Year (estimated)", + "2029-07-24": "Prophet's Birthday (estimated)", + "2029-12-25": "Christmas Day", + "2030-01-01": "Independence Day", + "2030-01-07": "Coptic Christmas", + "2030-02-04": "Eid al-Fitr (estimated)", + "2030-02-05": "Eid al-Fitr (estimated)", + "2030-02-06": "Eid al-Fitr (estimated)", + "2030-02-07": "Eid al-Fitr (estimated)", + "2030-04-12": "Eid al-Adha (estimated)", + "2030-04-13": "Eid al-Adha (estimated)", + "2030-04-14": "Eid al-Adha (estimated)", + "2030-04-15": "Eid al-Adha (estimated)", + "2030-04-16": "Eid al-Adha (estimated)", + "2030-04-28": "Coptic Easter", + "2030-05-03": "Islamic New Year (estimated)", + "2030-07-13": "Prophet's Birthday (estimated)", + "2030-12-25": "Christmas Day", + "2031-01-01": "Independence Day", + "2031-01-07": "Coptic Christmas", + "2031-01-24": "Eid al-Fitr (estimated)", + "2031-01-25": "Eid al-Fitr (estimated)", + "2031-01-26": "Eid al-Fitr (estimated)", + "2031-01-27": "Eid al-Fitr (estimated)", + "2031-04-01": "Eid al-Adha (estimated)", + "2031-04-02": "Eid al-Adha (estimated)", + "2031-04-03": "Eid al-Adha (estimated)", + "2031-04-04": "Eid al-Adha (estimated)", + "2031-04-05": "Eid al-Adha (estimated)", + "2031-04-13": "Coptic Easter", + "2031-04-23": "Islamic New Year (estimated)", + "2031-07-02": "Prophet's Birthday (estimated)", + "2031-12-25": "Christmas Day", + "2032-01-01": "Independence Day", + "2032-01-07": "Coptic Christmas", + "2032-01-14": "Eid al-Fitr (estimated)", + "2032-01-15": "Eid al-Fitr (estimated)", + "2032-01-16": "Eid al-Fitr (estimated)", + "2032-01-17": "Eid al-Fitr (estimated)", + "2032-03-21": "Eid al-Adha (estimated)", + "2032-03-22": "Eid al-Adha (estimated)", + "2032-03-23": "Eid al-Adha (estimated)", + "2032-03-24": "Eid al-Adha (estimated)", + "2032-03-25": "Eid al-Adha (estimated)", + "2032-04-11": "Islamic New Year (estimated)", + "2032-05-02": "Coptic Easter", + "2032-06-20": "Prophet's Birthday (estimated)", + "2032-12-25": "Christmas Day", + "2033-01-01": "Independence Day", + "2033-01-02": "Eid al-Fitr (estimated)", + "2033-01-03": "Eid al-Fitr (estimated)", + "2033-01-04": "Eid al-Fitr (estimated)", + "2033-01-05": "Eid al-Fitr (estimated)", + "2033-01-07": "Coptic Christmas", + "2033-03-10": "Eid al-Adha (estimated)", + "2033-03-11": "Eid al-Adha (estimated)", + "2033-03-12": "Eid al-Adha (estimated)", + "2033-03-13": "Eid al-Adha (estimated)", + "2033-03-14": "Eid al-Adha (estimated)", + "2033-04-01": "Islamic New Year (estimated)", + "2033-04-24": "Coptic Easter", + "2033-06-09": "Prophet's Birthday (estimated)", + "2033-12-23": "Eid al-Fitr (estimated)", + "2033-12-24": "Eid al-Fitr (estimated)", + "2033-12-25": "Christmas Day; Eid al-Fitr (estimated)", + "2033-12-26": "Eid al-Fitr (estimated)", + "2034-01-01": "Independence Day", + "2034-01-07": "Coptic Christmas", + "2034-02-28": "Eid al-Adha (estimated)", + "2034-03-01": "Eid al-Adha (estimated)", + "2034-03-02": "Eid al-Adha (estimated)", + "2034-03-03": "Eid al-Adha (estimated)", + "2034-03-04": "Eid al-Adha (estimated)", + "2034-03-21": "Islamic New Year (estimated)", + "2034-04-09": "Coptic Easter", + "2034-05-30": "Prophet's Birthday (estimated)", + "2034-12-12": "Eid al-Fitr (estimated)", + "2034-12-13": "Eid al-Fitr (estimated)", + "2034-12-14": "Eid al-Fitr (estimated)", + "2034-12-15": "Eid al-Fitr (estimated)", + "2034-12-25": "Christmas Day", + "2035-01-01": "Independence Day", + "2035-01-07": "Coptic Christmas", + "2035-02-17": "Eid al-Adha (estimated)", + "2035-02-18": "Eid al-Adha (estimated)", + "2035-02-19": "Eid al-Adha (estimated)", + "2035-02-20": "Eid al-Adha (estimated)", + "2035-02-21": "Eid al-Adha (estimated)", + "2035-03-11": "Islamic New Year (estimated)", + "2035-04-29": "Coptic Easter", + "2035-05-20": "Prophet's Birthday (estimated)", + "2035-12-01": "Eid al-Fitr (estimated)", + "2035-12-02": "Eid al-Fitr (estimated)", + "2035-12-03": "Eid al-Fitr (estimated)", + "2035-12-04": "Eid al-Fitr (estimated)", + "2035-12-25": "Christmas Day", + "2036-01-01": "Independence Day", + "2036-01-07": "Coptic Christmas", + "2036-02-06": "Eid al-Adha (estimated)", + "2036-02-07": "Eid al-Adha (estimated)", + "2036-02-08": "Eid al-Adha (estimated)", + "2036-02-09": "Eid al-Adha (estimated)", + "2036-02-10": "Eid al-Adha (estimated)", + "2036-02-28": "Islamic New Year (estimated)", + "2036-04-20": "Coptic Easter", + "2036-05-08": "Prophet's Birthday (estimated)", + "2036-11-19": "Eid al-Fitr (estimated)", + "2036-11-20": "Eid al-Fitr (estimated)", + "2036-11-21": "Eid al-Fitr (estimated)", + "2036-11-22": "Eid al-Fitr (estimated)", + "2036-12-25": "Christmas Day", + "2037-01-01": "Independence Day", + "2037-01-07": "Coptic Christmas", + "2037-01-25": "Eid al-Adha (estimated)", + "2037-01-26": "Eid al-Adha (estimated)", + "2037-01-27": "Eid al-Adha (estimated)", + "2037-01-28": "Eid al-Adha (estimated)", + "2037-01-29": "Eid al-Adha (estimated)", + "2037-02-16": "Islamic New Year (estimated)", + "2037-04-05": "Coptic Easter", + "2037-04-28": "Prophet's Birthday (estimated)", + "2037-11-08": "Eid al-Fitr (estimated)", + "2037-11-09": "Eid al-Fitr (estimated)", + "2037-11-10": "Eid al-Fitr (estimated)", + "2037-11-11": "Eid al-Fitr (estimated)", + "2037-12-25": "Christmas Day", + "2038-01-01": "Independence Day", + "2038-01-07": "Coptic Christmas", + "2038-01-15": "Eid al-Adha (estimated)", + "2038-01-16": "Eid al-Adha (estimated)", + "2038-01-17": "Eid al-Adha (estimated)", + "2038-01-18": "Eid al-Adha (estimated)", + "2038-01-19": "Eid al-Adha (estimated)", + "2038-02-05": "Islamic New Year (estimated)", + "2038-04-17": "Prophet's Birthday (estimated)", + "2038-04-25": "Coptic Easter", + "2038-10-29": "Eid al-Fitr (estimated)", + "2038-10-30": "Eid al-Fitr (estimated)", + "2038-10-31": "Eid al-Fitr (estimated)", + "2038-11-01": "Eid al-Fitr (estimated)", + "2038-12-25": "Christmas Day", + "2039-01-01": "Independence Day", + "2039-01-04": "Eid al-Adha (estimated)", + "2039-01-05": "Eid al-Adha (estimated)", + "2039-01-06": "Eid al-Adha (estimated)", + "2039-01-07": "Coptic Christmas; Eid al-Adha (estimated)", + "2039-01-08": "Eid al-Adha (estimated)", + "2039-01-26": "Islamic New Year (estimated)", + "2039-04-06": "Prophet's Birthday (estimated)", + "2039-04-17": "Coptic Easter", + "2039-10-19": "Eid al-Fitr (estimated)", + "2039-10-20": "Eid al-Fitr (estimated)", + "2039-10-21": "Eid al-Fitr (estimated)", + "2039-10-22": "Eid al-Fitr (estimated)", + "2039-12-25": "Christmas Day; Eid al-Adha (estimated)", + "2039-12-26": "Eid al-Adha (estimated)", + "2039-12-27": "Eid al-Adha (estimated)", + "2039-12-28": "Eid al-Adha (estimated)", + "2039-12-29": "Eid al-Adha (estimated)", + "2040-01-01": "Independence Day", + "2040-01-07": "Coptic Christmas", + "2040-01-15": "Islamic New Year (estimated)", + "2040-03-25": "Prophet's Birthday (estimated)", + "2040-05-06": "Coptic Easter", + "2040-10-07": "Eid al-Fitr (estimated)", + "2040-10-08": "Eid al-Fitr (estimated)", + "2040-10-09": "Eid al-Fitr (estimated)", + "2040-10-10": "Eid al-Fitr (estimated)", + "2040-12-13": "Eid al-Adha (estimated)", + "2040-12-14": "Eid al-Adha (estimated)", + "2040-12-15": "Eid al-Adha (estimated)", + "2040-12-16": "Eid al-Adha (estimated)", + "2040-12-17": "Eid al-Adha (estimated)", + "2040-12-25": "Christmas Day", + "2041-01-01": "Independence Day", + "2041-01-04": "Islamic New Year (estimated)", + "2041-01-07": "Coptic Christmas", + "2041-03-15": "Prophet's Birthday (estimated)", + "2041-04-21": "Coptic Easter", + "2041-09-26": "Eid al-Fitr (estimated)", + "2041-09-27": "Eid al-Fitr (estimated)", + "2041-09-28": "Eid al-Fitr (estimated)", + "2041-09-29": "Eid al-Fitr (estimated)", + "2041-12-03": "Eid al-Adha (estimated)", + "2041-12-04": "Eid al-Adha (estimated)", + "2041-12-05": "Eid al-Adha (estimated)", + "2041-12-06": "Eid al-Adha (estimated)", + "2041-12-07": "Eid al-Adha (estimated)", + "2041-12-24": "Islamic New Year (estimated)", + "2041-12-25": "Christmas Day", + "2042-01-01": "Independence Day", + "2042-01-07": "Coptic Christmas", + "2042-03-04": "Prophet's Birthday (estimated)", + "2042-04-13": "Coptic Easter", + "2042-09-15": "Eid al-Fitr (estimated)", + "2042-09-16": "Eid al-Fitr (estimated)", + "2042-09-17": "Eid al-Fitr (estimated)", + "2042-09-18": "Eid al-Fitr (estimated)", + "2042-11-22": "Eid al-Adha (estimated)", + "2042-11-23": "Eid al-Adha (estimated)", + "2042-11-24": "Eid al-Adha (estimated)", + "2042-11-25": "Eid al-Adha (estimated)", + "2042-11-26": "Eid al-Adha (estimated)", + "2042-12-14": "Islamic New Year (estimated)", + "2042-12-25": "Christmas Day", + "2043-01-01": "Independence Day", + "2043-01-07": "Coptic Christmas", + "2043-02-22": "Prophet's Birthday (estimated)", + "2043-05-03": "Coptic Easter", + "2043-09-04": "Eid al-Fitr (estimated)", + "2043-09-05": "Eid al-Fitr (estimated)", + "2043-09-06": "Eid al-Fitr (estimated)", + "2043-09-07": "Eid al-Fitr (estimated)", + "2043-11-11": "Eid al-Adha (estimated)", + "2043-11-12": "Eid al-Adha (estimated)", + "2043-11-13": "Eid al-Adha (estimated)", + "2043-11-14": "Eid al-Adha (estimated)", + "2043-11-15": "Eid al-Adha (estimated)", + "2043-12-03": "Islamic New Year (estimated)", + "2043-12-25": "Christmas Day", + "2044-01-01": "Independence Day", + "2044-01-07": "Coptic Christmas", + "2044-02-11": "Prophet's Birthday (estimated)", + "2044-04-24": "Coptic Easter", + "2044-08-24": "Eid al-Fitr (estimated)", + "2044-08-25": "Eid al-Fitr (estimated)", + "2044-08-26": "Eid al-Fitr (estimated)", + "2044-08-27": "Eid al-Fitr (estimated)", + "2044-10-30": "Eid al-Adha (estimated)", + "2044-10-31": "Eid al-Adha (estimated)", + "2044-11-01": "Eid al-Adha (estimated)", + "2044-11-02": "Eid al-Adha (estimated)", + "2044-11-03": "Eid al-Adha (estimated)", + "2044-11-21": "Islamic New Year (estimated)", + "2044-12-25": "Christmas Day", + "2045-01-01": "Independence Day", + "2045-01-07": "Coptic Christmas", + "2045-01-30": "Prophet's Birthday (estimated)", + "2045-04-09": "Coptic Easter", + "2045-08-14": "Eid al-Fitr (estimated)", + "2045-08-15": "Eid al-Fitr (estimated)", + "2045-08-16": "Eid al-Fitr (estimated)", + "2045-08-17": "Eid al-Fitr (estimated)", + "2045-10-20": "Eid al-Adha (estimated)", + "2045-10-21": "Eid al-Adha (estimated)", + "2045-10-22": "Eid al-Adha (estimated)", + "2045-10-23": "Eid al-Adha (estimated)", + "2045-10-24": "Eid al-Adha (estimated)", + "2045-11-10": "Islamic New Year (estimated)", + "2045-12-25": "Christmas Day", + "2046-01-01": "Independence Day", + "2046-01-07": "Coptic Christmas", + "2046-01-19": "Prophet's Birthday (estimated)", + "2046-04-29": "Coptic Easter", + "2046-08-03": "Eid al-Fitr (estimated)", + "2046-08-04": "Eid al-Fitr (estimated)", + "2046-08-05": "Eid al-Fitr (estimated)", + "2046-08-06": "Eid al-Fitr (estimated)", + "2046-10-09": "Eid al-Adha (estimated)", + "2046-10-10": "Eid al-Adha (estimated)", + "2046-10-11": "Eid al-Adha (estimated)", + "2046-10-12": "Eid al-Adha (estimated)", + "2046-10-13": "Eid al-Adha (estimated)", + "2046-10-31": "Islamic New Year (estimated)", + "2046-12-25": "Christmas Day", + "2047-01-01": "Independence Day", + "2047-01-07": "Coptic Christmas", + "2047-01-08": "Prophet's Birthday (estimated)", + "2047-04-21": "Coptic Easter", + "2047-07-24": "Eid al-Fitr (estimated)", + "2047-07-25": "Eid al-Fitr (estimated)", + "2047-07-26": "Eid al-Fitr (estimated)", + "2047-07-27": "Eid al-Fitr (estimated)", + "2047-09-29": "Eid al-Adha (estimated)", + "2047-09-30": "Eid al-Adha (estimated)", + "2047-10-01": "Eid al-Adha (estimated)", + "2047-10-02": "Eid al-Adha (estimated)", + "2047-10-03": "Eid al-Adha (estimated)", + "2047-10-20": "Islamic New Year (estimated)", + "2047-12-25": "Christmas Day", + "2047-12-29": "Prophet's Birthday (estimated)", + "2048-01-01": "Independence Day", + "2048-01-07": "Coptic Christmas", + "2048-04-05": "Coptic Easter", + "2048-07-12": "Eid al-Fitr (estimated)", + "2048-07-13": "Eid al-Fitr (estimated)", + "2048-07-14": "Eid al-Fitr (estimated)", + "2048-07-15": "Eid al-Fitr (estimated)", + "2048-09-18": "Eid al-Adha (estimated)", + "2048-09-19": "Eid al-Adha (estimated)", + "2048-09-20": "Eid al-Adha (estimated)", + "2048-09-21": "Eid al-Adha (estimated)", + "2048-09-22": "Eid al-Adha (estimated)", + "2048-10-09": "Islamic New Year (estimated)", + "2048-12-18": "Prophet's Birthday (estimated)", + "2048-12-25": "Christmas Day", + "2049-01-01": "Independence Day", + "2049-01-07": "Coptic Christmas", + "2049-04-25": "Coptic Easter", + "2049-07-01": "Eid al-Fitr (estimated)", + "2049-07-02": "Eid al-Fitr (estimated)", + "2049-07-03": "Eid al-Fitr (estimated)", + "2049-07-04": "Eid al-Fitr (estimated)", + "2049-09-07": "Eid al-Adha (estimated)", + "2049-09-08": "Eid al-Adha (estimated)", + "2049-09-09": "Eid al-Adha (estimated)", + "2049-09-10": "Eid al-Adha (estimated)", + "2049-09-11": "Eid al-Adha (estimated)", + "2049-09-28": "Islamic New Year (estimated)", + "2049-12-07": "Prophet's Birthday (estimated)", + "2049-12-25": "Christmas Day", + "2050-01-01": "Independence Day", + "2050-01-07": "Coptic Christmas", + "2050-04-17": "Coptic Easter", + "2050-06-20": "Eid al-Fitr (estimated)", + "2050-06-21": "Eid al-Fitr (estimated)", + "2050-06-22": "Eid al-Fitr (estimated)", + "2050-06-23": "Eid al-Fitr (estimated)", + "2050-08-27": "Eid al-Adha (estimated)", + "2050-08-28": "Eid al-Adha (estimated)", + "2050-08-29": "Eid al-Adha (estimated)", + "2050-08-30": "Eid al-Adha (estimated)", + "2050-08-31": "Eid al-Adha (estimated)", + "2050-09-17": "Islamic New Year (estimated)", + "2050-11-26": "Prophet's Birthday (estimated)", + "2050-12-25": "Christmas Day" +} From b1728bf912418000d300e0a9efa71802ba7e005d Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Sat, 13 Sep 2025 21:43:22 +0300 Subject: [PATCH 31/34] Update countries with Eastern holidays: add estimated holidays labels (#2924) Co-authored-by: Arkadii Yakovets --- holidays/countries/china.py | 4 + holidays/countries/hongkong.py | 6 +- holidays/countries/macau.py | 9 ++ holidays/countries/mongolia.py | 2 + holidays/countries/south_korea.py | 4 + holidays/countries/taiwan.py | 6 +- holidays/countries/vietnam.py | 4 + holidays/groups/eastern.py | 4 +- holidays/locale/en_HK/LC_MESSAGES/HK.po | 18 ++- holidays/locale/en_MO/LC_MESSAGES/MO.po | 21 +++- holidays/locale/en_US/LC_MESSAGES/CN.po | 16 ++- holidays/locale/en_US/LC_MESSAGES/HK.po | 18 ++- holidays/locale/en_US/LC_MESSAGES/KR.po | 18 ++- holidays/locale/en_US/LC_MESSAGES/MN.po | 11 +- holidays/locale/en_US/LC_MESSAGES/MO.po | 21 +++- holidays/locale/en_US/LC_MESSAGES/TW.po | 16 ++- holidays/locale/en_US/LC_MESSAGES/VN.po | 14 ++- holidays/locale/ko/LC_MESSAGES/KR.po | 16 ++- holidays/locale/mn/LC_MESSAGES/MN.po | 11 +- holidays/locale/pt_MO/LC_MESSAGES/MO.po | 21 +++- holidays/locale/th/LC_MESSAGES/CN.po | 16 ++- holidays/locale/th/LC_MESSAGES/HK.po | 18 ++- holidays/locale/th/LC_MESSAGES/KR.po | 16 ++- holidays/locale/th/LC_MESSAGES/MO.po | 21 +++- holidays/locale/th/LC_MESSAGES/TW.po | 16 ++- holidays/locale/th/LC_MESSAGES/VN.po | 16 ++- holidays/locale/vi/LC_MESSAGES/VN.po | 14 ++- holidays/locale/zh_CN/LC_MESSAGES/CN.po | 16 ++- holidays/locale/zh_CN/LC_MESSAGES/HK.po | 20 +++- holidays/locale/zh_CN/LC_MESSAGES/MO.po | 21 +++- holidays/locale/zh_CN/LC_MESSAGES/TW.po | 18 ++- holidays/locale/zh_HK/LC_MESSAGES/HK.po | 18 ++- holidays/locale/zh_MO/LC_MESSAGES/MO.po | 21 +++- holidays/locale/zh_TW/LC_MESSAGES/CN.po | 18 ++- holidays/locale/zh_TW/LC_MESSAGES/TW.po | 16 ++- holidays/observed_holiday_base.py | 2 +- snapshots/countries/KR_COMMON.json | 4 +- tests/common.py | 6 +- tests/countries/test_china.py | 10 +- tests/countries/test_hongkong.py | 38 +++--- tests/countries/test_taiwan.py | 150 ++++++++++++------------ 41 files changed, 517 insertions(+), 198 deletions(-) diff --git a/holidays/countries/china.py b/holidays/countries/china.py index cf51497e0..a9d812443 100644 --- a/holidays/countries/china.py +++ b/holidays/countries/china.py @@ -65,6 +65,10 @@ class China(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays, """ country = "CN" + # %s (estimated). + estimated_label = tr("%s(推定)") + # %s (observed, estimated). + observed_estimated_label = tr("%s(观察日,推定)") # %s (observed). observed_label = tr("%s(观察日)") supported_categories = (PUBLIC, HALF_DAY) diff --git a/holidays/countries/hongkong.py b/holidays/countries/hongkong.py index b14582c54..2c9f1496c 100644 --- a/holidays/countries/hongkong.py +++ b/holidays/countries/hongkong.py @@ -69,8 +69,12 @@ class HongKong( country = "HK" default_language = "zh_HK" default_preferred_discretionary_holidays = (CHRISTMAS,) + # %s (estimated). + estimated_label = tr("%s(推定)") + # %s (observed, estimated). + observed_estimated_label = tr("%s(補假,推定)") # %s (observed). - observed_label = tr("%s(慶祝)") + observed_label = tr("%s(補假)") supported_categories = (OPTIONAL, PUBLIC) supported_languages = ("en_HK", "en_US", "th", "zh_CN", "zh_HK") weekend = {SUN} diff --git a/holidays/countries/macau.py b/holidays/countries/macau.py index 53108b3a0..d75e5d6c1 100644 --- a/holidays/countries/macau.py +++ b/holidays/countries/macau.py @@ -62,6 +62,8 @@ class Macau( country = "MO" default_language = "zh_MO" + # %s (estimated). + estimated_label = tr("%s(推定)") # Decreto-Lei n.º 4/82/M. start_year = 1982 subdivisions = ( @@ -374,6 +376,13 @@ def _populate_government_holidays(self): # The first working day after %s. else self.tr("%s後首個工作日") ) + self.observed_estimated_label = ( + # Compensatory rest day for %s (estimated). + self.tr("%s的補假(推定)") + if self._year >= 2020 + # The first working day after %s (estimated). + else self.tr("%s後首個工作日(推定)") + ) # Prior to 2012, in-lieus are only given for holidays which falls on Sunday. self._observed_rule = ( SUN_TO_NEXT_WORKDAY if self._year <= 2011 else SAT_SUN_TO_NEXT_WORKDAY diff --git a/holidays/countries/mongolia.py b/holidays/countries/mongolia.py index f1115b091..60e85afd4 100644 --- a/holidays/countries/mongolia.py +++ b/holidays/countries/mongolia.py @@ -32,6 +32,8 @@ class Mongolia(HolidayBase, InternationalHolidays, MongolianCalendarHolidays): country = "MN" default_language = "mn" + # %s (estimated). + estimated_label = tr("%s (урьдчилсан)") start_year = 2004 supported_categories = (PUBLIC, WORKDAY) supported_languages = ("en_US", "mn") diff --git a/holidays/countries/south_korea.py b/holidays/countries/south_korea.py index c089c878d..3e72e807d 100644 --- a/holidays/countries/south_korea.py +++ b/holidays/countries/south_korea.py @@ -81,6 +81,10 @@ class SouthKorea( country = "KR" supported_categories = (BANK, PUBLIC) default_language = "ko" + # %s (estimated). + estimated_label = tr("%s (추정)") + # Alternative holiday for %s (estimated). + observed_estimated_label = tr("%s 대체 휴일 (추정)") # Alternative holiday for %s. observed_label = tr("%s 대체 휴일") supported_languages = ("en_US", "ko", "th") diff --git a/holidays/countries/taiwan.py b/holidays/countries/taiwan.py index bbbcc9924..1df827cc7 100644 --- a/holidays/countries/taiwan.py +++ b/holidays/countries/taiwan.py @@ -72,8 +72,12 @@ class Taiwan(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays """ country = "TW" + # %s (estimated). + estimated_label = tr("%s(推定)") + # %s (observed, estimated). + observed_estimated_label = tr("%s(補假,推定)") # %s (observed). - observed_label = tr("%s(慶祝)") + observed_label = tr("%s(補假)") default_language = "zh_TW" supported_categories = (GOVERNMENT, OPTIONAL, PUBLIC, SCHOOL, WORKDAY) supported_languages = ("en_US", "th", "zh_CN", "zh_TW") diff --git a/holidays/countries/vietnam.py b/holidays/countries/vietnam.py index 23d914a3a..b081bc7c3 100644 --- a/holidays/countries/vietnam.py +++ b/holidays/countries/vietnam.py @@ -54,6 +54,10 @@ class Vietnam(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHoliday """ country = "VN" + # %s (estimated). + estimated_label = tr("%s (dự kiến)") + # %s (observed, estimated). + observed_estimated_label = tr("%s (nghỉ bù, dự kiến)") # %s (observed). observed_label = tr("%s (nghỉ bù)") default_language = "vi" diff --git a/holidays/groups/eastern.py b/holidays/groups/eastern.py index 0a2d6798a..621e518a5 100644 --- a/holidays/groups/eastern.py +++ b/holidays/groups/eastern.py @@ -33,15 +33,13 @@ def _add_eastern_calendar_holiday( Adds customizable estimation label to holiday name if holiday date is an estimation. """ - estimated_label = getattr(self, "estimated_label", "%s") dt, is_estimated = dt_estimated - if days_delta and dt: dt = _timedelta(dt, days_delta) return ( self._add_holiday( - self.tr(estimated_label) % self.tr(name) + self.tr(self.estimated_label) % self.tr(name) if is_estimated and show_estimated else name, dt, diff --git a/holidays/locale/en_HK/LC_MESSAGES/HK.po b/holidays/locale/en_HK/LC_MESSAGES/HK.po index 30dc47766..88e308ed3 100644 --- a/holidays/locale/en_HK/LC_MESSAGES/HK.po +++ b/holidays/locale/en_HK/LC_MESSAGES/HK.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.69\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-02-04 14:03+0700\n" -"PO-Revision-Date: 2025-03-05 09:48+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: en_HK\n" "MIME-Version: 1.0\n" @@ -27,9 +27,19 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_HK\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s (estimated)" + +#. %s (observed, estimated). +#, c-format +msgid "%s(補假,推定)" +msgstr "%s (observed, estimated)" + #. %s (observed). #, c-format -msgid "%s(慶祝)" +msgid "%s(補假)" msgstr "%s (observed)" #. The Day following Mid-Autumn Festival. diff --git a/holidays/locale/en_MO/LC_MESSAGES/MO.po b/holidays/locale/en_MO/LC_MESSAGES/MO.po index 1b4c29448..251065cf0 100644 --- a/holidays/locale/en_MO/LC_MESSAGES/MO.po +++ b/holidays/locale/en_MO/LC_MESSAGES/MO.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.80\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-02-06 15:34+0700\n" -"PO-Revision-Date: 2025-03-05 19:40+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: en_MO\n" "MIME-Version: 1.0\n" @@ -27,6 +27,11 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_MO\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s (estimated)" + #. New Year's Day. msgid "元旦" msgstr "New Year's Day" @@ -190,6 +195,16 @@ msgstr "Compensatory rest day for %s" msgid "%s後首個工作日" msgstr "The first working day after %s" +#. Compensatory rest day for %s (estimated). +#, c-format +msgid "%s的補假(推定)" +msgstr "Compensatory rest day for %s (estimated)" + +#. The first working day after %s (estimated). +#, c-format +msgid "%s後首個工作日(推定)" +msgstr "The first working day after %s (estimated)" + #. Day of the Municipality of Ilhas. msgid "海島市日" msgstr "Day of the Municipality of Ilhas" diff --git a/holidays/locale/en_US/LC_MESSAGES/CN.po b/holidays/locale/en_US/LC_MESSAGES/CN.po index 799d75db1..82747f2ab 100644 --- a/holidays/locale/en_US/LC_MESSAGES/CN.po +++ b/holidays/locale/en_US/LC_MESSAGES/CN.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.42\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-09-28 19:23+0700\n" -"PO-Revision-Date: 2024-01-18 11:42+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: en_US\n" "MIME-Version: 1.0\n" @@ -27,6 +27,16 @@ msgstr "" "X-Generator: Poedit 3.4.2\n" "X-Source-Language: zh_CN\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s (estimated)" + +#. %s (observed, estimated). +#, c-format +msgid "%s(观察日,推定)" +msgstr "%s (observed, estimated)" + #. %s (observed). #, c-format msgid "%s(观察日)" diff --git a/holidays/locale/en_US/LC_MESSAGES/HK.po b/holidays/locale/en_US/LC_MESSAGES/HK.po index b316ebbef..9642aa894 100644 --- a/holidays/locale/en_US/LC_MESSAGES/HK.po +++ b/holidays/locale/en_US/LC_MESSAGES/HK.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.69\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-02-04 14:03+0700\n" -"PO-Revision-Date: 2025-03-05 09:48+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: en_US\n" "MIME-Version: 1.0\n" @@ -27,9 +27,19 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_HK\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s (estimated)" + +#. %s (observed, estimated). +#, c-format +msgid "%s(補假,推定)" +msgstr "%s (observed, estimated)" + #. %s (observed). #, c-format -msgid "%s(慶祝)" +msgid "%s(補假)" msgstr "%s (observed)" #. The Day following Mid-Autumn Festival. diff --git a/holidays/locale/en_US/LC_MESSAGES/KR.po b/holidays/locale/en_US/LC_MESSAGES/KR.po index 2b1edb53b..d7b97549e 100644 --- a/holidays/locale/en_US/LC_MESSAGES/KR.po +++ b/holidays/locale/en_US/LC_MESSAGES/KR.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.37\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-10-26 23:49+0700\n" -"PO-Revision-Date: 2023-10-26 23:53+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: en_US\n" "MIME-Version: 1.0\n" @@ -27,6 +27,16 @@ msgstr "" "X-Generator: Poedit 3.4\n" "X-Source-Language: ko\n" +#. %s (estimated). +#, c-format +msgid "%s (추정)" +msgstr "%s (estimated)" + +#. Alternative holiday for %s (estimated). +#, c-format +msgid "%s 대체 휴일 (추정)" +msgstr "Alternative holiday for %s (estimated)" + #. Alternative holiday for %s. #, c-format msgid "%s 대체 휴일" @@ -136,7 +146,7 @@ msgstr "Presidential Inauguration Day" #. National Conference for Unification Election Day. msgid "통일주체국민회의 선거일" -msgstr "National Conference for Unification Election Day." +msgstr "National Conference for Unification Election Day" #. Yushin Constitution Referendum Day. msgid "유신헌법 국민투표일" diff --git a/holidays/locale/en_US/LC_MESSAGES/MN.po b/holidays/locale/en_US/LC_MESSAGES/MN.po index f85d10fa9..fe5def65b 100644 --- a/holidays/locale/en_US/LC_MESSAGES/MN.po +++ b/holidays/locale/en_US/LC_MESSAGES/MN.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.76\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-06-04 01:55+0530\n" -"PO-Revision-Date: 2025-06-04 01:55+0530\n" -"Last-Translator: Ankush Kapoor \n" +"PO-Revision-Date: 2025-09-07 13:47+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: en_US\n" "MIME-Version: 1.0\n" @@ -26,6 +26,11 @@ msgstr "" "Generated-By: Lingva 5.0.6\n" "X-Source-Language: mn\n" +#. %s (estimated). +#, c-format +msgid "%s (урьдчилсан)" +msgstr "%s (estimated)" + #. New Year's Day. msgid "Шинэ жил" msgstr "New Year's Day" diff --git a/holidays/locale/en_US/LC_MESSAGES/MO.po b/holidays/locale/en_US/LC_MESSAGES/MO.po index 88890b044..f3c3b7bd1 100644 --- a/holidays/locale/en_US/LC_MESSAGES/MO.po +++ b/holidays/locale/en_US/LC_MESSAGES/MO.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.80\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-02-06 15:34+0700\n" -"PO-Revision-Date: 2025-03-05 19:40+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: en_US\n" "MIME-Version: 1.0\n" @@ -27,6 +27,11 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_MO\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s (estimated)" + #. New Year's Day. msgid "元旦" msgstr "New Year's Day" @@ -190,6 +195,16 @@ msgstr "Compensatory rest day for %s" msgid "%s後首個工作日" msgstr "The first working day after %s" +#. Compensatory rest day for %s (estimated). +#, c-format +msgid "%s的補假(推定)" +msgstr "Compensatory rest day for %s (estimated)" + +#. The first working day after %s (estimated). +#, c-format +msgid "%s後首個工作日(推定)" +msgstr "The first working day after %s (estimated)" + #. Day of the Municipality of Ilhas. msgid "海島市日" msgstr "Day of the Municipality of Ilhas" diff --git a/holidays/locale/en_US/LC_MESSAGES/TW.po b/holidays/locale/en_US/LC_MESSAGES/TW.po index 3f053d8d5..88ecdc572 100644 --- a/holidays/locale/en_US/LC_MESSAGES/TW.po +++ b/holidays/locale/en_US/LC_MESSAGES/TW.po @@ -14,9 +14,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.76\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-11-24 16:16+0700\n" -"PO-Revision-Date: 2025-06-21 17:08+0300\n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" "Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: en_US\n" @@ -27,9 +27,19 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_TW\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s (estimated)" + +#. %s (observed, estimated). +#, c-format +msgid "%s(補假,推定)" +msgstr "%s (observed, estimated)" + #. %s (observed). #, c-format -msgid "%s(慶祝)" +msgid "%s(補假)" msgstr "%s (observed)" #. Children's Day. diff --git a/holidays/locale/en_US/LC_MESSAGES/VN.po b/holidays/locale/en_US/LC_MESSAGES/VN.po index f3e04f7b4..e84a03a76 100644 --- a/holidays/locale/en_US/LC_MESSAGES/VN.po +++ b/holidays/locale/en_US/LC_MESSAGES/VN.po @@ -14,9 +14,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.59\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2024-09-27 15:50+0700\n" -"PO-Revision-Date: 2024-10-09 20:57+0300\n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" "Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: en_US\n" @@ -27,6 +27,16 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: vi\n" +#. %s (estimated). +#, c-format +msgid "%s (dự kiến)" +msgstr "%s (estimated)" + +#. %s (observed, estimated). +#, c-format +msgid "%s (nghỉ bù, dự kiến)" +msgstr "%s (observed, estimated)" + #. %s (observed). #, c-format msgid "%s (nghỉ bù)" diff --git a/holidays/locale/ko/LC_MESSAGES/KR.po b/holidays/locale/ko/LC_MESSAGES/KR.po index 69c804104..ba24ce794 100644 --- a/holidays/locale/ko/LC_MESSAGES/KR.po +++ b/holidays/locale/ko/LC_MESSAGES/KR.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.37\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-10-26 23:49+0700\n" -"PO-Revision-Date: 2023-10-26 23:54+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: ko\n" "MIME-Version: 1.0\n" @@ -27,6 +27,16 @@ msgstr "" "X-Generator: Poedit 3.4\n" "X-Source-Language: ko\n" +#. %s (estimated). +#, c-format +msgid "%s (추정)" +msgstr "" + +#. Alternative holiday for %s (estimated). +#, c-format +msgid "%s 대체 휴일 (추정)" +msgstr "" + #. Alternative holiday for %s. #, c-format msgid "%s 대체 휴일" diff --git a/holidays/locale/mn/LC_MESSAGES/MN.po b/holidays/locale/mn/LC_MESSAGES/MN.po index f00e5131b..630cba5be 100644 --- a/holidays/locale/mn/LC_MESSAGES/MN.po +++ b/holidays/locale/mn/LC_MESSAGES/MN.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.76\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-06-04 01:56+0530\n" -"PO-Revision-Date: 2025-06-04 21:39+0530\n" -"Last-Translator: Ankush Kapoor \n" +"PO-Revision-Date: 2025-09-07 13:47+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: mn\n" "MIME-Version: 1.0\n" @@ -27,6 +27,11 @@ msgstr "" "X-Generator: Poedit 3.4.2\n" "X-Source-Language: mn\n" +#. %s (estimated). +#, c-format +msgid "%s (урьдчилсан)" +msgstr "" + #. New Year's Day. msgid "Шинэ жил" msgstr "" diff --git a/holidays/locale/pt_MO/LC_MESSAGES/MO.po b/holidays/locale/pt_MO/LC_MESSAGES/MO.po index 7a0e28521..69b2f6e0a 100644 --- a/holidays/locale/pt_MO/LC_MESSAGES/MO.po +++ b/holidays/locale/pt_MO/LC_MESSAGES/MO.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.80\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-02-06 15:34+0700\n" -"PO-Revision-Date: 2025-03-05 21:05+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: pt_MO\n" "MIME-Version: 1.0\n" @@ -27,6 +27,11 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_MO\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s (estimado)" + #. New Year's Day. msgid "元旦" msgstr "Fraternidade Universal" @@ -190,6 +195,16 @@ msgstr "Dia de descanso compensatório relativo ao %s" msgid "%s後首個工作日" msgstr "1.º dia útil após %s" +#. Compensatory rest day for %s (estimated). +#, c-format +msgid "%s的補假(推定)" +msgstr "Dia de descanso compensatório relativo ao %s (estimado)" + +#. The first working day after %s (estimated). +#, c-format +msgid "%s後首個工作日(推定)" +msgstr "1.º dia útil após %s (estimado)" + #. Day of the Municipality of Ilhas. msgid "海島市日" msgstr "Dia do Município das Ilhas" diff --git a/holidays/locale/th/LC_MESSAGES/CN.po b/holidays/locale/th/LC_MESSAGES/CN.po index 435416e94..c8181086d 100644 --- a/holidays/locale/th/LC_MESSAGES/CN.po +++ b/holidays/locale/th/LC_MESSAGES/CN.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.42\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-09-28 19:23+0700\n" -"PO-Revision-Date: 2024-01-18 11:42+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: th\n" "MIME-Version: 1.0\n" @@ -27,6 +27,16 @@ msgstr "" "X-Generator: Poedit 3.4.2\n" "X-Source-Language: zh_CN\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s (โดยประมาณ)" + +#. %s (observed, estimated). +#, c-format +msgid "%s(观察日,推定)" +msgstr "ชดเชย%s (โดยประมาณ)" + #. %s (observed). #, c-format msgid "%s(观察日)" diff --git a/holidays/locale/th/LC_MESSAGES/HK.po b/holidays/locale/th/LC_MESSAGES/HK.po index dacb4a13b..179779f61 100644 --- a/holidays/locale/th/LC_MESSAGES/HK.po +++ b/holidays/locale/th/LC_MESSAGES/HK.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.69\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-02-04 14:03+0700\n" -"PO-Revision-Date: 2025-03-05 09:48+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: th\n" "MIME-Version: 1.0\n" @@ -27,9 +27,19 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_HK\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s (โดยประมาณ)" + +#. %s (observed, estimated). +#, c-format +msgid "%s(補假,推定)" +msgstr "ชดเชย%s (โดยประมาณ)" + #. %s (observed). #, c-format -msgid "%s(慶祝)" +msgid "%s(補假)" msgstr "ชดเชย%s" #. The Day following Mid-Autumn Festival. diff --git a/holidays/locale/th/LC_MESSAGES/KR.po b/holidays/locale/th/LC_MESSAGES/KR.po index 2c5984886..b3e834ef5 100644 --- a/holidays/locale/th/LC_MESSAGES/KR.po +++ b/holidays/locale/th/LC_MESSAGES/KR.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.37\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-10-26 23:49+0700\n" -"PO-Revision-Date: 2023-10-26 23:54+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: th\n" "MIME-Version: 1.0\n" @@ -27,6 +27,16 @@ msgstr "" "X-Generator: Poedit 3.4\n" "X-Source-Language: ko\n" +#. %s (estimated). +#, c-format +msgid "%s (추정)" +msgstr "%s (โดยประมาณ)" + +#. Alternative holiday for %s (estimated). +#, c-format +msgid "%s 대체 휴일 (추정)" +msgstr "ชดเชย%s (โดยประมาณ)" + #. Alternative holiday for %s. #, c-format msgid "%s 대체 휴일" diff --git a/holidays/locale/th/LC_MESSAGES/MO.po b/holidays/locale/th/LC_MESSAGES/MO.po index a8617fdf4..90dd53dde 100644 --- a/holidays/locale/th/LC_MESSAGES/MO.po +++ b/holidays/locale/th/LC_MESSAGES/MO.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.80\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-02-06 15:34+0700\n" -"PO-Revision-Date: 2025-03-05 19:40+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: th\n" "MIME-Version: 1.0\n" @@ -27,6 +27,11 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_MO\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s (โดยประมาณ)" + #. New Year's Day. msgid "元旦" msgstr "วันขึ้นปีใหม่" @@ -190,6 +195,16 @@ msgstr "ชดเชย%s" msgid "%s後首個工作日" msgstr "วันทำงานวันแรกหลัง%s" +#. Compensatory rest day for %s (estimated). +#, c-format +msgid "%s的補假(推定)" +msgstr "ชดเชย%s (โดยประมาณ)" + +#. The first working day after %s (estimated). +#, c-format +msgid "%s後首個工作日(推定)" +msgstr "วันทำงานวันแรกหลัง%s (โดยประมาณ)" + #. Day of the Municipality of Ilhas. msgid "海島市日" msgstr "วันเทศบาลอิลฮาส" diff --git a/holidays/locale/th/LC_MESSAGES/TW.po b/holidays/locale/th/LC_MESSAGES/TW.po index ca4ad4e65..041a629e7 100644 --- a/holidays/locale/th/LC_MESSAGES/TW.po +++ b/holidays/locale/th/LC_MESSAGES/TW.po @@ -14,9 +14,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.76\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-11-24 16:16+0700\n" -"PO-Revision-Date: 2025-06-21 17:09+0300\n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" "Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: th\n" @@ -27,9 +27,19 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_TW\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s (โดยประมาณ)" + +#. %s (observed, estimated). +#, c-format +msgid "%s(補假,推定)" +msgstr "ชดเชย%s (โดยประมาณ)" + #. %s (observed). #, c-format -msgid "%s(慶祝)" +msgid "%s(補假)" msgstr "ชดเชย%s" #. Children's Day. diff --git a/holidays/locale/th/LC_MESSAGES/VN.po b/holidays/locale/th/LC_MESSAGES/VN.po index 82b14aa70..a29428cc7 100644 --- a/holidays/locale/th/LC_MESSAGES/VN.po +++ b/holidays/locale/th/LC_MESSAGES/VN.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.59\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2024-09-27 15:50+0700\n" -"PO-Revision-Date: 2024-10-09 20:58+0300\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: th\n" "MIME-Version: 1.0\n" @@ -27,6 +27,16 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: vi\n" +#. %s (estimated). +#, c-format +msgid "%s (dự kiến)" +msgstr "%s (โดยประมาณ)" + +#. %s (observed, estimated). +#, c-format +msgid "%s (nghỉ bù, dự kiến)" +msgstr "ชดเชย%s (โดยประมาณ)" + #. %s (observed). #, c-format msgid "%s (nghỉ bù)" diff --git a/holidays/locale/vi/LC_MESSAGES/VN.po b/holidays/locale/vi/LC_MESSAGES/VN.po index ba7984185..3124d88a7 100644 --- a/holidays/locale/vi/LC_MESSAGES/VN.po +++ b/holidays/locale/vi/LC_MESSAGES/VN.po @@ -14,9 +14,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.59\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2024-09-27 15:50+0700\n" -"PO-Revision-Date: 2024-10-09 20:58+0300\n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" "Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: vi\n" @@ -27,6 +27,16 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: vi\n" +#. %s (estimated). +#, c-format +msgid "%s (dự kiến)" +msgstr "" + +#. %s (observed, estimated). +#, c-format +msgid "%s (nghỉ bù, dự kiến)" +msgstr "" + #. %s (observed). #, c-format msgid "%s (nghỉ bù)" diff --git a/holidays/locale/zh_CN/LC_MESSAGES/CN.po b/holidays/locale/zh_CN/LC_MESSAGES/CN.po index 792d696f0..7de684292 100644 --- a/holidays/locale/zh_CN/LC_MESSAGES/CN.po +++ b/holidays/locale/zh_CN/LC_MESSAGES/CN.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.42\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-09-28 19:23+0700\n" -"PO-Revision-Date: 2024-01-18 11:43+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" @@ -27,6 +27,16 @@ msgstr "" "X-Generator: Poedit 3.4.2\n" "X-Source-Language: zh_CN\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "" + +#. %s (observed, estimated). +#, c-format +msgid "%s(观察日,推定)" +msgstr "" + #. %s (observed). #, c-format msgid "%s(观察日)" diff --git a/holidays/locale/zh_CN/LC_MESSAGES/HK.po b/holidays/locale/zh_CN/LC_MESSAGES/HK.po index 675034133..01967c7a4 100644 --- a/holidays/locale/zh_CN/LC_MESSAGES/HK.po +++ b/holidays/locale/zh_CN/LC_MESSAGES/HK.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.69\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-02-04 14:03+0700\n" -"PO-Revision-Date: 2025-03-05 09:48+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" @@ -27,10 +27,20 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_HK\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s(推定)" + +#. %s (observed, estimated). +#, c-format +msgid "%s(補假,推定)" +msgstr "%s(观察日,推定)" + #. %s (observed). #, c-format -msgid "%s(慶祝)" -msgstr "%s(庆祝)" +msgid "%s(補假)" +msgstr "%s(观察日)" #. The Day following Mid-Autumn Festival. msgid "中秋節翌日" diff --git a/holidays/locale/zh_CN/LC_MESSAGES/MO.po b/holidays/locale/zh_CN/LC_MESSAGES/MO.po index b6de5370d..ea6be2102 100644 --- a/holidays/locale/zh_CN/LC_MESSAGES/MO.po +++ b/holidays/locale/zh_CN/LC_MESSAGES/MO.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.80\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-02-06 15:34+0700\n" -"PO-Revision-Date: 2025-03-05 19:40+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" @@ -27,6 +27,11 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_MO\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s(推定)" + #. New Year's Day. msgid "元旦" msgstr "元旦" @@ -190,6 +195,16 @@ msgstr "%s的补假" msgid "%s後首個工作日" msgstr "%s后首个工作日" +#. Compensatory rest day for %s (estimated). +#, c-format +msgid "%s的補假(推定)" +msgstr "%s的补假(推定)" + +#. The first working day after %s (estimated). +#, c-format +msgid "%s後首個工作日(推定)" +msgstr "%s后首个工作日(推定)" + #. Day of the Municipality of Ilhas. msgid "海島市日" msgstr "海岛市日" diff --git a/holidays/locale/zh_CN/LC_MESSAGES/TW.po b/holidays/locale/zh_CN/LC_MESSAGES/TW.po index 693787e81..695ddb843 100644 --- a/holidays/locale/zh_CN/LC_MESSAGES/TW.po +++ b/holidays/locale/zh_CN/LC_MESSAGES/TW.po @@ -14,9 +14,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.76\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-11-24 16:16+0700\n" -"PO-Revision-Date: 2025-06-21 17:09+0300\n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" "Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: zh_CN\n" @@ -27,10 +27,20 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_TW\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s(推定)" + +#. %s (observed, estimated). +#, c-format +msgid "%s(補假,推定)" +msgstr "%s(观察日,推定)" + #. %s (observed). #, c-format -msgid "%s(慶祝)" -msgstr "%s(庆祝)" +msgid "%s(補假)" +msgstr "%s(观察日)" #. Children's Day. msgid "兒童節" diff --git a/holidays/locale/zh_HK/LC_MESSAGES/HK.po b/holidays/locale/zh_HK/LC_MESSAGES/HK.po index 7fed7a0fc..77d0c89a7 100644 --- a/holidays/locale/zh_HK/LC_MESSAGES/HK.po +++ b/holidays/locale/zh_HK/LC_MESSAGES/HK.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.69\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-02-04 14:03+0700\n" -"PO-Revision-Date: 2025-03-05 09:48+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: zh_HK\n" "MIME-Version: 1.0\n" @@ -27,9 +27,19 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_HK\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "" + +#. %s (observed, estimated). +#, c-format +msgid "%s(補假,推定)" +msgstr "" + #. %s (observed). #, c-format -msgid "%s(慶祝)" +msgid "%s(補假)" msgstr "" #. The Day following Mid-Autumn Festival. diff --git a/holidays/locale/zh_MO/LC_MESSAGES/MO.po b/holidays/locale/zh_MO/LC_MESSAGES/MO.po index 05aadadbb..6fcf3f211 100644 --- a/holidays/locale/zh_MO/LC_MESSAGES/MO.po +++ b/holidays/locale/zh_MO/LC_MESSAGES/MO.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.80\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2025-02-06 15:34+0700\n" -"PO-Revision-Date: 2025-03-05 19:40+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: zh_MO\n" "MIME-Version: 1.0\n" @@ -27,6 +27,11 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_MO\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "" + #. New Year's Day. msgid "元旦" msgstr "" @@ -190,6 +195,16 @@ msgstr "" msgid "%s後首個工作日" msgstr "" +#. Compensatory rest day for %s (estimated). +#, c-format +msgid "%s的補假(推定)" +msgstr "" + +#. The first working day after %s (estimated). +#, c-format +msgid "%s後首個工作日(推定)" +msgstr "" + #. Day of the Municipality of Ilhas. msgid "海島市日" msgstr "" diff --git a/holidays/locale/zh_TW/LC_MESSAGES/CN.po b/holidays/locale/zh_TW/LC_MESSAGES/CN.po index b19da715c..57e643f47 100644 --- a/holidays/locale/zh_TW/LC_MESSAGES/CN.po +++ b/holidays/locale/zh_TW/LC_MESSAGES/CN.po @@ -14,10 +14,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.42\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-09-28 19:23+0700\n" -"PO-Revision-Date: 2024-01-18 11:43+0700\n" -"Last-Translator: PPsyrius \n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" +"Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: zh_TW\n" "MIME-Version: 1.0\n" @@ -27,10 +27,20 @@ msgstr "" "X-Generator: Poedit 3.4.2\n" "X-Source-Language: zh_CN\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "%s(推定)" + +#. %s (observed, estimated). +#, c-format +msgid "%s(观察日,推定)" +msgstr "%s(補假,推定)" + #. %s (observed). #, c-format msgid "%s(观察日)" -msgstr "%s(觀察日)" +msgstr "%s(補假)" #. New Year's Day. msgid "元旦" diff --git a/holidays/locale/zh_TW/LC_MESSAGES/TW.po b/holidays/locale/zh_TW/LC_MESSAGES/TW.po index 4d1a38f42..fee1aeb21 100644 --- a/holidays/locale/zh_TW/LC_MESSAGES/TW.po +++ b/holidays/locale/zh_TW/LC_MESSAGES/TW.po @@ -14,9 +14,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Holidays 0.76\n" +"Project-Id-Version: Holidays 0.81\n" "POT-Creation-Date: 2023-11-24 16:16+0700\n" -"PO-Revision-Date: 2025-06-21 17:08+0300\n" +"PO-Revision-Date: 2025-09-07 14:05+0300\n" "Last-Translator: ~Jhellico \n" "Language-Team: Holidays Localization Team\n" "Language: zh_TW\n" @@ -27,9 +27,19 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Source-Language: zh_TW\n" +#. %s (estimated). +#, c-format +msgid "%s(推定)" +msgstr "" + +#. %s (observed, estimated). +#, c-format +msgid "%s(補假,推定)" +msgstr "" + #. %s (observed). #, c-format -msgid "%s(慶祝)" +msgid "%s(補假)" msgstr "" #. Children's Day. diff --git a/holidays/observed_holiday_base.py b/holidays/observed_holiday_base.py index b4b76c7d5..9b7d2364c 100644 --- a/holidays/observed_holiday_base.py +++ b/holidays/observed_holiday_base.py @@ -177,7 +177,7 @@ def _add_observed( ) ) - estimated_label_text = estimated_label.strip("%s ()") + estimated_label_text = estimated_label.strip("%s ()()") # Use observed_estimated_label instead of observed_label for estimated dates. for name in (name,) if name else self.get_list(dt): holiday_name = self.tr(name) diff --git a/snapshots/countries/KR_COMMON.json b/snapshots/countries/KR_COMMON.json index 47fb43333..e9ce42cab 100644 --- a/snapshots/countries/KR_COMMON.json +++ b/snapshots/countries/KR_COMMON.json @@ -357,7 +357,7 @@ "1972-10-09": "Hangul Day", "1972-10-24": "United Nations Day", "1972-11-21": "Yushin Constitution Referendum Day", - "1972-12-15": "National Conference for Unification Election Day.", + "1972-12-15": "National Conference for Unification Election Day", "1972-12-23": "Presidential Election Day", "1972-12-25": "Christmas Day", "1972-12-27": "Presidential Inauguration Day", @@ -448,7 +448,7 @@ "1978-04-05": "Tree Planting Day", "1978-05-05": "Children's Day", "1978-05-14": "Buddha's Birthday", - "1978-05-18": "National Conference for Unification Election Day.", + "1978-05-18": "National Conference for Unification Election Day", "1978-06-06": "Memorial Day", "1978-07-06": "Presidential Election Day", "1978-07-17": "Constitution Day", diff --git a/tests/common.py b/tests/common.py index 4b75c36d1..4ff342117 100644 --- a/tests/common.py +++ b/tests/common.py @@ -21,7 +21,7 @@ from holidays import HolidayBase from holidays.calendars.gregorian import SUN -from holidays.groups import IslamicHolidays +from holidays.groups import EasternCalendarHolidays from holidays.observed_holiday_base import ObservedHolidayBase PYTHON_LATEST_SUPPORTED_VERSION = "3.13" @@ -374,11 +374,11 @@ class CommonTests(TestCase): """Common test cases for all entities.""" def test_estimated_label(self): - if isinstance(self.holidays, IslamicHolidays): + if isinstance(self.holidays, EasternCalendarHolidays): self.assertTrue( getattr(self.holidays, "estimated_label", None), "The `estimated_label` attribute is required for entities inherited from " - "`IslamicHolidays`.", + "`EasternCalendarHolidays`.", ) def test_observed_estimated_label(self): diff --git a/tests/countries/test_china.py b/tests/countries/test_china.py index 0443ffac1..c5643bd2e 100644 --- a/tests/countries/test_china.py +++ b/tests/countries/test_china.py @@ -1408,7 +1408,7 @@ def test_l10n_zh_tw(self): self.assertLocalizedHolidays( "zh_TW", ("2022-01-01", "元旦"), - ("2022-01-03", "元旦(觀察日)"), + ("2022-01-03", "元旦(補假)"), ("2022-01-31", "休息日(2022-01-29日起取代)"), ("2022-02-01", "春節"), ("2022-02-02", "春節"), @@ -1418,19 +1418,19 @@ def test_l10n_zh_tw(self): ("2022-04-04", "休息日(2022-04-02日起取代)"), ("2022-04-05", "清明節"), ("2022-05-01", "勞動節"), - ("2022-05-02", "勞動節(觀察日)"), + ("2022-05-02", "勞動節(補假)"), ("2022-05-03", "休息日(2022-04-24日起取代)"), ("2022-05-04", "五四青年節; 休息日(2022-05-07日起取代)"), ("2022-06-01", "六一兒童節"), ("2022-06-03", "端午節"), ("2022-08-01", "建軍節"), ("2022-09-10", "中秋節"), - ("2022-09-12", "中秋節(觀察日)"), + ("2022-09-12", "中秋節(補假)"), ("2022-10-01", "國慶日"), ("2022-10-02", "國慶日"), ("2022-10-03", "國慶日"), - ("2022-10-04", "國慶日(觀察日)"), - ("2022-10-05", "國慶日(觀察日)"), + ("2022-10-04", "國慶日(補假)"), + ("2022-10-05", "國慶日(補假)"), ("2022-10-06", "休息日(2022-10-08日起取代)"), ("2022-10-07", "休息日(2022-10-09日起取代)"), ) diff --git a/tests/countries/test_hongkong.py b/tests/countries/test_hongkong.py index 3a7baeb10..5e9579397 100644 --- a/tests/countries/test_hongkong.py +++ b/tests/countries/test_hongkong.py @@ -54,7 +54,7 @@ def test_special_holidays(self): def test_new_years_day(self): name = "一月一日" - name_observed = f"{name}(慶祝)" + name_observed = f"{name}(補假)" name_following = f"{name}翌日" self.assertHolidayName(name, (f"{year}-01-01" for year in range(1977, 2050))) @@ -373,7 +373,7 @@ def test_easter_monday(self): def test_tomb_sweeping_day(self): name = "清明節" - name_observed = f"{name}(慶祝)" + name_observed = f"{name}(補假)" name_following = f"{name}翌日" self.assertHolidayName( @@ -468,7 +468,7 @@ def test_tomb_sweeping_day(self): def test_the_buddhas_birthday(self): name = "佛誕" - name_observed = f"{name}(慶祝)" + name_observed = f"{name}(補假)" name_following = f"{name}翌日" self.assertHolidayName( @@ -533,7 +533,7 @@ def test_the_buddhas_birthday(self): def test_labor_day(self): name = "勞動節" - name_observed = f"{name}(慶祝)" + name_observed = f"{name}(補假)" name_following = f"{name}翌日" self.assertHolidayName(name, (f"{year}-05-01" for year in range(1999, 2050))) @@ -560,7 +560,7 @@ def test_labor_day(self): def test_dragon_boat_festival(self): name = "端午節" - name_observed = f"{name}(慶祝)" + name_observed = f"{name}(補假)" name_following = f"{name}翌日" self.assertHolidayName( @@ -632,7 +632,7 @@ def test_dragon_boat_festival(self): def test_hong_kong_sar_day(self): name = "香港特別行政區成立紀念日" - name_observed = f"{name}(慶祝)" + name_observed = f"{name}(補假)" name_following = f"{name}翌日" self.assertHolidayName(name, (f"{year}-07-01" for year in range(1997, 2050))) @@ -736,7 +736,7 @@ def test_mid_autumn_festival(self): def test_double_ninth_festival(self): name = "重陽節" - name_observed = f"{name}(慶祝)" + name_observed = f"{name}(補假)" name_following = f"{name}翌日" self.assertHolidayName( @@ -835,7 +835,7 @@ def test_double_ninth_festival(self): def test_national_day(self): name = "國慶日" - name_observed = f"{name}(慶祝)" + name_observed = f"{name}(補假)" name_following = f"{name}翌日" self.assertHolidayName(name, (f"{year}-10-01" for year in range(1997, 2050))) @@ -875,7 +875,7 @@ def test_national_day(self): def test_winter_solstice(self): name = "冬節" - name_observed = f"{name}(慶祝)" + name_observed = f"{name}(補假)" holidays_with_winter_solstice = HongKong( preferred_discretionary_holidays=(WINTER_SOLSTICE,), years=range(1963, 2050) @@ -926,9 +926,9 @@ def test_winter_solstice(self): def test_christmas_day(self): name = "聖誕節" - name_observed = f"{name}(慶祝)" + name_observed = f"{name}(補假)" name_first = "聖誕節後第一個周日" - name_first_observed = f"{name_first}(慶祝)" + name_first_observed = f"{name_first}(補假)" name_second = "聖誕節後第二個周日" self.assertHolidayName(name, (f"{year}-12-25" for year in range(1963, 2050))) @@ -1163,7 +1163,7 @@ def test_2020(self): ("2020-10-01", "國慶日"), ("2020-10-02", "中秋節翌日"), ("2020-10-25", "重陽節"), - ("2020-10-26", "重陽節(慶祝)"), + ("2020-10-26", "重陽節(補假)"), ("2020-12-21", "冬節"), ("2020-12-25", "聖誕節"), ) @@ -1177,7 +1177,7 @@ def test_2021(self): ("2021-02-13", "農曆年初二"), ("2021-02-15", "農曆年初四"), ("2021-04-04", "清明節"), - ("2021-04-05", "清明節(慶祝)"), + ("2021-04-05", "清明節(補假)"), ("2021-05-01", "勞動節"), ("2021-06-14", "端午節"), ("2021-07-01", "香港特別行政區成立紀念日"), @@ -1198,9 +1198,9 @@ def test_2022(self): ("2022-02-03", "農曆年初三"), ("2022-04-05", "清明節"), ("2022-05-01", "勞動節"), - ("2022-05-02", "勞動節(慶祝)"), + ("2022-05-02", "勞動節(補假)"), ("2022-05-08", "佛誕"), - ("2022-05-09", "佛誕(慶祝)"), + ("2022-05-09", "佛誕(補假)"), ("2022-06-03", "端午節"), ("2022-07-01", "香港特別行政區成立紀念日"), ("2022-09-12", "中秋節後第二日"), @@ -1208,7 +1208,7 @@ def test_2022(self): ("2022-10-04", "重陽節"), ("2022-12-22", "冬節"), ("2022-12-25", "聖誕節"), - ("2022-12-26", "聖誕節(慶祝)"), + ("2022-12-26", "聖誕節(補假)"), ) def test_2023(self): @@ -1216,7 +1216,7 @@ def test_2023(self): self.assertHolidays( HongKong(years=2023, preferred_discretionary_holidays=(CHRISTMAS, WINTER_SOLSTICE)), ("2023-01-01", "一月一日"), - ("2023-01-02", "一月一日(慶祝)"), + ("2023-01-02", "一月一日(補假)"), ("2023-01-23", "農曆年初二"), ("2023-01-24", "農曆年初三"), ("2023-01-25", "農曆年初四"), @@ -1227,7 +1227,7 @@ def test_2023(self): ("2023-07-01", "香港特別行政區成立紀念日"), ("2023-09-30", "中秋節翌日"), ("2023-10-01", "國慶日"), - ("2023-10-02", "國慶日(慶祝)"), + ("2023-10-02", "國慶日(補假)"), ("2023-10-23", "重陽節"), ("2023-12-22", "冬節"), ("2023-12-25", "聖誕節"), @@ -1271,7 +1271,7 @@ def test_2025(self): ("2025-10-07", "中秋節翌日"), ("2025-10-29", "重陽節"), ("2025-12-21", "冬節"), - ("2025-12-22", "冬節(慶祝)"), + ("2025-12-22", "冬節(補假)"), ("2025-12-25", "聖誕節"), ("2025-12-26", "聖誕節後第一個周日"), ) diff --git a/tests/countries/test_taiwan.py b/tests/countries/test_taiwan.py index 12f61078c..1965b6390 100644 --- a/tests/countries/test_taiwan.py +++ b/tests/countries/test_taiwan.py @@ -153,7 +153,7 @@ def test_foundation_day_of_the_republic_of_china(self): "2021-12-31", "2023-01-02", ) - self.assertHolidayName(f"{name}(慶祝)", obs_dt) + self.assertHolidayName(f"{name}(補假)", obs_dt) self.assertNoNonObservedHoliday(obs_dt) # School Holidays @@ -269,8 +269,8 @@ def test_chinese_new_year(self): "2023-01-26", "2024-02-13", ) - self.assertHolidayName(f"{name_eve}(慶祝)", obs_eve_dt) - self.assertHolidayName(f"{name}(慶祝)", obs_dt) + self.assertHolidayName(f"{name_eve}(補假)", obs_eve_dt) + self.assertHolidayName(f"{name}(補假)", obs_dt) self.assertNoNonObservedHoliday(obs_eve_dt, obs_dt) def test_taoism_day(self): @@ -305,7 +305,7 @@ def test_peace_memorial_day(self): "2016-02-29", "2021-03-01", ) - self.assertHolidayName(f"{name}(慶祝)", obs_dt) + self.assertHolidayName(f"{name}(補假)", obs_dt) self.assertNoNonObservedHoliday(obs_dt) def test_arbor_day(self): @@ -370,7 +370,7 @@ def test_childrens_day(self): "1999-04-04", "2000-04-03", ) - self.assertHolidayName(f"{name}(慶祝)", self.optional_holidays, obs_dt) + self.assertHolidayName(f"{name}(補假)", self.optional_holidays, obs_dt) self.assertNoNonObservedHoliday(self.optional_holidays_non_observed, obs_dt) # Public Holidays. @@ -386,7 +386,7 @@ def test_childrens_day(self): "2024-04-05", "2025-04-03", ) - self.assertHolidayName(f"{name}(慶祝)", obs_dt) + self.assertHolidayName(f"{name}(補假)", obs_dt) self.assertNoNonObservedHoliday(obs_dt) # Workdays. @@ -404,7 +404,7 @@ def test_womens_day(self): "1999-04-04", "2000-04-03", ) - self.assertHolidayName(f"{name}(慶祝)", self.optional_holidays, obs_dt) + self.assertHolidayName(f"{name}(補假)", self.optional_holidays, obs_dt) self.assertNoNonObservedHoliday(self.optional_holidays_non_observed, obs_dt) self.assertNoHolidayName(name) @@ -440,7 +440,7 @@ def test_tomb_sweeping_day(self): "2020-04-02", "2021-04-05", ) - self.assertHolidayName(f"{name}(慶祝)", obs_dt) + self.assertHolidayName(f"{name}(補假)", obs_dt) self.assertNoNonObservedHoliday(obs_dt) def test_late_president_chiang_kai_sheks_memorial_day(self): @@ -482,7 +482,7 @@ def test_the_buddhas_birthday(self): # Public Holidays. self.assertNoHolidayName(name) obs_dt = ("2000-05-14",) - self.assertHolidayName(f"{name}(慶祝)", obs_dt) + self.assertHolidayName(f"{name}(補假)", obs_dt) self.assertNoNonObservedHoliday(obs_dt) # Workdays. @@ -531,7 +531,7 @@ def test_dragon_boat_festival(self): "2015-06-19", "2025-05-30", ) - self.assertHolidayName(f"{name}(慶祝)", obs_dt) + self.assertHolidayName(f"{name}(補假)", obs_dt) self.assertNoNonObservedHoliday(obs_dt) def test_commemoration_day_of_the_lifting_of_martial_law(self): @@ -552,7 +552,7 @@ def test_armed_forces_day(self): name, self.optional_holidays, (f"{year}-09-03" for year in range(1998, 2050)) ) obs_dt = ("2000-09-04",) - self.assertHolidayName(f"{name}(慶祝)", self.optional_holidays, obs_dt) + self.assertHolidayName(f"{name}(補假)", self.optional_holidays, obs_dt) self.assertNoNonObservedHoliday(self.optional_holidays_non_observed, obs_dt) self.assertNoHolidayName(name) @@ -580,7 +580,7 @@ def test_mid_autumn_festival(self): "2015-09-28", "2022-09-09", ) - self.assertHolidayName(f"{name}(慶祝)", obs_dt) + self.assertHolidayName(f"{name}(補假)", obs_dt) self.assertNoNonObservedHoliday(obs_dt) def test_national_day(self): @@ -593,7 +593,7 @@ def test_national_day(self): "2020-10-09", "2021-10-11", ) - self.assertHolidayName(f"{name}(慶祝)", obs_dt) + self.assertHolidayName(f"{name}(補假)", obs_dt) self.assertNoNonObservedHoliday(obs_dt) def test_confucius_birthday(self): @@ -755,10 +755,10 @@ def test_1998(self): ("1998-01-28", "春節"), ("1998-01-29", "春節"), ("1998-01-30", "春節"), - ("1998-01-31", "春節(慶祝)"), + ("1998-01-31", "春節(補假)"), ("1998-02-28", "和平紀念日"), ("1998-04-05", "民族掃墓節"), - ("1998-04-06", "民族掃墓節(慶祝)"), + ("1998-04-06", "民族掃墓節(補假)"), ("1998-05-30", "端午節"), ("1998-10-05", "中秋節"), ("1998-10-10", "國慶日"), @@ -768,7 +768,7 @@ def test_1999(self): self.assertHolidays( Taiwan(years=1999), ("1999-01-01", "中華民國開國紀念日"), - ("1999-01-02", "中華民國開國紀念日(慶祝)"), + ("1999-01-02", "中華民國開國紀念日(補假)"), ("1999-02-15", "農曆除夕"), ("1999-02-16", "春節"), ("1999-02-17", "春節"), @@ -776,7 +776,7 @@ def test_1999(self): ("1999-02-28", "和平紀念日"), ("1999-04-05", "民族掃墓節"), ("1999-06-18", "端午節"), - ("1999-06-19", "端午節(慶祝)"), + ("1999-06-19", "端午節(補假)"), ("1999-09-24", "中秋節"), ("1999-10-10", "國慶日"), ) @@ -792,7 +792,7 @@ def test_2000(self): ("2000-02-28", "和平紀念日"), ("2000-04-03", "休息日(2000-04-08日起取代)"), ("2000-04-04", "民族掃墓節"), - ("2000-05-14", "佛陀誕辰紀念日(慶祝)"), + ("2000-05-14", "佛陀誕辰紀念日(補假)"), ("2000-06-06", "端午節"), ("2000-09-12", "中秋節"), ("2000-10-10", "國慶日"), @@ -837,8 +837,8 @@ def test_2003(self): ("2003-02-01", "春節"), ("2003-02-02", "春節"), ("2003-02-03", "春節"), - ("2003-02-04", "春節(慶祝)"), - ("2003-02-05", "春節(慶祝)"), + ("2003-02-04", "春節(補假)"), + ("2003-02-05", "春節(補假)"), ("2003-02-28", "和平紀念日"), ("2003-04-05", "民族掃墓節"), ("2003-06-04", "端午節"), @@ -854,7 +854,7 @@ def test_2004(self): ("2004-01-22", "春節"), ("2004-01-23", "春節"), ("2004-01-24", "春節"), - ("2004-01-26", "春節(慶祝)"), + ("2004-01-26", "春節(補假)"), ("2004-02-28", "和平紀念日"), ("2004-04-04", "民族掃墓節"), ("2004-06-22", "端午節"), @@ -886,8 +886,8 @@ def test_2006(self): ("2006-01-29", "春節"), ("2006-01-30", "春節"), ("2006-01-31", "春節"), - ("2006-02-01", "農曆除夕(慶祝)"), - ("2006-02-02", "春節(慶祝)"), + ("2006-02-01", "農曆除夕(補假)"), + ("2006-02-02", "春節(補假)"), ("2006-02-28", "和平紀念日"), ("2006-04-05", "民族掃墓節"), ("2006-05-31", "端午節"), @@ -904,8 +904,8 @@ def test_2007(self): ("2007-02-18", "春節"), ("2007-02-19", "春節"), ("2007-02-20", "春節"), - ("2007-02-21", "農曆除夕(慶祝)"), - ("2007-02-22", "春節(慶祝)"), + ("2007-02-21", "農曆除夕(補假)"), + ("2007-02-22", "春節(補假)"), ("2007-02-23", "休息日(2007-03-03日起取代)"), ("2007-02-28", "和平紀念日"), ("2007-04-05", "民族掃墓節"), @@ -925,7 +925,7 @@ def test_2008(self): ("2008-02-07", "春節"), ("2008-02-08", "春節"), ("2008-02-09", "春節"), - ("2008-02-11", "春節(慶祝)"), + ("2008-02-11", "春節(補假)"), ("2008-02-28", "和平紀念日"), ("2008-04-04", "民族掃墓節"), ("2008-06-08", "端午節"), @@ -942,7 +942,7 @@ def test_2009(self): ("2009-01-26", "春節"), ("2009-01-27", "春節"), ("2009-01-28", "春節"), - ("2009-01-29", "農曆除夕(慶祝)"), + ("2009-01-29", "農曆除夕(補假)"), ("2009-01-30", "休息日(2009-01-17日起取代)"), ("2009-02-28", "和平紀念日"), ("2009-04-04", "民族掃墓節"), @@ -960,8 +960,8 @@ def test_2010(self): ("2010-02-14", "春節"), ("2010-02-15", "春節"), ("2010-02-16", "春節"), - ("2010-02-17", "農曆除夕(慶祝)"), - ("2010-02-18", "春節(慶祝)"), + ("2010-02-17", "農曆除夕(補假)"), + ("2010-02-18", "春節(補假)"), ("2010-02-19", "休息日(2010-02-06日起取代)"), ("2010-02-28", "和平紀念日"), ("2010-04-05", "民族掃墓節"), @@ -978,7 +978,7 @@ def test_2011(self): ("2011-02-03", "春節"), ("2011-02-04", "春節"), ("2011-02-05", "春節"), - ("2011-02-07", "春節(慶祝)"), + ("2011-02-07", "春節(補假)"), ("2011-02-28", "和平紀念日"), ("2011-04-04", "兒童節"), ("2011-04-05", "民族掃墓節"), @@ -995,7 +995,7 @@ def test_2012(self): ("2012-01-23", "春節"), ("2012-01-24", "春節"), ("2012-01-25", "春節"), - ("2012-01-26", "農曆除夕(慶祝)"), + ("2012-01-26", "農曆除夕(補假)"), ("2012-01-27", "休息日(2012-02-04日起取代)"), ("2012-02-27", "休息日(2012-03-03日起取代)"), ("2012-02-28", "和平紀念日"), @@ -1014,12 +1014,12 @@ def test_2013(self): ("2013-02-10", "春節"), ("2013-02-11", "春節"), ("2013-02-12", "春節"), - ("2013-02-13", "農曆除夕(慶祝)"), - ("2013-02-14", "春節(慶祝)"), + ("2013-02-13", "農曆除夕(補假)"), + ("2013-02-14", "春節(補假)"), ("2013-02-15", "休息日(2013-02-23日起取代)"), ("2013-02-28", "和平紀念日"), ("2013-04-04", "兒童節; 民族掃墓節"), - ("2013-04-05", "兒童節(慶祝)"), + ("2013-04-05", "兒童節(補假)"), ("2013-06-12", "端午節"), ("2013-09-19", "中秋節"), ("2013-09-20", "休息日(2013-09-14日起取代)"), @@ -1034,8 +1034,8 @@ def test_2014(self): ("2014-01-31", "春節"), ("2014-02-01", "春節"), ("2014-02-02", "春節"), - ("2014-02-03", "春節(慶祝)"), - ("2014-02-04", "春節(慶祝)"), + ("2014-02-03", "春節(補假)"), + ("2014-02-04", "春節(補假)"), ("2014-02-28", "和平紀念日"), ("2014-04-04", "兒童節"), ("2014-04-05", "民族掃墓節"), @@ -1053,18 +1053,18 @@ def test_2015(self): ("2015-02-19", "春節"), ("2015-02-20", "春節"), ("2015-02-21", "春節"), - ("2015-02-23", "春節(慶祝)"), - ("2015-02-27", "和平紀念日(慶祝)"), + ("2015-02-23", "春節(補假)"), + ("2015-02-27", "和平紀念日(補假)"), ("2015-02-28", "和平紀念日"), - ("2015-04-03", "兒童節(慶祝)"), + ("2015-04-03", "兒童節(補假)"), ("2015-04-04", "兒童節"), ("2015-04-05", "民族掃墓節"), - ("2015-04-06", "民族掃墓節(慶祝)"), - ("2015-06-19", "端午節(慶祝)"), + ("2015-04-06", "民族掃墓節(補假)"), + ("2015-06-19", "端午節(補假)"), ("2015-06-20", "端午節"), ("2015-09-27", "中秋節"), - ("2015-09-28", "中秋節(慶祝)"), - ("2015-10-09", "國慶日(慶祝)"), + ("2015-09-28", "中秋節(補假)"), + ("2015-10-09", "國慶日(補假)"), ("2015-10-10", "國慶日"), ) @@ -1076,12 +1076,12 @@ def test_2016(self): ("2016-02-08", "春節"), ("2016-02-09", "春節"), ("2016-02-10", "春節"), - ("2016-02-11", "農曆除夕(慶祝)"), + ("2016-02-11", "農曆除夕(補假)"), ("2016-02-12", "休息日(2016-01-30日起取代)"), ("2016-02-28", "和平紀念日"), - ("2016-02-29", "和平紀念日(慶祝)"), + ("2016-02-29", "和平紀念日(補假)"), ("2016-04-04", "兒童節; 民族掃墓節"), - ("2016-04-05", "兒童節(慶祝)"), + ("2016-04-05", "兒童節(補假)"), ("2016-06-09", "端午節"), ("2016-06-10", "休息日(2016-06-04日起取代)"), ("2016-09-15", "中秋節"), @@ -1093,16 +1093,16 @@ def test_2017(self): self.assertHolidays( Taiwan(years=2017), ("2017-01-01", "中華民國開國紀念日"), - ("2017-01-02", "中華民國開國紀念日(慶祝)"), + ("2017-01-02", "中華民國開國紀念日(補假)"), ("2017-01-27", "農曆除夕"), ("2017-01-28", "春節"), ("2017-01-29", "春節"), ("2017-01-30", "春節"), - ("2017-01-31", "春節(慶祝)"), - ("2017-02-01", "春節(慶祝)"), + ("2017-01-31", "春節(補假)"), + ("2017-02-01", "春節(補假)"), ("2017-02-27", "休息日(2017-02-18日起取代)"), ("2017-02-28", "和平紀念日"), - ("2017-04-03", "兒童節(慶祝)"), + ("2017-04-03", "兒童節(補假)"), ("2017-04-04", "兒童節; 民族掃墓節"), ("2017-05-29", "休息日(2017-06-03日起取代)"), ("2017-05-30", "端午節"), @@ -1119,8 +1119,8 @@ def test_2018(self): ("2018-02-16", "春節"), ("2018-02-17", "春節"), ("2018-02-18", "春節"), - ("2018-02-19", "春節(慶祝)"), - ("2018-02-20", "春節(慶祝)"), + ("2018-02-19", "春節(補假)"), + ("2018-02-20", "春節(補假)"), ("2018-02-28", "和平紀念日"), ("2018-04-04", "兒童節"), ("2018-04-05", "民族掃墓節"), @@ -1159,17 +1159,17 @@ def test_2020(self): ("2020-01-25", "春節"), ("2020-01-26", "春節"), ("2020-01-27", "春節"), - ("2020-01-28", "春節(慶祝)"), - ("2020-01-29", "春節(慶祝)"), + ("2020-01-28", "春節(補假)"), + ("2020-01-29", "春節(補假)"), ("2020-02-28", "和平紀念日"), - ("2020-04-02", "民族掃墓節(慶祝)"), - ("2020-04-03", "兒童節(慶祝)"), + ("2020-04-02", "民族掃墓節(補假)"), + ("2020-04-03", "兒童節(補假)"), ("2020-04-04", "兒童節; 民族掃墓節"), ("2020-06-25", "端午節"), ("2020-06-26", "休息日(2020-06-20日起取代)"), ("2020-10-01", "中秋節"), ("2020-10-02", "休息日(2020-09-26日起取代)"), - ("2020-10-09", "國慶日(慶祝)"), + ("2020-10-09", "國慶日(補假)"), ("2020-10-10", "國慶日"), ) @@ -1182,19 +1182,19 @@ def test_2021(self): ("2021-02-12", "春節"), ("2021-02-13", "春節"), ("2021-02-14", "春節"), - ("2021-02-15", "春節(慶祝)"), - ("2021-02-16", "春節(慶祝)"), + ("2021-02-15", "春節(補假)"), + ("2021-02-16", "春節(補假)"), ("2021-02-28", "和平紀念日"), - ("2021-03-01", "和平紀念日(慶祝)"), - ("2021-04-02", "兒童節(慶祝)"), + ("2021-03-01", "和平紀念日(補假)"), + ("2021-04-02", "兒童節(補假)"), ("2021-04-04", "兒童節; 民族掃墓節"), - ("2021-04-05", "民族掃墓節(慶祝)"), + ("2021-04-05", "民族掃墓節(補假)"), ("2021-06-14", "端午節"), ("2021-09-20", "休息日(2021-09-11日起取代)"), ("2021-09-21", "中秋節"), ("2021-10-10", "國慶日"), - ("2021-10-11", "國慶日(慶祝)"), - ("2021-12-31", "中華民國開國紀念日(慶祝)"), + ("2021-10-11", "國慶日(補假)"), + ("2021-12-31", "中華民國開國紀念日(補假)"), ) def test_2022(self): @@ -1210,7 +1210,7 @@ def test_2022(self): ("2022-04-04", "兒童節"), ("2022-04-05", "民族掃墓節"), ("2022-06-03", "端午節"), - ("2022-09-09", "中秋節(慶祝)"), + ("2022-09-09", "中秋節(補假)"), ("2022-09-10", "中秋節"), ("2022-10-10", "國慶日"), ) @@ -1219,14 +1219,14 @@ def test_2023(self): self.assertHolidays( Taiwan(years=2023), ("2023-01-01", "中華民國開國紀念日"), - ("2023-01-02", "中華民國開國紀念日(慶祝)"), + ("2023-01-02", "中華民國開國紀念日(補假)"), ("2023-01-20", "休息日(2023-01-07日起取代)"), ("2023-01-21", "農曆除夕"), ("2023-01-22", "春節"), ("2023-01-23", "春節"), ("2023-01-24", "春節"), - ("2023-01-25", "農曆除夕(慶祝)"), - ("2023-01-26", "春節(慶祝)"), + ("2023-01-25", "農曆除夕(補假)"), + ("2023-01-26", "春節(補假)"), ("2023-01-27", "休息日(2023-02-04日起取代)"), ("2023-02-27", "休息日(2023-02-18日起取代)"), ("2023-02-28", "和平紀念日"), @@ -1249,11 +1249,11 @@ def test_2024(self): ("2024-02-10", "春節"), ("2024-02-11", "春節"), ("2024-02-12", "春節"), - ("2024-02-13", "春節(慶祝)"), - ("2024-02-14", "春節(慶祝)"), + ("2024-02-13", "春節(補假)"), + ("2024-02-14", "春節(補假)"), ("2024-02-28", "和平紀念日"), ("2024-04-04", "兒童節; 民族掃墓節"), - ("2024-04-05", "兒童節(慶祝)"), + ("2024-04-05", "兒童節(補假)"), ("2024-06-10", "端午節"), ("2024-09-17", "中秋節"), ("2024-10-10", "國慶日"), @@ -1269,9 +1269,9 @@ def test_2025(self): ("2025-01-30", "春節"), ("2025-01-31", "春節"), ("2025-02-28", "和平紀念日"), - ("2025-04-03", "兒童節(慶祝)"), + ("2025-04-03", "兒童節(補假)"), ("2025-04-04", "兒童節; 民族掃墓節"), - ("2025-05-30", "端午節(慶祝)"), + ("2025-05-30", "端午節(補假)"), ("2025-05-31", "端午節"), ("2025-09-28", "孔子誕辰紀念日"), ("2025-10-06", "中秋節"), @@ -1300,7 +1300,7 @@ def test_l10n_default(self): ("2022-06-03", "端午節"), ("2022-07-15", "解嚴紀念日"), ("2022-09-03", "軍人節"), - ("2022-09-09", "中秋節(慶祝)"), + ("2022-09-09", "中秋節(補假)"), ("2022-09-10", "中秋節"), ("2022-09-28", "孔子誕辰紀念日; 教師節"), ("2022-10-10", "國慶日"), @@ -1393,7 +1393,7 @@ def test_l10n_zh_cn(self): ("2022-06-03", "端午节"), ("2022-07-15", "解严纪念日"), ("2022-09-03", "军人节"), - ("2022-09-09", "中秋节(庆祝)"), + ("2022-09-09", "中秋节(观察日)"), ("2022-09-10", "中秋节"), ("2022-09-28", "孔子诞辰纪念日; 教师节"), ("2022-10-10", "国庆日"), From 02603f25f1fd1bc1d360e2c4abcd0b7136e4d33f Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Mon, 15 Sep 2025 07:27:55 +0300 Subject: [PATCH 32/34] Update Chinese Lunisolar calendar: extend Winter Solstice support (#2927) --- holidays/calendars/chinese.py | 40 +++++++++++++++++- holidays/groups/chinese.py | 18 ++------- tests/calendars/test_chinese.py | 72 ++++++++++++++++++++++++++++++++- 3 files changed, 113 insertions(+), 17 deletions(-) diff --git a/holidays/calendars/chinese.py b/holidays/calendars/chinese.py index b4e3ef3c5..d363400f8 100644 --- a/holidays/calendars/chinese.py +++ b/holidays/calendars/chinese.py @@ -14,7 +14,7 @@ from typing import Optional from holidays.calendars.custom import _CustomCalendar -from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, SEP, OCT, NOV +from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, SEP, OCT, NOV, DEC CHINESE_CALENDAR = "CHINESE_CALENDAR" KOREAN_CALENDAR = "KOREAN_CALENDAR" @@ -1307,6 +1307,24 @@ class _ChineseLunisolar: 2053: (FEB, 18), } + WINTER_SOLSTICE_THRESHOLDS: dict[str, dict[str, dict[int, int]]] = { + # UTC+7. + VIETNAMESE_CALENDAR: { + "dec_21": {0: 1980, 1: 2017, 2: 2050, 3: 2083}, + "dec_23": {3: 1943}, + }, + # UTC+8. + CHINESE_CALENDAR: { + "dec_21": {0: 1988, 1: 2021, 2: 2058, 3: 2091}, + "dec_23": {3: 1947}, + }, + # UTC+9. + KOREAN_CALENDAR: { + "dec_21": {0: 1992, 1: 2029, 2: 2062, 3: 2099}, + "dec_23": {3: 1955}, + }, + } + def __init__(self, calendar: str = CHINESE_CALENDAR) -> None: self.__verify_calendar(calendar) self.__calendar = calendar @@ -1359,6 +1377,26 @@ def lunar_new_year_date(self, year: int, calendar=None) -> tuple[Optional[date], def mid_autumn_date(self, year: int, calendar=None) -> tuple[Optional[date], bool]: return self._get_holiday(MID_AUTUMN, year, calendar) + def winter_solstice_date(self, year: int, calendar=None) -> tuple[Optional[date], bool]: + """Return Winter Solstice (22nd solar term in Chinese Lunisolar calendar) date. + + !!! note "Note" + This approximation is reliable for 1941-2099 years. + """ + calendar = calendar or self.__calendar + self.__verify_calendar(calendar) + + thresholds = self.WINTER_SOLSTICE_THRESHOLDS[calendar] + year_mod = year % 4 + if year >= thresholds["dec_21"][year_mod]: + day = 21 + elif year <= thresholds["dec_23"].get(year_mod, 0): + day = 23 + else: + day = 22 + + return date(year, DEC, day), not (1941 <= year <= 2099) + class _CustomChineseHolidays(_CustomCalendar, _ChineseLunisolar): pass diff --git a/holidays/groups/chinese.py b/holidays/groups/chinese.py index 8b830e71c..92493597e 100644 --- a/holidays/groups/chinese.py +++ b/holidays/groups/chinese.py @@ -14,7 +14,7 @@ from typing import Optional from holidays.calendars.chinese import _ChineseLunisolar, CHINESE_CALENDAR -from holidays.calendars.gregorian import APR, DEC +from holidays.calendars.gregorian import APR from holidays.groups.eastern import EasternCalendarHolidays @@ -79,20 +79,8 @@ def _double_ninth_festival(self): def _dongzhi_festival(self): """ Return Dongzhi Festival (Chinese Winter Solstice) date. - - This approximation is reliable for 1952-2099 years. - """ - # - if ( - (self._year % 4 == 0 and self._year >= 1988) - or (self._year % 4 == 1 and self._year >= 2021) - or (self._year % 4 == 2 and self._year >= 2058) - or (self._year % 4 == 3 and self._year >= 2091) - ): - day = 21 - else: - day = 22 - return date(self._year, DEC, day) + """ + return self._chinese_calendar.winter_solstice_date(self._year)[0] def _add_chinese_calendar_holiday( self, name: str, dt_estimated: tuple[Optional[date], bool], days_delta: int = 0 diff --git a/tests/calendars/test_chinese.py b/tests/calendars/test_chinese.py index 8acb4059b..165a50520 100644 --- a/tests/calendars/test_chinese.py +++ b/tests/calendars/test_chinese.py @@ -12,9 +12,79 @@ import unittest -from holidays.calendars.chinese import _ChineseLunisolar +from holidays.calendars.chinese import _ChineseLunisolar, KOREAN_CALENDAR, VIETNAMESE_CALENDAR class TestChineseLunisolarCalendar(unittest.TestCase): + def setUp(self) -> None: + super().setUp() + self.calendar = _ChineseLunisolar() + def test_check_calendar(self): self.assertRaises(ValueError, lambda: _ChineseLunisolar("INVALID_CALENDAR")) + + def test_winter_solstice_chinese(self): + for year, day in ( + (1943, 23), + (1947, 23), + (1951, 22), + (1984, 22), + (1988, 21), + (1992, 21), + (2017, 22), + (2021, 21), + (2025, 21), + (2054, 22), + (2058, 21), + (2062, 21), + (2087, 22), + (2091, 21), + (2095, 21), + ): + self.assertEqual(self.calendar.winter_solstice_date(year)[0].day, day) + + def test_winter_solstice_korean(self): + for year, day in ( + (1951, 23), + (1955, 23), + (1959, 22), + (1988, 22), + (1992, 21), + (1996, 21), + (2025, 22), + (2029, 21), + (2033, 21), + (2058, 22), + (2062, 21), + (2066, 21), + (2095, 22), + (2099, 21), + ): + self.assertEqual(self.calendar.winter_solstice_date(year, KOREAN_CALENDAR)[0].day, day) + + def test_winter_solstice_vietnamese(self): + for year, day in ( + (1943, 23), + (1947, 22), + (1976, 22), + (1980, 21), + (1984, 21), + (2013, 22), + (2017, 21), + (2021, 21), + (2046, 22), + (2050, 21), + (2054, 21), + (2079, 22), + (2083, 21), + (2087, 21), + ): + self.assertEqual( + self.calendar.winter_solstice_date(year, VIETNAMESE_CALENDAR)[0].day, day + ) + + def test_winter_solstice_estimated(self): + for year in (1940, 2100): + self.assertTrue(self.calendar.winter_solstice_date(year)[1]) + for year in (1941, 2099): + self.assertFalse(self.calendar.winter_solstice_date(year)[1]) From ba0d5133a0e62b9c36028852fe096e8ef5c79582 Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Mon, 15 Sep 2025 18:44:26 +0300 Subject: [PATCH 33/34] Update release notes generator (#2929) --- scripts/generate_release_notes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/generate_release_notes.py b/scripts/generate_release_notes.py index 73e1b2a41..9e15a1d09 100755 --- a/scripts/generate_release_notes.py +++ b/scripts/generate_release_notes.py @@ -20,7 +20,7 @@ from pathlib import Path from git import Repo -from github import Github +from github import Auth, Github from github.GithubException import UnknownObjectException sys.path.append(f"{Path.cwd()}") @@ -79,7 +79,7 @@ def __init__(self) -> None: self.args = arg_parser.parse_args() self.local_repo = Repo(Path.cwd()) - self.remote_repo = Github(self.github_token).get_repo(REPOSITORY_NAME) + self.remote_repo = Github(auth=Auth.Token(self.github_token)).get_repo(REPOSITORY_NAME) self.previous_commits: set[str] = set() self.pull_requests: dict[int, tuple[str, str]] = {} From f3d765ee6f9a2ab03b2957a77128d90032e13b34 Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Mon, 15 Sep 2025 20:26:48 +0300 Subject: [PATCH 34/34] Finalize v0.81 --- CHANGES.md | 13 +++++++++++++ SECURITY.md | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 5c1bde987..59fd4e2ed 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,16 @@ +# Version 0.81 + +Released September 15, 2025 + +- Add Saint Helena, Ascension and Tristan da Cunha holidays (#2820 by @Abheelash-Mishra, @arkid15r) +- Add Sudan holidays (#2854 by @anshonweb) +- Update Chinese Lunisolar calendar: extend Winter Solstice support (#2927 by @KJhellico) +- Update Philippines holidays: add 2026 holidays (#2912 by @KJhellico) +- Update Spain holidays: add Dec 3 holiday in Navarre (#2895 by @KJhellico) +- Update countries with Eastern holidays: add estimated holidays labels (#2924 by @KJhellico, @arkid15r) +- Update release notes generator (#2929 by @KJhellico) +- Simplify N802 suppression for `common.py` (#2880 by @arkid15r) + # Version 0.80 Released September 1, 2025 diff --git a/SECURITY.md b/SECURITY.md index 7593dd04a..2724a6944 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,8 +4,8 @@ | Version | Supported | |---------| ------------------ | -| 0.80 | :white_check_mark: | -| < 0.80 | :x: | +| 0.81 | :white_check_mark: | +| < 0.81 | :x: | ## Reporting a Vulnerability