Repository: vacanza/holidays
Pull request #2070 (2024-10-21 17:14:34)

v0.59
Version 0.59
============

Released October 21, 2024

- Update Vietnam holidays: add `th` localization (#2060 by @PPsyrius)
- Update Germany holidays: add Liberation from Nazi Regime Day 2025 in Berlin (#2052 by @hf-kklein, @PPsyrius)
- Update Johor (Malaysia) and United Arab Emirates `weekend` observance, cleanup others (#2048 by @PPsyrius)
- Update Vietnam holidays (#2049 by @KJhellico)
- Update `InternationalHolidays::_add_world_war_two_victory_day()` method (#2064 by @KJhellico)
- Update `holidays` package metadata (#2063 by @arkid15r)
- Update metadata Python versions (#2069 by @arkid15r)
- Add `EasternCalendarHolidays` to holidays groups (#2062 by @KJhellico)
- Drop Python 3.8 support (#2042 by @PPsyrius)
- Satisfy mypy requirements (#2053 by @arkid15r)


Patch:
diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml
index 9ce3d482..ccfe7f17 100644
--- a/.github/workflows/ci-cd.yml
+++ b/.github/workflows/ci-cd.yml
@@ -72,7 +72,6 @@ jobs:
           - ubuntu-latest
           - windows-latest
         python-version:
-          - '3.8'
           - '3.9'
           - '3.10'
           - '3.11'
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 3477d2de..299f35d8 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -16,14 +16,14 @@ repos:
           - rst
 
   - repo: https://github.com/asottile/pyupgrade
-    rev: v3.17.0
+    rev: v3.18.0
     hooks:
     -   id: pyupgrade
         args:
-          - --py38-plus
+          - --py39-plus
 
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.6.9
+    rev: v0.7.0
     hooks:
       - id: ruff
       - id: ruff-format
@@ -54,7 +54,7 @@ repos:
         exclude: ^(docs)
 
   - repo: https://github.com/pre-commit/mirrors-mypy
-    rev: v1.11.2
+    rev: v1.12.1
     hooks:
       - id: mypy
         additional_dependencies:
diff --git a/CHANGES b/CHANGES
index d17eb305..dbc0cee7 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,19 @@
+Version 0.59
+============
+
+Released October 21, 2024
+
+- Update Vietnam holidays: add `th` localization (#2060 by @PPsyrius)
+- Update Germany holidays: add Liberation from Nazi Regime Day 2025 in Berlin (#2052 by @hf-kklein, @PPsyrius)
+- Update Johor (Malaysia) and United Arab Emirates `weekend` observance, cleanup others (#2048 by @PPsyrius)
+- Update Vietnam holidays (#2049 by @KJhellico)
+- Update `InternationalHolidays::_add_world_war_two_victory_day()` method (#2064 by @KJhellico)
+- Update `holidays` package metadata (#2063 by @arkid15r)
+- Update metadata Python versions (#2069 by @arkid15r)
+- Add `EasternCalendarHolidays` to holidays groups (#2062 by @KJhellico)
+- Drop Python 3.8 support (#2042 by @PPsyrius)
+- Satisfy mypy requirements (#2053 by @arkid15r)
+
 Version 0.58
 ============
 
diff --git a/README.rst b/README.rst
index 19960d78..9a04d173 100644
--- a/README.rst
+++ b/README.rst
@@ -938,7 +938,7 @@ All other default values are highlighted with bold:
    * - Vietnam
      - VN
      -
-     - en_US, **vi**
+     - en_US, th, **vi**
      -
    * - Virgin Islands (U.S.)
      - VI
diff --git a/docs/source/conf.py b/docs/source/conf.py
index f7d08c87..c2760e6b 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -72,7 +72,7 @@ templates_path = ["_templates"]
 # List of patterns, relative to source directory, that match files and
 # directories to ignore when looking for source files.
 # This pattern also affects html_static_path and html_extra_path.
-exclude_patterns: List[str] = []
+exclude_patterns: list[str] = []
 
 # Add any paths that contain templates here, relative to this directory.
 #
@@ -144,7 +144,7 @@ html_copy_source = False
 #
 # See https://sphinx-rtd-theme.readthedocs.io/en/latest/configuring.html
 #
-html_theme_options: Dict[str, Union[str, bool, int]] = {
+html_theme_options: dict[str, Union[str, bool, int]] = {
     # 'canonical_url': '',
     # 'analytics_id': 'UA-XXXXXXX-1',  #  Provided by Google in your dashboard
     # 'analytics_anonymize_ip': False
diff --git a/holidays/__init__.py b/holidays/__init__.py
index e9798483..21f68aa4 100644
--- a/holidays/__init__.py
+++ b/holidays/__init__.py
@@ -23,7 +23,7 @@ from holidays.holiday_base import *
 from holidays.registry import EntityLoader
 from holidays.utils import *
 
-__version__ = "0.58"
+__version__ = "0.59"
 
 
 EntityLoader.load("countries", globals())
diff --git a/holidays/calendars/buddhist.py b/holidays/calendars/buddhist.py
index ddf4cf24..8e78c16b 100644
--- a/holidays/calendars/buddhist.py
+++ b/holidays/calendars/buddhist.py
@@ -11,7 +11,7 @@
 #  License: MIT (see LICENSE file)
 
 from datetime import date
-from typing import Optional, Tuple
+from typing import Optional
 
 from holidays.calendars.custom import _CustomCalendar
 from holidays.calendars.gregorian import MAY, JUN
@@ -425,16 +425,16 @@ class _BuddhistLunisolar:
         2099: (MAY, 4),
     }
 
-    def _get_holiday(self, holiday: str, year: int) -> Tuple[Optional[date], bool]:
+    def _get_holiday(self, holiday: str, year: int) -> tuple[Optional[date], bool]:
         estimated_dates = getattr(self, f"{holiday}_DATES", {})
         exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {})
         dt = exact_dates.get(year, estimated_dates.get(year, ()))
         return date(year, *dt) if dt else None, year not in exact_dates
 
-    def vesak_date(self, year: int) -> Tuple[Optional[date], bool]:
+    def vesak_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(VESAK, year)
 
-    def vesak_may_date(self, year: int) -> Tuple[Optional[date], bool]:
+    def vesak_may_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(VESAK_MAY, year)
 
 
diff --git a/holidays/calendars/chinese.py b/holidays/calendars/chinese.py
index e37509da..f4a48d50 100644
--- a/holidays/calendars/chinese.py
+++ b/holidays/calendars/chinese.py
@@ -11,7 +11,7 @@
 #  License: MIT (see LICENSE file)
 
 from datetime import date
-from typing import Optional, Tuple
+from typing import Optional
 
 from holidays.calendars.custom import _CustomCalendar
 from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, SEP, OCT, NOV
@@ -1237,28 +1237,28 @@ class _ChineseLunisolar:
         2099: (SEP, 29),
     }
 
-    def _get_holiday(self, holiday: str, year: int) -> Tuple[Optional[date], bool]:
+    def _get_holiday(self, holiday: str, year: int) -> tuple[Optional[date], bool]:
         estimated_dates = getattr(self, f"{holiday}_DATES", {})
         exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {})
         dt = exact_dates.get(year, estimated_dates.get(year, ()))
         return date(year, *dt) if dt else None, year not in exact_dates
 
-    def buddha_birthday_date(self, year: int) -> Tuple[Optional[date], bool]:
+    def buddha_birthday_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(BUDDHA_BIRTHDAY, year)
 
-    def double_ninth_date(self, year: int) -> Tuple[Optional[date], bool]:
+    def double_ninth_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(DOUBLE_NINTH, year)
 
-    def dragon_boat_date(self, year: int) -> Tuple[Optional[date], bool]:
+    def dragon_boat_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(DRAGON_BOAT, year)
 
-    def hung_kings_date(self, year: int) -> Tuple[Optional[date], bool]:
+    def hung_kings_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(HUNG_KINGS, year)
 
-    def lunar_new_year_date(self, year: int) -> Tuple[Optional[date], bool]:
+    def lunar_new_year_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(LUNAR_NEW_YEAR, year)
 
-    def mid_autumn_date(self, year: int) -> Tuple[Optional[date], bool]:
+    def mid_autumn_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(MID_AUTUMN, year)
 
 
diff --git a/holidays/calendars/hindu.py b/holidays/calendars/hindu.py
index bd7bd4a4..949eaef4 100644
--- a/holidays/calendars/hindu.py
+++ b/holidays/calendars/hindu.py
@@ -11,7 +11,7 @@
 #  License: MIT (see LICENSE file)
 
 from datetime import date
-from typing import Optional, Tuple
+from typing import Optional
 
 from holidays.calendars.custom import _CustomCalendar
 from holidays.calendars.gregorian import JAN, FEB, MAR, OCT, NOV
@@ -425,16 +425,16 @@ class _HinduLunisolar:
         2099: (JAN, 6),
     }
 
-    def _get_holiday(self, holiday: str, year: int) -> Tuple[Optional[date], bool]:
+    def _get_holiday(self, holiday: str, year: int) -> tuple[Optional[date], bool]:
         estimated_dates = getattr(self, f"{holiday}_DATES", {})
         exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {})
         dt = exact_dates.get(year, estimated_dates.get(year, ()))
         return date(year, *dt) if dt else None, year not in exact_dates
 
-    def diwali_date(self, year: int) -> Tuple[Optional[date], bool]:
+    def diwali_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(DIWALI, year)
 
-    def thaipusam_date(self, year: int) -> Tuple[Optional[date], bool]:
+    def thaipusam_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(THAIPUSAM, year)
 
 
diff --git a/holidays/calendars/islamic.py b/holidays/calendars/islamic.py
index b18488c2..e6054a3d 100644
--- a/holidays/calendars/islamic.py
+++ b/holidays/calendars/islamic.py
@@ -10,8 +10,8 @@
 #  Website: https://github.com/vacanza/holidays
 #  License: MIT (see LICENSE file)
 
+from collections.abc import Iterable
 from datetime import date
-from typing import Iterable, Tuple
 
 from holidays.calendars.custom import _CustomCalendar
 from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
@@ -3641,80 +3641,80 @@ class _IslamicLunar:
         2076: (DEC, 5),
     }
 
-    def _get_holiday(self, holiday: str, year: int) -> Iterable[Tuple[date, bool]]:
+    def _get_holiday(self, holiday: str, year: int) -> Iterable[tuple[date, bool]]:
         estimated_dates = getattr(self, f"{holiday}_DATES", {})
         exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {})
         for year in (year - 1, year):
             for dt in _normalize_tuple(exact_dates.get(year, estimated_dates.get(year, ()))):
                 yield date(year, *dt), year not in exact_dates
 
-    def ali_al_rida_death_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def ali_al_rida_death_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(ALI_AL_RIDA_DEATH, year)
 
-    def ali_birthday_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def ali_birthday_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(ALI_BIRTHDAY, year)
 
-    def ali_death_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def ali_death_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(ALI_DEATH, year)
 
-    def arbaeen_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def arbaeen_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(ARBAEEN, year)
 
-    def ashura_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def ashura_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(ASHURA, year)
 
-    def eid_al_adha_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def eid_al_adha_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(EID_AL_ADHA, year)
 
-    def eid_al_fitr_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def eid_al_fitr_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(EID_AL_FITR, year)
 
-    def eid_al_ghadir_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def eid_al_ghadir_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(EID_AL_GHADIR, year)
 
-    def fatima_death_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def fatima_death_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(FATIMA_DEATH, year)
 
-    def hari_hol_johor_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def hari_hol_johor_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(HARI_HOL_JOHOR, year)
 
-    def hasan_al_askari_death_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def hasan_al_askari_death_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(HASAN_AL_ASKARI_DEATH, year)
 
-    def hijri_new_year_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def hijri_new_year_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(HIJRI_NEW_YEAR, year)
 
-    def imam_mahdi_birthday_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def imam_mahdi_birthday_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(IMAM_MAHDI_BIRTHDAY, year)
 
-    def isra_and_miraj_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def isra_and_miraj_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(ISRA_AND_MIRAJ, year)
 
-    def maldives_embraced_islam_day_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def maldives_embraced_islam_day_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(MALDIVES_EMBRACED_ISLAM_DAY, year)
 
-    def mawlid_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def mawlid_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(MAWLID, year)
 
-    def nuzul_al_quran_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def nuzul_al_quran_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(NUZUL_AL_QURAN, year)
 
-    def prophet_death_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def prophet_death_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(PROPHET_DEATH, year)
 
-    def quamee_dhuvas_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def quamee_dhuvas_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(QUAMEE_DHUVAS, year)
 
-    def ramadan_beginning_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def ramadan_beginning_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(RAMADAN_BEGINNING, year)
 
-    def sadiq_birthday_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def sadiq_birthday_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(SADIQ_BIRTHDAY, year)
 
-    def sadiq_death_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def sadiq_death_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(SADIQ_DEATH, year)
 
-    def tasua_dates(self, year: int) -> Iterable[Tuple[date, bool]]:
+    def tasua_dates(self, year: int) -> Iterable[tuple[date, bool]]:
         return self._get_holiday(TASUA, year)
 
 
diff --git a/holidays/countries/angola.py b/holidays/countries/angola.py
index c113352c..857f5e4f 100644
--- a/holidays/countries/angola.py
+++ b/holidays/countries/angola.py
@@ -12,7 +12,7 @@
 
 from datetime import date
 from gettext import gettext as tr
-from typing import Optional, Tuple
+from typing import Optional
 
 from holidays.calendars.gregorian import AUG, SEP
 from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
@@ -59,7 +59,7 @@ class Angola(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
         # it rolls over to the following Monday.
         return dt >= date(1996, SEP, 27)
 
-    def _add_observed(self, dt: date, **kwargs) -> Tuple[bool, Optional[date]]:
+    def _add_observed(self, dt: date, **kwargs) -> tuple[bool, Optional[date]]:
         # As per Law # #11/18, from 2018/9/10, when public holiday falls on Tuesday or Thursday,
         # the Monday or Friday is also a holiday.
         kwargs.setdefault(
diff --git a/holidays/countries/armenia.py b/holidays/countries/armenia.py
index 17fda98b..937e1081 100644
--- a/holidays/countries/armenia.py
+++ b/holidays/countries/armenia.py
@@ -82,8 +82,11 @@ class Armenia(HolidayBase, ChristianHolidays, InternationalHolidays):
             )
 
         if self._year >= 1995:
-            # Victory and Peace Day.
-            self._add_world_war_two_victory_day(tr("Հաղթանակի և Խաղաղության տոն"))
+            self._add_world_war_two_victory_day(
+                # Victory and Peace Day.
+                tr("Հաղթանակի և Խաղաղության տոն"),
+                is_western=False,
+            )
 
         # Republic Day.
         self._add_holiday_may_28(tr("Հանրապետության օր"))
diff --git a/holidays/countries/azerbaijan.py b/holidays/countries/azerbaijan.py
index cd02b78d..4562f379 100644
--- a/holidays/countries/azerbaijan.py
+++ b/holidays/countries/azerbaijan.py
@@ -78,8 +78,13 @@ class Azerbaijan(ObservedHolidayBase, InternationalHolidays, IslamicHolidays, St
             dts_observed.add(self._add_holiday_mar_23(name))
             dts_observed.add(self._add_holiday_mar_24(name))
 
-        # Victory over Fascism Day.
-        dts_observed.add(self._add_world_war_two_victory_day(tr("Faşizm üzərində qələbə günü")))
+        dts_observed.add(
+            self._add_world_war_two_victory_day(
+                # Victory over Fascism Day.
+                tr("Faşizm üzərində qələbə günü"),
+                is_western=False,
+            )
+        )
 
         if self._year >= 1992:
             dts_observed.add(
diff --git a/holidays/countries/belarus.py b/holidays/countries/belarus.py
index 781a7831..d209f096 100644
--- a/holidays/countries/belarus.py
+++ b/holidays/countries/belarus.py
@@ -64,7 +64,7 @@ class Belarus(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
         self._add_labor_day(tr("Свята працы"))
 
         # Victory Day.
-        self._add_world_war_two_victory_day(tr("Дзень Перамогі"))
+        self._add_world_war_two_victory_day(tr("Дзень Перамогі"), is_western=False)
 
         # Independence Day.
         self._add_holiday_jul_3(tr("Дзень Незалежнасці Рэспублікі Беларусь (Дзень Рэспублікі)"))
diff --git a/holidays/countries/bosnia_and_herzegovina.py b/holidays/countries/bosnia_and_herzegovina.py
index 0ca8b064..91cbf2e1 100644
--- a/holidays/countries/bosnia_and_herzegovina.py
+++ b/holidays/countries/bosnia_and_herzegovina.py
@@ -146,7 +146,7 @@ class BosniaAndHerzegovina(
         self._add_labor_day_two(name)
 
         # Victory Day.
-        self._add_world_war_two_victory_day(tr("Dan pobjede nad fašizmom"))
+        self._add_world_war_two_victory_day(tr("Dan pobjede nad fašizmom"), is_western=False)
 
         # Statehood Day.
         self._add_holiday_nov_25(tr("Dan državnosti"))
@@ -220,7 +220,7 @@ class BosniaAndHerzegovina(
         self._add_labor_day_two(name)
 
         # Victory Day.
-        self._add_world_war_two_victory_day(tr("Dan pobjede nad fašizmom"))
+        self._add_world_war_two_victory_day(tr("Dan pobjede nad fašizmom"), is_western=False)
 
         self._add_holiday_nov_21(
             # Dayton Agreement Day.
diff --git a/holidays/countries/bulgaria.py b/holidays/countries/bulgaria.py
index 94833b13..d6a75aff 100644
--- a/holidays/countries/bulgaria.py
+++ b/holidays/countries/bulgaria.py
@@ -12,7 +12,6 @@
 
 from datetime import date
 from gettext import gettext as tr
-from typing import Set
 
 from holidays.calendars.julian_revised import JULIAN_REVISED_CALENDAR
 from holidays.constants import PUBLIC, SCHOOL
@@ -57,7 +56,7 @@ class Bulgaria(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
         kwargs.setdefault("observed_since", 2017)
         super().__init__(*args, **kwargs)
 
-    def _populate_observed(self, dts: Set[date], excluded_names: Set[str]) -> None:
+    def _populate_observed(self, dts: set[date], excluded_names: set[str]) -> None:
         for dt in sorted(dts):
             if not self._is_observed(dt):
                 continue
diff --git a/holidays/countries/chile.py b/holidays/countries/chile.py
index 3e2bea15..d9d49cb1 100644
--- a/holidays/countries/chile.py
+++ b/holidays/countries/chile.py
@@ -11,7 +11,6 @@
 #  License: MIT (see LICENSE file)
 
 from gettext import gettext as tr
-from typing import Tuple
 
 from holidays.calendars.gregorian import JUN, SEP, DEC
 from holidays.constants import BANK, PUBLIC
@@ -226,7 +225,7 @@ class Chile(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stati
             self._add_holiday_dec_31(name)
 
     @property
-    def _summer_solstice_date(self) -> Tuple[int, int]:
+    def _summer_solstice_date(self) -> tuple[int, int]:
         day = 20
         if (self._year % 4 > 1 and self._year <= 2046) or (
             self._year % 4 > 2 and self._year <= 2075
diff --git a/holidays/countries/czechia.py b/holidays/countries/czechia.py
index 888037af..f1e34b78 100644
--- a/holidays/countries/czechia.py
+++ b/holidays/countries/czechia.py
@@ -52,10 +52,13 @@ class Czechia(HolidayBase, ChristianHolidays, InternationalHolidays):
 
         if self._year >= 1992:
             # Victory Day.
-            self._add_holiday_may_8(tr("Den vítězství"))
+            self._add_world_war_two_victory_day(tr("Den vítězství"))
         elif self._year >= 1947:
-            # Day of Victory over Fascism.
-            self._add_world_war_two_victory_day(tr("Den vítězství nad hitlerovským fašismem"))
+            self._add_world_war_two_victory_day(
+                # Day of Victory over Fascism.
+                tr("Den vítězství nad hitlerovským fašismem"),
+                is_western=False,
+            )
 
         if self._year >= 1951:
             # Saints Cyril and Methodius Day.
diff --git a/holidays/countries/egypt.py b/holidays/countries/egypt.py
index 3fe78a23..16c082f6 100644
--- a/holidays/countries/egypt.py
+++ b/holidays/countries/egypt.py
@@ -39,7 +39,6 @@ class Egypt(HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHolida
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
         InternationalHolidays.__init__(self)
         IslamicHolidays.__init__(self)
-
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
diff --git a/holidays/countries/france.py b/holidays/countries/france.py
index 663e2f61..28623497 100644
--- a/holidays/countries/france.py
+++ b/holidays/countries/france.py
@@ -85,7 +85,7 @@ class France(HolidayBase, ChristianHolidays, InternationalHolidays):
 
         if 1953 <= self._year <= 1959 or self._year >= 1982:
             # Victory Day.
-            self._add_holiday_may_8(tr("Fête de la Victoire"))
+            self._add_world_war_two_victory_day(tr("Fête de la Victoire"))
 
         if self._year >= 1880:
             # National Day.
diff --git a/holidays/countries/georgia.py b/holidays/countries/georgia.py
index 988efeaf..d6803436 100644
--- a/holidays/countries/georgia.py
+++ b/holidays/countries/georgia.py
@@ -76,7 +76,7 @@ class Georgia(HolidayBase, ChristianHolidays, InternationalHolidays):
         self._add_holiday_apr_9(tr("ეროვნული ერთიანობის დღე"))
 
         # Day of Victory over Fascism.
-        self._add_world_war_two_victory_day(tr("ფაშიზმზე გამარჯვების დღე"))
+        self._add_world_war_two_victory_day(tr("ფაშიზმზე გამარჯვების დღე"), is_western=False)
 
         # Saint Andrew's Day.
         self._add_holiday_may_12(tr("წმინდა ანდრია პირველწოდებულის დღე"))
diff --git a/holidays/countries/germany.py b/holidays/countries/germany.py
index 771e2ca6..5f00cc03 100644
--- a/holidays/countries/germany.py
+++ b/holidays/countries/germany.py
@@ -319,4 +319,14 @@ class GermanyStaticHolidays:
                 "und der Beendigung des Zweiten Weltkriegs in Europa"
             ),
         ),
+        2025: (
+            MAY,
+            8,
+            # 80th anniversary of the liberation from Nazism and
+            # the end of the Second World War in Europe.
+            tr(
+                "80. Jahrestag der Befreiung vom Nationalsozialismus "
+                "und der Beendigung des Zweiten Weltkriegs in Europa"
+            ),
+        ),
     }
diff --git a/holidays/countries/hongkong.py b/holidays/countries/hongkong.py
index b6a57b37..8d02f8c9 100644
--- a/holidays/countries/hongkong.py
+++ b/holidays/countries/hongkong.py
@@ -11,7 +11,6 @@
 #  License: MIT (see LICENSE file)
 
 from datetime import date
-from typing import Tuple
 
 from holidays.calendars.gregorian import (
     JAN,
@@ -416,7 +415,7 @@ class HongKong(
                 self._add_holiday_aug_30(name)
 
     @property
-    def _winter_solstice_date(self) -> Tuple[int, int]:
+    def _winter_solstice_date(self) -> tuple[int, int]:
         # This approximation is reliable for 1952-2099 years.
         if (
             (self._year % 4 == 0 and self._year >= 1988)
diff --git a/holidays/countries/japan.py b/holidays/countries/japan.py
index de8da4be..1de0ca1a 100644
--- a/holidays/countries/japan.py
+++ b/holidays/countries/japan.py
@@ -12,7 +12,6 @@
 
 from datetime import date
 from gettext import gettext as tr
-from typing import Set, Tuple
 
 from holidays.calendars.gregorian import (
     FEB,
@@ -54,7 +53,7 @@ class Japan(ObservedHolidayBase, InternationalHolidays, StaticHolidays):
     def _is_observed(self, dt: date) -> bool:
         return dt >= date(1973, APR, 12)
 
-    def _populate_observed(self, dts: Set[date]) -> None:
+    def _populate_observed(self, dts: set[date]) -> None:
         # When a national holiday falls on Sunday, next working day
         # shall become a public holiday (振替休日) - substitute holiday.
         for dt in sorted(dts):
@@ -211,7 +210,7 @@ class Japan(ObservedHolidayBase, InternationalHolidays, StaticHolidays):
         self._add_new_years_eve(name)
 
     @property
-    def _vernal_equinox_date(self) -> Tuple[int, int]:
+    def _vernal_equinox_date(self) -> tuple[int, int]:
         day = 20
         if (
             (self._year % 4 == 0 and self._year <= 1956)
@@ -225,7 +224,7 @@ class Japan(ObservedHolidayBase, InternationalHolidays, StaticHolidays):
         return MAR, day
 
     @property
-    def _autumnal_equinox_date(self) -> Tuple[int, int]:
+    def _autumnal_equinox_date(self) -> tuple[int, int]:
         day = 23
         if self._year % 4 == 3 and self._year <= 1979:
             day = 24
diff --git a/holidays/countries/jersey.py b/holidays/countries/jersey.py
index c79630b5..e2e89590 100644
--- a/holidays/countries/jersey.py
+++ b/holidays/countries/jersey.py
@@ -11,7 +11,7 @@
 #  License: MIT (see LICENSE file)
 
 from datetime import date
-from typing import Optional, Tuple
+from typing import Optional
 
 from holidays.calendars.gregorian import JAN, APR, MAY, JUN, JUL, SEP, OCT, DEC
 from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
@@ -56,7 +56,7 @@ class Jersey(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
         kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_WORKDAY)
         ObservedHolidayBase.__init__(self, *args, **kwargs)
 
-    def _add_observed(self, dt: date, **kwargs) -> Tuple[bool, Optional[date]]:
+    def _add_observed(self, dt: date, **kwargs) -> tuple[bool, Optional[date]]:
         # Prior to 2004, in-lieu are only given for Sundays.
         # https://www.jerseylaw.je/laws/enacted/Pages/RO-123-2004.aspx
         kwargs.setdefault(
diff --git a/holidays/countries/jordan.py b/holidays/countries/jordan.py
index e7ab398e..e0218a64 100644
--- a/holidays/countries/jordan.py
+++ b/holidays/countries/jordan.py
@@ -39,7 +39,7 @@ class Jordan(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolid
     def _populate_public_holidays(self):
         # The resting days are Friday and Saturday since Jan 6, 2000.
         # https://archive.wfn.org/2000/01/msg00078.html
-        self.weekend = {FRI, SAT} if self._year >= 2000 else {THU, FRI}
+        self.weekend = {THU, FRI} if self._year <= 1999 else {FRI, SAT}
 
         # New Year's Day.
         self._add_new_years_day(tr("رأس السنة الميلادية"))
diff --git a/holidays/countries/kazakhstan.py b/holidays/countries/kazakhstan.py
index 5f7467a5..836146cb 100644
--- a/holidays/countries/kazakhstan.py
+++ b/holidays/countries/kazakhstan.py
@@ -130,7 +130,7 @@ class Kazakhstan(
             dts_observed.add(self._add_holiday_may_7(tr("Отан Қорғаушы күні")))
 
         # Victory Day.
-        dt = self._add_world_war_two_victory_day(tr("Жеңіс күні"))
+        dt = self._add_world_war_two_victory_day(tr("Жеңіс күні"), is_western=False)
         if self._year != 2020:
             dts_observed.add(dt)
 
diff --git a/holidays/countries/kuwait.py b/holidays/countries/kuwait.py
index 20155f5a..57cca90e 100644
--- a/holidays/countries/kuwait.py
+++ b/holidays/countries/kuwait.py
@@ -39,7 +39,7 @@ class Kuwait(HolidayBase, InternationalHolidays, IslamicHolidays):
     def _populate_public_holidays(self):
         # The resting days are Friday and Saturday since Sep 1, 2007.
         # https://www.arabnews.com/node/298933
-        self.weekend = {FRI, SAT} if self._year >= 2007 else {THU, FRI}
+        self.weekend = {THU, FRI} if self._year <= 2006 else {FRI, SAT}
 
         # New Year's Day.
         self._add_new_years_day(tr("رأس السنة الميلادية"))
diff --git a/holidays/countries/kyrgyzstan.py b/holidays/countries/kyrgyzstan.py
index ac214643..4fc9c86c 100644
--- a/holidays/countries/kyrgyzstan.py
+++ b/holidays/countries/kyrgyzstan.py
@@ -58,7 +58,7 @@ class Kyrgyzstan(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicH
         self._add_holiday_may_5("Constitution Day")
 
         # Victory Day.
-        self._add_world_war_two_victory_day("Victory Day")
+        self._add_world_war_two_victory_day("Victory Day", is_western=False)
 
         # Independence Day.
         self._add_holiday_aug_31("Independence Day")
diff --git a/holidays/countries/malaysia.py b/holidays/countries/malaysia.py
index 98eebfc8..5d1eb7ef 100644
--- a/holidays/countries/malaysia.py
+++ b/holidays/countries/malaysia.py
@@ -33,6 +33,7 @@ from holidays.calendars.gregorian import (
     DEC,
     FRI,
     SAT,
+    SUN,
 )
 from holidays.groups import (
     BuddhistCalendarHolidays,
@@ -220,12 +221,17 @@ class Malaysia(
 
         super()._populate_subdiv_holidays()
 
-        if self.subdiv in {"01", "02"}:
+        if (
+            self.subdiv == "01" and (self._year <= 1994 or 2014 <= self._year <= 2024)
+        ) or self.subdiv == "02":
             self._observed_rule = FRI_TO_NEXT_WORKDAY
             self.weekend = {FRI, SAT}
         elif self.subdiv in {"03", "11"}:
             self._observed_rule = SAT_TO_NEXT_WORKDAY
             self.weekend = {FRI, SAT}
+        else:
+            self._observed_rule = SUN_TO_NEXT_WORKDAY
+            self.weekend = {SAT, SUN}
 
         if self.observed:
             self._populate_observed(self.dts_observed)
diff --git a/holidays/countries/mauritania.py b/holidays/countries/mauritania.py
index 58274826..40156adb 100644
--- a/holidays/countries/mauritania.py
+++ b/holidays/countries/mauritania.py
@@ -28,7 +28,6 @@ class Mauritania(HolidayBase, InternationalHolidays, IslamicHolidays):
     def __init__(self, *args, **kwargs):
         InternationalHolidays.__init__(self)
         IslamicHolidays.__init__(self)
-
         super().__init__(*args, **kwargs)
 
     def _populate(self, year):
diff --git a/holidays/countries/moldova.py b/holidays/countries/moldova.py
index 813224f1..3858d971 100644
--- a/holidays/countries/moldova.py
+++ b/holidays/countries/moldova.py
@@ -64,15 +64,16 @@ class Moldova(HolidayBase, ChristianHolidays, InternationalHolidays):
         # International Workers' Solidarity Day.
         self._add_labor_day(tr("Ziua internaţională a solidarităţii oamenilor muncii"))
 
-        may_9 = self._add_world_war_two_victory_day(
+        self._add_world_war_two_victory_day(
             # Victory Day and Commemoration of the heroes fallen for
             # Independence of Fatherland.
-            tr("Ziua Victoriei și a comemorării eroilor căzuţi pentru Independenţa Patriei")
+            tr("Ziua Victoriei și a comemorării eroilor căzuţi pentru Independenţa Patriei"),
+            is_western=False,
         )
 
         if self._year >= 2017:
             # Europe Day.
-            self._add_holiday(tr("Ziua Europei"), may_9)
+            self._add_holiday_may_9(tr("Ziua Europei"))
 
         if self._year >= 2016:
             # International Children's Day.
diff --git a/holidays/countries/russia.py b/holidays/countries/russia.py
index 05589e9d..c2c8aff6 100644
--- a/holidays/countries/russia.py
+++ b/holidays/countries/russia.py
@@ -75,7 +75,7 @@ class Russia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
             self._add_labor_day_two(name)
 
         # Victory Day.
-        self._add_world_war_two_victory_day(tr("День Победы"))
+        self._add_world_war_two_victory_day(tr("День Победы"), is_western=False)
 
         if self._year >= 1992:
             self._add_holiday_jun_12(
diff --git a/holidays/countries/saudi_arabia.py b/holidays/countries/saudi_arabia.py
index 78c2d64c..4d1bb10a 100644
--- a/holidays/countries/saudi_arabia.py
+++ b/holidays/countries/saudi_arabia.py
@@ -12,7 +12,6 @@
 
 from datetime import date
 from gettext import gettext as tr
-from typing import Set
 
 from holidays.calendars.gregorian import JAN, FEB, SEP, NOV, THU, FRI, SAT, _timedelta
 from holidays.groups import IslamicHolidays, StaticHolidays
@@ -58,7 +57,7 @@ class SaudiArabia(ObservedHolidayBase, IslamicHolidays, StaticHolidays):
         kwargs.setdefault("observed_rule", FRI_TO_PREV_THU + SAT_TO_NEXT_SUN)
         super().__init__(*args, **kwargs)
 
-    def _add_islamic_observed(self, dts: Set[date]) -> None:
+    def _add_islamic_observed(self, dts: set[date]) -> None:
         # Observed days are added to make up for any days falling on a weekend.
         if not self.observed:
             return None
diff --git a/holidays/countries/slovakia.py b/holidays/countries/slovakia.py
index 283668a3..726e72df 100644
--- a/holidays/countries/slovakia.py
+++ b/holidays/countries/slovakia.py
@@ -60,7 +60,7 @@ class Slovakia(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
 
         if self._year >= 1997:
             # Day of Victory over Fascism.
-            self._add_holiday_may_8(tr("Deň víťazstva nad fašizmom"))
+            self._add_world_war_two_victory_day(tr("Deň víťazstva nad fašizmom"))
 
         # Saints Cyril and Methodius Day.
         self._add_holiday_jul_5(tr("Sviatok svätého Cyrila a svätého Metoda"))
diff --git a/holidays/countries/south_korea.py b/holidays/countries/south_korea.py
index 7505322b..8e1441da 100644
--- a/holidays/countries/south_korea.py
+++ b/holidays/countries/south_korea.py
@@ -13,7 +13,6 @@
 import warnings
 from datetime import date
 from gettext import gettext as tr
-from typing import Dict, Set
 
 from holidays.calendars import _CustomChineseHolidays
 from holidays.calendars.gregorian import (
@@ -103,7 +102,7 @@ class SouthKorea(
         kwargs.setdefault("observed_since", 2014)
         super().__init__(*args, **kwargs)
 
-    def _populate_observed(self, dts: Set[date], three_day_holidays: Dict[date, str]) -> None:
+    def _populate_observed(self, dts: set[date], three_day_holidays: dict[date, str]) -> None:
         for dt in sorted(dts.union(three_day_holidays.keys())):
             if not self._is_observed(dt):
                 continue
diff --git a/holidays/countries/taiwan.py b/holidays/countries/taiwan.py
index f87ab743..e1203ff4 100644
--- a/holidays/countries/taiwan.py
+++ b/holidays/countries/taiwan.py
@@ -12,7 +12,6 @@
 
 from datetime import date
 from gettext import gettext as tr
-from typing import Set
 
 from holidays.calendars.gregorian import (
     JAN,
@@ -80,7 +79,7 @@ class Taiwan(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays
         super().__init__(*args, **kwargs)
 
     def _populate_observed(
-        self, dts: Set[date], rule: ObservedRule = None, since: int = 2015
+        self, dts: set[date], rule: ObservedRule = None, since: int = 2015
     ) -> None:
         if self._year < since:
             return None
diff --git a/holidays/countries/ukraine.py b/holidays/countries/ukraine.py
index 296aad09..ff709c6a 100644
--- a/holidays/countries/ukraine.py
+++ b/holidays/countries/ukraine.py
@@ -103,9 +103,7 @@ class Ukraine(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
                 else tr("День перемоги")
             )
             dts_observed.add(
-                self._add_holiday_may_8(name)
-                if self._year >= 2024
-                else self._add_world_war_two_victory_day(name)
+                self._add_world_war_two_victory_day(name, is_western=(self._year >= 2024))
             )
 
             if self._year >= 1997:
diff --git a/holidays/countries/united_arab_emirates.py b/holidays/countries/united_arab_emirates.py
index bf290c74..83ca817a 100644
--- a/holidays/countries/united_arab_emirates.py
+++ b/holidays/countries/united_arab_emirates.py
@@ -13,7 +13,7 @@
 from gettext import gettext as tr
 
 from holidays.calendars import _CustomIslamicHolidays
-from holidays.calendars.gregorian import APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, FRI, SAT
+from holidays.calendars.gregorian import APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, FRI, SAT, SUN
 from holidays.groups import InternationalHolidays, IslamicHolidays
 from holidays.holiday_base import HolidayBase
 
@@ -35,7 +35,6 @@ class UnitedArabEmirates(HolidayBase, InternationalHolidays, IslamicHolidays):
     # %s (estimated).
     estimated_label = tr("(تقدير) %s")
     supported_languages = ("ar", "en_US")
-    weekend = {FRI, SAT}
 
     def __init__(self, *args, **kwargs):
         InternationalHolidays.__init__(self)
@@ -43,6 +42,10 @@ class UnitedArabEmirates(HolidayBase, InternationalHolidays, IslamicHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
+        # The resting days are Saturday and Sunday since Jan 1, 2022.
+        # https://time.com/6126260/uae-working-days-weekend/
+        self.weekend = {FRI, SAT} if self._year <= 2021 else {SAT, SUN}
+
         # New Year's Day.
         self._add_new_years_day(tr("رأس السنة الميلادية"))
 
diff --git a/holidays/countries/united_kingdom.py b/holidays/countries/united_kingdom.py
index 729c31c9..d9ed5bda 100644
--- a/holidays/countries/united_kingdom.py
+++ b/holidays/countries/united_kingdom.py
@@ -10,7 +10,7 @@
 #  Website: https://github.com/vacanza/holidays
 #  License: MIT (see LICENSE file)
 
-from typing import Tuple, Union
+from typing import Union
 
 from holidays.calendars.gregorian import APR, MAY, JUN, JUL, SEP, DEC
 from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
@@ -38,7 +38,7 @@ class UnitedKingdom(ObservedHolidayBase, ChristianHolidays, InternationalHoliday
 
     country = "GB"
     observed_label = "%s (observed)"
-    subdivisions: Union[Tuple[()], Tuple[str, ...]] = (
+    subdivisions: Union[tuple[()], tuple[str, ...]] = (
         "ENG",  # England
         "NIR",  # Northern Ireland
         "SCT",  # Scotland
diff --git a/holidays/countries/united_states.py b/holidays/countries/united_states.py
index 25e960f2..afdfee5d 100644
--- a/holidays/countries/united_states.py
+++ b/holidays/countries/united_states.py
@@ -10,7 +10,7 @@
 #  Website: https://github.com/vacanza/holidays
 #  License: MIT (see LICENSE file)
 
-from typing import Tuple, Union
+from typing import Union
 
 from holidays.calendars.gregorian import MON, TUE, WED, THU, FRI, SAT, SUN
 from holidays.constants import PUBLIC, UNOFFICIAL
@@ -62,7 +62,7 @@ class UnitedStates(ObservedHolidayBase, ChristianHolidays, InternationalHolidays
     country = "US"
     supported_categories = (PUBLIC, UNOFFICIAL)
     observed_label = "%s (observed)"
-    subdivisions: Union[Tuple[()], Tuple[str, ...]] = (
+    subdivisions: Union[tuple[()], tuple[str, ...]] = (
         "AK",  # Alaska.
         "AL",  # Alabama.
         "AR",  # Arkansas.
diff --git a/holidays/countries/uzbekistan.py b/holidays/countries/uzbekistan.py
index 8ee39c09..7fdd9925 100644
--- a/holidays/countries/uzbekistan.py
+++ b/holidays/countries/uzbekistan.py
@@ -68,7 +68,8 @@ class Uzbekistan(ObservedHolidayBase, InternationalHolidays, IslamicHolidays, St
                 tr("Xotira va qadrlash kuni")
                 if self._year >= 1999
                 # Victory Day.
-                else tr("G‘alaba kuni")
+                else tr("G‘alaba kuni"),
+                is_western=False,
             )
         )
 
diff --git a/holidays/countries/vietnam.py b/holidays/countries/vietnam.py
index 231af59d..347d36cf 100644
--- a/holidays/countries/vietnam.py
+++ b/holidays/countries/vietnam.py
@@ -10,69 +10,135 @@
 #  Website: https://github.com/vacanza/holidays
 #  License: MIT (see LICENSE file)
 
+from datetime import date
 from gettext import gettext as tr
 
-from holidays.groups import ChineseCalendarHolidays, InternationalHolidays
-from holidays.observed_holiday_base import ObservedHolidayBase, SAT_SUN_TO_NEXT_WORKDAY
-
-
-class Vietnam(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays):
+from holidays.calendars.gregorian import (
+    JAN,
+    FEB,
+    APR,
+    MAY,
+    SEP,
+    DEC,
+    MON,
+    TUE,
+    WED,
+    THU,
+    FRI,
+    SAT,
+    SUN,
+    _timedelta,
+)
+from holidays.groups import ChineseCalendarHolidays, InternationalHolidays, StaticHolidays
+from holidays.observed_holiday_base import (
+    ObservedHolidayBase,
+    ObservedRule,
+    SAT_TO_PREV_WORKDAY,
+    SUN_TO_NEXT_WORKDAY,
+    SAT_SUN_TO_NEXT_WORKDAY,
+)
+
+NATIONAL_DAY_RULE = ObservedRule({MON: +1, TUE: -1, WED: -1, THU: +1, FRI: -1, SAT: -1, SUN: +1})
+
+
+class Vietnam(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays, StaticHolidays):
     """
-    https://publicholidays.vn/
-    http://vbpl.vn/TW/Pages/vbpqen-toanvan.aspx?ItemID=11013 Article.115
-    https://www.timeanddate.com/holidays/vietnam/
+    References:
+        - `Labor Code 1994 (Art. 73) (en) <https://vbpl.vn/TW/Pages/vbpqen-toanvan.aspx?ItemID=2835>`_
+        - `Labor Code 2012 (Art. 115) (en) <https://vbpl.vn/TW/Pages/vbpqen-toanvan.aspx?ItemID=11013>`_
+        - `Labor Code 2012 (Art. 115) (vi) <https://vbpl.vn/TW/Pages/vbpq-toanvan.aspx?ItemID=27615>`_
+        - `Labor Code 2019 (Art. 112) (en) <https://vbpl.vn/TW/Pages/vbpqen-toanvan.aspx?ItemID=11135>`_
+        - `Labor Code 2019 (Art. 112) (vi) <https://vbpl.vn/TW/Pages/vbpq-van-ban-goc.aspx?ItemID=139264>`_
+
+    Substituted holidays:
+        - `2018-2019 <https://thuvienphapluat.vn/cong-van/EN/Lao-dong-Tien-luong/Official-Dispatch-6519-VPCP-KGVX-2018-national-holidays-for-public-sector-employees/387625/tieng-anh.aspx>`_
+        - `2024 <https://thuvienphapluat.vn/cong-van/EN/Lao-dong-Tien-luong/Official-Dispatch-2450-VPCP-KGVX-2024-swap-of-working-days-during-the-Reunification-Day/606458/tieng-anh.aspx>`_
     """
 
     country = "VN"
     # %s (observed).
     observed_label = tr("%s (nghỉ bù)")
     default_language = "vi"
-    supported_languages = ("en_US", "vi")
+    supported_languages = ("en_US", "th", "vi")
 
     def __init__(self, *args, **kwargs):
         ChineseCalendarHolidays.__init__(self)
         InternationalHolidays.__init__(self)
+        StaticHolidays.__init__(self, VietnamStaticHolidays)
         kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_WORKDAY)
+        kwargs.setdefault("observed_since", 1995)
         super().__init__(*args, **kwargs)
 
+    def _add_lunar_new_year_observed(self, dt_lny: date) -> None:
+        if self._year <= 1994:
+            return None
+
+        day_names = {
+            # 29 of Lunar New Year.
+            -2: tr("29 Tết"),
+            # Fourth Day of Lunar New Year.
+            3: tr("Mùng bốn Tết Nguyên Đán"),
+            # Fifth Day of Lunar New Year.
+            4: tr("Mùng năm Tết Nguyên Đán"),
+            # Sixth Day of Lunar New Year.
+            5: tr("Mùng sáu Tết Nguyên Đán"),
+        }
+        for delta in range(-1, 4 if self._year >= 2013 else 3):
+            dt = _timedelta(dt_lny, delta)
+            dt_observed = self._get_observed_date(
+                dt,
+                rule=(
+                    SAT_TO_PREV_WORKDAY + SUN_TO_NEXT_WORKDAY
+                    if self._year >= 2014
+                    else SAT_SUN_TO_NEXT_WORKDAY
+                ),
+            )
+            if dt_observed != dt:
+                self._add_holiday(
+                    day_names[(dt_observed - dt_lny).days],  # type: ignore[operator]
+                    dt_observed,
+                )
+
     def _populate_public_holidays(self):
         dts_observed = set()
 
-        # New Year's Day
+        # New Year's Day.
         dts_observed.add(self._add_new_years_day(tr("Tết Dương lịch")))
 
-        # Lunar New Year's Eve
+        # Lunar New Year's Eve.
         self._add_chinese_new_years_eve(tr("Giao thừa Tết Nguyên Đán"))
 
-        # Lunar New Year
-        self._add_chinese_new_years_day(tr("Tết Nguyên Đán"))
+        # Lunar New Year.
+        lny = self._add_chinese_new_years_day(tr("Tết Nguyên Đán"))
 
-        # Second Day of Lunar New Year
+        # Second Day of Lunar New Year.
         self._add_chinese_new_years_day_two(tr("Mùng hai Tết Nguyên Đán"))
 
-        # Third Day of Lunar New Year
+        # Third Day of Lunar New Year.
         self._add_chinese_new_years_day_three(tr("Mùng ba Tết Nguyên Đán"))
 
-        # Fourth Day of Lunar New Year
-        self._add_chinese_new_years_day_four(tr("Mùng bốn Tết Nguyên Đán"))
-
-        # Fifth Day of Lunar New Year
-        self._add_chinese_new_years_day_five(tr("Mùng năm Tết Nguyên Đán"))
+        if self._year >= 2013:
+            # Fourth Day of Lunar New Year.
+            self._add_chinese_new_years_day_four(tr("Mùng bốn Tết Nguyên Đán"))
 
         if self._year >= 2007:
-            # Hung Kings' Commemoration Day
+            # Hung Kings' Commemoration Day.
             dts_observed.add(self._add_hung_kings_day(tr("Ngày Giỗ Tổ Hùng Vương")))
 
-        # Liberation Day/Reunification Day
+        # Liberation Day/Reunification Day.
         dts_observed.add(self._add_holiday_apr_30(tr("Ngày Chiến thắng")))
 
-        # International Labor Day
+        # International Labor Day.
         dts_observed.add(self._add_labor_day(tr("Ngày Quốc tế Lao động")))
 
-        # National Day
-        dts_observed.add(self._add_holiday_sep_2(tr("Quốc khánh")))
+        # National Day.
+        name = tr("Quốc khánh")
+        dts_observed.add(sep_2 := self._add_holiday_sep_2(name))
+        if self._year >= 2021:
+            self._add_holiday(name, self._get_observed_date(sep_2, NATIONAL_DAY_RULE))
 
         if self.observed:
+            self._add_lunar_new_year_observed(lny)
             self._populate_observed(dts_observed)
 
 
@@ -82,3 +148,28 @@ class VN(Vietnam):
 
 class VNM(Vietnam):
     pass
+
+
+class VietnamStaticHolidays:
+    # Date format (see strftime() Format Codes).
+    substituted_date_format = tr("%d/%m/%Y")
+    # Day off (substituted from %s).
+    substituted_label = tr("Ngày nghỉ (thay cho ngày %s)")
+
+    special_public_holidays = {
+        2010: (FEB, 19, FEB, 27),
+        2012: (JAN, 27, FEB, 4),
+        2013: (APR, 29, MAY, 4),
+        2014: (
+            (MAY, 2, APR, 26),
+            (SEP, 1, SEP, 6),
+        ),
+        2015: (
+            (JAN, 2, DEC, 27, 2014),
+            (FEB, 16, FEB, 14),
+            (APR, 29, APR, 25),
+        ),
+        2018: (DEC, 31, JAN, 5, 2019),
+        2019: (APR, 29, MAY, 4),
+        2024: (APR, 29, MAY, 4),
+    }
diff --git a/holidays/groups/__init__.py b/holidays/groups/__init__.py
index 587c6151..a825b59e 100644
--- a/holidays/groups/__init__.py
+++ b/holidays/groups/__init__.py
@@ -16,6 +16,7 @@ from holidays.groups.buddhist import BuddhistCalendarHolidays
 from holidays.groups.chinese import ChineseCalendarHolidays
 from holidays.groups.christian import ChristianHolidays
 from holidays.groups.custom import StaticHolidays
+from holidays.groups.eastern import EasternCalendarHolidays
 from holidays.groups.hindu import HinduCalendarHolidays
 from holidays.groups.international import InternationalHolidays
 from holidays.groups.islamic import IslamicHolidays
diff --git a/holidays/groups/buddhist.py b/holidays/groups/buddhist.py
index 47394dd2..f74870bd 100644
--- a/holidays/groups/buddhist.py
+++ b/holidays/groups/buddhist.py
@@ -11,12 +11,13 @@
 #  License: MIT (see LICENSE file)
 
 from datetime import date
-from typing import Optional, Tuple
+from typing import Optional
 
 from holidays.calendars import _BuddhistLunisolar
+from holidays.groups.eastern import EasternCalendarHolidays
 
 
-class BuddhistCalendarHolidays:
+class BuddhistCalendarHolidays(EasternCalendarHolidays):
     """
     Buddhist lunisolar calendar holidays.
     """
@@ -26,7 +27,7 @@ class BuddhistCalendarHolidays:
         self._buddhist_calendar_show_estimated = show_estimated
 
     def _add_buddhist_calendar_holiday(
-        self, name: str, dt_estimated: Tuple[date, bool]
+        self, name: str, dt_estimated: tuple[Optional[date], bool]
     ) -> Optional[date]:
         """
         Add Buddhist calendar holiday.
@@ -34,14 +35,8 @@ class BuddhistCalendarHolidays:
         Adds customizable estimation label to holiday name if holiday date
         is an estimation.
         """
-        estimated_label = getattr(self, "estimated_label", "%s (estimated)")
-        dt, is_estimated = dt_estimated
-
-        return self._add_holiday(
-            self.tr(estimated_label) % self.tr(name)
-            if is_estimated and self._buddhist_calendar_show_estimated
-            else name,
-            dt,
+        return self._add_eastern_calendar_holiday(
+            name, dt_estimated, self._buddhist_calendar_show_estimated
         )
 
     def _add_vesak(self, name) -> Optional[date]:
diff --git a/holidays/groups/chinese.py b/holidays/groups/chinese.py
index f9abbd5a..b3597e62 100644
--- a/holidays/groups/chinese.py
+++ b/holidays/groups/chinese.py
@@ -11,13 +11,14 @@
 #  License: MIT (see LICENSE file)
 
 from datetime import date
-from typing import Optional, Tuple
+from typing import Optional
 
 from holidays.calendars import _ChineseLunisolar
-from holidays.calendars.gregorian import APR, _timedelta
+from holidays.calendars.gregorian import APR
+from holidays.groups.eastern import EasternCalendarHolidays
 
 
-class ChineseCalendarHolidays:
+class ChineseCalendarHolidays(EasternCalendarHolidays):
     """
     Chinese lunisolar calendar holidays.
     """
@@ -48,7 +49,7 @@ class ChineseCalendarHolidays:
         return self._chinese_calendar.mid_autumn_date(self._year)[0]
 
     def _add_chinese_calendar_holiday(
-        self, name: str, dt_estimated: Tuple[date, bool], days_delta: int = 0
+        self, name: str, dt_estimated: tuple[Optional[date], bool], days_delta: int = 0
     ) -> Optional[date]:
         """
         Add Chinese calendar holiday.
@@ -56,17 +57,8 @@ class ChineseCalendarHolidays:
         Adds customizable estimation label to holiday name if holiday date
         is an estimation.
         """
-        estimated_label = getattr(self, "estimated_label", "%s (estimated)")
-        dt, is_estimated = dt_estimated
-
-        if days_delta != 0:
-            dt = _timedelta(dt, days_delta)
-
-        return self._add_holiday(
-            self.tr(estimated_label) % self.tr(name)
-            if is_estimated and self._chinese_calendar_show_estimated
-            else name,
-            dt,
+        return self._add_eastern_calendar_holiday(
+            name, dt_estimated, self._chinese_calendar_show_estimated, days_delta
         )
 
     def _add_chinese_birthday_of_buddha(self, name) -> Optional[date]:
@@ -136,16 +128,6 @@ class ChineseCalendarHolidays:
             name, self._chinese_calendar.lunar_new_year_date(self._year), days_delta=+3
         )
 
-    def _add_chinese_new_years_day_five(self, name) -> Optional[date]:
-        """
-        Add Chinese New Year's Day Five.
-
-        https://en.wikipedia.org/wiki/Chinese_New_Year
-        """
-        return self._add_chinese_calendar_holiday(
-            name, self._chinese_calendar.lunar_new_year_date(self._year), days_delta=+4
-        )
-
     def _add_qingming_festival(self, name) -> date:
         """
         Add Qingming Festival (15th day after the Spring Equinox).
diff --git a/holidays/groups/eastern.py b/holidays/groups/eastern.py
new file mode 100644
index 00000000..4cd2d04e
--- /dev/null
+++ b/holidays/groups/eastern.py
@@ -0,0 +1,51 @@
+#  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 AUTHORS file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+
+from datetime import date
+from typing import Optional
+
+from holidays.calendars.gregorian import _timedelta
+
+
+class EasternCalendarHolidays:
+    """
+    Eastern calendar holidays base class.
+    """
+
+    def _add_eastern_calendar_holiday(
+        self,
+        name: str,
+        dt_estimated: tuple[Optional[date], bool],
+        show_estimated: bool = True,
+        days_delta: int = 0,
+    ) -> Optional[date]:
+        """
+        Add Eastern (Buddhist, Chinese, Hindu, Islamic) calendar holiday.
+
+        Adds customizable estimation label to holiday name if holiday date is an estimation.
+        """
+        estimated_label = getattr(self, "estimated_label", "%s (estimated)")
+        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)
+                if is_estimated and show_estimated
+                else name,
+                dt,
+            )
+            if dt
+            else None
+        )
diff --git a/holidays/groups/hindu.py b/holidays/groups/hindu.py
index 2e6e2964..e6f78e9d 100644
--- a/holidays/groups/hindu.py
+++ b/holidays/groups/hindu.py
@@ -11,12 +11,13 @@
 #  License: MIT (see LICENSE file)
 
 from datetime import date
-from typing import Optional, Tuple
+from typing import Optional
 
 from holidays.calendars import _HinduLunisolar
+from holidays.groups.eastern import EasternCalendarHolidays
 
 
-class HinduCalendarHolidays:
+class HinduCalendarHolidays(EasternCalendarHolidays):
     """
     Hindu lunisolar calendar holidays.
     """
@@ -26,7 +27,7 @@ class HinduCalendarHolidays:
         self._hindu_calendar_show_estimated = show_estimated
 
     def _add_hindu_calendar_holiday(
-        self, name: str, dt_estimated: Tuple[date, bool]
+        self, name: str, dt_estimated: tuple[Optional[date], bool]
     ) -> Optional[date]:
         """
         Add Hindu calendar holiday.
@@ -34,14 +35,8 @@ class HinduCalendarHolidays:
         Adds customizable estimation label to holiday name if holiday date
         is an estimation.
         """
-        estimated_label = getattr(self, "estimated_label", "%s (estimated)")
-        dt, is_estimated = dt_estimated
-
-        return self._add_holiday(
-            self.tr(estimated_label) % self.tr(name)
-            if is_estimated and self._hindu_calendar_show_estimated
-            else name,
-            dt,
+        return self._add_eastern_calendar_holiday(
+            name, dt_estimated, self._hindu_calendar_show_estimated
         )
 
     def _add_diwali(self, name) -> Optional[date]:
diff --git a/holidays/groups/international.py b/holidays/groups/international.py
index 86ee8ee2..87818496 100644
--- a/holidays/groups/international.py
+++ b/holidays/groups/international.py
@@ -185,15 +185,18 @@ class InternationalHolidays:
         """
         return self._add_holiday_mar_8(name)
 
-    def _add_world_war_two_victory_day(self, name):
+    def _add_world_war_two_victory_day(self, name, is_western=True):
         """
-        Add Victory Day (May 9th)
+        Add Day of Victory in World War II in Europe (May 8).
+        https://en.wikipedia.org/wiki/Victory_in_Europe_Day
 
-        Victory Day is a holiday that commemorates the victory over Nazi
-        Germany in 1945.
+        Some Eastern European countries celebrate Victory Day on May 9.
         https://en.wikipedia.org/wiki/Victory_Day_(9_May)
         """
-        return self._add_holiday_may_9(name)
+        if is_western:
+            return self._add_holiday_may_8(name)
+        else:
+            return self._add_holiday_may_9(name)
 
     def _add_united_nations_day(self, name):
         """
diff --git a/holidays/groups/islamic.py b/holidays/groups/islamic.py
index 8e3b2358..a86853fc 100644
--- a/holidays/groups/islamic.py
+++ b/holidays/groups/islamic.py
@@ -10,14 +10,14 @@
 #  Website: https://github.com/vacanza/holidays
 #  License: MIT (see LICENSE file)
 
+from collections.abc import Iterable
 from datetime import date
-from typing import Iterable, Set, Tuple
 
 from holidays.calendars import _IslamicLunar
-from holidays.calendars.gregorian import _timedelta
+from holidays.groups.eastern import EasternCalendarHolidays
 
 
-class IslamicHolidays:
+class IslamicHolidays(EasternCalendarHolidays):
     """
     Islamic holidays.
 
@@ -28,7 +28,7 @@ class IslamicHolidays:
     def __init__(self, cls=None) -> None:
         self._islamic_calendar = cls() if cls else _IslamicLunar()
 
-    def _add_ali_al_rida_death_day(self, name) -> Set[date]:
+    def _add_ali_al_rida_death_day(self, name) -> set[date]:
         """
         Add death of Ali al-Rida day (last (29th or 30th) day of 2nd month).
 
@@ -38,7 +38,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.ali_al_rida_death_dates(self._year)
         )
 
-    def _add_ali_birthday_day(self, name) -> Set[date]:
+    def _add_ali_birthday_day(self, name) -> set[date]:
         """
         Add birthday of Ali ibn Abu Talib day (13th day of 7th month).
 
@@ -48,7 +48,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.ali_birthday_dates(self._year)
         )
 
-    def _add_ali_death_day(self, name) -> Set[date]:
+    def _add_ali_death_day(self, name) -> set[date]:
         """
         Add death of Ali ibn Abu Talib day (21st day of 9th month).
 
@@ -58,7 +58,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.ali_death_dates(self._year)
         )
 
-    def _add_arbaeen_day(self, name) -> Set[date]:
+    def _add_arbaeen_day(self, name) -> set[date]:
         """
         Add Arbaeen day (20th day of 2nd month).
 
@@ -68,7 +68,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.arbaeen_dates(self._year)
         )
 
-    def _add_arafah_day(self, name) -> Set[date]:
+    def _add_arafah_day(self, name) -> set[date]:
         """
         Add Day of Arafah (9th day of 12th month).
 
@@ -81,7 +81,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.eid_al_adha_dates(self._year), days_delta=-1
         )
 
-    def _add_ashura_day(self, name) -> Set[date]:
+    def _add_ashura_day(self, name) -> set[date]:
         """
         Add Ashura Day (10th day of 1st month).
 
@@ -93,7 +93,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.ashura_dates(self._year)
         )
 
-    def _add_ashura_eve(self, name) -> Set[date]:
+    def _add_ashura_eve(self, name) -> set[date]:
         """
         Add Ashura Eve (Day before the 10th day of 1st month).
 
@@ -105,7 +105,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.ashura_dates(self._year), days_delta=-1
         )
 
-    def _add_eid_al_adha_day(self, name) -> Set[date]:
+    def _add_eid_al_adha_day(self, name) -> set[date]:
         """
         Add Eid al-Adha Day (10th day of the 12th month of Islamic calendar).
 
@@ -118,7 +118,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.eid_al_adha_dates(self._year)
         )
 
-    def _add_eid_al_adha_day_two(self, name) -> Set[date]:
+    def _add_eid_al_adha_day_two(self, name) -> set[date]:
         """
         Add Eid al-Adha Day Two.
 
@@ -128,7 +128,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.eid_al_adha_dates(self._year), days_delta=+1
         )
 
-    def _add_eid_al_adha_day_three(self, name) -> Set[date]:
+    def _add_eid_al_adha_day_three(self, name) -> set[date]:
         """
         Add Eid al-Adha Day Three.
 
@@ -138,7 +138,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.eid_al_adha_dates(self._year), days_delta=+2
         )
 
-    def _add_eid_al_adha_day_four(self, name) -> Set[date]:
+    def _add_eid_al_adha_day_four(self, name) -> set[date]:
         """
         Add Eid al-Adha Day Four.
 
@@ -148,7 +148,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.eid_al_adha_dates(self._year), days_delta=+3
         )
 
-    def _add_eid_al_fitr_day(self, name) -> Set[date]:
+    def _add_eid_al_fitr_day(self, name) -> set[date]:
         """
         Add Eid al-Fitr Day (1st day of 10th month of Islamic calendar).
 
@@ -161,7 +161,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.eid_al_fitr_dates(self._year)
         )
 
-    def _add_eid_al_fitr_day_two(self, name) -> Set[date]:
+    def _add_eid_al_fitr_day_two(self, name) -> set[date]:
         """
         Add Eid al-Fitr Day Two.
 
@@ -171,7 +171,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.eid_al_fitr_dates(self._year), days_delta=+1
         )
 
-    def _add_eid_al_fitr_day_three(self, name) -> Set[date]:
+    def _add_eid_al_fitr_day_three(self, name) -> set[date]:
         """
         Add Eid al-Fitr Day Three.
 
@@ -181,7 +181,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.eid_al_fitr_dates(self._year), days_delta=+2
         )
 
-    def _add_eid_al_fitr_day_four(self, name) -> Set[date]:
+    def _add_eid_al_fitr_day_four(self, name) -> set[date]:
         """
         Add Eid al-Fitr Day Four.
 
@@ -191,7 +191,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.eid_al_fitr_dates(self._year), days_delta=+3
         )
 
-    def _add_eid_al_fitr_eve(self, name) -> Set[date]:
+    def _add_eid_al_fitr_eve(self, name) -> set[date]:
         """
         Add Eid al-Fitr Eve (last day of 9th month of Islamic calendar).
 
@@ -201,7 +201,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.eid_al_fitr_dates(self._year), days_delta=-1
         )
 
-    def _add_eid_al_ghadir_day(self, name) -> Set[date]:
+    def _add_eid_al_ghadir_day(self, name) -> set[date]:
         """
         Add Eid al-Ghadir Day (18th day of 12th month).
 
@@ -211,7 +211,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.eid_al_ghadir_dates(self._year)
         )
 
-    def _add_fatima_death_day(self, name) -> Set[date]:
+    def _add_fatima_death_day(self, name) -> set[date]:
         """
         Add death of Fatima day (3rd day of 6th month).
 
@@ -221,7 +221,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.fatima_death_dates(self._year)
         )
 
-    def _add_hari_hol_johor(self, name) -> Set[date]:
+    def _add_hari_hol_johor(self, name) -> set[date]:
         """
         Hari Hol Johor.
 
@@ -231,7 +231,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.hari_hol_johor_dates(self._year)
         )
 
-    def _add_hasan_al_askari_death_day(self, name) -> Set[date]:
+    def _add_hasan_al_askari_death_day(self, name) -> set[date]:
         """
         Add death of Hasan_al-Askari day (8th day of 3rd month).
 
@@ -241,7 +241,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.hasan_al_askari_death_dates(self._year)
         )
 
-    def _add_imam_mahdi_birthday_day(self, name) -> Set[date]:
+    def _add_imam_mahdi_birthday_day(self, name) -> set[date]:
         """
         Add birthday of Muhammad al-Mahdi day (15th day of 8th month).
 
@@ -252,8 +252,8 @@ class IslamicHolidays:
         )
 
     def _add_islamic_calendar_holiday(
-        self, name: str, dates: Iterable[Tuple[date, bool]], days_delta: int = 0
-    ) -> Set[date]:
+        self, name: str, dates: Iterable[tuple[date, bool]], days_delta: int = 0
+    ) -> set[date]:
         """
         Add lunar calendar holiday.
 
@@ -261,20 +261,13 @@ class IslamicHolidays:
         holiday date is an estimation.
         """
         added_dates = set()
-        estimated_label = getattr(self, "estimated_label", "%s (estimated)")
-        for dt, is_estimated in dates:
-            if days_delta != 0:
-                dt = _timedelta(dt, days_delta)
-
-            dt = self._add_holiday(
-                self.tr(estimated_label) % self.tr(name) if is_estimated else name, dt
-            )
-            if dt:
+        for dts in dates:
+            if dt := self._add_eastern_calendar_holiday(name, dts, days_delta=days_delta):
                 added_dates.add(dt)
 
         return added_dates
 
-    def _add_islamic_new_year_day(self, name) -> Set[date]:
+    def _add_islamic_new_year_day(self, name) -> set[date]:
         """
         Add Islamic New Year Day (last day of Dhu al-Hijjah).
 
@@ -299,7 +292,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.isra_and_miraj_dates(self._year)
         )
 
-    def _add_maldives_embraced_islam_day(self, name) -> Set[date]:
+    def _add_maldives_embraced_islam_day(self, name) -> set[date]:
         """
         Add Maldives Embraced Islam Day (1st day of 4th month).
 
@@ -309,7 +302,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.maldives_embraced_islam_day_dates(self._year)
         )
 
-    def _add_mawlid_day(self, name) -> Set[date]:
+    def _add_mawlid_day(self, name) -> set[date]:
         """
         Add Mawlid Day (12th day of 3rd month).
 
@@ -321,7 +314,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.mawlid_dates(self._year)
         )
 
-    def _add_mawlid_day_two(self, name) -> Set[date]:
+    def _add_mawlid_day_two(self, name) -> set[date]:
         """
         Add Mawlid Day Two.
 
@@ -333,7 +326,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.mawlid_dates(self._year), days_delta=+1
         )
 
-    def _add_nuzul_al_quran_day(self, name) -> Set[date]:
+    def _add_nuzul_al_quran_day(self, name) -> set[date]:
         """
         Add Nuzul Al Quran (17th day of 9th month).
 
@@ -346,7 +339,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.nuzul_al_quran_dates(self._year)
         )
 
-    def _add_prophet_death_day(self, name) -> Set[date]:
+    def _add_prophet_death_day(self, name) -> set[date]:
         """
         Add death of Prophet Muhammad and Hasan ibn Ali day (28th day of 2nd month).
 
@@ -356,7 +349,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.prophet_death_dates(self._year)
         )
 
-    def _add_quamee_dhuvas_day(self, name) -> Set[date]:
+    def _add_quamee_dhuvas_day(self, name) -> set[date]:
         """
         Add Quamee Dhuvas (1st day of 3rd month).
 
@@ -366,7 +359,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.quamee_dhuvas_dates(self._year)
         )
 
-    def _add_ramadan_beginning_day(self, name) -> Set[date]:
+    def _add_ramadan_beginning_day(self, name) -> set[date]:
         """
         Add First Day of Ramadan (1st day of 9th month).
 
@@ -378,7 +371,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.ramadan_beginning_dates(self._year)
         )
 
-    def _add_sadiq_birthday_day(self, name) -> Set[date]:
+    def _add_sadiq_birthday_day(self, name) -> set[date]:
         """
         Add birthday of Prophet Muhammad and Ja'far al-Sadiq day (17th day of 3rd month).
 
@@ -388,7 +381,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.sadiq_birthday_dates(self._year)
         )
 
-    def _add_sadiq_death_day(self, name) -> Set[date]:
+    def _add_sadiq_death_day(self, name) -> set[date]:
         """
         Add death of Ja'far al-Sadiq day (25th day of 10th month).
 
@@ -398,7 +391,7 @@ class IslamicHolidays:
             name, self._islamic_calendar.sadiq_death_dates(self._year)
         )
 
-    def _add_tasua_day(self, name) -> Set[date]:
+    def _add_tasua_day(self, name) -> set[date]:
         """
         Add Tasua day (9th day of 1st month).
 
diff --git a/holidays/holiday_base.py b/holidays/holiday_base.py
index 10c7e5a8..bd99d257 100644
--- a/holidays/holiday_base.py
+++ b/holidays/holiday_base.py
@@ -15,11 +15,12 @@ __all__ = ("DateLike", "HolidayBase", "HolidaySum")
 import copy
 import warnings
 from calendar import isleap
+from collections.abc import Iterable
 from datetime import date, datetime, timedelta, timezone
 from functools import cached_property
 from gettext import gettext, translation
 from pathlib import Path
-from typing import Any, Dict, Iterable, List, Optional, Set, Tuple, Union, cast
+from typing import Any, Dict, Optional, Union, cast
 
 from dateutil.parser import parse
 
@@ -42,17 +43,17 @@ from holidays.constants import HOLIDAY_NAME_DELIMITER, PUBLIC
 from holidays.helpers import _normalize_arguments, _normalize_tuple
 
 CategoryArg = Union[str, Iterable[str]]
-DateArg = Union[date, Tuple[int, int]]
+DateArg = Union[date, tuple[int, int]]
 DateLike = Union[date, datetime, str, float, int]
-SpecialHoliday = Union[Tuple[int, int, str], Tuple[Tuple[int, int, str], ...]]
+SpecialHoliday = Union[tuple[int, int, str], tuple[tuple[int, int, str], ...]]
 SubstitutedHoliday = Union[
-    Union[Tuple[int, int, int, int], Tuple[int, int, int, int, int]],
-    Tuple[Union[Tuple[int, int, int, int], Tuple[int, int, int, int, int]], ...],
+    Union[tuple[int, int, int, int], tuple[int, int, int, int, int]],
+    tuple[Union[tuple[int, int, int, int], tuple[int, int, int, int, int]], ...],
 ]
 YearArg = Union[int, Iterable[int]]
 
 
-class HolidayBase(Dict[date, str]):
+class HolidayBase(dict[date, str]):
     """
     A dict-like object containing the holidays for a specific country (and
     province or state if so initiated); inherits the dict class (so behaves
@@ -210,12 +211,12 @@ class HolidayBase(Dict[date, str]):
     """The country's ISO 3166-1 alpha-2 code."""
     market: str
     """The market's ISO 3166-1 alpha-2 code."""
-    subdivisions: Tuple[str, ...] = ()
+    subdivisions: tuple[str, ...] = ()
     """The subdivisions supported for this country (see documentation)."""
-    subdivisions_aliases: Dict[str, str] = {}
+    subdivisions_aliases: dict[str, str] = {}
     """Aliases for the ISO 3166-2 subdivision codes with the key as alias and
     the value the ISO 3166-2 subdivision code."""
-    years: Set[int]
+    years: set[int]
     """The years calculated."""
     expand: bool
     """Whether the entire year is calculated when one date from that year
@@ -224,25 +225,25 @@ class HolidayBase(Dict[date, str]):
     """Whether dates when public holiday are observed are included."""
     subdiv: Optional[str] = None
     """The subdiv requested as ISO 3166-2 code or one of the aliases."""
-    special_holidays: Dict[int, Union[SpecialHoliday, SubstitutedHoliday]] = {}
+    special_holidays: dict[int, Union[SpecialHoliday, SubstitutedHoliday]] = {}
     """A list of the country-wide special (as opposite to regular) holidays for
     a specific year."""
-    _deprecated_subdivisions: Tuple[str, ...] = ()
+    _deprecated_subdivisions: tuple[str, ...] = ()
     """Other subdivisions whose names are deprecated or aliases of the official
     ones."""
-    weekend: Set[int] = {SAT, SUN}
+    weekend: set[int] = {SAT, SUN}
     """Country weekend days."""
-    weekend_workdays: Set[date] = set()
+    weekend_workdays: set[date] = set()
     """Working days moved to weekends."""
     default_category: str = PUBLIC
     """The entity category used by default."""
     default_language: Optional[str] = None
     """The entity language used by default."""
-    categories: Set[str] = set()
+    categories: set[str] = set()
     """Requested holiday categories."""
-    supported_categories: Tuple[str, ...] = (PUBLIC,)
+    supported_categories: tuple[str, ...] = (PUBLIC,)
     """All holiday categories supported by this entity."""
-    supported_languages: Tuple[str, ...] = ()
+    supported_languages: tuple[str, ...] = ()
     """All languages supported by this entity."""
 
     def __init__(
@@ -630,7 +631,7 @@ class HolidayBase(Dict[date, str]):
     def __radd__(self, other: Any) -> "HolidayBase":
         return self.__add__(other)
 
-    def __reduce__(self) -> Union[str, Tuple[Any, ...]]:
+    def __reduce__(self) -> Union[str, tuple[Any, ...]]:
         return super().__reduce__()
 
     def __repr__(self) -> str:
@@ -720,9 +721,9 @@ class HolidayBase(Dict[date, str]):
         )
 
     @classmethod
-    def get_subdivision_aliases(cls) -> Dict[str, List]:
+    def get_subdivision_aliases(cls) -> dict[str, list]:
         """Get subdivision aliases."""
-        subdivision_aliases: Dict[str, List[str]] = {s: [] for s in cls.subdivisions}
+        subdivision_aliases: dict[str, list[str]] = {s: [] for s in cls.subdivisions}
         for alias, subdivision in cls.subdivisions_aliases.items():
             subdivision_aliases[subdivision].append(alias)
 
@@ -862,7 +863,7 @@ class HolidayBase(Dict[date, str]):
                 for category in self._sorted_categories
             )
 
-    def append(self, *args: Union[Dict[DateLike, str], List[DateLike], DateLike]) -> None:
+    def append(self, *args: Union[dict[DateLike, str], list[DateLike], DateLike]) -> None:
         """Alias for :meth:`update` to mimic list type."""
         return self.update(*args)
 
@@ -891,7 +892,7 @@ class HolidayBase(Dict[date, str]):
         """
         return dict.get(self, self.__keytransform__(key), default)
 
-    def get_list(self, key: DateLike) -> List[str]:
+    def get_list(self, key: DateLike) -> list[str]:
         """Return a list of all holiday names for a date if date is a holiday,
         else empty string.
 
@@ -909,7 +910,7 @@ class HolidayBase(Dict[date, str]):
 
     def get_named(
         self, holiday_name: str, lookup="icontains", split_multiple_names=True
-    ) -> List[date]:
+    ) -> list[date]:
         """Return a list of all holiday dates matching the provided holiday
         name. The match will be made case insensitively and partial matches
         will be included by default.
@@ -1025,7 +1026,7 @@ class HolidayBase(Dict[date, str]):
 
         return dict.pop(self, self.__keytransform__(key), default)
 
-    def pop_named(self, name: str) -> List[date]:
+    def pop_named(self, name: str) -> list[date]:
         """Remove (no longer treat at as holiday) all dates matching the
         provided holiday name. The match will be made case insensitively and
         partial matches will be removed.
@@ -1065,7 +1066,7 @@ class HolidayBase(Dict[date, str]):
         return popped
 
     def update(  # type: ignore[override]
-        self, *args: Union[Dict[DateLike, str], List[DateLike], DateLike]
+        self, *args: Union[dict[DateLike, str], list[DateLike], DateLike]
     ) -> None:
         # TODO: fix arguments; should not be *args (cannot properly Type hint)
         """Update the object, overwriting existing dates.
@@ -1105,15 +1106,15 @@ class HolidaySum(HolidayBase):
     are merged. All years are calculated (expanded) for all operands.
     """
 
-    country: Union[str, List[str]]  # type: ignore[assignment]
+    country: Union[str, list[str]]  # type: ignore[assignment]
     """Countries included in the addition."""
-    market: Union[str, List[str]]  # type: ignore[assignment]
+    market: Union[str, list[str]]  # type: ignore[assignment]
     """Markets included in the addition."""
-    subdiv: Optional[Union[str, List[str]]]  # type: ignore[assignment]
+    subdiv: Optional[Union[str, list[str]]]  # type: ignore[assignment]
     """Subdivisions included in the addition."""
-    holidays: List[HolidayBase]
+    holidays: list[HolidayBase]
     """The original HolidayBase objects included in the addition."""
-    years: Set[int]
+    years: set[int]
     """The years calculated."""
 
     def __init__(
@@ -1153,7 +1154,7 @@ country_holidays('CA') + country_holidays('MX')
             else:
                 self.holidays.append(operand)
 
-        kwargs: Dict[str, Any] = {}
+        kwargs: dict[str, Any] = {}
         # Join years, expand and observed.
         kwargs["years"] = h1.years | h2.years
         kwargs["expand"] = h1.expand or h2.expand
diff --git a/holidays/locale/de/LC_MESSAGES/DE.po b/holidays/locale/de/LC_MESSAGES/DE.po
index 5e75fd8d..81b4e6bf 100644
--- a/holidays/locale/de/LC_MESSAGES/DE.po
+++ b/holidays/locale/de/LC_MESSAGES/DE.po
@@ -13,10 +13,10 @@
 # Germany holidays.
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.23\n"
+"Project-Id-Version: Holidays 0.59\n"
 "POT-Creation-Date: 2023-04-04 16:13+0300\n"
-"PO-Revision-Date: 2023-04-09 18:41+0300\n"
-"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
+"PO-Revision-Date: 2024-10-17 11:43+0700\n"
+"Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
 "Language-Team: Holidays localization team\n"
 "Language: de\n"
 "MIME-Version: 1.0\n"
@@ -24,7 +24,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Generated-By: pygettext.py 1.5\n"
-"X-Generator: Poedit 3.2.2\n"
+"X-Generator: Poedit 3.5\n"
 
 #. New Year's Day.
 msgid "Neujahr"
@@ -89,6 +89,13 @@ msgid ""
 "Zweiten Weltkriegs in Europa"
 msgstr ""
 
+#. 80th anniversary of the liberation from Nazism and the end of the Second
+#. World War in Europe.
+msgid ""
+"80. Jahrestag der Befreiung vom Nationalsozialismus und der Beendigung des "
+"Zweiten Weltkriegs in Europa"
+msgstr ""
+
 #. Epiphany.
 msgid "Heilige Drei Könige"
 msgstr ""
diff --git a/holidays/locale/en_US/LC_MESSAGES/DE.po b/holidays/locale/en_US/LC_MESSAGES/DE.po
index 9cef7b14..6020e2d0 100644
--- a/holidays/locale/en_US/LC_MESSAGES/DE.po
+++ b/holidays/locale/en_US/LC_MESSAGES/DE.po
@@ -14,10 +14,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.23\n"
+"Project-Id-Version: Holidays 0.59\n"
 "POT-Creation-Date: 2023-04-04 16:13+0300\n"
-"PO-Revision-Date: 2023-04-09 18:42+0300\n"
-"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
+"PO-Revision-Date: 2024-10-17 11:43+0700\n"
+"Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
 "Language-Team: Holidays localization team\n"
 "Language: en_US\n"
 "MIME-Version: 1.0\n"
@@ -25,7 +25,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Generated-By: pygettext.py 1.5\n"
-"X-Generator: Poedit 3.2.2\n"
+"X-Generator: Poedit 3.5\n"
 
 #. New Year's Day.
 msgid "Neujahr"
@@ -92,6 +92,15 @@ msgstr ""
 "75th anniversary of the liberation from Nazism and the end of the Second "
 "World War in Europe"
 
+#. 80th anniversary of the liberation from Nazism and the end of the Second
+#. World War in Europe.
+msgid ""
+"80. Jahrestag der Befreiung vom Nationalsozialismus und der Beendigung des "
+"Zweiten Weltkriegs in Europa"
+msgstr ""
+"80th anniversary of the liberation from Nazism and the end of the Second "
+"World War in Europe"
+
 #. Epiphany.
 msgid "Heilige Drei Könige"
 msgstr "Epiphany"
diff --git a/holidays/locale/en_US/LC_MESSAGES/VN.po b/holidays/locale/en_US/LC_MESSAGES/VN.po
index 0f416b64..408b6e25 100644
--- a/holidays/locale/en_US/LC_MESSAGES/VN.po
+++ b/holidays/locale/en_US/LC_MESSAGES/VN.po
@@ -14,62 +14,80 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.58\n"
+"Project-Id-Version: Holidays 0.59\n"
 "POT-Creation-Date: 2024-09-27 15:50+0700\n"
-"PO-Revision-Date: 2024-09-27 15:50+0700\n"
-"Last-Translator: Vu Nhat Chuong <ronnyvu321@gmail.com>\n"
+"PO-Revision-Date: 2024-10-09 20:57+0300\n"
+"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
 "Language-Team: Holidays Localization Team\n"
-"Language: vi\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.4\n"
+"X-Generator: Poedit 3.5\n"
 
 #. %s (observed).
 #, c-format
 msgid "%s (nghỉ bù)"
 msgstr "%s (observed)"
 
-#. New Year's Day
+#. New Year's Day.
 msgid "Tết Dương lịch"
 msgstr "New Year's Day"
 
-#. Lunar New Year's Eve
+#. 29 of Lunar New Year.
+msgid "29 Tết"
+msgstr "29 of Lunar New Year"
+
+#. Lunar New Year's Eve.
 msgid "Giao thừa Tết Nguyên Đán"
 msgstr "Lunar New Year's Eve"
 
-#. Lunar New Year
+#. Lunar New Year.
 msgid "Tết Nguyên Đán"
 msgstr "Lunar New Year"
 
-#. Second Day of Lunar New Year
+#. Second Day of Lunar New Year.
 msgid "Mùng hai Tết Nguyên Đán"
-msgstr "The second day of Tet Holiday"
+msgstr "Second Day of Lunar New Year"
 
-#. Third Day of Lunar New Year
+#. Third Day of Lunar New Year.
 msgid "Mùng ba Tết Nguyên Đán"
-msgstr "The third day of Tet Holiday"
+msgstr "Third Day of Lunar New Year"
 
-#. Fourth Day of Lunar New Year
+#. Fourth Day of Lunar New Year.
 msgid "Mùng bốn Tết Nguyên Đán"
-msgstr "The fourth day of Tet Holiday"
+msgstr "Fourth Day of Lunar New Year"
 
-#. Fifth Day of Lunar New Year
+#. Fifth Day of Lunar New Year.
 msgid "Mùng năm Tết Nguyên Đán"
-msgstr "The fifth day of Tet Holiday"
+msgstr "Fifth Day of Lunar New Year"
+
+#. Sixth Day of Lunar New Year.
+msgid "Mùng sáu Tết Nguyên Đán"
+msgstr "Sixth Day of Lunar New Year"
 
-#. Hung Kings' Commemoration Day
+#. Hung Kings' Commemoration Day.
 msgid "Ngày Giỗ Tổ Hùng Vương"
 msgstr "Hung Kings' Commemoration Day"
 
-#. Liberation Day/Reunification Day
+#. Liberation Day/Reunification Day.
 msgid "Ngày Chiến thắng"
 msgstr "Liberation Day/Reunification Day"
 
-#. International Labor Day
+#. International Labor Day.
 msgid "Ngày Quốc tế Lao động"
 msgstr "International Labor Day"
 
-#. National Day
+#. National Day.
 msgid "Quốc khánh"
 msgstr "National Day"
+
+#. Date format (see strftime() Format Codes).
+msgid "%d/%m/%Y"
+msgstr "%m/%d/%Y"
+
+#. Day off (substituted from %s).
+#, c-format
+msgid "Ngày nghỉ (thay cho ngày %s)"
+msgstr "Day off (substituted from %s)"
diff --git a/holidays/locale/th/LC_MESSAGES/DE.po b/holidays/locale/th/LC_MESSAGES/DE.po
index 2cd20feb..601c4954 100644
--- a/holidays/locale/th/LC_MESSAGES/DE.po
+++ b/holidays/locale/th/LC_MESSAGES/DE.po
@@ -14,9 +14,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.57\n"
+"Project-Id-Version: Holidays 0.59\n"
 "POT-Creation-Date: 2024-09-05 23:21+0700\n"
-"PO-Revision-Date: 2024-09-05 23:23+0700\n"
+"PO-Revision-Date: 2024-10-17 11:44+0700\n"
 "Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
 "Language-Team: Holidays Localization Team\n"
 "Language: th\n"
@@ -92,6 +92,15 @@ msgstr ""
 "วันครบรอบ 75 "
 "ปีของการปลดปล่อยจากระบอบชาติสังคมนิยมและการสิ้นสุดสงครามโลกครั้งที่สองในยุโรป"
 
+#. 80th anniversary of the liberation from Nazism and the end of the Second
+#. World War in Europe.
+msgid ""
+"80. Jahrestag der Befreiung vom Nationalsozialismus und der Beendigung des "
+"Zweiten Weltkriegs in Europa"
+msgstr ""
+"วันครบรอบ 80 "
+"ปีของการปลดปล่อยจากระบอบชาติสังคมนิยมและการสิ้นสุดสงครามโลกครั้งที่สองในยุโรป"
+
 #. Epiphany.
 msgid "Heilige Drei Könige"
 msgstr "วันสมโภชพระคริสต์แสดงองค์"
diff --git a/holidays/locale/th/LC_MESSAGES/VN.po b/holidays/locale/th/LC_MESSAGES/VN.po
new file mode 100644
index 00000000..a4a848fb
--- /dev/null
+++ b/holidays/locale/th/LC_MESSAGES/VN.po
@@ -0,0 +1,93 @@
+#  holidays
+#  --------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: Vacanza Team and individual contributors (see AUTHORS file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+#
+# Vietnam holidays th localization.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.59\n"
+"POT-Creation-Date: 2024-09-27 15:50+0700\n"
+"PO-Revision-Date: 2024-10-09 20:58+0300\n"
+"Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: th\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.4\n"
+"X-Generator: Poedit 3.5\n"
+
+#. %s (observed).
+#, c-format
+msgid "%s (nghỉ bù)"
+msgstr "ชดเชย%s"
+
+#. New Year's Day.
+msgid "Tết Dương lịch"
+msgstr "วันปีใหม่สากล"
+
+#. 29 of Lunar New Year.
+msgid "29 Tết"
+msgstr "วันที่ 29 เดือน 12 ตามปฏิทินจันทรคติ"
+
+#. Lunar New Year's Eve.
+msgid "Giao thừa Tết Nguyên Đán"
+msgstr "วันก่อนวันตรุษเต๊ต"
+
+#. Lunar New Year.
+msgid "Tết Nguyên Đán"
+msgstr "วันตรุษเต๊ต"
+
+#. Second Day of Lunar New Year.
+msgid "Mùng hai Tết Nguyên Đán"
+msgstr "วันตรุษเต๊ตวันที่สอง"
+
+#. Third Day of Lunar New Year.
+msgid "Mùng ba Tết Nguyên Đán"
+msgstr "วันตรุษเต๊ตวันที่สาม"
+
+#. Fourth Day of Lunar New Year.
+msgid "Mùng bốn Tết Nguyên Đán"
+msgstr "วันตรุษเต๊ตวันที่สี่"
+
+#. Fifth Day of Lunar New Year.
+msgid "Mùng năm Tết Nguyên Đán"
+msgstr "วันตรุษเต๊ตวันที่ห้า"
+
+#. Sixth Day of Lunar New Year.
+msgid "Mùng sáu Tết Nguyên Đán"
+msgstr "วันตรุษเต๊ตวันที่หก"
+
+#. Hung Kings' Commemoration Day.
+msgid "Ngày Giỗ Tổ Hùng Vương"
+msgstr "วันสักการะบูชาบรรพกษัตริย์หุ่ง"
+
+#. Liberation Day/Reunification Day.
+msgid "Ngày Chiến thắng"
+msgstr "วันปลดปล่อยภาคใต้เพื่อรวมชาติ"
+
+#. International Labor Day.
+msgid "Ngày Quốc tế Lao động"
+msgstr "วันแรงงานสากล"
+
+#. National Day.
+msgid "Quốc khánh"
+msgstr "วันชาติเวียตนาม"
+
+#. Date format (see strftime() Format Codes).
+msgid "%d/%m/%Y"
+msgstr "%d/%m/%Y"
+
+#. Day off (substituted from %s).
+#, c-format
+msgid "Ngày nghỉ (thay cho ngày %s)"
+msgstr "วันหยุด (แทน %s)"
diff --git a/holidays/locale/uk/LC_MESSAGES/DE.po b/holidays/locale/uk/LC_MESSAGES/DE.po
index a19313a8..b31b024e 100644
--- a/holidays/locale/uk/LC_MESSAGES/DE.po
+++ b/holidays/locale/uk/LC_MESSAGES/DE.po
@@ -14,10 +14,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.23\n"
+"Project-Id-Version: Holidays 0.59\n"
 "POT-Creation-Date: 2023-04-04 16:13+0300\n"
-"PO-Revision-Date: 2023-04-09 18:42+0300\n"
-"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
+"PO-Revision-Date: 2024-10-17 11:44+0700\n"
+"Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
 "Language-Team: Holidays localization team\n"
 "Language: uk\n"
 "MIME-Version: 1.0\n"
@@ -25,7 +25,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
 "Generated-By: pygettext.py 1.5\n"
-"X-Generator: Poedit 3.2.2\n"
+"X-Generator: Poedit 3.5\n"
 
 #. New Year's Day.
 msgid "Neujahr"
@@ -92,6 +92,15 @@ msgstr ""
 "75-та річниця визволення від націонал-соціалізму та завершення Другої "
 "світової війни в Європі"
 
+#. 80th anniversary of the liberation from Nazism and the end of the Second
+#. World War in Europe.
+msgid ""
+"80. Jahrestag der Befreiung vom Nationalsozialismus und der Beendigung des "
+"Zweiten Weltkriegs in Europa"
+msgstr ""
+"80-та річниця визволення від націонал-соціалізму та завершення Другої "
+"світової війни в Європі"
+
 #. Epiphany.
 msgid "Heilige Drei Könige"
 msgstr "Богоявлення"
diff --git a/holidays/locale/vi/LC_MESSAGES/VN.po b/holidays/locale/vi/LC_MESSAGES/VN.po
index 9ce748db..f81a6e34 100644
--- a/holidays/locale/vi/LC_MESSAGES/VN.po
+++ b/holidays/locale/vi/LC_MESSAGES/VN.po
@@ -14,62 +14,80 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.58\n"
+"Project-Id-Version: Holidays 0.59\n"
 "POT-Creation-Date: 2024-09-27 15:50+0700\n"
-"PO-Revision-Date: 2024-09-27 15:50+0700\n"
-"Last-Translator: Vu Nhat Chuong <ronnyvu321@gmail.com>\n"
+"PO-Revision-Date: 2024-10-09 20:58+0300\n"
+"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
 "Language-Team: Holidays Localization Team\n"
 "Language: vi\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: Lingva 5.0.4\n"
+"X-Generator: Poedit 3.5\n"
 
 #. %s (observed).
 #, c-format
 msgid "%s (nghỉ bù)"
 msgstr ""
 
-#. New Year's Day
+#. New Year's Day.
 msgid "Tết Dương lịch"
 msgstr ""
 
-#. Lunar New Year's Eve
+#. 29 of Lunar New Year.
+msgid "29 Tết"
+msgstr ""
+
+#. Lunar New Year's Eve.
 msgid "Giao thừa Tết Nguyên Đán"
 msgstr ""
 
-#. Lunar New Year
+#. Lunar New Year.
 msgid "Tết Nguyên Đán"
 msgstr ""
 
-#. Second Day of Lunar New Year
+#. Second Day of Lunar New Year.
 msgid "Mùng hai Tết Nguyên Đán"
 msgstr ""
 
-#. Third Day of Lunar New Year
+#. Third Day of Lunar New Year.
 msgid "Mùng ba Tết Nguyên Đán"
 msgstr ""
 
-#. Fourth Day of Lunar New Year
+#. Fourth Day of Lunar New Year.
 msgid "Mùng bốn Tết Nguyên Đán"
 msgstr ""
 
-#. Fifth Day of Lunar New Year
+#. Fifth Day of Lunar New Year.
 msgid "Mùng năm Tết Nguyên Đán"
 msgstr ""
 
-#. Hung Kings' Commemoration Day
+#. Sixth Day of Lunar New Year.
+msgid "Mùng sáu Tết Nguyên Đán"
+msgstr ""
+
+#. Hung Kings' Commemoration Day.
 msgid "Ngày Giỗ Tổ Hùng Vương"
 msgstr ""
 
-#. Liberation Day/Reunification Day
+#. Liberation Day/Reunification Day.
 msgid "Ngày Chiến thắng"
 msgstr ""
 
-#. International Labor Day
+#. International Labor Day.
 msgid "Ngày Quốc tế Lao động"
 msgstr ""
 
-#. National Day
+#. National Day.
 msgid "Quốc khánh"
 msgstr ""
+
+#. Date format (see strftime() Format Codes).
+msgid "%d/%m/%Y"
+msgstr ""
+
+#. Day off (substituted from %s).
+#, c-format
+msgid "Ngày nghỉ (thay cho ngày %s)"
+msgstr ""
diff --git a/holidays/mixins.py b/holidays/mixins.py
index 524e6e05..6be995b7 100644
--- a/holidays/mixins.py
+++ b/holidays/mixins.py
@@ -11,16 +11,13 @@
 #  License: MIT (see LICENSE file)
 
 
-from typing import Tuple
-
-
 class PreferredDiscretionaryHolidays:
     """A mixin for setting preferred discretionary holidays.
 
     See :class:`holidays.countries.hongkong.HongKong` for an example.
     """
 
-    default_preferred_discretionary_holidays: Tuple[str, ...] = ()
+    default_preferred_discretionary_holidays: tuple[str, ...] = ()
     """Preferred discretionary holidays defaults."""
 
     def __init__(self, preferred_discretionary_holidays):
diff --git a/holidays/observed_holiday_base.py b/holidays/observed_holiday_base.py
index 6b90ef1c..eba371c6 100644
--- a/holidays/observed_holiday_base.py
+++ b/holidays/observed_holiday_base.py
@@ -11,13 +11,13 @@
 #  License: MIT (see LICENSE file)
 
 from datetime import date
-from typing import Dict, Optional, Tuple, Set
+from typing import Optional
 
 from holidays.calendars.gregorian import MON, TUE, WED, THU, FRI, SAT, SUN, _timedelta
 from holidays.holiday_base import DateArg, HolidayBase
 
 
-class ObservedRule(Dict[int, Optional[int]]):
+class ObservedRule(dict[int, Optional[int]]):
     __slots__ = ()
 
     def __add__(self, other):
@@ -141,7 +141,7 @@ class ObservedHolidayBase(HolidayBase):
         name: Optional[str] = None,
         rule: Optional[ObservedRule] = None,
         show_observed_label: bool = True,
-    ) -> Tuple[bool, Optional[date]]:
+    ) -> tuple[bool, Optional[date]]:
         dt = dt if isinstance(dt, date) else date(self._year, *dt)
 
         if not self.observed or not self._is_observed(dt):
@@ -186,7 +186,7 @@ class ObservedHolidayBase(HolidayBase):
 
     def _move_holiday(
         self, dt: date, rule: Optional[ObservedRule] = None, show_observed_label: bool = True
-    ) -> Tuple[bool, Optional[date]]:
+    ) -> tuple[bool, Optional[date]]:
         is_observed, dt_observed = self._add_observed(
             dt, rule=rule, show_observed_label=show_observed_label
         )
@@ -194,7 +194,7 @@ class ObservedHolidayBase(HolidayBase):
             self.pop(dt)
         return is_observed, dt_observed if is_observed else dt
 
-    def _populate_observed(self, dts: Set[date], multiple: bool = False) -> None:
+    def _populate_observed(self, dts: set[date], multiple: bool = False) -> None:
         """
         When multiple is True, each holiday from a given date has its own observed date.
         """
diff --git a/holidays/registry.py b/holidays/registry.py
index c127df9f..f6ab6d9f 100644
--- a/holidays/registry.py
+++ b/holidays/registry.py
@@ -11,12 +11,13 @@
 #  License: MIT (see LICENSE file)
 
 import importlib
+from collections.abc import Iterable
 from threading import RLock
-from typing import Any, Dict, Iterable, Optional, Tuple, Union
+from typing import Any, Optional, Union
 
 from holidays.holiday_base import HolidayBase
 
-RegistryDict = Dict[str, Tuple[str, ...]]
+RegistryDict = dict[str, tuple[str, ...]]
 
 COUNTRIES: RegistryDict = {
     "albania": ("Albania", "AL", "ALB"),
@@ -277,7 +278,7 @@ class EntityLoader:
         return EntityLoader._get_entity_codes(FINANCIAL, (3, 4), include_aliases)
 
     @staticmethod
-    def load(prefix: str, scope: Dict) -> None:
+    def load(prefix: str, scope: dict) -> None:
         """Load country or financial entities."""
         entity_mapping = COUNTRIES if prefix == "countries" else FINANCIAL
         for module, entities in entity_mapping.items():
diff --git a/holidays/utils.py b/holidays/utils.py
index 249141f8..694c7766 100755
--- a/holidays/utils.py
+++ b/holidays/utils.py
@@ -21,8 +21,9 @@ __all__ = (
 )
 
 import warnings
+from collections.abc import Iterable
 from functools import lru_cache
-from typing import Dict, Iterable, List, Optional, Union
+from typing import Optional, Union
 
 from holidays.holiday_base import CategoryArg, HolidayBase
 from holidays.registry import EntityLoader
@@ -282,7 +283,7 @@ def CountryHoliday(  # noqa: N802
     return country_holidays(country, subdiv, years, expand, observed, prov, state)
 
 
-def _list_localized_entities(entity_codes: Iterable[str]) -> Dict[str, List[str]]:
+def _list_localized_entities(entity_codes: Iterable[str]) -> dict[str, list[str]]:
     """
     Get all localized entities and languages they support.
 
@@ -307,7 +308,7 @@ def _list_localized_entities(entity_codes: Iterable[str]) -> Dict[str, List[str]
 
 
 @lru_cache
-def list_localized_countries(include_aliases=True) -> Dict[str, List[str]]:
+def list_localized_countries(include_aliases=True) -> dict[str, list[str]]:
     """
     Get all localized countries and languages they support.
 
@@ -324,7 +325,7 @@ def list_localized_countries(include_aliases=True) -> Dict[str, List[str]]:
 
 
 @lru_cache
-def list_localized_financial(include_aliases=True) -> Dict[str, List[str]]:
+def list_localized_financial(include_aliases=True) -> dict[str, list[str]]:
     """
     Get all localized financial markets and languages they support.
 
@@ -339,7 +340,7 @@ def list_localized_financial(include_aliases=True) -> Dict[str, List[str]]:
     return _list_localized_entities(EntityLoader.get_financial_codes(include_aliases))
 
 
-def _list_supported_entities(entity_codes: Iterable[str]) -> Dict[str, List[str]]:
+def _list_supported_entities(entity_codes: Iterable[str]) -> dict[str, list[str]]:
     """
     Get all supported entities and their subdivisions.
 
@@ -359,7 +360,7 @@ def _list_supported_entities(entity_codes: Iterable[str]) -> Dict[str, List[str]
 
 
 @lru_cache
-def list_supported_countries(include_aliases=True) -> Dict[str, List[str]]:
+def list_supported_countries(include_aliases=True) -> dict[str, list[str]]:
     """
     Get all supported countries and their subdivisions.
 
@@ -374,7 +375,7 @@ def list_supported_countries(include_aliases=True) -> Dict[str, List[str]]:
 
 
 @lru_cache
-def list_supported_financial(include_aliases=True) -> Dict[str, List[str]]:
+def list_supported_financial(include_aliases=True) -> dict[str, list[str]]:
     """
     Get all supported financial markets and their subdivisions.
 
diff --git a/pyproject.toml b/pyproject.toml
index 2ecee71c..9a77001c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,38 +1,46 @@
 [project]
 name = "holidays"
-description = "Generate and work with holidays in Python"
-license = { file = "LICENSE" }
+description = "World Holidays Framework"
+license = { "text" = "MIT" }
 readme = "README.rst"
-requires-python = ">=3.8"
+requires-python = ">=3.9"
 dynamic = ["version"]
 
-authors = [{ email = "dr.prodigy.github@gmail.com", name = "Maurizio Montel" }]
+authors = [{ name = "Vacanza Team" }]
 dependencies = ["python-dateutil"]
 classifiers = [
     "Development Status :: 4 - Beta",
     "Intended Audience :: Developers",
+    "Intended Audience :: Education",
+    "Intended Audience :: End Users/Desktop",
+    "Intended Audience :: Financial and Insurance Industry",
+    "Intended Audience :: Information Technology",
     "License :: OSI Approved :: MIT License",
     "Operating System :: OS Independent",
-    "Programming Language :: Python",
-    "Programming Language :: Python :: 3",
     "Programming Language :: Python :: 3 :: Only",
+    "Programming Language :: Python :: 3.9",
+    "Programming Language :: Python :: 3.10",
+    "Programming Language :: Python :: 3.11",
+    "Programming Language :: Python :: 3.12",
+    "Programming Language :: Python :: 3.13",
     "Programming Language :: Python :: Implementation :: CPython",
-    "Programming Language :: Python :: Implementation :: PyPy",
+    "Topic :: File Formats :: JSON",
+    "Topic :: Office/Business :: Financial :: Accounting",
+    "Topic :: Office/Business :: Financial :: Investment",
     "Topic :: Office/Business :: Scheduling",
     "Topic :: Software Development :: Libraries :: Python Modules",
-    "Topic :: Software Development :: Localization",
 ]
-keywords = ["holidays", "calendar", "l10n"]
+keywords = ["holidays", "calendar", "l10n", "worldwide", "vacation"]
 maintainers = [
-    { email = "ark@cho.red", name = "Arkadii Yakovets" },
-    { email = "jhellico@gmail.com", name = "Serhii Murza" },
+    { name = "Arkadii Yakovets" },
+    { name = "Panpakorn Siripanich" },
+    { name = "Serhii Murza" },
 ]
 
 [project.urls]
-Repository = "https://github.com/vacanza/holidays/"
 Documentation = "https://holidays.readthedocs.io/en/latest/"
-Changelog = "https://github.com/vacanza/holidays/releases"
-Downloads = "https://pypi.org/project/holidays/"
+Repository = "https://github.com/vacanza/holidays/"
+Changelog = "https://github.com/vacanza/holidays/releases/"
 
 [tool.bandit]
 exclude_dirs = ["docs", "tests"]
diff --git a/requirements/build.txt b/requirements/build.txt
index 8e99acc3..bf1d9944 100644
--- a/requirements/build.txt
+++ b/requirements/build.txt
@@ -1,3 +1,3 @@
-build==1.2.2
-cyclonedx-bom==4.6.1
+build==1.2.2.post1
+cyclonedx-bom==5.0.0
 polib==1.2.0
diff --git a/requirements/dev.txt b/requirements/dev.txt
index 8bb67420..2f2e669f 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -1,13 +1,13 @@
 # Dev requirements.
 
-build==1.2.2
+build==1.2.2.post1
 convertdate==2.4.0
 gitpython==3.1.43
 hijridate==2.5.0
 lingva==5.0.4
-pre-commit==3.8.0
+pre-commit==4.0.1
 pygithub==2.4.0
-ruff==0.6.8
-tox==4.21.1
+ruff==0.6.9
+tox==4.22.0
 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
diff --git a/requirements/docs.txt b/requirements/docs.txt
index 8dee3127..b6cc3044 100644
--- a/requirements/docs.txt
+++ b/requirements/docs.txt
@@ -1,6 +1,6 @@
 # Documentation requirements.
 
 python-dateutil==2.9.0.post0
-sphinx-rtd-theme==2.0.0
+sphinx-rtd-theme==3.0.1
 sphinx==7.4.7  # keep the version until sphinx-rtd-theme starts supporting sphinx>=8
 zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability
diff --git a/scripts/generate_release_notes.py b/scripts/generate_release_notes.py
index 0b6e4deb..00afa096 100755
--- a/scripts/generate_release_notes.py
+++ b/scripts/generate_release_notes.py
@@ -17,7 +17,6 @@ import re
 import sys
 from datetime import date
 from pathlib import Path
-from typing import Dict, Set
 
 from git import Repo
 from github import Github
@@ -83,8 +82,8 @@ class ReleaseNotesGenerator:
         self.local_repo = Repo(Path.cwd())
         self.remote_repo = Github(self.github_token).get_repo(REPOSITORY_NAME)
 
-        self.previous_commits: Set[str] = set()
-        self.pull_requests: Dict[int, str] = {}
+        self.previous_commits: set[str] = set()
+        self.pull_requests: dict[int, str] = {}
 
         self.tag = holidays.__version__
 
diff --git a/snapshots/countries/DE_BE.json b/snapshots/countries/DE_BE.json
index 59189e58..fec5b8d1 100644
--- a/snapshots/countries/DE_BE.json
+++ b/snapshots/countries/DE_BE.json
@@ -325,6 +325,7 @@
     "2025-04-18": "Good Friday",
     "2025-04-21": "Easter Monday",
     "2025-05-01": "Labor Day",
+    "2025-05-08": "80th anniversary of the liberation from Nazism and the end of the Second World War in Europe",
     "2025-05-29": "Ascension Day",
     "2025-06-09": "Whit Monday",
     "2025-10-03": "German Unity Day",
diff --git a/snapshots/countries/MY_01.json b/snapshots/countries/MY_01.json
index 7ed012e2..6e3aadfe 100644
--- a/snapshots/countries/MY_01.json
+++ b/snapshots/countries/MY_01.json
@@ -657,10 +657,10 @@
     "1995-02-14": "Thaipusam",
     "1995-03-02": "Eid al-Fitr (estimated)",
     "1995-03-03": "Eid al-Fitr (Second Day) (estimated)",
-    "1995-03-05": "Eid al-Fitr (Second Day) (observed, estimated)",
     "1995-05-01": "Labor Day",
     "1995-05-09": "Eid al-Adha (estimated)",
     "1995-05-14": "Vesak Day (estimated)",
+    "1995-05-15": "Vesak Day (observed, estimated)",
     "1995-05-30": "Islamic New Year (estimated)",
     "1995-06-03": "Birthday of HM Yang di-Pertuan Agong",
     "1995-08-08": "Prophet Muhammad's Birthday (estimated)",
@@ -668,6 +668,7 @@
     "1995-11-20": "Deepavali",
     "1995-12-25": "Christmas Day",
     "1996-01-21": "Beginning of Ramadan (estimated)",
+    "1996-01-22": "Beginning of Ramadan (observed, estimated)",
     "1996-02-19": "Chinese New Year (estimated); Eid al-Fitr (estimated)",
     "1996-02-20": "Chinese New Year (Second Day) (estimated); Eid al-Fitr (Second Day) (estimated)",
     "1996-03-04": "Thaipusam",
@@ -681,11 +682,10 @@
     "1996-11-09": "Deepavali",
     "1996-12-25": "Christmas Day",
     "1997-01-10": "Beginning of Ramadan (estimated)",
-    "1997-01-12": "Beginning of Ramadan (observed, estimated)",
     "1997-02-07": "Chinese New Year (estimated)",
     "1997-02-08": "Chinese New Year (Second Day) (estimated); Eid al-Fitr (estimated)",
     "1997-02-09": "Eid al-Fitr (Second Day) (estimated)",
-    "1997-02-10": "Chinese New Year (observed, estimated)",
+    "1997-02-10": "Eid al-Fitr (Second Day) (observed, estimated)",
     "1997-02-22": "Thaipusam",
     "1997-04-17": "Eid al-Adha (estimated)",
     "1997-05-01": "Labor Day",
@@ -694,6 +694,7 @@
     "1997-06-07": "Birthday of HM Yang di-Pertuan Agong",
     "1997-07-16": "Prophet Muhammad's Birthday (estimated)",
     "1997-08-31": "National Day",
+    "1997-09-01": "National Day (observed)",
     "1997-10-29": "Deepavali",
     "1997-12-25": "Christmas Day",
     "1997-12-30": "Beginning of Ramadan (estimated)",
@@ -701,19 +702,17 @@
     "1998-01-28": "Chinese New Year (estimated)",
     "1998-01-29": "Chinese New Year (Second Day) (estimated); Eid al-Fitr (estimated)",
     "1998-01-30": "Eid al-Fitr (Second Day) (estimated)",
-    "1998-02-01": "Eid al-Fitr (Second Day) (observed, estimated)",
     "1998-04-07": "Eid al-Adha (estimated)",
     "1998-04-27": "Islamic New Year (estimated)",
     "1998-05-01": "Labor Day",
-    "1998-05-03": "Labor Day (observed)",
     "1998-05-10": "Vesak Day (estimated)",
+    "1998-05-11": "Vesak Day (observed, estimated)",
     "1998-06-06": "Birthday of HM Yang di-Pertuan Agong",
     "1998-07-06": "Prophet Muhammad's Birthday (estimated)",
     "1998-08-31": "National Day",
     "1998-11-17": "Deepavali",
     "1998-12-19": "Beginning of Ramadan (estimated)",
     "1998-12-25": "Christmas Day",
-    "1998-12-27": "Christmas Day (observed)",
     "1999-01-18": "Eid al-Fitr (estimated)",
     "1999-01-19": "Eid al-Fitr (Second Day) (estimated)",
     "1999-02-16": "Chinese New Year (estimated)",
@@ -732,9 +731,12 @@
     "1999-12-25": "Christmas Day",
     "2000-01-08": "Eid al-Fitr (estimated)",
     "2000-01-09": "Eid al-Fitr (Second Day) (estimated)",
+    "2000-01-10": "Eid al-Fitr (Second Day) (observed, estimated)",
     "2000-02-05": "Chinese New Year (estimated)",
     "2000-02-06": "Chinese New Year (Second Day) (estimated)",
+    "2000-02-07": "Chinese New Year (Second Day) (observed, estimated)",
     "2000-02-20": "Thaipusam",
+    "2000-02-21": "Thaipusam (observed)",
     "2000-03-16": "Eid al-Adha (estimated)",
     "2000-04-06": "Islamic New Year (estimated)",
     "2000-05-01": "Labor Day",
@@ -757,7 +759,6 @@
     "2001-06-02": "Birthday of HM Yang di-Pertuan Agong",
     "2001-06-04": "Prophet Muhammad's Birthday",
     "2001-08-31": "National Day",
-    "2001-09-02": "National Day (observed)",
     "2001-11-14": "Deepavali",
     "2001-11-17": "Beginning of Ramadan",
     "2001-12-17": "Eid al-Fitr",
@@ -770,26 +771,28 @@
     "2002-03-15": "Islamic New Year",
     "2002-05-01": "Labor Day",
     "2002-05-24": "Prophet Muhammad's Birthday",
-    "2002-05-26": "Prophet Muhammad's Birthday (observed)",
     "2002-05-27": "Vesak Day",
     "2002-06-01": "Birthday of HM Yang di-Pertuan Agong",
     "2002-08-31": "National Day",
     "2002-11-03": "Deepavali",
+    "2002-11-04": "Deepavali (observed)",
     "2002-11-06": "Beginning of Ramadan",
     "2002-12-06": "Eid al-Fitr",
     "2002-12-07": "Eid al-Fitr (Second Day)",
-    "2002-12-08": "Eid al-Fitr (observed)",
     "2002-12-25": "Christmas Day",
     "2003-02-01": "Chinese New Year",
     "2003-02-02": "Chinese New Year (Second Day)",
+    "2003-02-03": "Chinese New Year (Second Day) (observed)",
     "2003-02-12": "Eid al-Adha",
     "2003-02-16": "Thaipusam",
+    "2003-02-17": "Thaipusam (observed)",
     "2003-03-05": "Islamic New Year",
     "2003-05-01": "Labor Day",
     "2003-05-14": "Prophet Muhammad's Birthday",
     "2003-05-15": "Vesak Day",
     "2003-06-07": "Birthday of HM Yang di-Pertuan Agong",
     "2003-08-31": "National Day",
+    "2003-09-01": "National Day (observed)",
     "2003-10-23": "Deepavali",
     "2003-10-27": "Beginning of Ramadan",
     "2003-11-26": "Eid al-Fitr",
@@ -798,47 +801,50 @@
     "2004-01-07": "Thaipusam",
     "2004-01-22": "Chinese New Year",
     "2004-01-23": "Chinese New Year (Second Day)",
-    "2004-01-25": "Chinese New Year (Second Day) (observed)",
     "2004-02-02": "Eid al-Adha",
     "2004-02-22": "Islamic New Year",
     "2004-05-01": "Labor Day",
     "2004-05-02": "Prophet Muhammad's Birthday",
     "2004-05-03": "Vesak Day",
+    "2004-05-04": "Prophet Muhammad's Birthday (observed)",
     "2004-06-05": "Birthday of HM Yang di-Pertuan Agong",
     "2004-08-31": "National Day",
     "2004-10-16": "Beginning of Ramadan",
     "2004-11-11": "Deepavali",
     "2004-11-14": "Eid al-Fitr",
     "2004-11-15": "Eid al-Fitr (Second Day)",
+    "2004-11-16": "Eid al-Fitr (observed)",
     "2004-12-25": "Christmas Day",
     "2005-01-21": "Eid al-Adha",
-    "2005-01-23": "Eid al-Adha (observed)",
     "2005-02-09": "Chinese New Year",
     "2005-02-10": "Chinese New Year (Second Day); Islamic New Year",
     "2005-02-23": "Thaipusam",
     "2005-04-21": "Prophet Muhammad's Birthday",
     "2005-05-01": "Labor Day",
+    "2005-05-02": "Labor Day (observed)",
     "2005-05-22": "Vesak Day",
+    "2005-05-23": "Vesak Day (observed)",
     "2005-06-04": "Birthday of HM Yang di-Pertuan Agong",
     "2005-08-31": "National Day",
     "2005-10-05": "Beginning of Ramadan",
     "2005-11-01": "Deepavali",
     "2005-11-03": "Eid al-Fitr",
     "2005-11-04": "Eid al-Fitr (Second Day)",
-    "2005-11-06": "Eid al-Fitr (Second Day) (observed)",
     "2005-12-25": "Christmas Day",
+    "2005-12-26": "Christmas Day (observed)",
     "2006-01-10": "Eid al-Adha",
     "2006-01-29": "Chinese New Year",
     "2006-01-30": "Chinese New Year (Second Day)",
     "2006-01-31": "Islamic New Year",
+    "2006-02-01": "Chinese New Year (observed)",
     "2006-02-13": "Thaipusam",
     "2006-04-11": "Prophet Muhammad's Birthday",
     "2006-05-01": "Labor Day",
     "2006-05-12": "Vesak Day",
-    "2006-05-14": "Vesak Day (observed)",
     "2006-06-03": "Birthday of HM Yang di-Pertuan Agong",
     "2006-08-31": "National Day",
     "2006-09-24": "Beginning of Ramadan",
+    "2006-09-25": "Beginning of Ramadan (observed)",
     "2006-10-21": "Deepavali",
     "2006-10-24": "Eid al-Fitr",
     "2006-10-25": "Eid al-Fitr (Second Day)",
@@ -847,29 +853,30 @@
     "2007-01-20": "Islamic New Year",
     "2007-02-18": "Chinese New Year",
     "2007-02-19": "Chinese New Year (Second Day)",
+    "2007-02-20": "Chinese New Year (observed)",
     "2007-03-04": "Thaipusam",
+    "2007-03-05": "Thaipusam (observed)",
     "2007-03-31": "Prophet Muhammad's Birthday",
     "2007-05-01": "Labor Day; Vesak Day",
     "2007-06-02": "Birthday of HM Yang di-Pertuan Agong",
     "2007-08-31": "National Day",
-    "2007-09-02": "National Day (observed)",
     "2007-09-13": "Beginning of Ramadan",
     "2007-10-13": "Eid al-Fitr",
     "2007-10-14": "Eid al-Fitr (Second Day)",
+    "2007-10-15": "Eid al-Fitr (Second Day) (observed)",
     "2007-11-08": "Deepavali",
     "2007-12-20": "Eid al-Adha",
     "2007-12-25": "Christmas Day",
     "2008-01-10": "Islamic New Year",
     "2008-02-07": "Chinese New Year",
     "2008-02-08": "Chinese New Year (Second Day)",
-    "2008-02-10": "Chinese New Year (Second Day) (observed)",
     "2008-02-22": "Thaipusam",
-    "2008-02-24": "Thaipusam (observed)",
     "2008-03-20": "Prophet Muhammad's Birthday",
     "2008-05-01": "Labor Day",
     "2008-05-19": "Vesak Day",
     "2008-06-07": "Birthday of HM Yang di-Pertuan Agong",
     "2008-08-31": "National Day",
+    "2008-09-01": "National Day (observed)",
     "2008-09-02": "Beginning of Ramadan",
     "2008-10-01": "Eid al-Fitr",
     "2008-10-02": "Eid al-Fitr (Second Day)",
@@ -878,77 +885,74 @@
     "2008-12-25": "Christmas Day",
     "2008-12-29": "Islamic New Year",
     "2009-01-11": "Thaipusam",
+    "2009-01-12": "Thaipusam (observed)",
     "2009-01-26": "Chinese New Year",
     "2009-01-27": "Chinese New Year (Second Day)",
     "2009-03-09": "Prophet Muhammad's Birthday",
     "2009-05-01": "Labor Day",
-    "2009-05-03": "Labor Day (observed)",
     "2009-05-09": "Vesak Day",
     "2009-06-06": "Birthday of HM Yang di-Pertuan Agong",
     "2009-08-22": "Beginning of Ramadan",
     "2009-08-31": "National Day",
     "2009-09-20": "Eid al-Fitr",
     "2009-09-21": "Eid al-Fitr (Second Day)",
+    "2009-09-22": "Eid al-Fitr (observed)",
     "2009-10-17": "Deepavali",
     "2009-11-28": "Eid al-Adha",
     "2009-12-18": "Islamic New Year",
     "2009-12-25": "Christmas Day",
-    "2009-12-27": "Christmas Day (observed)",
     "2010-02-14": "Chinese New Year",
     "2010-02-15": "Chinese New Year (Second Day)",
+    "2010-02-16": "Chinese New Year (observed)",
     "2010-02-26": "Prophet Muhammad's Birthday",
-    "2010-02-28": "Prophet Muhammad's Birthday (observed)",
     "2010-03-01": "Thaipusam",
     "2010-05-01": "Labor Day",
     "2010-05-28": "Vesak Day",
-    "2010-05-30": "Vesak Day (observed)",
     "2010-06-05": "Birthday of HM Yang di-Pertuan Agong",
     "2010-08-11": "Beginning of Ramadan",
     "2010-08-31": "National Day",
     "2010-09-10": "Eid al-Fitr",
     "2010-09-11": "Eid al-Fitr (Second Day)",
-    "2010-09-12": "Eid al-Fitr (observed)",
     "2010-09-16": "Malaysia Day",
     "2010-11-05": "Deepavali",
-    "2010-11-07": "Deepavali (observed)",
     "2010-11-17": "Eid al-Adha",
     "2010-12-08": "Islamic New Year",
     "2010-12-25": "Christmas Day",
     "2011-01-12": "The Sultan of Johor Hol",
     "2011-02-03": "Chinese New Year",
     "2011-02-04": "Chinese New Year (Second Day)",
-    "2011-02-06": "Chinese New Year (Second Day) (observed)",
     "2011-02-16": "Prophet Muhammad's Birthday",
     "2011-02-18": "Thaipusam",
-    "2011-02-20": "Thaipusam (observed)",
     "2011-05-01": "Labor Day",
+    "2011-05-02": "Labor Day (observed)",
     "2011-05-17": "Vesak Day",
     "2011-06-04": "Birthday of HM Yang di-Pertuan Agong",
     "2011-08-01": "Beginning of Ramadan",
     "2011-08-31": "Eid al-Fitr; National Day",
     "2011-09-01": "Eid al-Fitr (Second Day)",
     "2011-09-16": "Malaysia Day",
-    "2011-09-18": "Malaysia Day (observed)",
     "2011-10-26": "Deepavali",
     "2011-11-07": "Eid al-Adha",
     "2011-11-27": "Islamic New Year",
     "2011-12-25": "Christmas Day",
+    "2011-12-26": "Christmas Day (observed)",
     "2012-01-08": "Thaipusam",
+    "2012-01-09": "Thaipusam (observed)",
     "2012-01-23": "Chinese New Year",
     "2012-01-24": "Chinese New Year (Second Day)",
     "2012-02-05": "Prophet Muhammad's Birthday",
+    "2012-02-06": "Prophet Muhammad's Birthday (observed)",
     "2012-05-01": "Labor Day",
     "2012-05-05": "Vesak Day",
     "2012-06-02": "Birthday of HM Yang di-Pertuan Agong",
     "2012-07-20": "Beginning of Ramadan",
-    "2012-07-22": "Beginning of Ramadan (observed)",
     "2012-08-19": "Eid al-Fitr",
     "2012-08-20": "Eid al-Fitr (Second Day)",
+    "2012-08-21": "Eid al-Fitr (observed)",
     "2012-08-31": "National Day",
-    "2012-09-02": "National Day (observed)",
     "2012-09-16": "Malaysia Day",
+    "2012-09-17": "Malaysia Day (observed)",
     "2012-10-26": "Eid al-Adha",
-    "2012-10-28": "Eid al-Adha (observed)",
     "2012-11-13": "Deepavali",
     "2012-11-15": "Islamic New Year",
     "2012-12-20": "The Sultan of Johor Hol",
@@ -956,15 +960,14 @@
     "2013-01-24": "Prophet Muhammad's Birthday",
     "2013-02-10": "Chinese New Year",
     "2013-02-11": "Chinese New Year (Second Day)",
+    "2013-02-12": "Chinese New Year (observed)",
     "2013-02-25": "Thaipusam",
     "2013-05-01": "Labor Day",
     "2013-05-24": "Vesak Day",
-    "2013-05-26": "Vesak Day (observed)",
     "2013-06-01": "Birthday of HM Yang di-Pertuan Agong",
     "2013-07-09": "Beginning of Ramadan",
     "2013-08-08": "Eid al-Fitr",
     "2013-08-09": "Eid al-Fitr (Second Day)",
-    "2013-08-11": "Eid al-Fitr (Second Day) (observed)",
     "2013-08-31": "National Day",
     "2013-09-16": "Malaysia Day",
     "2013-10-15": "Eid al-Adha",
@@ -1204,27 +1207,28 @@
     "2025-03-23": "Birthday of the Sultan of Johor",
     "2025-03-30": "Eid al-Fitr (estimated)",
     "2025-03-31": "Eid al-Fitr (Second Day) (estimated)",
+    "2025-04-01": "Eid al-Fitr (observed, estimated)",
     "2025-05-01": "Labor Day",
     "2025-05-11": "Vesak Day (estimated)",
+    "2025-05-12": "Vesak Day (observed, estimated)",
     "2025-06-02": "Birthday of HM Yang di-Pertuan Agong",
     "2025-06-06": "Eid al-Adha (estimated)",
-    "2025-06-08": "Eid al-Adha (observed, estimated)",
     "2025-06-26": "Islamic New Year (estimated)",
     "2025-07-31": "The Sultan of Johor Hol (estimated)",
     "2025-08-31": "National Day",
+    "2025-09-01": "National Day (observed)",
     "2025-09-04": "Prophet Muhammad's Birthday (estimated)",
     "2025-09-16": "Malaysia Day",
     "2025-11-18": "Deepavali",
     "2025-12-25": "Christmas Day",
     "2026-02-01": "Thaipusam",
+    "2026-02-02": "Thaipusam (observed)",
     "2026-02-17": "Chinese New Year (estimated)",
     "2026-02-18": "Beginning of Ramadan (estimated); Chinese New Year (Second Day) (estimated)",
     "2026-03-20": "Eid al-Fitr (estimated)",
     "2026-03-21": "Eid al-Fitr (Second Day) (estimated)",
-    "2026-03-22": "Eid al-Fitr (observed, estimated)",
     "2026-03-23": "Birthday of the Sultan of Johor",
     "2026-05-01": "Labor Day; Vesak Day (estimated)",
-    "2026-05-03": "Labor Day (observed); Vesak Day (observed, estimated)",
     "2026-05-27": "Eid al-Adha (estimated)",
     "2026-06-01": "Birthday of HM Yang di-Pertuan Agong",
     "2026-06-16": "Islamic New Year (estimated)",
@@ -1234,17 +1238,17 @@
     "2026-09-16": "Malaysia Day",
     "2026-11-07": "Deepavali",
     "2026-12-25": "Christmas Day",
-    "2026-12-27": "Christmas Day (observed)",
     "2027-01-22": "Thaipusam",
-    "2027-01-24": "Thaipusam (observed)",
     "2027-02-06": "Chinese New Year (estimated)",
     "2027-02-07": "Chinese New Year (Second Day) (estimated)",
     "2027-02-08": "Beginning of Ramadan (estimated)",
+    "2027-02-09": "Chinese New Year (Second Day) (observed, estimated)",
     "2027-03-09": "Eid al-Fitr (estimated)",
     "2027-03-10": "Eid al-Fitr (Second Day) (estimated)",
     "2027-03-23": "Birthday of the Sultan of Johor",
     "2027-05-01": "Labor Day",
     "2027-05-16": "Eid al-Adha (estimated)",
+    "2027-05-17": "Eid al-Adha (observed, estimated)",
     "2027-05-20": "Vesak Day (estimated)",
     "2027-06-06": "Islamic New Year (estimated)",
     "2027-06-07": "Birthday of HM Yang di-Pertuan Agong",
@@ -1258,13 +1262,12 @@
     "2028-01-26": "Chinese New Year (estimated)",
     "2028-01-27": "Chinese New Year (Second Day) (estimated)",
     "2028-01-28": "Beginning of Ramadan (estimated)",
-    "2028-01-30": "Beginning of Ramadan (observed, estimated)",
     "2028-02-26": "Eid al-Fitr (estimated)",
     "2028-02-27": "Eid al-Fitr (Second Day) (estimated)",
+    "2028-02-28": "Eid al-Fitr (Second Day) (observed, estimated)",
     "2028-03-23": "Birthday of the Sultan of Johor",
     "2028-05-01": "Labor Day",
     "2028-05-05": "Eid al-Adha (estimated)",
-    "2028-05-07": "Eid al-Adha (observed, estimated)",
     "2028-05-09": "Vesak Day (estimated)",
     "2028-05-25": "Islamic New Year (estimated)",
     "2028-06-05": "Birthday of HM Yang di-Pertuan Agong",
@@ -1284,19 +1287,23 @@
     "2029-05-01": "Labor Day",
     "2029-05-14": "Islamic New Year (estimated)",
     "2029-05-27": "Vesak Day (estimated)",
+    "2029-05-28": "Vesak Day (observed, estimated)",
     "2029-06-04": "Birthday of HM Yang di-Pertuan Agong",
     "2029-06-18": "The Sultan of Johor Hol (estimated)",
     "2029-07-24": "Prophet Muhammad's Birthday (estimated)",
     "2029-08-31": "National Day",
-    "2029-09-02": "National Day (observed)",
     "2029-09-16": "Malaysia Day",
+    "2029-09-17": "Malaysia Day (observed)",
     "2029-11-04": "Deepavali",
+    "2029-11-05": "Deepavali (observed)",
     "2029-12-25": "Christmas Day",
     "2030-01-05": "Beginning of Ramadan (estimated)",
     "2030-02-03": "Chinese New Year (estimated)",
     "2030-02-04": "Chinese New Year (Second Day) (estimated); Eid al-Fitr (estimated)",
     "2030-02-05": "Eid al-Fitr (Second Day) (estimated)",
+    "2030-02-06": "Chinese New Year (observed, estimated)",
     "2030-02-17": "Thaipusam",
+    "2030-02-18": "Thaipusam (observed)",
     "2030-03-23": "Birthday of the Sultan of Johor",
     "2030-04-13": "Eid al-Adha (estimated)",
     "2030-05-01": "Labor Day",
@@ -1308,14 +1315,12 @@
     "2030-08-31": "National Day",
     "2030-09-16": "Malaysia Day",
     "2030-10-25": "Deepavali",
-    "2030-10-27": "Deepavali (observed)",
     "2030-12-25": "Christmas Day",
     "2030-12-26": "Beginning of Ramadan (estimated)",
     "2031-01-08": "Thaipusam",
     "2031-01-23": "Chinese New Year (estimated)",
     "2031-01-24": "Chinese New Year (Second Day) (estimated); Eid al-Fitr (estimated)",
     "2031-01-25": "Eid al-Fitr (Second Day) (estimated)",
-    "2031-01-26": "Chinese New Year (Second Day) (observed, estimated); Eid al-Fitr (observed, estimated)",
     "2031-03-23": "Birthday of the Sultan of Johor",
     "2031-04-02": "Eid al-Adha (estimated)",
     "2031-04-23": "Islamic New Year (estimated)",
@@ -1325,6 +1330,7 @@
     "2031-06-02": "Birthday of HM Yang di-Pertuan Agong",
     "2031-07-02": "Prophet Muhammad's Birthday (estimated)",
     "2031-08-31": "National Day",
+    "2031-09-01": "National Day (observed)",
     "2031-09-16": "Malaysia Day",
     "2031-11-13": "Deepavali",
     "2031-12-15": "Beginning of Ramadan (estimated)",
@@ -1340,8 +1346,10 @@
     "2032-05-01": "Labor Day",
     "2032-05-15": "The Sultan of Johor Hol (estimated)",
     "2032-05-23": "Vesak Day (estimated)",
+    "2032-05-24": "Vesak Day (observed, estimated)",
     "2032-06-07": "Birthday of HM Yang di-Pertuan Agong",
     "2032-06-20": "Prophet Muhammad's Birthday (estimated)",
+    "2032-06-21": "Prophet Muhammad's Birthday (observed, estimated)",
     "2032-08-31": "National Day",
     "2032-09-16": "Malaysia Day",
     "2032-11-01": "Deepavali",
@@ -1349,33 +1357,33 @@
     "2032-12-25": "Christmas Day",
     "2033-01-02": "Eid al-Fitr (estimated)",
     "2033-01-03": "Eid al-Fitr (Second Day) (estimated)",
+    "2033-01-04": "Eid al-Fitr (observed, estimated)",
     "2033-01-31": "Chinese New Year (estimated)",
     "2033-02-01": "Chinese New Year (Second Day) (estimated)",
     "2033-02-14": "Thaipusam",
     "2033-03-11": "Eid al-Adha (estimated)",
-    "2033-03-13": "Eid al-Adha (observed, estimated)",
     "2033-03-23": "Birthday of the Sultan of Johor",
     "2033-04-01": "Islamic New Year (estimated)",
     "2033-05-01": "Labor Day",
+    "2033-05-02": "Labor Day (observed)",
     "2033-05-05": "The Sultan of Johor Hol (estimated)",
     "2033-05-13": "Vesak Day (estimated)",
-    "2033-05-15": "Vesak Day (observed, estimated)",
     "2033-06-06": "Birthday of HM Yang di-Pertuan Agong",
     "2033-06-09": "Prophet Muhammad's Birthday (estimated)",
     "2033-08-31": "National Day",
     "2033-09-16": "Malaysia Day",
-    "2033-09-18": "Malaysia Day (observed)",
     "2033-10-21": "Deepavali",
-    "2033-10-23": "Deepavali (observed)",
     "2033-11-23": "Beginning of Ramadan (estimated)",
     "2033-12-23": "Eid al-Fitr (estimated)",
     "2033-12-24": "Eid al-Fitr (Second Day) (estimated)",
     "2033-12-25": "Christmas Day",
-    "2033-12-26": "Eid al-Fitr (observed, estimated)",
+    "2033-12-26": "Christmas Day (observed)",
     "2034-02-19": "Chinese New Year (estimated)",
     "2034-02-20": "Chinese New Year (Second Day) (estimated)",
+    "2034-02-21": "Chinese New Year (observed, estimated)",
     "2034-03-01": "Eid al-Adha (estimated)",
     "2034-03-05": "Thaipusam",
+    "2034-03-06": "Thaipusam (observed)",
     "2034-03-21": "Islamic New Year (estimated)",
     "2034-03-23": "Birthday of the Sultan of Johor",
     "2034-04-25": "The Sultan of Johor Hol (estimated)",
@@ -1387,31 +1395,34 @@
     "2034-09-16": "Malaysia Day",
     "2034-11-09": "Deepavali",
     "2034-11-12": "Beginning of Ramadan (estimated)",
+    "2034-11-13": "Beginning of Ramadan (observed, estimated)",
     "2034-12-12": "Eid al-Fitr (estimated)",
     "2034-12-13": "Eid al-Fitr (Second Day) (estimated)",
     "2034-12-25": "Christmas Day",
     "2035-02-08": "Chinese New Year (estimated)",
     "2035-02-09": "Chinese New Year (Second Day) (estimated)",
-    "2035-02-11": "Chinese New Year (Second Day) (observed, estimated)",
     "2035-02-18": "Eid al-Adha (estimated)",
+    "2035-02-19": "Eid al-Adha (observed, estimated)",
     "2035-02-23": "Thaipusam",
-    "2035-02-25": "Thaipusam (observed)",
     "2035-03-11": "Islamic New Year (estimated)",
     "2035-03-23": "Birthday of the Sultan of Johor",
     "2035-04-14": "The Sultan of Johor Hol (estimated)",
     "2035-05-01": "Labor Day",
     "2035-05-20": "Prophet Muhammad's Birthday (estimated)",
+    "2035-05-21": "Prophet Muhammad's Birthday (observed, estimated)",
     "2035-05-22": "Vesak Day (estimated)",
     "2035-06-04": "Birthday of HM Yang di-Pertuan Agong",
     "2035-08-31": "National Day",
-    "2035-09-02": "National Day (observed)",
     "2035-09-16": "Malaysia Day",
+    "2035-09-17": "Malaysia Day (observed)",
     "2035-10-29": "Deepavali",
     "2035-11-01": "Beginning of Ramadan (estimated)",
     "2035-12-01": "Eid al-Fitr (estimated)",
     "2035-12-02": "Eid al-Fitr (Second Day) (estimated)",
+    "2035-12-03": "Eid al-Fitr (Second Day) (observed, estimated)",
     "2035-12-25": "Christmas Day",
     "2036-01-13": "Thaipusam",
+    "2036-01-14": "Thaipusam (observed)",
     "2036-01-28": "Chinese New Year (estimated)",
     "2036-01-29": "Chinese New Year (Second Day) (estimated)",
     "2036-02-07": "Eid al-Adha (estimated)",
@@ -1423,22 +1434,23 @@
     "2036-05-10": "Vesak Day (estimated)",
     "2036-06-02": "Birthday of HM Yang di-Pertuan Agong",
     "2036-08-31": "National Day",
+    "2036-09-01": "National Day (observed)",
     "2036-09-16": "Malaysia Day",
     "2036-10-20": "Beginning of Ramadan (estimated)",
     "2036-11-16": "Deepavali",
+    "2036-11-17": "Deepavali (observed)",
     "2036-11-19": "Eid al-Fitr (estimated)",
     "2036-11-20": "Eid al-Fitr (Second Day) (estimated)",
     "2036-12-25": "Christmas Day",
     "2037-01-26": "Eid al-Adha (estimated)",
     "2037-02-15": "Chinese New Year (estimated)",
     "2037-02-16": "Chinese New Year (Second Day) (estimated); Islamic New Year (estimated)",
+    "2037-02-17": "Chinese New Year (observed, estimated)",
     "2037-03-02": "Thaipusam",
     "2037-03-23": "Birthday of the Sultan of Johor; The Sultan of Johor Hol (estimated)",
     "2037-04-28": "Prophet Muhammad's Birthday (estimated)",
     "2037-05-01": "Labor Day",
-    "2037-05-03": "Labor Day (observed)",
     "2037-05-29": "Vesak Day (estimated)",
-    "2037-05-31": "Vesak Day (observed, estimated)",
     "2037-06-01": "Birthday of HM Yang di-Pertuan Agong",
     "2037-08-31": "National Day",
     "2037-09-16": "Malaysia Day",
@@ -1446,14 +1458,12 @@
     "2037-11-05": "Deepavali",
     "2037-11-08": "Eid al-Fitr (estimated)",
     "2037-11-09": "Eid al-Fitr (Second Day) (estimated)",
+    "2037-11-10": "Eid al-Fitr (observed, estimated)",
     "2037-12-25": "Christmas Day",
-    "2037-12-27": "Christmas Day (observed)",
     "2038-01-16": "Eid al-Adha (estimated)",
     "2038-02-04": "Chinese New Year (estimated)",
     "2038-02-05": "Chinese New Year (Second Day) (estimated); Islamic New Year (estimated)",
-    "2038-02-07": "Chinese New Year (Second Day) (observed, estimated); Islamic New Year (observed, estimated)",
     "2038-02-19": "Thaipusam",
-    "2038-02-21": "Thaipusam (observed)",
     "2038-03-12": "The Sultan of Johor Hol (estimated)",
     "2038-03-23": "Birthday of the Sultan of Johor",
     "2038-04-17": "Prophet Muhammad's Birthday (estimated)",
@@ -1466,10 +1476,10 @@
     "2038-10-26": "Deepavali",
     "2038-10-29": "Eid al-Fitr (estimated)",
     "2038-10-30": "Eid al-Fitr (Second Day) (estimated)",
-    "2038-10-31": "Eid al-Fitr (observed, estimated)",
     "2038-12-25": "Christmas Day",
     "2039-01-05": "Eid al-Adha (estimated)",
     "2039-01-09": "Thaipusam",
+    "2039-01-10": "Thaipusam (observed)",
     "2039-01-24": "Chinese New Year (estimated)",
     "2039-01-25": "Chinese New Year (Second Day) (estimated)",
     "2039-01-26": "Islamic New Year (estimated)",
@@ -1477,48 +1487,46 @@
     "2039-03-23": "Birthday of the Sultan of Johor",
     "2039-04-06": "Prophet Muhammad's Birthday (estimated)",
     "2039-05-01": "Labor Day",
+    "2039-05-02": "Labor Day (observed)",
     "2039-05-07": "Vesak Day (estimated)",
     "2039-06-06": "Birthday of HM Yang di-Pertuan Agong",
     "2039-08-31": "National Day",
     "2039-09-16": "Malaysia Day",
-    "2039-09-18": "Malaysia Day (observed)",
     "2039-09-19": "Beginning of Ramadan (estimated)",
     "2039-10-19": "Eid al-Fitr (estimated)",
     "2039-10-20": "Eid al-Fitr (Second Day) (estimated)",
     "2039-11-14": "Deepavali",
     "2039-12-25": "Christmas Day",
     "2039-12-26": "Eid al-Adha (estimated)",
+    "2039-12-27": "Christmas Day (observed)",
     "2040-01-15": "Islamic New Year (estimated)",
     "2040-02-12": "Chinese New Year (estimated)",
     "2040-02-13": "Chinese New Year (Second Day) (estimated)",
+    "2040-02-14": "Chinese New Year (observed, estimated)",
     "2040-02-19": "The Sultan of Johor Hol (estimated)",
     "2040-02-27": "Thaipusam",
     "2040-03-23": "Birthday of the Sultan of Johor",
     "2040-03-25": "Prophet Muhammad's Birthday (estimated)",
+    "2040-03-26": "Prophet Muhammad's Birthday (observed, estimated)",
     "2040-05-01": "Labor Day",
     "2040-05-25": "Vesak Day (estimated)",
-    "2040-05-27": "Vesak Day (observed, estimated)",
     "2040-06-04": "Birthday of HM Yang di-Pertuan Agong",
     "2040-08-31": "National Day",
-    "2040-09-02": "National Day (observed)",
     "2040-09-07": "Beginning of Ramadan (estimated)",
-    "2040-09-09": "Beginning of Ramadan (observed, estimated)",
     "2040-09-16": "Malaysia Day",
+    "2040-09-17": "Malaysia Day (observed)",
     "2040-10-07": "Eid al-Fitr (estimated)",
     "2040-10-08": "Eid al-Fitr (Second Day) (estimated)",
+    "2040-10-09": "Eid al-Fitr (observed, estimated)",
     "2040-11-03": "Deepavali",
     "2040-12-14": "Eid al-Adha (estimated)",
-    "2040-12-16": "Eid al-Adha (observed, estimated)",
     "2040-12-25": "Christmas Day",
     "2041-01-04": "Islamic New Year (estimated)",
     "2041-02-01": "Chinese New Year (estimated)",
     "2041-02-02": "Chinese New Year (Second Day) (estimated)",
-    "2041-02-03": "Chinese New Year (observed, estimated)",
     "2041-02-07": "The Sultan of Johor Hol (estimated)",
     "2041-02-15": "Thaipusam",
-    "2041-02-17": "Thaipusam (observed)",
     "2041-03-15": "Prophet Muhammad's Birthday (estimated)",
-    "2041-03-17": "Prophet Muhammad's Birthday (observed, estimated)",
     "2041-03-23": "Birthday of the Sultan of Johor",
     "2041-05-01": "Labor Day",
     "2041-05-14": "Vesak Day (estimated)",
@@ -1528,7 +1536,6 @@
     "2041-09-16": "Malaysia Day",
     "2041-09-26": "Eid al-Fitr (estimated)",
     "2041-09-27": "Eid al-Fitr (Second Day) (estimated)",
-    "2041-09-29": "Eid al-Fitr (Second Day) (observed, estimated)",
     "2041-10-23": "Deepavali",
     "2041-12-04": "Eid al-Adha (estimated)",
     "2041-12-24": "Islamic New Year (estimated)",
@@ -1541,43 +1548,48 @@
     "2042-03-23": "Birthday of the Sultan of Johor",
     "2042-05-01": "Labor Day",
     "2042-05-04": "Vesak Day (estimated)",
+    "2042-05-05": "Vesak Day (observed, estimated)",
     "2042-06-02": "Birthday of HM Yang di-Pertuan Agong",
     "2042-08-17": "Beginning of Ramadan (estimated)",
+    "2042-08-18": "Beginning of Ramadan (observed, estimated)",
     "2042-08-31": "National Day",
+    "2042-09-01": "National Day (observed)",
     "2042-09-15": "Eid al-Fitr (estimated)",
     "2042-09-16": "Eid al-Fitr (Second Day) (estimated); Malaysia Day",
     "2042-11-11": "Deepavali",
     "2042-11-23": "Eid al-Adha (estimated)",
+    "2042-11-24": "Eid al-Adha (observed, estimated)",
     "2042-12-14": "Islamic New Year (estimated)",
     "2042-12-25": "Christmas Day",
     "2043-01-17": "The Sultan of Johor Hol (estimated)",
     "2043-02-10": "Chinese New Year (estimated)",
     "2043-02-11": "Chinese New Year (Second Day) (estimated)",
     "2043-02-22": "Prophet Muhammad's Birthday (estimated)",
+    "2043-02-23": "Prophet Muhammad's Birthday (observed, estimated)",
     "2043-02-24": "Thaipusam",
     "2043-03-23": "Birthday of the Sultan of Johor",
     "2043-05-01": "Labor Day",
-    "2043-05-03": "Labor Day (observed)",
     "2043-05-23": "Vesak Day (estimated)",
     "2043-06-01": "Birthday of HM Yang di-Pertuan Agong",
     "2043-08-06": "Beginning of Ramadan (estimated)",
     "2043-08-31": "National Day",
     "2043-09-04": "Eid al-Fitr (estimated)",
     "2043-09-05": "Eid al-Fitr (Second Day) (estimated)",
-    "2043-09-06": "Eid al-Fitr (observed, estimated)",
     "2043-09-16": "Malaysia Day",
     "2043-10-31": "Deepavali",
     "2043-11-12": "Eid al-Adha (estimated)",
     "2043-12-03": "Islamic New Year (estimated)",
     "2043-12-25": "Christmas Day",
-    "2043-12-27": "Christmas Day (observed)",
     "2044-01-07": "The Sultan of Johor Hol (estimated)",
     "2044-01-30": "Chinese New Year (estimated)",
     "2044-01-31": "Chinese New Year (Second Day) (estimated)",
+    "2044-02-01": "Chinese New Year (Second Day) (observed, estimated)",
     "2044-02-11": "Prophet Muhammad's Birthday (estimated)",
     "2044-02-14": "Thaipusam",
+    "2044-02-15": "Thaipusam (observed)",
     "2044-03-23": "Birthday of the Sultan of Johor",
     "2044-05-01": "Labor Day",
+    "2044-05-02": "Labor Day (observed)",
     "2044-05-12": "Vesak Day (estimated)",
     "2044-06-06": "Birthday of HM Yang di-Pertuan Agong",
     "2044-07-26": "Beginning of Ramadan (estimated)",
@@ -1585,16 +1597,15 @@
     "2044-08-25": "Eid al-Fitr (Second Day) (estimated)",
     "2044-08-31": "National Day",
     "2044-09-16": "Malaysia Day",
-    "2044-09-18": "Malaysia Day (observed)",
     "2044-10-31": "Eid al-Adha (estimated)",
     "2044-11-17": "Deepavali",
     "2044-11-21": "Islamic New Year (estimated)",
     "2044-12-25": "Christmas Day",
     "2044-12-26": "The Sultan of Johor Hol (estimated)",
+    "2044-12-27": "Christmas Day (observed)",
     "2045-01-30": "Prophet Muhammad's Birthday (estimated)",
     "2045-02-17": "Chinese New Year (estimated)",
     "2045-02-18": "Chinese New Year (Second Day) (estimated)",
-    "2045-02-19": "Chinese New Year (observed, estimated)",
     "2045-03-04": "Thaipusam",
     "2045-03-23": "Birthday of the Sultan of Johor",
     "2045-05-01": "Labor Day; Vesak Day (estimated)",
@@ -1610,21 +1621,20 @@
     "2045-12-15": "The Sultan of Johor Hol (estimated)",
     "2045-12-25": "Christmas Day",
     "2046-01-19": "Prophet Muhammad's Birthday (estimated)",
-    "2046-01-21": "Prophet Muhammad's Birthday (observed, estimated)",
     "2046-02-06": "Chinese New Year (estimated)",
     "2046-02-07": "Chinese New Year (Second Day) (estimated)",
     "2046-02-21": "Thaipusam",
     "2046-03-23": "Birthday of the Sultan of Johor",
     "2046-05-01": "Labor Day",
     "2046-05-20": "Vesak Day (estimated)",
+    "2046-05-21": "Vesak Day (observed, estimated)",
     "2046-06-04": "Birthday of HM Yang di-Pertuan Agong",
     "2046-07-05": "Beginning of Ramadan (estimated)",
     "2046-08-03": "Eid al-Fitr (estimated)",
     "2046-08-04": "Eid al-Fitr (Second Day) (estimated)",
-    "2046-08-05": "Eid al-Fitr (observed, estimated)",
     "2046-08-31": "National Day",
-    "2046-09-02": "National Day (observed)",
     "2046-09-16": "Malaysia Day",
+    "2046-09-17": "Malaysia Day (observed)",
     "2046-10-10": "Eid al-Adha (estimated)",
     "2046-10-27": "Deepavali",
     "2046-10-31": "Islamic New Year (estimated)",
@@ -1632,9 +1642,9 @@
     "2046-12-25": "Christmas Day",
     "2047-01-08": "Prophet Muhammad's Birthday (estimated)",
     "2047-01-11": "Thaipusam",
-    "2047-01-13": "Thaipusam (observed)",
     "2047-01-26": "Chinese New Year (estimated)",
     "2047-01-27": "Chinese New Year (Second Day) (estimated)",
+    "2047-01-28": "Chinese New Year (Second Day) (observed, estimated)",
     "2047-03-23": "Birthday of the Sultan of Johor",
     "2047-05-01": "Labor Day",
     "2047-05-09": "Vesak Day (estimated)",
@@ -1647,24 +1657,21 @@
     "2047-09-30": "Eid al-Adha (estimated)",
     "2047-10-20": "Islamic New Year (estimated)",
     "2047-11-15": "Deepavali",
-    "2047-11-17": "Deepavali (observed)",
     "2047-11-24": "The Sultan of Johor Hol (estimated)",
     "2047-12-25": "Christmas Day",
     "2047-12-29": "Prophet Muhammad's Birthday (estimated)",
+    "2047-12-30": "Prophet Muhammad's Birthday (observed, estimated)",
     "2048-02-14": "Chinese New Year (estimated)",
     "2048-02-15": "Chinese New Year (Second Day) (estimated)",
-    "2048-02-16": "Chinese New Year (observed, estimated)",
     "2048-02-28": "Thaipusam",
-    "2048-03-01": "Thaipusam (observed)",
     "2048-03-23": "Birthday of the Sultan of Johor",
     "2048-05-01": "Labor Day",
-    "2048-05-03": "Labor Day (observed)",
     "2048-05-27": "Vesak Day (estimated)",
     "2048-06-01": "Birthday of HM Yang di-Pertuan Agong",
     "2048-06-12": "Beginning of Ramadan (estimated)",
-    "2048-06-14": "Beginning of Ramadan (observed, estimated)",
     "2048-07-12": "Eid al-Fitr (estimated)",
     "2048-07-13": "Eid al-Fitr (Second Day) (estimated)",
+    "2048-07-14": "Eid al-Fitr (observed, estimated)",
     "2048-08-31": "National Day",
     "2048-09-16": "Malaysia Day",
     "2048-09-19": "Eid al-Adha (estimated)",
@@ -1672,20 +1679,18 @@
     "2048-11-04": "Deepavali",
     "2048-11-12": "The Sultan of Johor Hol (estimated)",
     "2048-12-18": "Prophet Muhammad's Birthday (estimated)",
-    "2048-12-20": "Prophet Muhammad's Birthday (observed, estimated)",
     "2048-12-25": "Christmas Day",
-    "2048-12-27": "Christmas Day (observed)",
     "2049-02-02": "Chinese New Year (estimated)",
     "2049-02-03": "Chinese New Year (Second Day) (estimated)",
     "2049-02-17": "Thaipusam",
     "2049-03-23": "Birthday of the Sultan of Johor",
     "2049-05-01": "Labor Day",
     "2049-05-16": "Vesak Day (estimated)",
+    "2049-05-17": "Vesak Day (observed, estimated)",
     "2049-06-02": "Beginning of Ramadan (estimated)",
     "2049-06-07": "Birthday of HM Yang di-Pertuan Agong",
     "2049-07-01": "Eid al-Fitr (estimated)",
     "2049-07-02": "Eid al-Fitr (Second Day) (estimated)",
-    "2049-07-04": "Eid al-Fitr (Second Day) (observed, estimated)",
     "2049-08-31": "National Day",
     "2049-09-08": "Eid al-Adha (estimated)",
     "2049-09-16": "Malaysia Day",
@@ -1697,20 +1702,24 @@
     "2050-01-08": "Thaipusam",
     "2050-01-23": "Chinese New Year (estimated)",
     "2050-01-24": "Chinese New Year (Second Day) (estimated)",
+    "2050-01-25": "Chinese New Year (observed, estimated)",
     "2050-03-23": "Birthday of the Sultan of Johor",
     "2050-05-01": "Labor Day",
+    "2050-05-02": "Labor Day (observed)",
     "2050-05-05": "Vesak Day (estimated)",
     "2050-05-22": "Beginning of Ramadan (estimated)",
+    "2050-05-23": "Beginning of Ramadan (observed, estimated)",
     "2050-06-06": "Birthday of HM Yang di-Pertuan Agong",
     "2050-06-20": "Eid al-Fitr (estimated)",
     "2050-06-21": "Eid al-Fitr (Second Day) (estimated)",
     "2050-08-28": "Eid al-Adha (estimated)",
+    "2050-08-29": "Eid al-Adha (observed, estimated)",
     "2050-08-31": "National Day",
     "2050-09-16": "Malaysia Day",
     "2050-09-17": "Islamic New Year (estimated)",
-    "2050-09-18": "Malaysia Day (observed)",
     "2050-10-22": "The Sultan of Johor Hol (estimated)",
     "2050-11-12": "Deepavali",
     "2050-11-26": "Prophet Muhammad's Birthday (estimated)",
-    "2050-12-25": "Christmas Day"
+    "2050-12-25": "Christmas Day",
+    "2050-12-26": "Christmas Day (observed)"
 }
diff --git a/snapshots/countries/VN_COMMON.json b/snapshots/countries/VN_COMMON.json
index bc941910..873ad5af 100644
--- a/snapshots/countries/VN_COMMON.json
+++ b/snapshots/countries/VN_COMMON.json
@@ -1,514 +1,370 @@
 {
     "1950-01-01": "New Year's Day",
-    "1950-01-02": "New Year's Day (observed)",
     "1950-02-16": "Lunar New Year's Eve",
     "1950-02-17": "Lunar New Year",
-    "1950-02-18": "The second day of Tet Holiday",
-    "1950-02-19": "The third day of Tet Holiday",
-    "1950-02-20": "The fourth day of Tet Holiday",
-    "1950-02-21": "The fifth day of Tet Holiday",
+    "1950-02-18": "Second Day of Lunar New Year",
+    "1950-02-19": "Third Day of Lunar New Year",
     "1950-04-30": "Liberation Day/Reunification Day",
     "1950-05-01": "International Labor Day",
-    "1950-05-02": "Liberation Day/Reunification Day (observed)",
     "1950-09-02": "National Day",
-    "1950-09-04": "National Day (observed)",
     "1951-01-01": "New Year's Day",
     "1951-02-05": "Lunar New Year's Eve",
     "1951-02-06": "Lunar New Year",
-    "1951-02-07": "The second day of Tet Holiday",
-    "1951-02-08": "The third day of Tet Holiday",
-    "1951-02-09": "The fourth day of Tet Holiday",
-    "1951-02-10": "The fifth day of Tet Holiday",
+    "1951-02-07": "Second Day of Lunar New Year",
+    "1951-02-08": "Third Day of Lunar New Year",
     "1951-04-30": "Liberation Day/Reunification Day",
     "1951-05-01": "International Labor Day",
     "1951-09-02": "National Day",
-    "1951-09-03": "National Day (observed)",
     "1952-01-01": "New Year's Day",
     "1952-01-26": "Lunar New Year's Eve",
     "1952-01-27": "Lunar New Year",
-    "1952-01-28": "The second day of Tet Holiday",
-    "1952-01-29": "The third day of Tet Holiday",
-    "1952-01-30": "The fourth day of Tet Holiday",
-    "1952-01-31": "The fifth day of Tet Holiday",
+    "1952-01-28": "Second Day of Lunar New Year",
+    "1952-01-29": "Third Day of Lunar New Year",
     "1952-04-30": "Liberation Day/Reunification Day",
     "1952-05-01": "International Labor Day",
     "1952-09-02": "National Day",
     "1953-01-01": "New Year's Day",
     "1953-02-13": "Lunar New Year's Eve",
     "1953-02-14": "Lunar New Year",
-    "1953-02-15": "The second day of Tet Holiday",
-    "1953-02-16": "The third day of Tet Holiday",
-    "1953-02-17": "The fourth day of Tet Holiday",
-    "1953-02-18": "The fifth day of Tet Holiday",
+    "1953-02-15": "Second Day of Lunar New Year",
+    "1953-02-16": "Third Day of Lunar New Year",
     "1953-04-30": "Liberation Day/Reunification Day",
     "1953-05-01": "International Labor Day",
     "1953-09-02": "National Day",
     "1954-01-01": "New Year's Day",
     "1954-02-02": "Lunar New Year's Eve",
     "1954-02-03": "Lunar New Year",
-    "1954-02-04": "The second day of Tet Holiday",
-    "1954-02-05": "The third day of Tet Holiday",
-    "1954-02-06": "The fourth day of Tet Holiday",
-    "1954-02-07": "The fifth day of Tet Holiday",
+    "1954-02-04": "Second Day of Lunar New Year",
+    "1954-02-05": "Third Day of Lunar New Year",
     "1954-04-30": "Liberation Day/Reunification Day",
     "1954-05-01": "International Labor Day",
-    "1954-05-03": "International Labor Day (observed)",
     "1954-09-02": "National Day",
     "1955-01-01": "New Year's Day",
-    "1955-01-03": "New Year's Day (observed)",
     "1955-01-23": "Lunar New Year's Eve",
     "1955-01-24": "Lunar New Year",
-    "1955-01-25": "The second day of Tet Holiday",
-    "1955-01-26": "The third day of Tet Holiday",
-    "1955-01-27": "The fourth day of Tet Holiday",
-    "1955-01-28": "The fifth day of Tet Holiday",
+    "1955-01-25": "Second Day of Lunar New Year",
+    "1955-01-26": "Third Day of Lunar New Year",
     "1955-04-30": "Liberation Day/Reunification Day",
     "1955-05-01": "International Labor Day",
-    "1955-05-02": "Liberation Day/Reunification Day (observed)",
-    "1955-05-03": "International Labor Day (observed)",
     "1955-09-02": "National Day",
     "1956-01-01": "New Year's Day",
-    "1956-01-02": "New Year's Day (observed)",
     "1956-02-11": "Lunar New Year's Eve",
     "1956-02-12": "Lunar New Year",
-    "1956-02-13": "The second day of Tet Holiday",
-    "1956-02-14": "The third day of Tet Holiday",
-    "1956-02-15": "The fourth day of Tet Holiday",
-    "1956-02-16": "The fifth day of Tet Holiday",
+    "1956-02-13": "Second Day of Lunar New Year",
+    "1956-02-14": "Third Day of Lunar New Year",
     "1956-04-30": "Liberation Day/Reunification Day",
     "1956-05-01": "International Labor Day",
     "1956-09-02": "National Day",
-    "1956-09-03": "National Day (observed)",
     "1957-01-01": "New Year's Day",
     "1957-01-30": "Lunar New Year's Eve",
     "1957-01-31": "Lunar New Year",
-    "1957-02-01": "The second day of Tet Holiday",
-    "1957-02-02": "The third day of Tet Holiday",
-    "1957-02-03": "The fourth day of Tet Holiday",
-    "1957-02-04": "The fifth day of Tet Holiday",
+    "1957-02-01": "Second Day of Lunar New Year",
+    "1957-02-02": "Third Day of Lunar New Year",
     "1957-04-30": "Liberation Day/Reunification Day",
     "1957-05-01": "International Labor Day",
     "1957-09-02": "National Day",
     "1958-01-01": "New Year's Day",
     "1958-02-17": "Lunar New Year's Eve",
     "1958-02-18": "Lunar New Year",
-    "1958-02-19": "The second day of Tet Holiday",
-    "1958-02-20": "The third day of Tet Holiday",
-    "1958-02-21": "The fourth day of Tet Holiday",
-    "1958-02-22": "The fifth day of Tet Holiday",
+    "1958-02-19": "Second Day of Lunar New Year",
+    "1958-02-20": "Third Day of Lunar New Year",
     "1958-04-30": "Liberation Day/Reunification Day",
     "1958-05-01": "International Labor Day",
     "1958-09-02": "National Day",
     "1959-01-01": "New Year's Day",
     "1959-02-07": "Lunar New Year's Eve",
     "1959-02-08": "Lunar New Year",
-    "1959-02-09": "The second day of Tet Holiday",
-    "1959-02-10": "The third day of Tet Holiday",
-    "1959-02-11": "The fourth day of Tet Holiday",
-    "1959-02-12": "The fifth day of Tet Holiday",
+    "1959-02-09": "Second Day of Lunar New Year",
+    "1959-02-10": "Third Day of Lunar New Year",
     "1959-04-30": "Liberation Day/Reunification Day",
     "1959-05-01": "International Labor Day",
     "1959-09-02": "National Day",
     "1960-01-01": "New Year's Day",
     "1960-01-27": "Lunar New Year's Eve",
     "1960-01-28": "Lunar New Year",
-    "1960-01-29": "The second day of Tet Holiday",
-    "1960-01-30": "The third day of Tet Holiday",
-    "1960-01-31": "The fourth day of Tet Holiday",
-    "1960-02-01": "The fifth day of Tet Holiday",
+    "1960-01-29": "Second Day of Lunar New Year",
+    "1960-01-30": "Third Day of Lunar New Year",
     "1960-04-30": "Liberation Day/Reunification Day",
     "1960-05-01": "International Labor Day",
-    "1960-05-02": "Liberation Day/Reunification Day (observed)",
-    "1960-05-03": "International Labor Day (observed)",
     "1960-09-02": "National Day",
     "1961-01-01": "New Year's Day",
-    "1961-01-02": "New Year's Day (observed)",
     "1961-02-14": "Lunar New Year's Eve",
     "1961-02-15": "Lunar New Year",
-    "1961-02-16": "The second day of Tet Holiday",
-    "1961-02-17": "The third day of Tet Holiday",
-    "1961-02-18": "The fourth day of Tet Holiday",
-    "1961-02-19": "The fifth day of Tet Holiday",
+    "1961-02-16": "Second Day of Lunar New Year",
+    "1961-02-17": "Third Day of Lunar New Year",
     "1961-04-30": "Liberation Day/Reunification Day",
     "1961-05-01": "International Labor Day",
-    "1961-05-02": "Liberation Day/Reunification Day (observed)",
     "1961-09-02": "National Day",
-    "1961-09-04": "National Day (observed)",
     "1962-01-01": "New Year's Day",
     "1962-02-04": "Lunar New Year's Eve",
     "1962-02-05": "Lunar New Year",
-    "1962-02-06": "The second day of Tet Holiday",
-    "1962-02-07": "The third day of Tet Holiday",
-    "1962-02-08": "The fourth day of Tet Holiday",
-    "1962-02-09": "The fifth day of Tet Holiday",
+    "1962-02-06": "Second Day of Lunar New Year",
+    "1962-02-07": "Third Day of Lunar New Year",
     "1962-04-30": "Liberation Day/Reunification Day",
     "1962-05-01": "International Labor Day",
     "1962-09-02": "National Day",
-    "1962-09-03": "National Day (observed)",
     "1963-01-01": "New Year's Day",
     "1963-01-24": "Lunar New Year's Eve",
     "1963-01-25": "Lunar New Year",
-    "1963-01-26": "The second day of Tet Holiday",
-    "1963-01-27": "The third day of Tet Holiday",
-    "1963-01-28": "The fourth day of Tet Holiday",
-    "1963-01-29": "The fifth day of Tet Holiday",
+    "1963-01-26": "Second Day of Lunar New Year",
+    "1963-01-27": "Third Day of Lunar New Year",
     "1963-04-30": "Liberation Day/Reunification Day",
     "1963-05-01": "International Labor Day",
     "1963-09-02": "National Day",
     "1964-01-01": "New Year's Day",
     "1964-02-12": "Lunar New Year's Eve",
     "1964-02-13": "Lunar New Year",
-    "1964-02-14": "The second day of Tet Holiday",
-    "1964-02-15": "The third day of Tet Holiday",
-    "1964-02-16": "The fourth day of Tet Holiday",
-    "1964-02-17": "The fifth day of Tet Holiday",
+    "1964-02-14": "Second Day of Lunar New Year",
+    "1964-02-15": "Third Day of Lunar New Year",
     "1964-04-30": "Liberation Day/Reunification Day",
     "1964-05-01": "International Labor Day",
     "1964-09-02": "National Day",
     "1965-01-01": "New Year's Day",
     "1965-02-01": "Lunar New Year's Eve",
     "1965-02-02": "Lunar New Year",
-    "1965-02-03": "The second day of Tet Holiday",
-    "1965-02-04": "The third day of Tet Holiday",
-    "1965-02-05": "The fourth day of Tet Holiday",
-    "1965-02-06": "The fifth day of Tet Holiday",
+    "1965-02-03": "Second Day of Lunar New Year",
+    "1965-02-04": "Third Day of Lunar New Year",
     "1965-04-30": "Liberation Day/Reunification Day",
     "1965-05-01": "International Labor Day",
-    "1965-05-03": "International Labor Day (observed)",
     "1965-09-02": "National Day",
     "1966-01-01": "New Year's Day",
-    "1966-01-03": "New Year's Day (observed)",
     "1966-01-20": "Lunar New Year's Eve",
     "1966-01-21": "Lunar New Year",
-    "1966-01-22": "The second day of Tet Holiday",
-    "1966-01-23": "The third day of Tet Holiday",
-    "1966-01-24": "The fourth day of Tet Holiday",
-    "1966-01-25": "The fifth day of Tet Holiday",
+    "1966-01-22": "Second Day of Lunar New Year",
+    "1966-01-23": "Third Day of Lunar New Year",
     "1966-04-30": "Liberation Day/Reunification Day",
     "1966-05-01": "International Labor Day",
-    "1966-05-02": "Liberation Day/Reunification Day (observed)",
-    "1966-05-03": "International Labor Day (observed)",
     "1966-09-02": "National Day",
     "1967-01-01": "New Year's Day",
-    "1967-01-02": "New Year's Day (observed)",
     "1967-02-08": "Lunar New Year's Eve",
     "1967-02-09": "Lunar New Year",
-    "1967-02-10": "The second day of Tet Holiday",
-    "1967-02-11": "The third day of Tet Holiday",
-    "1967-02-12": "The fourth day of Tet Holiday",
-    "1967-02-13": "The fifth day of Tet Holiday",
+    "1967-02-10": "Second Day of Lunar New Year",
+    "1967-02-11": "Third Day of Lunar New Year",
     "1967-04-30": "Liberation Day/Reunification Day",
     "1967-05-01": "International Labor Day",
-    "1967-05-02": "Liberation Day/Reunification Day (observed)",
     "1967-09-02": "National Day",
-    "1967-09-04": "National Day (observed)",
     "1968-01-01": "New Year's Day",
     "1968-01-29": "Lunar New Year's Eve",
     "1968-01-30": "Lunar New Year",
-    "1968-01-31": "The second day of Tet Holiday",
-    "1968-02-01": "The third day of Tet Holiday",
-    "1968-02-02": "The fourth day of Tet Holiday",
-    "1968-02-03": "The fifth day of Tet Holiday",
+    "1968-01-31": "Second Day of Lunar New Year",
+    "1968-02-01": "Third Day of Lunar New Year",
     "1968-04-30": "Liberation Day/Reunification Day",
     "1968-05-01": "International Labor Day",
     "1968-09-02": "National Day",
     "1969-01-01": "New Year's Day",
     "1969-02-16": "Lunar New Year's Eve",
     "1969-02-17": "Lunar New Year",
-    "1969-02-18": "The second day of Tet Holiday",
-    "1969-02-19": "The third day of Tet Holiday",
-    "1969-02-20": "The fourth day of Tet Holiday",
-    "1969-02-21": "The fifth day of Tet Holiday",
+    "1969-02-18": "Second Day of Lunar New Year",
+    "1969-02-19": "Third Day of Lunar New Year",
     "1969-04-30": "Liberation Day/Reunification Day",
     "1969-05-01": "International Labor Day",
     "1969-09-02": "National Day",
     "1970-01-01": "New Year's Day",
     "1970-02-05": "Lunar New Year's Eve",
     "1970-02-06": "Lunar New Year",
-    "1970-02-07": "The second day of Tet Holiday",
-    "1970-02-08": "The third day of Tet Holiday",
-    "1970-02-09": "The fourth day of Tet Holiday",
-    "1970-02-10": "The fifth day of Tet Holiday",
+    "1970-02-07": "Second Day of Lunar New Year",
+    "1970-02-08": "Third Day of Lunar New Year",
     "1970-04-30": "Liberation Day/Reunification Day",
     "1970-05-01": "International Labor Day",
     "1970-09-02": "National Day",
     "1971-01-01": "New Year's Day",
     "1971-01-26": "Lunar New Year's Eve",
     "1971-01-27": "Lunar New Year",
-    "1971-01-28": "The second day of Tet Holiday",
-    "1971-01-29": "The third day of Tet Holiday",
-    "1971-01-30": "The fourth day of Tet Holiday",
-    "1971-01-31": "The fifth day of Tet Holiday",
+    "1971-01-28": "Second Day of Lunar New Year",
+    "1971-01-29": "Third Day of Lunar New Year",
     "1971-04-30": "Liberation Day/Reunification Day",
     "1971-05-01": "International Labor Day",
-    "1971-05-03": "International Labor Day (observed)",
     "1971-09-02": "National Day",
     "1972-01-01": "New Year's Day",
-    "1972-01-03": "New Year's Day (observed)",
     "1972-02-14": "Lunar New Year's Eve",
     "1972-02-15": "Lunar New Year",
-    "1972-02-16": "The second day of Tet Holiday",
-    "1972-02-17": "The third day of Tet Holiday",
-    "1972-02-18": "The fourth day of Tet Holiday",
-    "1972-02-19": "The fifth day of Tet Holiday",
+    "1972-02-16": "Second Day of Lunar New Year",
+    "1972-02-17": "Third Day of Lunar New Year",
     "1972-04-30": "Liberation Day/Reunification Day",
     "1972-05-01": "International Labor Day",
-    "1972-05-02": "Liberation Day/Reunification Day (observed)",
     "1972-09-02": "National Day",
-    "1972-09-04": "National Day (observed)",
     "1973-01-01": "New Year's Day",
     "1973-02-02": "Lunar New Year's Eve",
     "1973-02-03": "Lunar New Year",
-    "1973-02-04": "The second day of Tet Holiday",
-    "1973-02-05": "The third day of Tet Holiday",
-    "1973-02-06": "The fourth day of Tet Holiday",
-    "1973-02-07": "The fifth day of Tet Holiday",
+    "1973-02-04": "Second Day of Lunar New Year",
+    "1973-02-05": "Third Day of Lunar New Year",
     "1973-04-30": "Liberation Day/Reunification Day",
     "1973-05-01": "International Labor Day",
     "1973-09-02": "National Day",
-    "1973-09-03": "National Day (observed)",
     "1974-01-01": "New Year's Day",
     "1974-01-22": "Lunar New Year's Eve",
     "1974-01-23": "Lunar New Year",
-    "1974-01-24": "The second day of Tet Holiday",
-    "1974-01-25": "The third day of Tet Holiday",
-    "1974-01-26": "The fourth day of Tet Holiday",
-    "1974-01-27": "The fifth day of Tet Holiday",
+    "1974-01-24": "Second Day of Lunar New Year",
+    "1974-01-25": "Third Day of Lunar New Year",
     "1974-04-30": "Liberation Day/Reunification Day",
     "1974-05-01": "International Labor Day",
     "1974-09-02": "National Day",
     "1975-01-01": "New Year's Day",
     "1975-02-10": "Lunar New Year's Eve",
     "1975-02-11": "Lunar New Year",
-    "1975-02-12": "The second day of Tet Holiday",
-    "1975-02-13": "The third day of Tet Holiday",
-    "1975-02-14": "The fourth day of Tet Holiday",
-    "1975-02-15": "The fifth day of Tet Holiday",
+    "1975-02-12": "Second Day of Lunar New Year",
+    "1975-02-13": "Third Day of Lunar New Year",
     "1975-04-30": "Liberation Day/Reunification Day",
     "1975-05-01": "International Labor Day",
     "1975-09-02": "National Day",
     "1976-01-01": "New Year's Day",
     "1976-01-30": "Lunar New Year's Eve",
     "1976-01-31": "Lunar New Year",
-    "1976-02-01": "The second day of Tet Holiday",
-    "1976-02-02": "The third day of Tet Holiday",
-    "1976-02-03": "The fourth day of Tet Holiday",
-    "1976-02-04": "The fifth day of Tet Holiday",
+    "1976-02-01": "Second Day of Lunar New Year",
+    "1976-02-02": "Third Day of Lunar New Year",
     "1976-04-30": "Liberation Day/Reunification Day",
     "1976-05-01": "International Labor Day",
-    "1976-05-03": "International Labor Day (observed)",
     "1976-09-02": "National Day",
     "1977-01-01": "New Year's Day",
-    "1977-01-03": "New Year's Day (observed)",
     "1977-02-17": "Lunar New Year's Eve",
     "1977-02-18": "Lunar New Year",
-    "1977-02-19": "The second day of Tet Holiday",
-    "1977-02-20": "The third day of Tet Holiday",
-    "1977-02-21": "The fourth day of Tet Holiday",
-    "1977-02-22": "The fifth day of Tet Holiday",
+    "1977-02-19": "Second Day of Lunar New Year",
+    "1977-02-20": "Third Day of Lunar New Year",
     "1977-04-30": "Liberation Day/Reunification Day",
     "1977-05-01": "International Labor Day",
-    "1977-05-02": "Liberation Day/Reunification Day (observed)",
-    "1977-05-03": "International Labor Day (observed)",
     "1977-09-02": "National Day",
     "1978-01-01": "New Year's Day",
-    "1978-01-02": "New Year's Day (observed)",
     "1978-02-06": "Lunar New Year's Eve",
     "1978-02-07": "Lunar New Year",
-    "1978-02-08": "The second day of Tet Holiday",
-    "1978-02-09": "The third day of Tet Holiday",
-    "1978-02-10": "The fourth day of Tet Holiday",
-    "1978-02-11": "The fifth day of Tet Holiday",
+    "1978-02-08": "Second Day of Lunar New Year",
+    "1978-02-09": "Third Day of Lunar New Year",
     "1978-04-30": "Liberation Day/Reunification Day",
     "1978-05-01": "International Labor Day",
-    "1978-05-02": "Liberation Day/Reunification Day (observed)",
     "1978-09-02": "National Day",
-    "1978-09-04": "National Day (observed)",
     "1979-01-01": "New Year's Day",
     "1979-01-27": "Lunar New Year's Eve",
     "1979-01-28": "Lunar New Year",
-    "1979-01-29": "The second day of Tet Holiday",
-    "1979-01-30": "The third day of Tet Holiday",
-    "1979-01-31": "The fourth day of Tet Holiday",
-    "1979-02-01": "The fifth day of Tet Holiday",
+    "1979-01-29": "Second Day of Lunar New Year",
+    "1979-01-30": "Third Day of Lunar New Year",
     "1979-04-30": "Liberation Day/Reunification Day",
     "1979-05-01": "International Labor Day",
     "1979-09-02": "National Day",
-    "1979-09-03": "National Day (observed)",
     "1980-01-01": "New Year's Day",
     "1980-02-15": "Lunar New Year's Eve",
     "1980-02-16": "Lunar New Year",
-    "1980-02-17": "The second day of Tet Holiday",
-    "1980-02-18": "The third day of Tet Holiday",
-    "1980-02-19": "The fourth day of Tet Holiday",
-    "1980-02-20": "The fifth day of Tet Holiday",
+    "1980-02-17": "Second Day of Lunar New Year",
+    "1980-02-18": "Third Day of Lunar New Year",
     "1980-04-30": "Liberation Day/Reunification Day",
     "1980-05-01": "International Labor Day",
     "1980-09-02": "National Day",
     "1981-01-01": "New Year's Day",
     "1981-02-04": "Lunar New Year's Eve",
     "1981-02-05": "Lunar New Year",
-    "1981-02-06": "The second day of Tet Holiday",
-    "1981-02-07": "The third day of Tet Holiday",
-    "1981-02-08": "The fourth day of Tet Holiday",
-    "1981-02-09": "The fifth day of Tet Holiday",
+    "1981-02-06": "Second Day of Lunar New Year",
+    "1981-02-07": "Third Day of Lunar New Year",
     "1981-04-30": "Liberation Day/Reunification Day",
     "1981-05-01": "International Labor Day",
     "1981-09-02": "National Day",
     "1982-01-01": "New Year's Day",
     "1982-01-24": "Lunar New Year's Eve",
     "1982-01-25": "Lunar New Year",
-    "1982-01-26": "The second day of Tet Holiday",
-    "1982-01-27": "The third day of Tet Holiday",
-    "1982-01-28": "The fourth day of Tet Holiday",
-    "1982-01-29": "The fifth day of Tet Holiday",
+    "1982-01-26": "Second Day of Lunar New Year",
+    "1982-01-27": "Third Day of Lunar New Year",
     "1982-04-30": "Liberation Day/Reunification Day",
     "1982-05-01": "International Labor Day",
-    "1982-05-03": "International Labor Day (observed)",
     "1982-09-02": "National Day",
     "1983-01-01": "New Year's Day",
-    "1983-01-03": "New Year's Day (observed)",
     "1983-02-12": "Lunar New Year's Eve",
     "1983-02-13": "Lunar New Year",
-    "1983-02-14": "The second day of Tet Holiday",
-    "1983-02-15": "The third day of Tet Holiday",
-    "1983-02-16": "The fourth day of Tet Holiday",
-    "1983-02-17": "The fifth day of Tet Holiday",
+    "1983-02-14": "Second Day of Lunar New Year",
+    "1983-02-15": "Third Day of Lunar New Year",
     "1983-04-30": "Liberation Day/Reunification Day",
     "1983-05-01": "International Labor Day",
-    "1983-05-02": "Liberation Day/Reunification Day (observed)",
-    "1983-05-03": "International Labor Day (observed)",
     "1983-09-02": "National Day",
     "1984-01-01": "New Year's Day",
-    "1984-01-02": "New Year's Day (observed)",
     "1984-02-01": "Lunar New Year's Eve",
     "1984-02-02": "Lunar New Year",
-    "1984-02-03": "The second day of Tet Holiday",
-    "1984-02-04": "The third day of Tet Holiday",
-    "1984-02-05": "The fourth day of Tet Holiday",
-    "1984-02-06": "The fifth day of Tet Holiday",
+    "1984-02-03": "Second Day of Lunar New Year",
+    "1984-02-04": "Third Day of Lunar New Year",
     "1984-04-30": "Liberation Day/Reunification Day",
     "1984-05-01": "International Labor Day",
     "1984-09-02": "National Day",
-    "1984-09-03": "National Day (observed)",
     "1985-01-01": "New Year's Day",
     "1985-02-19": "Lunar New Year's Eve",
     "1985-02-20": "Lunar New Year",
-    "1985-02-21": "The second day of Tet Holiday",
-    "1985-02-22": "The third day of Tet Holiday",
-    "1985-02-23": "The fourth day of Tet Holiday",
-    "1985-02-24": "The fifth day of Tet Holiday",
+    "1985-02-21": "Second Day of Lunar New Year",
+    "1985-02-22": "Third Day of Lunar New Year",
     "1985-04-30": "Liberation Day/Reunification Day",
     "1985-05-01": "International Labor Day",
     "1985-09-02": "National Day",
     "1986-01-01": "New Year's Day",
     "1986-02-08": "Lunar New Year's Eve",
     "1986-02-09": "Lunar New Year",
-    "1986-02-10": "The second day of Tet Holiday",
-    "1986-02-11": "The third day of Tet Holiday",
-    "1986-02-12": "The fourth day of Tet Holiday",
-    "1986-02-13": "The fifth day of Tet Holiday",
+    "1986-02-10": "Second Day of Lunar New Year",
+    "1986-02-11": "Third Day of Lunar New Year",
     "1986-04-30": "Liberation Day/Reunification Day",
     "1986-05-01": "International Labor Day",
     "1986-09-02": "National Day",
     "1987-01-01": "New Year's Day",
     "1987-01-28": "Lunar New Year's Eve",
     "1987-01-29": "Lunar New Year",
-    "1987-01-30": "The second day of Tet Holiday",
-    "1987-01-31": "The third day of Tet Holiday",
-    "1987-02-01": "The fourth day of Tet Holiday",
-    "1987-02-02": "The fifth day of Tet Holiday",
+    "1987-01-30": "Second Day of Lunar New Year",
+    "1987-01-31": "Third Day of Lunar New Year",
     "1987-04-30": "Liberation Day/Reunification Day",
     "1987-05-01": "International Labor Day",
     "1987-09-02": "National Day",
     "1988-01-01": "New Year's Day",
     "1988-02-16": "Lunar New Year's Eve",
     "1988-02-17": "Lunar New Year",
-    "1988-02-18": "The second day of Tet Holiday",
-    "1988-02-19": "The third day of Tet Holiday",
-    "1988-02-20": "The fourth day of Tet Holiday",
-    "1988-02-21": "The fifth day of Tet Holiday",
+    "1988-02-18": "Second Day of Lunar New Year",
+    "1988-02-19": "Third Day of Lunar New Year",
     "1988-04-30": "Liberation Day/Reunification Day",
     "1988-05-01": "International Labor Day",
-    "1988-05-02": "Liberation Day/Reunification Day (observed)",
-    "1988-05-03": "International Labor Day (observed)",
     "1988-09-02": "National Day",
     "1989-01-01": "New Year's Day",
-    "1989-01-02": "New Year's Day (observed)",
     "1989-02-05": "Lunar New Year's Eve",
     "1989-02-06": "Lunar New Year",
-    "1989-02-07": "The second day of Tet Holiday",
-    "1989-02-08": "The third day of Tet Holiday",
-    "1989-02-09": "The fourth day of Tet Holiday",
-    "1989-02-10": "The fifth day of Tet Holiday",
+    "1989-02-07": "Second Day of Lunar New Year",
+    "1989-02-08": "Third Day of Lunar New Year",
     "1989-04-30": "Liberation Day/Reunification Day",
     "1989-05-01": "International Labor Day",
-    "1989-05-02": "Liberation Day/Reunification Day (observed)",
     "1989-09-02": "National Day",
-    "1989-09-04": "National Day (observed)",
     "1990-01-01": "New Year's Day",
     "1990-01-26": "Lunar New Year's Eve",
     "1990-01-27": "Lunar New Year",
-    "1990-01-28": "The second day of Tet Holiday",
-    "1990-01-29": "The third day of Tet Holiday",
-    "1990-01-30": "The fourth day of Tet Holiday",
-    "1990-01-31": "The fifth day of Tet Holiday",
+    "1990-01-28": "Second Day of Lunar New Year",
+    "1990-01-29": "Third Day of Lunar New Year",
     "1990-04-30": "Liberation Day/Reunification Day",
     "1990-05-01": "International Labor Day",
     "1990-09-02": "National Day",
-    "1990-09-03": "National Day (observed)",
     "1991-01-01": "New Year's Day",
     "1991-02-14": "Lunar New Year's Eve",
     "1991-02-15": "Lunar New Year",
-    "1991-02-16": "The second day of Tet Holiday",
-    "1991-02-17": "The third day of Tet Holiday",
-    "1991-02-18": "The fourth day of Tet Holiday",
-    "1991-02-19": "The fifth day of Tet Holiday",
+    "1991-02-16": "Second Day of Lunar New Year",
+    "1991-02-17": "Third Day of Lunar New Year",
     "1991-04-30": "Liberation Day/Reunification Day",
     "1991-05-01": "International Labor Day",
     "1991-09-02": "National Day",
     "1992-01-01": "New Year's Day",
     "1992-02-03": "Lunar New Year's Eve",
     "1992-02-04": "Lunar New Year",
-    "1992-02-05": "The second day of Tet Holiday",
-    "1992-02-06": "The third day of Tet Holiday",
-    "1992-02-07": "The fourth day of Tet Holiday",
-    "1992-02-08": "The fifth day of Tet Holiday",
+    "1992-02-05": "Second Day of Lunar New Year",
+    "1992-02-06": "Third Day of Lunar New Year",
     "1992-04-30": "Liberation Day/Reunification Day",
     "1992-05-01": "International Labor Day",
     "1992-09-02": "National Day",
     "1993-01-01": "New Year's Day",
     "1993-01-22": "Lunar New Year's Eve",
     "1993-01-23": "Lunar New Year",
-    "1993-01-24": "The second day of Tet Holiday",
-    "1993-01-25": "The third day of Tet Holiday",
-    "1993-01-26": "The fourth day of Tet Holiday",
-    "1993-01-27": "The fifth day of Tet Holiday",
+    "1993-01-24": "Second Day of Lunar New Year",
+    "1993-01-25": "Third Day of Lunar New Year",
     "1993-04-30": "Liberation Day/Reunification Day",
     "1993-05-01": "International Labor Day",
-    "1993-05-03": "International Labor Day (observed)",
     "1993-09-02": "National Day",
     "1994-01-01": "New Year's Day",
-    "1994-01-03": "New Year's Day (observed)",
     "1994-02-09": "Lunar New Year's Eve",
     "1994-02-10": "Lunar New Year",
-    "1994-02-11": "The second day of Tet Holiday",
-    "1994-02-12": "The third day of Tet Holiday",
-    "1994-02-13": "The fourth day of Tet Holiday",
-    "1994-02-14": "The fifth day of Tet Holiday",
+    "1994-02-11": "Second Day of Lunar New Year",
+    "1994-02-12": "Third Day of Lunar New Year",
     "1994-04-30": "Liberation Day/Reunification Day",
     "1994-05-01": "International Labor Day",
-    "1994-05-02": "Liberation Day/Reunification Day (observed)",
-    "1994-05-03": "International Labor Day (observed)",
     "1994-09-02": "National Day",
     "1995-01-01": "New Year's Day",
     "1995-01-02": "New Year's Day (observed)",
     "1995-01-30": "Lunar New Year's Eve",
     "1995-01-31": "Lunar New Year",
-    "1995-02-01": "The second day of Tet Holiday",
-    "1995-02-02": "The third day of Tet Holiday",
-    "1995-02-03": "The fourth day of Tet Holiday",
-    "1995-02-04": "The fifth day of Tet Holiday",
+    "1995-02-01": "Second Day of Lunar New Year",
+    "1995-02-02": "Third Day of Lunar New Year",
     "1995-04-30": "Liberation Day/Reunification Day",
     "1995-05-01": "International Labor Day",
     "1995-05-02": "Liberation Day/Reunification Day (observed)",
@@ -517,40 +373,35 @@
     "1996-01-01": "New Year's Day",
     "1996-02-18": "Lunar New Year's Eve",
     "1996-02-19": "Lunar New Year",
-    "1996-02-20": "The second day of Tet Holiday",
-    "1996-02-21": "The third day of Tet Holiday",
-    "1996-02-22": "The fourth day of Tet Holiday",
-    "1996-02-23": "The fifth day of Tet Holiday",
+    "1996-02-20": "Second Day of Lunar New Year",
+    "1996-02-21": "Third Day of Lunar New Year",
+    "1996-02-22": "Fourth Day of Lunar New Year",
     "1996-04-30": "Liberation Day/Reunification Day",
     "1996-05-01": "International Labor Day",
     "1996-09-02": "National Day",
     "1997-01-01": "New Year's Day",
     "1997-02-06": "Lunar New Year's Eve",
     "1997-02-07": "Lunar New Year",
-    "1997-02-08": "The second day of Tet Holiday",
-    "1997-02-09": "The third day of Tet Holiday",
-    "1997-02-10": "The fourth day of Tet Holiday",
-    "1997-02-11": "The fifth day of Tet Holiday",
+    "1997-02-08": "Second Day of Lunar New Year",
+    "1997-02-09": "Third Day of Lunar New Year",
+    "1997-02-10": "Fourth Day of Lunar New Year",
+    "1997-02-11": "Fifth Day of Lunar New Year",
     "1997-04-30": "Liberation Day/Reunification Day",
     "1997-05-01": "International Labor Day",
     "1997-09-02": "National Day",
     "1998-01-01": "New Year's Day",
     "1998-01-27": "Lunar New Year's Eve",
     "1998-01-28": "Lunar New Year",
-    "1998-01-29": "The second day of Tet Holiday",
-    "1998-01-30": "The third day of Tet Holiday",
-    "1998-01-31": "The fourth day of Tet Holiday",
-    "1998-02-01": "The fifth day of Tet Holiday",
+    "1998-01-29": "Second Day of Lunar New Year",
+    "1998-01-30": "Third Day of Lunar New Year",
     "1998-04-30": "Liberation Day/Reunification Day",
     "1998-05-01": "International Labor Day",
     "1998-09-02": "National Day",
     "1999-01-01": "New Year's Day",
     "1999-02-15": "Lunar New Year's Eve",
     "1999-02-16": "Lunar New Year",
-    "1999-02-17": "The second day of Tet Holiday",
-    "1999-02-18": "The third day of Tet Holiday",
-    "1999-02-19": "The fourth day of Tet Holiday",
-    "1999-02-20": "The fifth day of Tet Holiday",
+    "1999-02-17": "Second Day of Lunar New Year",
+    "1999-02-18": "Third Day of Lunar New Year",
     "1999-04-30": "Liberation Day/Reunification Day",
     "1999-05-01": "International Labor Day",
     "1999-05-03": "International Labor Day (observed)",
@@ -559,10 +410,10 @@
     "2000-01-03": "New Year's Day (observed)",
     "2000-02-04": "Lunar New Year's Eve",
     "2000-02-05": "Lunar New Year",
-    "2000-02-06": "The second day of Tet Holiday",
-    "2000-02-07": "The third day of Tet Holiday",
-    "2000-02-08": "The fourth day of Tet Holiday",
-    "2000-02-09": "The fifth day of Tet Holiday",
+    "2000-02-06": "Second Day of Lunar New Year",
+    "2000-02-07": "Third Day of Lunar New Year",
+    "2000-02-08": "Fourth Day of Lunar New Year",
+    "2000-02-09": "Fifth Day of Lunar New Year",
     "2000-04-30": "Liberation Day/Reunification Day",
     "2000-05-01": "International Labor Day",
     "2000-05-02": "Liberation Day/Reunification Day (observed)",
@@ -571,10 +422,8 @@
     "2001-01-01": "New Year's Day",
     "2001-01-23": "Lunar New Year's Eve",
     "2001-01-24": "Lunar New Year",
-    "2001-01-25": "The second day of Tet Holiday",
-    "2001-01-26": "The third day of Tet Holiday",
-    "2001-01-27": "The fourth day of Tet Holiday",
-    "2001-01-28": "The fifth day of Tet Holiday",
+    "2001-01-25": "Second Day of Lunar New Year",
+    "2001-01-26": "Third Day of Lunar New Year",
     "2001-04-30": "Liberation Day/Reunification Day",
     "2001-05-01": "International Labor Day",
     "2001-09-02": "National Day",
@@ -582,30 +431,27 @@
     "2002-01-01": "New Year's Day",
     "2002-02-11": "Lunar New Year's Eve",
     "2002-02-12": "Lunar New Year",
-    "2002-02-13": "The second day of Tet Holiday",
-    "2002-02-14": "The third day of Tet Holiday",
-    "2002-02-15": "The fourth day of Tet Holiday",
-    "2002-02-16": "The fifth day of Tet Holiday",
+    "2002-02-13": "Second Day of Lunar New Year",
+    "2002-02-14": "Third Day of Lunar New Year",
     "2002-04-30": "Liberation Day/Reunification Day",
     "2002-05-01": "International Labor Day",
     "2002-09-02": "National Day",
     "2003-01-01": "New Year's Day",
     "2003-01-31": "Lunar New Year's Eve",
     "2003-02-01": "Lunar New Year",
-    "2003-02-02": "The second day of Tet Holiday",
-    "2003-02-03": "The third day of Tet Holiday",
-    "2003-02-04": "The fourth day of Tet Holiday",
-    "2003-02-05": "The fifth day of Tet Holiday",
+    "2003-02-02": "Second Day of Lunar New Year",
+    "2003-02-03": "Third Day of Lunar New Year",
+    "2003-02-04": "Fourth Day of Lunar New Year",
+    "2003-02-05": "Fifth Day of Lunar New Year",
     "2003-04-30": "Liberation Day/Reunification Day",
     "2003-05-01": "International Labor Day",
     "2003-09-02": "National Day",
     "2004-01-01": "New Year's Day",
     "2004-01-21": "Lunar New Year's Eve",
     "2004-01-22": "Lunar New Year",
-    "2004-01-23": "The second day of Tet Holiday",
-    "2004-01-24": "The third day of Tet Holiday",
-    "2004-01-25": "The fourth day of Tet Holiday",
-    "2004-01-26": "The fifth day of Tet Holiday",
+    "2004-01-23": "Second Day of Lunar New Year",
+    "2004-01-24": "Third Day of Lunar New Year",
+    "2004-01-26": "Fifth Day of Lunar New Year",
     "2004-04-30": "Liberation Day/Reunification Day",
     "2004-05-01": "International Labor Day",
     "2004-05-03": "International Labor Day (observed)",
@@ -614,10 +460,8 @@
     "2005-01-03": "New Year's Day (observed)",
     "2005-02-08": "Lunar New Year's Eve",
     "2005-02-09": "Lunar New Year",
-    "2005-02-10": "The second day of Tet Holiday",
-    "2005-02-11": "The third day of Tet Holiday",
-    "2005-02-12": "The fourth day of Tet Holiday",
-    "2005-02-13": "The fifth day of Tet Holiday",
+    "2005-02-10": "Second Day of Lunar New Year",
+    "2005-02-11": "Third Day of Lunar New Year",
     "2005-04-30": "Liberation Day/Reunification Day",
     "2005-05-01": "International Labor Day",
     "2005-05-02": "Liberation Day/Reunification Day (observed)",
@@ -627,10 +471,10 @@
     "2006-01-02": "New Year's Day (observed)",
     "2006-01-28": "Lunar New Year's Eve",
     "2006-01-29": "Lunar New Year",
-    "2006-01-30": "The second day of Tet Holiday",
-    "2006-01-31": "The third day of Tet Holiday",
-    "2006-02-01": "The fourth day of Tet Holiday",
-    "2006-02-02": "The fifth day of Tet Holiday",
+    "2006-01-30": "Second Day of Lunar New Year",
+    "2006-01-31": "Third Day of Lunar New Year",
+    "2006-02-01": "Fourth Day of Lunar New Year",
+    "2006-02-02": "Fifth Day of Lunar New Year",
     "2006-04-30": "Liberation Day/Reunification Day",
     "2006-05-01": "International Labor Day",
     "2006-05-02": "Liberation Day/Reunification Day (observed)",
@@ -639,10 +483,10 @@
     "2007-01-01": "New Year's Day",
     "2007-02-17": "Lunar New Year's Eve",
     "2007-02-18": "Lunar New Year",
-    "2007-02-19": "The second day of Tet Holiday",
-    "2007-02-20": "The third day of Tet Holiday",
-    "2007-02-21": "The fourth day of Tet Holiday",
-    "2007-02-22": "The fifth day of Tet Holiday",
+    "2007-02-19": "Second Day of Lunar New Year",
+    "2007-02-20": "Third Day of Lunar New Year",
+    "2007-02-21": "Fourth Day of Lunar New Year",
+    "2007-02-22": "Fifth Day of Lunar New Year",
     "2007-04-26": "Hung Kings' Commemoration Day",
     "2007-04-30": "Liberation Day/Reunification Day",
     "2007-05-01": "International Labor Day",
@@ -651,10 +495,9 @@
     "2008-01-01": "New Year's Day",
     "2008-02-06": "Lunar New Year's Eve",
     "2008-02-07": "Lunar New Year",
-    "2008-02-08": "The second day of Tet Holiday",
-    "2008-02-09": "The third day of Tet Holiday",
-    "2008-02-10": "The fourth day of Tet Holiday",
-    "2008-02-11": "The fifth day of Tet Holiday",
+    "2008-02-08": "Second Day of Lunar New Year",
+    "2008-02-09": "Third Day of Lunar New Year",
+    "2008-02-11": "Fifth Day of Lunar New Year",
     "2008-04-15": "Hung Kings' Commemoration Day",
     "2008-04-30": "Liberation Day/Reunification Day",
     "2008-05-01": "International Labor Day",
@@ -662,10 +505,9 @@
     "2009-01-01": "New Year's Day",
     "2009-01-25": "Lunar New Year's Eve",
     "2009-01-26": "Lunar New Year",
-    "2009-01-27": "The second day of Tet Holiday",
-    "2009-01-28": "The third day of Tet Holiday",
-    "2009-01-29": "The fourth day of Tet Holiday",
-    "2009-01-30": "The fifth day of Tet Holiday",
+    "2009-01-27": "Second Day of Lunar New Year",
+    "2009-01-28": "Third Day of Lunar New Year",
+    "2009-01-29": "Fourth Day of Lunar New Year",
     "2009-04-05": "Hung Kings' Commemoration Day",
     "2009-04-06": "Hung Kings' Commemoration Day (observed)",
     "2009-04-30": "Liberation Day/Reunification Day",
@@ -674,10 +516,11 @@
     "2010-01-01": "New Year's Day",
     "2010-02-13": "Lunar New Year's Eve",
     "2010-02-14": "Lunar New Year",
-    "2010-02-15": "The second day of Tet Holiday",
-    "2010-02-16": "The third day of Tet Holiday",
-    "2010-02-17": "The fourth day of Tet Holiday",
-    "2010-02-18": "The fifth day of Tet Holiday",
+    "2010-02-15": "Second Day of Lunar New Year",
+    "2010-02-16": "Third Day of Lunar New Year",
+    "2010-02-17": "Fourth Day of Lunar New Year",
+    "2010-02-18": "Fifth Day of Lunar New Year",
+    "2010-02-19": "Day off (substituted from 02/27/2010)",
     "2010-04-23": "Hung Kings' Commemoration Day",
     "2010-04-30": "Liberation Day/Reunification Day",
     "2010-05-01": "International Labor Day",
@@ -687,10 +530,9 @@
     "2011-01-03": "New Year's Day (observed)",
     "2011-02-02": "Lunar New Year's Eve",
     "2011-02-03": "Lunar New Year",
-    "2011-02-04": "The second day of Tet Holiday",
-    "2011-02-05": "The third day of Tet Holiday",
-    "2011-02-06": "The fourth day of Tet Holiday",
-    "2011-02-07": "The fifth day of Tet Holiday",
+    "2011-02-04": "Second Day of Lunar New Year",
+    "2011-02-05": "Third Day of Lunar New Year",
+    "2011-02-07": "Fifth Day of Lunar New Year",
     "2011-04-12": "Hung Kings' Commemoration Day",
     "2011-04-30": "Liberation Day/Reunification Day",
     "2011-05-01": "International Labor Day",
@@ -701,10 +543,10 @@
     "2012-01-02": "New Year's Day (observed)",
     "2012-01-22": "Lunar New Year's Eve",
     "2012-01-23": "Lunar New Year",
-    "2012-01-24": "The second day of Tet Holiday",
-    "2012-01-25": "The third day of Tet Holiday",
-    "2012-01-26": "The fourth day of Tet Holiday",
-    "2012-01-27": "The fifth day of Tet Holiday",
+    "2012-01-24": "Second Day of Lunar New Year",
+    "2012-01-25": "Third Day of Lunar New Year",
+    "2012-01-26": "Fourth Day of Lunar New Year",
+    "2012-01-27": "Day off (substituted from 02/04/2012)",
     "2012-03-31": "Hung Kings' Commemoration Day",
     "2012-04-02": "Hung Kings' Commemoration Day (observed)",
     "2012-04-30": "Liberation Day/Reunification Day",
@@ -714,43 +556,52 @@
     "2013-01-01": "New Year's Day",
     "2013-02-09": "Lunar New Year's Eve",
     "2013-02-10": "Lunar New Year",
-    "2013-02-11": "The second day of Tet Holiday",
-    "2013-02-12": "The third day of Tet Holiday",
-    "2013-02-13": "The fourth day of Tet Holiday",
-    "2013-02-14": "The fifth day of Tet Holiday",
+    "2013-02-11": "Second Day of Lunar New Year",
+    "2013-02-12": "Third Day of Lunar New Year",
+    "2013-02-13": "Fourth Day of Lunar New Year",
+    "2013-02-14": "Fifth Day of Lunar New Year",
+    "2013-02-15": "Sixth Day of Lunar New Year",
     "2013-04-19": "Hung Kings' Commemoration Day",
+    "2013-04-29": "Day off (substituted from 05/04/2013)",
     "2013-04-30": "Liberation Day/Reunification Day",
     "2013-05-01": "International Labor Day",
     "2013-09-02": "National Day",
     "2014-01-01": "New Year's Day",
+    "2014-01-29": "29 of Lunar New Year",
     "2014-01-30": "Lunar New Year's Eve",
     "2014-01-31": "Lunar New Year",
-    "2014-02-01": "The second day of Tet Holiday",
-    "2014-02-02": "The third day of Tet Holiday",
-    "2014-02-03": "The fourth day of Tet Holiday",
-    "2014-02-04": "The fifth day of Tet Holiday",
+    "2014-02-01": "Second Day of Lunar New Year",
+    "2014-02-02": "Third Day of Lunar New Year",
+    "2014-02-03": "Fourth Day of Lunar New Year",
+    "2014-02-04": "Fifth Day of Lunar New Year",
     "2014-04-09": "Hung Kings' Commemoration Day",
     "2014-04-30": "Liberation Day/Reunification Day",
     "2014-05-01": "International Labor Day",
+    "2014-05-02": "Day off (substituted from 04/26/2014)",
+    "2014-09-01": "Day off (substituted from 09/06/2014)",
     "2014-09-02": "National Day",
     "2015-01-01": "New Year's Day",
+    "2015-01-02": "Day off (substituted from 12/27/2014)",
+    "2015-02-16": "Day off (substituted from 02/14/2015)",
+    "2015-02-17": "29 of Lunar New Year",
     "2015-02-18": "Lunar New Year's Eve",
     "2015-02-19": "Lunar New Year",
-    "2015-02-20": "The second day of Tet Holiday",
-    "2015-02-21": "The third day of Tet Holiday",
-    "2015-02-22": "The fourth day of Tet Holiday",
-    "2015-02-23": "The fifth day of Tet Holiday",
+    "2015-02-20": "Second Day of Lunar New Year",
+    "2015-02-21": "Third Day of Lunar New Year",
+    "2015-02-22": "Fourth Day of Lunar New Year",
+    "2015-02-23": "Fifth Day of Lunar New Year",
     "2015-04-28": "Hung Kings' Commemoration Day",
+    "2015-04-29": "Day off (substituted from 04/25/2015)",
     "2015-04-30": "Liberation Day/Reunification Day",
     "2015-05-01": "International Labor Day",
     "2015-09-02": "National Day",
     "2016-01-01": "New Year's Day",
     "2016-02-07": "Lunar New Year's Eve",
     "2016-02-08": "Lunar New Year",
-    "2016-02-09": "The second day of Tet Holiday",
-    "2016-02-10": "The third day of Tet Holiday",
-    "2016-02-11": "The fourth day of Tet Holiday",
-    "2016-02-12": "The fifth day of Tet Holiday",
+    "2016-02-09": "Second Day of Lunar New Year",
+    "2016-02-10": "Third Day of Lunar New Year",
+    "2016-02-11": "Fourth Day of Lunar New Year",
+    "2016-02-12": "Fifth Day of Lunar New Year",
     "2016-04-16": "Hung Kings' Commemoration Day",
     "2016-04-18": "Hung Kings' Commemoration Day (observed)",
     "2016-04-30": "Liberation Day/Reunification Day",
@@ -760,12 +611,13 @@
     "2016-09-02": "National Day",
     "2017-01-01": "New Year's Day",
     "2017-01-02": "New Year's Day (observed)",
+    "2017-01-26": "29 of Lunar New Year",
     "2017-01-27": "Lunar New Year's Eve",
     "2017-01-28": "Lunar New Year",
-    "2017-01-29": "The second day of Tet Holiday",
-    "2017-01-30": "The third day of Tet Holiday",
-    "2017-01-31": "The fourth day of Tet Holiday",
-    "2017-02-01": "The fifth day of Tet Holiday",
+    "2017-01-29": "Second Day of Lunar New Year",
+    "2017-01-30": "Third Day of Lunar New Year",
+    "2017-01-31": "Fourth Day of Lunar New Year",
+    "2017-02-01": "Fifth Day of Lunar New Year",
     "2017-04-06": "Hung Kings' Commemoration Day",
     "2017-04-30": "Liberation Day/Reunification Day",
     "2017-05-01": "International Labor Day",
@@ -773,414 +625,459 @@
     "2017-09-02": "National Day",
     "2017-09-04": "National Day (observed)",
     "2018-01-01": "New Year's Day",
+    "2018-02-14": "29 of Lunar New Year",
     "2018-02-15": "Lunar New Year's Eve",
     "2018-02-16": "Lunar New Year",
-    "2018-02-17": "The second day of Tet Holiday",
-    "2018-02-18": "The third day of Tet Holiday",
-    "2018-02-19": "The fourth day of Tet Holiday",
-    "2018-02-20": "The fifth day of Tet Holiday",
+    "2018-02-17": "Second Day of Lunar New Year",
+    "2018-02-18": "Third Day of Lunar New Year",
+    "2018-02-19": "Fourth Day of Lunar New Year",
+    "2018-02-20": "Fifth Day of Lunar New Year",
     "2018-04-25": "Hung Kings' Commemoration Day",
     "2018-04-30": "Liberation Day/Reunification Day",
     "2018-05-01": "International Labor Day",
     "2018-09-02": "National Day",
     "2018-09-03": "National Day (observed)",
+    "2018-12-31": "Day off (substituted from 01/05/2019)",
     "2019-01-01": "New Year's Day",
     "2019-02-04": "Lunar New Year's Eve",
     "2019-02-05": "Lunar New Year",
-    "2019-02-06": "The second day of Tet Holiday",
-    "2019-02-07": "The third day of Tet Holiday",
-    "2019-02-08": "The fourth day of Tet Holiday",
-    "2019-02-09": "The fifth day of Tet Holiday",
+    "2019-02-06": "Second Day of Lunar New Year",
+    "2019-02-07": "Third Day of Lunar New Year",
+    "2019-02-08": "Fourth Day of Lunar New Year",
     "2019-04-14": "Hung Kings' Commemoration Day",
     "2019-04-15": "Hung Kings' Commemoration Day (observed)",
+    "2019-04-29": "Day off (substituted from 05/04/2019)",
     "2019-04-30": "Liberation Day/Reunification Day",
     "2019-05-01": "International Labor Day",
     "2019-09-02": "National Day",
     "2020-01-01": "New Year's Day",
+    "2020-01-23": "29 of Lunar New Year",
     "2020-01-24": "Lunar New Year's Eve",
     "2020-01-25": "Lunar New Year",
-    "2020-01-26": "The second day of Tet Holiday",
-    "2020-01-27": "The third day of Tet Holiday",
-    "2020-01-28": "The fourth day of Tet Holiday",
-    "2020-01-29": "The fifth day of Tet Holiday",
+    "2020-01-26": "Second Day of Lunar New Year",
+    "2020-01-27": "Third Day of Lunar New Year",
+    "2020-01-28": "Fourth Day of Lunar New Year",
+    "2020-01-29": "Fifth Day of Lunar New Year",
     "2020-04-02": "Hung Kings' Commemoration Day",
     "2020-04-30": "Liberation Day/Reunification Day",
     "2020-05-01": "International Labor Day",
     "2020-09-02": "National Day",
     "2021-01-01": "New Year's Day",
+    "2021-02-10": "29 of Lunar New Year",
     "2021-02-11": "Lunar New Year's Eve",
     "2021-02-12": "Lunar New Year",
-    "2021-02-13": "The second day of Tet Holiday",
-    "2021-02-14": "The third day of Tet Holiday",
-    "2021-02-15": "The fourth day of Tet Holiday",
-    "2021-02-16": "The fifth day of Tet Holiday",
+    "2021-02-13": "Second Day of Lunar New Year",
+    "2021-02-14": "Third Day of Lunar New Year",
+    "2021-02-15": "Fourth Day of Lunar New Year",
+    "2021-02-16": "Fifth Day of Lunar New Year",
     "2021-04-21": "Hung Kings' Commemoration Day",
     "2021-04-30": "Liberation Day/Reunification Day",
     "2021-05-01": "International Labor Day",
     "2021-05-03": "International Labor Day (observed)",
     "2021-09-02": "National Day",
+    "2021-09-03": "National Day",
     "2022-01-01": "New Year's Day",
     "2022-01-03": "New Year's Day (observed)",
     "2022-01-31": "Lunar New Year's Eve",
     "2022-02-01": "Lunar New Year",
-    "2022-02-02": "The second day of Tet Holiday",
-    "2022-02-03": "The third day of Tet Holiday",
-    "2022-02-04": "The fourth day of Tet Holiday",
-    "2022-02-05": "The fifth day of Tet Holiday",
+    "2022-02-02": "Second Day of Lunar New Year",
+    "2022-02-03": "Third Day of Lunar New Year",
+    "2022-02-04": "Fourth Day of Lunar New Year",
     "2022-04-10": "Hung Kings' Commemoration Day",
     "2022-04-11": "Hung Kings' Commemoration Day (observed)",
     "2022-04-30": "Liberation Day/Reunification Day",
     "2022-05-01": "International Labor Day",
     "2022-05-02": "Liberation Day/Reunification Day (observed)",
     "2022-05-03": "International Labor Day (observed)",
+    "2022-09-01": "National Day",
     "2022-09-02": "National Day",
     "2023-01-01": "New Year's Day",
     "2023-01-02": "New Year's Day (observed)",
+    "2023-01-20": "29 of Lunar New Year",
     "2023-01-21": "Lunar New Year's Eve",
     "2023-01-22": "Lunar New Year",
-    "2023-01-23": "The second day of Tet Holiday",
-    "2023-01-24": "The third day of Tet Holiday",
-    "2023-01-25": "The fourth day of Tet Holiday",
-    "2023-01-26": "The fifth day of Tet Holiday",
+    "2023-01-23": "Second Day of Lunar New Year",
+    "2023-01-24": "Third Day of Lunar New Year",
+    "2023-01-25": "Fourth Day of Lunar New Year",
+    "2023-01-26": "Fifth Day of Lunar New Year",
     "2023-04-29": "Hung Kings' Commemoration Day",
     "2023-04-30": "Liberation Day/Reunification Day",
     "2023-05-01": "International Labor Day",
     "2023-05-02": "Hung Kings' Commemoration Day (observed)",
     "2023-05-03": "Liberation Day/Reunification Day (observed)",
+    "2023-09-01": "National Day",
     "2023-09-02": "National Day",
     "2023-09-04": "National Day (observed)",
     "2024-01-01": "New Year's Day",
+    "2024-02-08": "29 of Lunar New Year",
     "2024-02-09": "Lunar New Year's Eve",
     "2024-02-10": "Lunar New Year",
-    "2024-02-11": "The second day of Tet Holiday",
-    "2024-02-12": "The third day of Tet Holiday",
-    "2024-02-13": "The fourth day of Tet Holiday",
-    "2024-02-14": "The fifth day of Tet Holiday",
+    "2024-02-11": "Second Day of Lunar New Year",
+    "2024-02-12": "Third Day of Lunar New Year",
+    "2024-02-13": "Fourth Day of Lunar New Year",
+    "2024-02-14": "Fifth Day of Lunar New Year",
     "2024-04-18": "Hung Kings' Commemoration Day",
+    "2024-04-29": "Day off (substituted from 05/04/2024)",
     "2024-04-30": "Liberation Day/Reunification Day",
     "2024-05-01": "International Labor Day",
     "2024-09-02": "National Day",
+    "2024-09-03": "National Day",
     "2025-01-01": "New Year's Day",
+    "2025-01-27": "29 of Lunar New Year",
     "2025-01-28": "Lunar New Year's Eve",
     "2025-01-29": "Lunar New Year",
-    "2025-01-30": "The second day of Tet Holiday",
-    "2025-01-31": "The third day of Tet Holiday",
-    "2025-02-01": "The fourth day of Tet Holiday",
-    "2025-02-02": "The fifth day of Tet Holiday",
+    "2025-01-30": "Second Day of Lunar New Year",
+    "2025-01-31": "Third Day of Lunar New Year",
+    "2025-02-01": "Fourth Day of Lunar New Year",
     "2025-04-07": "Hung Kings' Commemoration Day",
     "2025-04-30": "Liberation Day/Reunification Day",
     "2025-05-01": "International Labor Day",
+    "2025-09-01": "National Day",
     "2025-09-02": "National Day",
     "2026-01-01": "New Year's Day",
     "2026-02-16": "Lunar New Year's Eve",
     "2026-02-17": "Lunar New Year",
-    "2026-02-18": "The second day of Tet Holiday",
-    "2026-02-19": "The third day of Tet Holiday",
-    "2026-02-20": "The fourth day of Tet Holiday",
-    "2026-02-21": "The fifth day of Tet Holiday",
+    "2026-02-18": "Second Day of Lunar New Year",
+    "2026-02-19": "Third Day of Lunar New Year",
+    "2026-02-20": "Fourth Day of Lunar New Year",
     "2026-04-26": "Hung Kings' Commemoration Day",
     "2026-04-27": "Hung Kings' Commemoration Day (observed)",
     "2026-04-30": "Liberation Day/Reunification Day",
     "2026-05-01": "International Labor Day",
+    "2026-09-01": "National Day",
     "2026-09-02": "National Day",
     "2027-01-01": "New Year's Day",
+    "2027-02-04": "29 of Lunar New Year",
     "2027-02-05": "Lunar New Year's Eve",
     "2027-02-06": "Lunar New Year",
-    "2027-02-07": "The second day of Tet Holiday",
-    "2027-02-08": "The third day of Tet Holiday",
-    "2027-02-09": "The fourth day of Tet Holiday",
-    "2027-02-10": "The fifth day of Tet Holiday",
+    "2027-02-07": "Second Day of Lunar New Year",
+    "2027-02-08": "Third Day of Lunar New Year",
+    "2027-02-09": "Fourth Day of Lunar New Year",
+    "2027-02-10": "Fifth Day of Lunar New Year",
     "2027-04-16": "Hung Kings' Commemoration Day",
     "2027-04-30": "Liberation Day/Reunification Day",
     "2027-05-01": "International Labor Day",
     "2027-05-03": "International Labor Day (observed)",
     "2027-09-02": "National Day",
+    "2027-09-03": "National Day",
     "2028-01-01": "New Year's Day",
     "2028-01-03": "New Year's Day (observed)",
+    "2028-01-24": "29 of Lunar New Year",
     "2028-01-25": "Lunar New Year's Eve",
     "2028-01-26": "Lunar New Year",
-    "2028-01-27": "The second day of Tet Holiday",
-    "2028-01-28": "The third day of Tet Holiday",
-    "2028-01-29": "The fourth day of Tet Holiday",
-    "2028-01-30": "The fifth day of Tet Holiday",
+    "2028-01-27": "Second Day of Lunar New Year",
+    "2028-01-28": "Third Day of Lunar New Year",
+    "2028-01-29": "Fourth Day of Lunar New Year",
     "2028-04-04": "Hung Kings' Commemoration Day",
     "2028-04-30": "Liberation Day/Reunification Day",
     "2028-05-01": "International Labor Day",
     "2028-05-02": "Liberation Day/Reunification Day (observed)",
+    "2028-09-01": "National Day",
     "2028-09-02": "National Day",
     "2028-09-04": "National Day (observed)",
     "2029-01-01": "New Year's Day",
     "2029-02-12": "Lunar New Year's Eve",
     "2029-02-13": "Lunar New Year",
-    "2029-02-14": "The second day of Tet Holiday",
-    "2029-02-15": "The third day of Tet Holiday",
-    "2029-02-16": "The fourth day of Tet Holiday",
-    "2029-02-17": "The fifth day of Tet Holiday",
+    "2029-02-14": "Second Day of Lunar New Year",
+    "2029-02-15": "Third Day of Lunar New Year",
+    "2029-02-16": "Fourth Day of Lunar New Year",
     "2029-04-23": "Hung Kings' Commemoration Day",
     "2029-04-30": "Liberation Day/Reunification Day",
     "2029-05-01": "International Labor Day",
     "2029-09-02": "National Day",
-    "2029-09-03": "National Day (observed)",
+    "2029-09-03": "National Day",
+    "2029-09-04": "National Day (observed)",
     "2030-01-01": "New Year's Day",
+    "2030-02-01": "29 of Lunar New Year",
     "2030-02-02": "Lunar New Year's Eve",
     "2030-02-03": "Lunar New Year",
-    "2030-02-04": "The second day of Tet Holiday",
-    "2030-02-05": "The third day of Tet Holiday",
-    "2030-02-06": "The fourth day of Tet Holiday",
-    "2030-02-07": "The fifth day of Tet Holiday",
+    "2030-02-04": "Second Day of Lunar New Year",
+    "2030-02-05": "Third Day of Lunar New Year",
+    "2030-02-06": "Fourth Day of Lunar New Year",
+    "2030-02-07": "Fifth Day of Lunar New Year",
     "2030-04-12": "Hung Kings' Commemoration Day",
     "2030-04-30": "Liberation Day/Reunification Day",
     "2030-05-01": "International Labor Day",
     "2030-09-02": "National Day",
+    "2030-09-03": "National Day",
     "2031-01-01": "New Year's Day",
+    "2031-01-21": "29 of Lunar New Year",
     "2031-01-22": "Lunar New Year's Eve",
     "2031-01-23": "Lunar New Year",
-    "2031-01-24": "The second day of Tet Holiday",
-    "2031-01-25": "The third day of Tet Holiday",
-    "2031-01-26": "The fourth day of Tet Holiday",
-    "2031-01-27": "The fifth day of Tet Holiday",
+    "2031-01-24": "Second Day of Lunar New Year",
+    "2031-01-25": "Third Day of Lunar New Year",
+    "2031-01-26": "Fourth Day of Lunar New Year",
+    "2031-01-27": "Fifth Day of Lunar New Year",
     "2031-04-01": "Hung Kings' Commemoration Day",
     "2031-04-30": "Liberation Day/Reunification Day",
     "2031-05-01": "International Labor Day",
+    "2031-09-01": "National Day",
     "2031-09-02": "National Day",
     "2032-01-01": "New Year's Day",
+    "2032-02-09": "29 of Lunar New Year",
     "2032-02-10": "Lunar New Year's Eve",
     "2032-02-11": "Lunar New Year",
-    "2032-02-12": "The second day of Tet Holiday",
-    "2032-02-13": "The third day of Tet Holiday",
-    "2032-02-14": "The fourth day of Tet Holiday",
-    "2032-02-15": "The fifth day of Tet Holiday",
+    "2032-02-12": "Second Day of Lunar New Year",
+    "2032-02-13": "Third Day of Lunar New Year",
+    "2032-02-14": "Fourth Day of Lunar New Year",
     "2032-04-19": "Hung Kings' Commemoration Day",
     "2032-04-30": "Liberation Day/Reunification Day",
     "2032-05-01": "International Labor Day",
     "2032-05-03": "International Labor Day (observed)",
     "2032-09-02": "National Day",
+    "2032-09-03": "National Day",
     "2033-01-01": "New Year's Day",
     "2033-01-03": "New Year's Day (observed)",
     "2033-01-30": "Lunar New Year's Eve",
     "2033-01-31": "Lunar New Year",
-    "2033-02-01": "The second day of Tet Holiday",
-    "2033-02-02": "The third day of Tet Holiday",
-    "2033-02-03": "The fourth day of Tet Holiday",
-    "2033-02-04": "The fifth day of Tet Holiday",
+    "2033-02-01": "Second Day of Lunar New Year",
+    "2033-02-02": "Third Day of Lunar New Year",
+    "2033-02-03": "Fourth Day of Lunar New Year",
+    "2033-02-04": "Fifth Day of Lunar New Year",
     "2033-04-09": "Hung Kings' Commemoration Day",
     "2033-04-11": "Hung Kings' Commemoration Day (observed)",
     "2033-04-30": "Liberation Day/Reunification Day",
     "2033-05-01": "International Labor Day",
     "2033-05-02": "Liberation Day/Reunification Day (observed)",
     "2033-05-03": "International Labor Day (observed)",
+    "2033-09-01": "National Day",
     "2033-09-02": "National Day",
     "2034-01-01": "New Year's Day",
     "2034-01-02": "New Year's Day (observed)",
+    "2034-02-17": "29 of Lunar New Year",
     "2034-02-18": "Lunar New Year's Eve",
     "2034-02-19": "Lunar New Year",
-    "2034-02-20": "The second day of Tet Holiday",
-    "2034-02-21": "The third day of Tet Holiday",
-    "2034-02-22": "The fourth day of Tet Holiday",
-    "2034-02-23": "The fifth day of Tet Holiday",
+    "2034-02-20": "Second Day of Lunar New Year",
+    "2034-02-21": "Third Day of Lunar New Year",
+    "2034-02-22": "Fourth Day of Lunar New Year",
+    "2034-02-23": "Fifth Day of Lunar New Year",
     "2034-04-28": "Hung Kings' Commemoration Day",
     "2034-04-30": "Liberation Day/Reunification Day",
     "2034-05-01": "International Labor Day",
     "2034-05-02": "Liberation Day/Reunification Day (observed)",
+    "2034-09-01": "National Day",
     "2034-09-02": "National Day",
     "2034-09-04": "National Day (observed)",
     "2035-01-01": "New Year's Day",
+    "2035-02-06": "29 of Lunar New Year",
     "2035-02-07": "Lunar New Year's Eve",
     "2035-02-08": "Lunar New Year",
-    "2035-02-09": "The second day of Tet Holiday",
-    "2035-02-10": "The third day of Tet Holiday",
-    "2035-02-11": "The fourth day of Tet Holiday",
-    "2035-02-12": "The fifth day of Tet Holiday",
+    "2035-02-09": "Second Day of Lunar New Year",
+    "2035-02-10": "Third Day of Lunar New Year",
+    "2035-02-11": "Fourth Day of Lunar New Year",
+    "2035-02-12": "Fifth Day of Lunar New Year",
     "2035-04-17": "Hung Kings' Commemoration Day",
     "2035-04-30": "Liberation Day/Reunification Day",
     "2035-05-01": "International Labor Day",
     "2035-09-02": "National Day",
-    "2035-09-03": "National Day (observed)",
+    "2035-09-03": "National Day",
+    "2035-09-04": "National Day (observed)",
     "2036-01-01": "New Year's Day",
     "2036-01-27": "Lunar New Year's Eve",
     "2036-01-28": "Lunar New Year",
-    "2036-01-29": "The second day of Tet Holiday",
-    "2036-01-30": "The third day of Tet Holiday",
-    "2036-01-31": "The fourth day of Tet Holiday",
-    "2036-02-01": "The fifth day of Tet Holiday",
+    "2036-01-29": "Second Day of Lunar New Year",
+    "2036-01-30": "Third Day of Lunar New Year",
+    "2036-01-31": "Fourth Day of Lunar New Year",
+    "2036-02-01": "Fifth Day of Lunar New Year",
     "2036-04-06": "Hung Kings' Commemoration Day",
     "2036-04-07": "Hung Kings' Commemoration Day (observed)",
     "2036-04-30": "Liberation Day/Reunification Day",
     "2036-05-01": "International Labor Day",
+    "2036-09-01": "National Day",
     "2036-09-02": "National Day",
     "2037-01-01": "New Year's Day",
+    "2037-02-13": "29 of Lunar New Year",
     "2037-02-14": "Lunar New Year's Eve",
     "2037-02-15": "Lunar New Year",
-    "2037-02-16": "The second day of Tet Holiday",
-    "2037-02-17": "The third day of Tet Holiday",
-    "2037-02-18": "The fourth day of Tet Holiday",
-    "2037-02-19": "The fifth day of Tet Holiday",
+    "2037-02-16": "Second Day of Lunar New Year",
+    "2037-02-17": "Third Day of Lunar New Year",
+    "2037-02-18": "Fourth Day of Lunar New Year",
+    "2037-02-19": "Fifth Day of Lunar New Year",
     "2037-04-25": "Hung Kings' Commemoration Day",
     "2037-04-27": "Hung Kings' Commemoration Day (observed)",
     "2037-04-30": "Liberation Day/Reunification Day",
     "2037-05-01": "International Labor Day",
+    "2037-09-01": "National Day",
     "2037-09-02": "National Day",
     "2038-01-01": "New Year's Day",
+    "2038-02-02": "29 of Lunar New Year",
     "2038-02-03": "Lunar New Year's Eve",
     "2038-02-04": "Lunar New Year",
-    "2038-02-05": "The second day of Tet Holiday",
-    "2038-02-06": "The third day of Tet Holiday",
-    "2038-02-07": "The fourth day of Tet Holiday",
-    "2038-02-08": "The fifth day of Tet Holiday",
+    "2038-02-05": "Second Day of Lunar New Year",
+    "2038-02-06": "Third Day of Lunar New Year",
+    "2038-02-07": "Fourth Day of Lunar New Year",
+    "2038-02-08": "Fifth Day of Lunar New Year",
     "2038-04-14": "Hung Kings' Commemoration Day",
     "2038-04-30": "Liberation Day/Reunification Day",
     "2038-05-01": "International Labor Day",
     "2038-05-03": "International Labor Day (observed)",
     "2038-09-02": "National Day",
+    "2038-09-03": "National Day",
     "2039-01-01": "New Year's Day",
     "2039-01-03": "New Year's Day (observed)",
     "2039-01-23": "Lunar New Year's Eve",
     "2039-01-24": "Lunar New Year",
-    "2039-01-25": "The second day of Tet Holiday",
-    "2039-01-26": "The third day of Tet Holiday",
-    "2039-01-27": "The fourth day of Tet Holiday",
-    "2039-01-28": "The fifth day of Tet Holiday",
+    "2039-01-25": "Second Day of Lunar New Year",
+    "2039-01-26": "Third Day of Lunar New Year",
+    "2039-01-27": "Fourth Day of Lunar New Year",
+    "2039-01-28": "Fifth Day of Lunar New Year",
     "2039-04-03": "Hung Kings' Commemoration Day",
     "2039-04-04": "Hung Kings' Commemoration Day (observed)",
     "2039-04-30": "Liberation Day/Reunification Day",
     "2039-05-01": "International Labor Day",
     "2039-05-02": "Liberation Day/Reunification Day (observed)",
     "2039-05-03": "International Labor Day (observed)",
+    "2039-09-01": "National Day",
     "2039-09-02": "National Day",
     "2040-01-01": "New Year's Day",
     "2040-01-02": "New Year's Day (observed)",
+    "2040-02-10": "29 of Lunar New Year",
     "2040-02-11": "Lunar New Year's Eve",
     "2040-02-12": "Lunar New Year",
-    "2040-02-13": "The second day of Tet Holiday",
-    "2040-02-14": "The third day of Tet Holiday",
-    "2040-02-15": "The fourth day of Tet Holiday",
-    "2040-02-16": "The fifth day of Tet Holiday",
+    "2040-02-13": "Second Day of Lunar New Year",
+    "2040-02-14": "Third Day of Lunar New Year",
+    "2040-02-15": "Fourth Day of Lunar New Year",
+    "2040-02-16": "Fifth Day of Lunar New Year",
     "2040-04-20": "Hung Kings' Commemoration Day",
     "2040-04-30": "Liberation Day/Reunification Day",
     "2040-05-01": "International Labor Day",
     "2040-09-02": "National Day",
-    "2040-09-03": "National Day (observed)",
+    "2040-09-03": "National Day",
+    "2040-09-04": "National Day (observed)",
     "2041-01-01": "New Year's Day",
+    "2041-01-30": "29 of Lunar New Year",
     "2041-01-31": "Lunar New Year's Eve",
     "2041-02-01": "Lunar New Year",
-    "2041-02-02": "The second day of Tet Holiday",
-    "2041-02-03": "The third day of Tet Holiday",
-    "2041-02-04": "The fourth day of Tet Holiday",
-    "2041-02-05": "The fifth day of Tet Holiday",
+    "2041-02-02": "Second Day of Lunar New Year",
+    "2041-02-03": "Third Day of Lunar New Year",
+    "2041-02-04": "Fourth Day of Lunar New Year",
+    "2041-02-05": "Fifth Day of Lunar New Year",
     "2041-04-10": "Hung Kings' Commemoration Day",
     "2041-04-30": "Liberation Day/Reunification Day",
     "2041-05-01": "International Labor Day",
     "2041-09-02": "National Day",
+    "2041-09-03": "National Day",
     "2042-01-01": "New Year's Day",
+    "2042-01-20": "29 of Lunar New Year",
     "2042-01-21": "Lunar New Year's Eve",
     "2042-01-22": "Lunar New Year",
-    "2042-01-23": "The second day of Tet Holiday",
-    "2042-01-24": "The third day of Tet Holiday",
-    "2042-01-25": "The fourth day of Tet Holiday",
-    "2042-01-26": "The fifth day of Tet Holiday",
+    "2042-01-23": "Second Day of Lunar New Year",
+    "2042-01-24": "Third Day of Lunar New Year",
+    "2042-01-25": "Fourth Day of Lunar New Year",
     "2042-04-29": "Hung Kings' Commemoration Day",
     "2042-04-30": "Liberation Day/Reunification Day",
     "2042-05-01": "International Labor Day",
+    "2042-09-01": "National Day",
     "2042-09-02": "National Day",
     "2043-01-01": "New Year's Day",
     "2043-02-09": "Lunar New Year's Eve",
     "2043-02-10": "Lunar New Year",
-    "2043-02-11": "The second day of Tet Holiday",
-    "2043-02-12": "The third day of Tet Holiday",
-    "2043-02-13": "The fourth day of Tet Holiday",
-    "2043-02-14": "The fifth day of Tet Holiday",
+    "2043-02-11": "Second Day of Lunar New Year",
+    "2043-02-12": "Third Day of Lunar New Year",
+    "2043-02-13": "Fourth Day of Lunar New Year",
     "2043-04-19": "Hung Kings' Commemoration Day",
     "2043-04-20": "Hung Kings' Commemoration Day (observed)",
     "2043-04-30": "Liberation Day/Reunification Day",
     "2043-05-01": "International Labor Day",
+    "2043-09-01": "National Day",
     "2043-09-02": "National Day",
     "2044-01-01": "New Year's Day",
+    "2044-01-28": "29 of Lunar New Year",
     "2044-01-29": "Lunar New Year's Eve",
     "2044-01-30": "Lunar New Year",
-    "2044-01-31": "The second day of Tet Holiday",
-    "2044-02-01": "The third day of Tet Holiday",
-    "2044-02-02": "The fourth day of Tet Holiday",
-    "2044-02-03": "The fifth day of Tet Holiday",
+    "2044-01-31": "Second Day of Lunar New Year",
+    "2044-02-01": "Third Day of Lunar New Year",
+    "2044-02-02": "Fourth Day of Lunar New Year",
+    "2044-02-03": "Fifth Day of Lunar New Year",
     "2044-04-07": "Hung Kings' Commemoration Day",
     "2044-04-30": "Liberation Day/Reunification Day",
     "2044-05-01": "International Labor Day",
     "2044-05-02": "Liberation Day/Reunification Day (observed)",
     "2044-05-03": "International Labor Day (observed)",
+    "2044-09-01": "National Day",
     "2044-09-02": "National Day",
     "2045-01-01": "New Year's Day",
     "2045-01-02": "New Year's Day (observed)",
+    "2045-02-15": "29 of Lunar New Year",
     "2045-02-16": "Lunar New Year's Eve",
     "2045-02-17": "Lunar New Year",
-    "2045-02-18": "The second day of Tet Holiday",
-    "2045-02-19": "The third day of Tet Holiday",
-    "2045-02-20": "The fourth day of Tet Holiday",
-    "2045-02-21": "The fifth day of Tet Holiday",
+    "2045-02-18": "Second Day of Lunar New Year",
+    "2045-02-19": "Third Day of Lunar New Year",
+    "2045-02-20": "Fourth Day of Lunar New Year",
+    "2045-02-21": "Fifth Day of Lunar New Year",
     "2045-04-26": "Hung Kings' Commemoration Day",
     "2045-04-30": "Liberation Day/Reunification Day",
     "2045-05-01": "International Labor Day",
     "2045-05-02": "Liberation Day/Reunification Day (observed)",
+    "2045-09-01": "National Day",
     "2045-09-02": "National Day",
     "2045-09-04": "National Day (observed)",
     "2046-01-01": "New Year's Day",
     "2046-02-05": "Lunar New Year's Eve",
     "2046-02-06": "Lunar New Year",
-    "2046-02-07": "The second day of Tet Holiday",
-    "2046-02-08": "The third day of Tet Holiday",
-    "2046-02-09": "The fourth day of Tet Holiday",
-    "2046-02-10": "The fifth day of Tet Holiday",
+    "2046-02-07": "Second Day of Lunar New Year",
+    "2046-02-08": "Third Day of Lunar New Year",
+    "2046-02-09": "Fourth Day of Lunar New Year",
     "2046-04-15": "Hung Kings' Commemoration Day",
     "2046-04-16": "Hung Kings' Commemoration Day (observed)",
     "2046-04-30": "Liberation Day/Reunification Day",
     "2046-05-01": "International Labor Day",
     "2046-09-02": "National Day",
-    "2046-09-03": "National Day (observed)",
+    "2046-09-03": "National Day",
+    "2046-09-04": "National Day (observed)",
     "2047-01-01": "New Year's Day",
+    "2047-01-24": "29 of Lunar New Year",
     "2047-01-25": "Lunar New Year's Eve",
     "2047-01-26": "Lunar New Year",
-    "2047-01-27": "The second day of Tet Holiday",
-    "2047-01-28": "The third day of Tet Holiday",
-    "2047-01-29": "The fourth day of Tet Holiday",
-    "2047-01-30": "The fifth day of Tet Holiday",
+    "2047-01-27": "Second Day of Lunar New Year",
+    "2047-01-28": "Third Day of Lunar New Year",
+    "2047-01-29": "Fourth Day of Lunar New Year",
+    "2047-01-30": "Fifth Day of Lunar New Year",
     "2047-04-04": "Hung Kings' Commemoration Day",
     "2047-04-30": "Liberation Day/Reunification Day",
     "2047-05-01": "International Labor Day",
     "2047-09-02": "National Day",
+    "2047-09-03": "National Day",
     "2048-01-01": "New Year's Day",
+    "2048-02-12": "29 of Lunar New Year",
     "2048-02-13": "Lunar New Year's Eve",
     "2048-02-14": "Lunar New Year",
-    "2048-02-15": "The second day of Tet Holiday",
-    "2048-02-16": "The third day of Tet Holiday",
-    "2048-02-17": "The fourth day of Tet Holiday",
-    "2048-02-18": "The fifth day of Tet Holiday",
+    "2048-02-15": "Second Day of Lunar New Year",
+    "2048-02-16": "Third Day of Lunar New Year",
+    "2048-02-17": "Fourth Day of Lunar New Year",
+    "2048-02-18": "Fifth Day of Lunar New Year",
     "2048-04-22": "Hung Kings' Commemoration Day",
     "2048-04-30": "Liberation Day/Reunification Day",
     "2048-05-01": "International Labor Day",
+    "2048-09-01": "National Day",
     "2048-09-02": "National Day",
     "2049-01-01": "New Year's Day",
     "2049-02-01": "Lunar New Year's Eve",
     "2049-02-02": "Lunar New Year",
-    "2049-02-03": "The second day of Tet Holiday",
-    "2049-02-04": "The third day of Tet Holiday",
-    "2049-02-05": "The fourth day of Tet Holiday",
-    "2049-02-06": "The fifth day of Tet Holiday",
+    "2049-02-03": "Second Day of Lunar New Year",
+    "2049-02-04": "Third Day of Lunar New Year",
+    "2049-02-05": "Fourth Day of Lunar New Year",
     "2049-04-11": "Hung Kings' Commemoration Day",
     "2049-04-12": "Hung Kings' Commemoration Day (observed)",
     "2049-04-30": "Liberation Day/Reunification Day",
     "2049-05-01": "International Labor Day",
     "2049-05-03": "International Labor Day (observed)",
     "2049-09-02": "National Day",
+    "2049-09-03": "National Day",
     "2050-01-01": "New Year's Day",
     "2050-01-03": "New Year's Day (observed)",
+    "2050-01-21": "29 of Lunar New Year",
     "2050-01-22": "Lunar New Year's Eve",
     "2050-01-23": "Lunar New Year",
-    "2050-01-24": "The second day of Tet Holiday",
-    "2050-01-25": "The third day of Tet Holiday",
-    "2050-01-26": "The fourth day of Tet Holiday",
-    "2050-01-27": "The fifth day of Tet Holiday",
+    "2050-01-24": "Second Day of Lunar New Year",
+    "2050-01-25": "Third Day of Lunar New Year",
+    "2050-01-26": "Fourth Day of Lunar New Year",
+    "2050-01-27": "Fifth Day of Lunar New Year",
     "2050-04-01": "Hung Kings' Commemoration Day",
     "2050-04-30": "Liberation Day/Reunification Day",
     "2050-05-01": "International Labor Day",
     "2050-05-02": "Liberation Day/Reunification Day (observed)",
     "2050-05-03": "International Labor Day (observed)",
+    "2050-09-01": "National Day",
     "2050-09-02": "National Day"
 }
diff --git a/tox.ini b/tox.ini
index 65941414..948238fd 100644
--- a/tox.ini
+++ b/tox.ini
@@ -4,7 +4,7 @@ requires =
 env_list =
     docs
     pre-commit
-    python3.{13, 12, 11, 10, 9, 8}
+    python3.{13, 12, 11, 10, 9}
 skip_missing_interpreters = true
 
 [testenv]


Test patch:
diff --git a/requirements/tests.txt b/requirements/tests.txt
index 4e4d502e..1502315d 100644
--- a/requirements/tests.txt
+++ b/requirements/tests.txt
@@ -1,10 +1,9 @@
 # Test requirements.
 
-coverage==7.6.1
+coverage==7.6.3
 importlib-metadata==8.5.0
-numpy<2.0.0; python_version < '3.9'
-numpy==2.0.2; python_version == '3.9'
-numpy==2.1.1; python_version > '3.9'
+numpy<2.1.0; python_version < '3.10'
+numpy==2.1.2; python_version >= '3.10'
 polib==1.2.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
diff --git a/tests/common.py b/tests/common.py
index 731217a6..358ea0e7 100644
--- a/tests/common.py
+++ b/tests/common.py
@@ -14,8 +14,8 @@
 import os
 import sys
 import warnings
+from collections.abc import Generator
 from datetime import date
-from typing import Generator
 
 from dateutil.parser import parse
 
diff --git a/tests/countries/test_germany.py b/tests/countries/test_germany.py
index 7363aa95..e35b3d5a 100644
--- a/tests/countries/test_germany.py
+++ b/tests/countries/test_germany.py
@@ -197,6 +197,15 @@ class TestDE(CommonCountryTests, TestCase):
         for subdiv in subdivs_that_dont:
             self.assertNoHoliday(self.subdiv_holidays[subdiv], "2020-05-08")
 
+    def test_80_jahrestag_beendigung_zweiter_weltkrieg(self):
+        subdivs_that_have = {"BE"}
+        subdivs_that_dont = set(DE.subdivisions) - subdivs_that_have
+
+        for subdiv in subdivs_that_have:
+            self.assertHoliday(self.subdiv_holidays[subdiv], "2025-05-08")
+        for subdiv in subdivs_that_dont:
+            self.assertNoHoliday(self.subdiv_holidays[subdiv], "2025-05-08")
+
     def test_christi_himmelfahrt(self):
         known_good = (
             "2014-05-29",
diff --git a/tests/countries/test_vietnam.py b/tests/countries/test_vietnam.py
index cce21f49..38e74235 100644
--- a/tests/countries/test_vietnam.py
+++ b/tests/countries/test_vietnam.py
@@ -32,7 +32,7 @@ class TestVietnam(CommonCountryTests, TestCase):
             "2020-01-01",
         )
 
-    def test_first_day_of_january(self):
+    def test_new_years_day(self):
         self.assertHolidayName("Tết Dương lịch", (f"{year}-01-01" for year in range(1979, 2050)))
 
     def test_lunar_new_year(self):
@@ -53,21 +53,38 @@ class TestVietnam(CommonCountryTests, TestCase):
             (2020, 1, 25),
             (2021, 2, 12),
             (2022, 2, 1),
+            (2023, 1, 22),
+            (2024, 2, 10),
         ):
             dt = date(*dts)
             self.assertHolidayName("Giao thừa Tết Nguyên Đán", _timedelta(dt, -1))
             self.assertHolidayName("Tết Nguyên Đán", dt)
             self.assertHolidayName("Mùng hai Tết Nguyên Đán", _timedelta(dt, +1))
             self.assertHolidayName("Mùng ba Tết Nguyên Đán", _timedelta(dt, +2))
-            self.assertHolidayName("Mùng bốn Tết Nguyên Đán", _timedelta(dt, +3))
-            self.assertHolidayName("Mùng năm Tết Nguyên Đán", _timedelta(dt, +4))
+            if dt.year >= 2013:
+                self.assertHolidayName("Mùng bốn Tết Nguyên Đán", _timedelta(dt, +3))
 
-    def test_king_hung_day(self):
+    def test_hung_kings_day(self):
         self.assertHolidayName(
             "Ngày Giỗ Tổ Hùng Vương",
+            "2007-04-26",
+            "2008-04-15",
+            "2009-04-05",
+            "2010-04-23",
+            "2011-04-12",
+            "2012-03-31",
+            "2013-04-19",
+            "2014-04-09",
+            "2015-04-28",
+            "2016-04-16",
+            "2017-04-06",
+            "2018-04-25",
+            "2019-04-14",
             "2020-04-02",
             "2021-04-21",
             "2022-04-10",
+            "2023-04-29",
+            "2024-04-18",
         )
 
     def test_liberation_day(self):
@@ -78,8 +95,15 @@ class TestVietnam(CommonCountryTests, TestCase):
             "Ngày Quốc tế Lao động", (f"{year}-05-01" for year in range(1979, 2050))
         )
 
-    def test_independence_day(self):
-        self.assertHolidayName("Quốc khánh", (f"{year}-09-02" for year in range(1979, 2050)))
+    def test_national_day(self):
+        self.assertHolidayName(
+            "Quốc khánh",
+            (f"{year}-09-02" for year in range(1979, 2050)),
+            "2021-09-03",
+            "2022-09-01",
+            "2023-09-01",
+            "2024-09-03",
+        )
 
     def test_observed(self):
         observed_holidays = (
@@ -87,7 +111,29 @@ class TestVietnam(CommonCountryTests, TestCase):
             "2012-01-02",
             "2017-01-02",
             "2022-01-03",
+            # Lunar New Year.
+            "2012-01-26",
+            "2013-02-14",
+            "2013-02-15",
+            "2014-01-29",
+            "2014-02-04",
+            "2015-02-17",
+            "2015-02-23",
+            "2016-02-12",
+            "2017-01-26",
+            "2017-02-01",
+            "2018-02-14",
+            "2018-02-20",
+            "2020-01-23",
+            "2020-01-29",
+            "2021-02-10",
+            "2021-02-16",
+            "2023-01-20",
+            "2023-01-26",
+            "2024-02-08",
+            "2024-02-14",
             # Hung Kings' Commemoration Day.
+            "2009-04-06",
             "2012-04-02",
             "2016-04-18",
             "2019-04-15",
@@ -113,6 +159,21 @@ class TestVietnam(CommonCountryTests, TestCase):
         self.assertHoliday(observed_holidays)
         self.assertNoNonObservedHoliday(observed_holidays)
 
+    def test_substituted_holidays(self):
+        self.assertHoliday(
+            "2010-02-19",
+            "2012-01-27",
+            "2013-04-29",
+            "2014-05-02",
+            "2014-09-01",
+            "2015-01-02",
+            "2015-02-16",
+            "2015-04-29",
+            "2018-12-31",
+            "2019-04-29",
+            "2024-04-29",
+        )
+
     def test_l10n_default(self):
         self.assertLocalizedHolidays(
             ("2022-01-01", "Tết Dương lịch"),
@@ -122,13 +183,13 @@ class TestVietnam(CommonCountryTests, TestCase):
             ("2022-02-02", "Mùng hai Tết Nguyên Đán"),
             ("2022-02-03", "Mùng ba Tết Nguyên Đán"),
             ("2022-02-04", "Mùng bốn Tết Nguyên Đán"),
-            ("2022-02-05", "Mùng năm Tết Nguyên Đán"),
             ("2022-04-10", "Ngày Giỗ Tổ Hùng Vương"),
             ("2022-04-11", "Ngày Giỗ Tổ Hùng Vương (nghỉ bù)"),
             ("2022-04-30", "Ngày Chiến thắng"),
             ("2022-05-01", "Ngày Quốc tế Lao động"),
             ("2022-05-02", "Ngày Chiến thắng (nghỉ bù)"),
             ("2022-05-03", "Ngày Quốc tế Lao động (nghỉ bù)"),
+            ("2022-09-01", "Quốc khánh"),
             ("2022-09-02", "Quốc khánh"),
         )
 
@@ -139,15 +200,35 @@ class TestVietnam(CommonCountryTests, TestCase):
             ("2022-01-03", "New Year's Day (observed)"),
             ("2022-01-31", "Lunar New Year's Eve"),
             ("2022-02-01", "Lunar New Year"),
-            ("2022-02-02", "The second day of Tet Holiday"),
-            ("2022-02-03", "The third day of Tet Holiday"),
-            ("2022-02-04", "The fourth day of Tet Holiday"),
-            ("2022-02-05", "The fifth day of Tet Holiday"),
+            ("2022-02-02", "Second Day of Lunar New Year"),
+            ("2022-02-03", "Third Day of Lunar New Year"),
+            ("2022-02-04", "Fourth Day of Lunar New Year"),
             ("2022-04-10", "Hung Kings' Commemoration Day"),
             ("2022-04-11", "Hung Kings' Commemoration Day (observed)"),
             ("2022-04-30", "Liberation Day/Reunification Day"),
             ("2022-05-01", "International Labor Day"),
             ("2022-05-02", "Liberation Day/Reunification Day (observed)"),
             ("2022-05-03", "International Labor Day (observed)"),
+            ("2022-09-01", "National Day"),
             ("2022-09-02", "National Day"),
         )
+
+    def test_l10n_th(self):
+        self.assertLocalizedHolidays(
+            "th",
+            ("2022-01-01", "วันปีใหม่สากล"),
+            ("2022-01-03", "ชดเชยวันปีใหม่สากล"),
+            ("2022-01-31", "วันก่อนวันตรุษเต๊ต"),
+            ("2022-02-01", "วันตรุษเต๊ต"),
+            ("2022-02-02", "วันตรุษเต๊ตวันที่สอง"),
+            ("2022-02-03", "วันตรุษเต๊ตวันที่สาม"),
+            ("2022-02-04", "วันตรุษเต๊ตวันที่สี่"),
+            ("2022-04-10", "วันสักการะบูชาบรรพกษัตริย์หุ่ง"),
+            ("2022-04-11", "ชดเชยวันสักการะบูชาบรรพกษัตริย์หุ่ง"),
+            ("2022-04-30", "วันปลดปล่อยภาคใต้เพื่อรวมชาติ"),
+            ("2022-05-01", "วันแรงงานสากล"),
+            ("2022-05-02", "ชดเชยวันปลดปล่อยภาคใต้เพื่อรวมชาติ"),
+            ("2022-05-03", "ชดเชยวันแรงงานสากล"),
+            ("2022-09-01", "วันชาติเวียตนาม"),
+            ("2022-09-02", "วันชาติเวียตนาม"),
+        )
diff --git a/tests/test_package.py b/tests/test_package.py
index 46ca6436..009f03f9 100644
--- a/tests/test_package.py
+++ b/tests/test_package.py
@@ -23,22 +23,25 @@ class TestPackage(TestCase):
 
         for attr_name, attr_value in {
             "name": "holidays",
-            "summary": "Generate and work with holidays in Python",
+            "summary": "World Holidays Framework",
             "version": holidays.__version__,
         }.items():
             self.assertIn(attr_name, ph_metadata)
             self.assertEqual(ph_metadata[attr_name], attr_value, attr_name)
 
         for attr_name in (
-            "author-email",
             "classifier",
             "description",
             "keywords",
             "license",
             "license-file",
-            "maintainer-email",
+            "maintainer",
             "project-url",
             "requires-python",
         ):
             self.assertIn(attr_name, ph_metadata)
             self.assertTrue(ph_metadata[attr_name], attr_name)
+
+            if attr_name == "maintainer":
+                for maintainer in ("Arkadii Yakovets", "Panpakorn Siripanich", "Serhii Murza"):
+                    self.assertIn(maintainer, ph_metadata["maintainer"])