holidays 0.82__py3-none-any.whl → 0.84__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. holidays/calendars/balinese_saka.py +2 -3
  2. holidays/calendars/buddhist.py +3 -4
  3. holidays/calendars/burmese.py +9 -10
  4. holidays/calendars/chinese.py +8 -9
  5. holidays/calendars/hebrew.py +10 -11
  6. holidays/calendars/hindu.py +27 -28
  7. holidays/calendars/islamic.py +26 -6
  8. holidays/calendars/mandaean.py +2 -3
  9. holidays/calendars/mongolian.py +4 -5
  10. holidays/calendars/persian.py +2 -3
  11. holidays/calendars/sinhala.py +25 -14
  12. holidays/calendars/thai.py +13 -14
  13. holidays/calendars/tibetan.py +12 -13
  14. holidays/countries/__init__.py +1 -0
  15. holidays/countries/angola.py +1 -2
  16. holidays/countries/austria.py +1 -1
  17. holidays/countries/azerbaijan.py +1 -1
  18. holidays/countries/canada.py +27 -13
  19. holidays/countries/denmark.py +18 -6
  20. holidays/countries/fiji.py +2 -3
  21. holidays/countries/finland.py +3 -6
  22. holidays/countries/guernsey.py +1 -2
  23. holidays/countries/guyana.py +24 -32
  24. holidays/countries/india.py +21 -78
  25. holidays/countries/iran.py +133 -269
  26. holidays/countries/ireland.py +1 -1
  27. holidays/countries/israel.py +1 -1
  28. holidays/countries/italy.py +2 -2
  29. holidays/countries/jersey.py +1 -2
  30. holidays/countries/macau.py +5 -8
  31. holidays/countries/malta.py +1 -1
  32. holidays/countries/mauritius.py +10 -9
  33. holidays/countries/montserrat.py +1 -1
  34. holidays/countries/myanmar.py +9 -10
  35. holidays/countries/nepal.py +11 -30
  36. holidays/countries/netherlands.py +28 -24
  37. holidays/countries/new_zealand.py +75 -31
  38. holidays/countries/nigeria.py +53 -75
  39. holidays/countries/norway.py +1 -1
  40. holidays/countries/portugal.py +6 -3
  41. holidays/countries/rwanda.py +2 -2
  42. holidays/countries/sint_maarten.py +1 -1
  43. holidays/countries/slovakia.py +23 -4
  44. holidays/countries/spain.py +418 -214
  45. holidays/countries/sri_lanka.py +58 -91
  46. holidays/countries/suriname.py +1 -2
  47. holidays/countries/sweden.py +1 -1
  48. holidays/countries/switzerland.py +86 -3
  49. holidays/countries/taiwan.py +3 -3
  50. holidays/countries/tanzania.py +19 -29
  51. holidays/countries/thailand.py +8 -7
  52. holidays/countries/trinidad_and_tobago.py +1 -1
  53. holidays/countries/ukraine.py +1 -1
  54. holidays/countries/united_kingdom.py +2 -3
  55. holidays/countries/united_states.py +3 -4
  56. holidays/countries/western_sahara.py +92 -0
  57. holidays/groups/balinese_saka.py +2 -3
  58. holidays/groups/buddhist.py +6 -7
  59. holidays/groups/burmese.py +11 -12
  60. holidays/groups/chinese.py +23 -21
  61. holidays/groups/christian.py +30 -0
  62. holidays/groups/eastern.py +5 -4
  63. holidays/groups/hebrew.py +7 -10
  64. holidays/groups/hindu.py +45 -40
  65. holidays/groups/international.py +1 -1
  66. holidays/groups/islamic.py +10 -3
  67. holidays/groups/mandaean.py +13 -14
  68. holidays/groups/mongolian.py +12 -10
  69. holidays/groups/persian.py +14 -15
  70. holidays/groups/sinhala.py +19 -17
  71. holidays/groups/thai.py +12 -13
  72. holidays/groups/tibetan.py +21 -19
  73. holidays/holiday_base.py +54 -54
  74. holidays/ical.py +1 -2
  75. holidays/locale/ar/LC_MESSAGES/EH.mo +0 -0
  76. holidays/locale/ca/LC_MESSAGES/ES.mo +0 -0
  77. holidays/locale/de/LC_MESSAGES/CH.mo +0 -0
  78. holidays/locale/en_US/LC_MESSAGES/CH.mo +0 -0
  79. holidays/locale/en_US/LC_MESSAGES/EH.mo +0 -0
  80. holidays/locale/en_US/LC_MESSAGES/ES.mo +0 -0
  81. holidays/locale/en_US/LC_MESSAGES/LK.mo +0 -0
  82. holidays/locale/en_US/LC_MESSAGES/NL.mo +0 -0
  83. holidays/locale/es/LC_MESSAGES/EH.mo +0 -0
  84. holidays/locale/es/LC_MESSAGES/ES.mo +0 -0
  85. holidays/locale/fr/LC_MESSAGES/CH.mo +0 -0
  86. holidays/locale/fr/LC_MESSAGES/EH.mo +0 -0
  87. holidays/locale/fy/LC_MESSAGES/NL.mo +0 -0
  88. holidays/locale/it/LC_MESSAGES/CH.mo +0 -0
  89. holidays/locale/nl/LC_MESSAGES/NL.mo +0 -0
  90. holidays/locale/si_LK/LC_MESSAGES/LK.mo +0 -0
  91. holidays/locale/ta_LK/LC_MESSAGES/LK.mo +0 -0
  92. holidays/locale/th/LC_MESSAGES/CH.mo +0 -0
  93. holidays/locale/th/LC_MESSAGES/CN.mo +0 -0
  94. holidays/locale/th/LC_MESSAGES/DK.mo +0 -0
  95. holidays/locale/th/LC_MESSAGES/ES.mo +0 -0
  96. holidays/locale/th/LC_MESSAGES/HK.mo +0 -0
  97. holidays/locale/th/LC_MESSAGES/KR.mo +0 -0
  98. holidays/locale/th/LC_MESSAGES/MO.mo +0 -0
  99. holidays/locale/th/LC_MESSAGES/NL.mo +0 -0
  100. holidays/locale/uk/LC_MESSAGES/CH.mo +0 -0
  101. holidays/locale/uk/LC_MESSAGES/ES.mo +0 -0
  102. holidays/locale/uk/LC_MESSAGES/NL.mo +0 -0
  103. holidays/mixins/child_entity.py +1 -3
  104. holidays/observed_holiday_base.py +25 -14
  105. holidays/registry.py +5 -3
  106. holidays/utils.py +13 -14
  107. holidays/version.py +1 -1
  108. {holidays-0.82.dist-info → holidays-0.84.dist-info}/METADATA +20 -19
  109. {holidays-0.82.dist-info → holidays-0.84.dist-info}/RECORD +113 -104
  110. {holidays-0.82.dist-info → holidays-0.84.dist-info}/WHEEL +0 -0
  111. {holidays-0.82.dist-info → holidays-0.84.dist-info}/licenses/CONTRIBUTORS +0 -0
  112. {holidays-0.82.dist-info → holidays-0.84.dist-info}/licenses/LICENSE +0 -0
  113. {holidays-0.82.dist-info → holidays-0.84.dist-info}/top_level.txt +0 -0
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -11,8 +11,6 @@
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
13
 
14
- from typing import Optional
15
-
16
14
  from holidays.holiday_base import HolidayBase
17
15
 
18
16
 
@@ -22,7 +20,7 @@ class ChildEntity:
22
20
  parent_entity: type[HolidayBase]
23
21
  """The parent entity class."""
24
22
 
25
- parent_entity_subdivision_code: Optional[str] = None
23
+ parent_entity_subdivision_code: str | None = None
26
24
  """The parent entity's corresponding ISO 3166-2 subdivision code."""
27
25
 
28
26
  subdivisions: tuple[str, ...] = ()
@@ -11,13 +11,12 @@
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
13
  from datetime import date
14
- from typing import Optional
15
14
 
16
15
  from holidays.calendars.gregorian import MON, TUE, WED, THU, FRI, SAT, SUN, _timedelta
17
16
  from holidays.holiday_base import DateArg, HolidayBase
18
17
 
19
18
 
20
- class ObservedRule(dict[int, Optional[int]]):
19
+ class ObservedRule(dict[int, int | None]):
21
20
  __slots__ = ()
22
21
 
23
22
  def __add__(self, other):
@@ -106,8 +105,8 @@ class ObservedHolidayBase(HolidayBase):
106
105
 
107
106
  def __init__(
108
107
  self,
109
- observed_rule: Optional[ObservedRule] = None,
110
- observed_since: Optional[int] = None,
108
+ observed_rule: ObservedRule | None = None,
109
+ observed_since: int | None = None,
111
110
  *args,
112
111
  **kwargs,
113
112
  ):
@@ -127,7 +126,7 @@ class ObservedHolidayBase(HolidayBase):
127
126
  return dt_work
128
127
  return dt
129
128
 
130
- def _get_observed_date(self, dt: date, rule: ObservedRule) -> Optional[date]:
129
+ def _get_observed_date(self, dt: date, rule: ObservedRule) -> date | None:
131
130
  delta = rule.get(dt.weekday(), 0)
132
131
  if delta:
133
132
  return (
@@ -143,11 +142,13 @@ class ObservedHolidayBase(HolidayBase):
143
142
 
144
143
  def _add_observed(
145
144
  self,
146
- dt: Optional[DateArg] = None,
147
- name: Optional[str] = None,
148
- rule: Optional[ObservedRule] = None,
145
+ dt: DateArg | None = None,
146
+ name: str | None = None,
147
+ *,
148
+ rule: ObservedRule | None = None,
149
+ force_observed: bool = False,
149
150
  show_observed_label: bool = True,
150
- ) -> tuple[bool, Optional[date]]:
151
+ ) -> tuple[bool, date | None]:
151
152
  if dt is None:
152
153
  return False, None
153
154
 
@@ -155,7 +156,7 @@ class ObservedHolidayBase(HolidayBase):
155
156
  # Convert to date: (m, d) → use self._year; (y, m, d) → use directly.
156
157
  dt = dt if isinstance(dt, date) else date(self._year, *dt) if len(dt) == 2 else date(*dt)
157
158
 
158
- if not self.observed or not self._is_observed(dt):
159
+ if not (force_observed or (self.observed and self._is_observed(dt))):
159
160
  return False, dt
160
161
 
161
162
  dt_observed = self._get_observed_date(dt, rule or self._observed_rule)
@@ -196,16 +197,26 @@ class ObservedHolidayBase(HolidayBase):
196
197
  return True, dt_observed
197
198
 
198
199
  def _move_holiday(
199
- self, dt: date, rule: Optional[ObservedRule] = None, show_observed_label: bool = True
200
- ) -> tuple[bool, Optional[date]]:
200
+ self,
201
+ dt: date,
202
+ *,
203
+ rule: ObservedRule | None = None,
204
+ force_observed: bool = False,
205
+ show_observed_label: bool = True,
206
+ ) -> tuple[bool, date | None]:
201
207
  is_observed, dt_observed = self._add_observed(
202
- dt, rule=rule, show_observed_label=show_observed_label
208
+ dt, rule=rule, force_observed=force_observed, show_observed_label=show_observed_label
203
209
  )
204
210
  if is_observed:
205
211
  self.pop(dt)
206
212
  return is_observed, dt_observed if is_observed else dt
207
213
 
208
- def _populate_observed(self, dts: set[date], multiple: bool = False) -> None:
214
+ def _move_holiday_forced(
215
+ self, dt: date, rule: ObservedRule | None = None
216
+ ) -> tuple[bool, date | None]:
217
+ return self._move_holiday(dt, rule=rule, force_observed=True, show_observed_label=False)
218
+
219
+ def _populate_observed(self, dts: set[date], *, multiple: bool = False) -> None:
209
220
  """
210
221
  When multiple is True, each holiday from a given date has its own observed date.
211
222
  """
holidays/registry.py CHANGED
@@ -13,7 +13,7 @@
13
13
  import importlib
14
14
  from collections.abc import Iterable
15
15
  from threading import RLock
16
- from typing import Any, Optional
16
+ from typing import Any
17
17
 
18
18
  from holidays.holiday_base import HolidayBase
19
19
 
@@ -278,6 +278,7 @@ COUNTRIES: RegistryDict = {
278
278
  "venezuela": ("Venezuela", "VE", "VEN"),
279
279
  "vietnam": ("Vietnam", "VN", "VNM"),
280
280
  "wallis_and_futuna": ("WallisAndFutuna", "WF", "WLF", "HolidaysWF"),
281
+ "western_sahara": ("WesternSahara", "EH", "ESH"),
281
282
  "yemen": ("Yemen", "YE", "YEM"),
282
283
  "zambia": ("Zambia", "ZM", "ZMB"),
283
284
  "zimbabwe": ("Zimbabwe", "ZW", "ZWE"),
@@ -326,7 +327,7 @@ class EntityLoader:
326
327
  cls = self.get_entity()
327
328
  return cls(*args, **kwargs) # type: ignore[misc, operator]
328
329
 
329
- def __getattr__(self, name: str) -> Optional[Any]:
330
+ def __getattr__(self, name: str) -> Any | None:
330
331
  """Return attribute of a lazy-loaded entity."""
331
332
  cls = self.get_entity()
332
333
  return getattr(cls, name)
@@ -338,7 +339,7 @@ class EntityLoader:
338
339
  f"use the '{self.module_name}.{self.entity_name}' class directly."
339
340
  )
340
341
 
341
- def get_entity(self) -> Optional[HolidayBase]:
342
+ def get_entity(self) -> HolidayBase | None:
342
343
  """Return lazy-loaded entity."""
343
344
  if self.entity is None:
344
345
  # Avoid deadlock due to importlib.import_module not being thread-safe by caching all
@@ -351,6 +352,7 @@ class EntityLoader:
351
352
  @staticmethod
352
353
  def _get_entity_codes(
353
354
  container: RegistryDict,
355
+ *,
354
356
  include_aliases: bool = True,
355
357
  max_code_length: int = 3,
356
358
  min_code_length: int = 2,
holidays/utils.py CHANGED
@@ -23,7 +23,6 @@ __all__ = (
23
23
  import warnings
24
24
  from collections.abc import Iterable
25
25
  from functools import cache
26
- from typing import Optional, Union
27
26
 
28
27
  from holidays.holiday_base import CategoryArg, HolidayBase
29
28
  from holidays.registry import EntityLoader
@@ -31,14 +30,14 @@ from holidays.registry import EntityLoader
31
30
 
32
31
  def country_holidays(
33
32
  country: str,
34
- subdiv: Optional[str] = None,
35
- years: Optional[Union[int, Iterable[int]]] = None,
33
+ subdiv: str | None = None,
34
+ years: int | Iterable[int] | None = None,
36
35
  expand: bool = True,
37
36
  observed: bool = True,
38
- prov: Optional[str] = None,
39
- state: Optional[str] = None,
40
- language: Optional[str] = None,
41
- categories: Optional[CategoryArg] = None,
37
+ prov: str | None = None,
38
+ state: str | None = None,
39
+ language: str | None = None,
40
+ categories: CategoryArg | None = None,
42
41
  ) -> HolidayBase:
43
42
  """Return a new dictionary-like [HolidayBase][holidays.holiday_base.HolidayBase] object.
44
43
 
@@ -230,11 +229,11 @@ def country_holidays(
230
229
 
231
230
  def financial_holidays(
232
231
  market: str,
233
- subdiv: Optional[str] = None,
234
- years: Optional[Union[int, Iterable[int]]] = None,
232
+ subdiv: str | None = None,
233
+ years: int | Iterable[int] | None = None,
235
234
  expand: bool = True,
236
235
  observed: bool = True,
237
- language: Optional[str] = None,
236
+ language: str | None = None,
238
237
  ) -> HolidayBase:
239
238
  """Return a new dictionary-like [HolidayBase][holidays.holiday_base.HolidayBase] object.
240
239
 
@@ -315,12 +314,12 @@ def financial_holidays(
315
314
 
316
315
  def CountryHoliday( # noqa: N802
317
316
  country: str,
318
- subdiv: Optional[str] = None,
319
- years: Optional[Union[int, Iterable[int]]] = None,
317
+ subdiv: str | None = None,
318
+ years: int | Iterable[int] | None = None,
320
319
  expand: bool = True,
321
320
  observed: bool = True,
322
- prov: Optional[str] = None,
323
- state: Optional[str] = None,
321
+ prov: str | None = None,
322
+ state: str | None = None,
324
323
  ) -> HolidayBase:
325
324
  """
326
325
  Note:
holidays/version.py CHANGED
@@ -10,4 +10,4 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
- __version__ = "0.82"
13
+ __version__ = "0.84"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: holidays
3
- Version: 0.82
3
+ Version: 0.84
4
4
  Summary: Open World Holidays Framework
5
5
  Author: Vacanza Team
6
6
  Maintainer: Arkadii Yakovets, Panpakorn Siripanich, Serhii Murza
@@ -17,18 +17,18 @@ Classifier: Intended Audience :: Financial and Insurance Industry
17
17
  Classifier: Intended Audience :: Information Technology
18
18
  Classifier: Operating System :: OS Independent
19
19
  Classifier: Programming Language :: Python :: 3 :: Only
20
- Classifier: Programming Language :: Python :: 3.9
21
20
  Classifier: Programming Language :: Python :: 3.10
22
21
  Classifier: Programming Language :: Python :: 3.11
23
22
  Classifier: Programming Language :: Python :: 3.12
24
23
  Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Programming Language :: Python :: 3.14
25
25
  Classifier: Programming Language :: Python :: Implementation :: CPython
26
26
  Classifier: Topic :: File Formats :: JSON
27
27
  Classifier: Topic :: Office/Business :: Financial :: Accounting
28
28
  Classifier: Topic :: Office/Business :: Financial :: Investment
29
29
  Classifier: Topic :: Office/Business :: Scheduling
30
30
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
31
- Requires-Python: >=3.9
31
+ Requires-Python: >=3.10
32
32
  Description-Content-Type: text/markdown
33
33
  License-File: CONTRIBUTORS
34
34
  License-File: LICENSE
@@ -52,7 +52,7 @@ specific date is a holiday as fast and flexible as possible.
52
52
  <tr>
53
53
  <td>CI/CD</td>
54
54
  <td>
55
- <a href="https://github.com/vacanza/holidays/actions/workflows/ci-cd.yml?query=branch%3Adev"><img src="https://img.shields.io/github/actions/workflow/status/vacanza/holidays/ci-cd.yml?branch=dev&color=41BE4A&style=flat" alt="CI/CD status"></a>&nbsp;<a href="https://holidays.readthedocs.io/en/latest/?badge=latest"><img src="https://img.shields.io/readthedocs/holidays?color=41BE4A&style=flat" alt="Documentation status"></a>
55
+ <a href="https://github.com/vacanza/holidays/actions/workflows/ci-cd.yml?query=branch%3Adev"><img src="https://img.shields.io/github/actions/workflow/status/vacanza/holidays/ci-cd.yml?branch=dev&color=41B5BE&style=flat" alt="CI/CD status"></a>&nbsp;<a href="https://holidays.readthedocs.io/en/latest/?badge=latest"><img src="https://img.shields.io/readthedocs/holidays?color=41B5BE&style=flat" alt="Documentation status"></a>&nbsp;<a href="https://snyk.io/advisor/python/holidays/"><img alt="Open World Holidays Package Health Score" src="https://img.shields.io/badge/dynamic/regex?url=https%3A%2F%2Fsnyk.io%2Fadvisor%2Fpython%2Fholidays%2Fbadge.svg&search=%5Cd%7B1%2C3%7D%2F%5Cd%7B1%2C3%7D&style=flat&label=snyk&color=41B5BE"></a>
56
56
  </td>
57
57
  </tr>
58
58
  <tr>
@@ -64,7 +64,7 @@ specific date is a holiday as fast and flexible as possible.
64
64
  <tr>
65
65
  <td>GitHub</td>
66
66
  <td>
67
- <a href="https://github.com/vacanza/holidays/stargazers"><img src="https://img.shields.io/github/stars/vacanza/holidays?color=41BE4A&style=flat" alt="GitHub stars"></a>&nbsp;<a href="https://github.com/vacanza/holidays/forks"><img src="https://img.shields.io/github/forks/vacanza/holidays?color=41BE4A&style=flat" alt="GitHub forks"></a>&nbsp;<a href="https://github.com/vacanza/holidays/graphs/contributors"><img src="https://img.shields.io/github/contributors/vacanza/holidays?color=41BE4A&style=flat" alt="GitHub contributors"></a>&nbsp;<a href="https://github.com/vacanza/holidays/commits/dev"><img src="https://img.shields.io/github/last-commit/vacanza/holidays/dev?color=41BE4A&style=flat" alt="GitHub last commit"></a>
67
+ <a href="https://github.com/vacanza/holidays/stargazers"><img src="https://img.shields.io/github/stars/vacanza/holidays?color=41B5BE&style=flat" alt="GitHub stars"></a>&nbsp;<a href="https://github.com/vacanza/holidays/forks"><img src="https://img.shields.io/github/forks/vacanza/holidays?color=41B5BE&style=flat" alt="GitHub forks"></a>&nbsp;<a href="https://github.com/vacanza/holidays/graphs/contributors"><img src="https://img.shields.io/github/contributors/vacanza/holidays?color=41B5BE&style=flat" alt="GitHub contributors"></a>&nbsp;<a href="https://github.com/vacanza/holidays/commits/dev"><img src="https://img.shields.io/github/last-commit/vacanza/holidays/dev?color=41B5BE&style=flat" alt="GitHub last commit"></a>
68
68
  </td>
69
69
  </tr>
70
70
  <tr>
@@ -73,12 +73,6 @@ specific date is a holiday as fast and flexible as possible.
73
73
  <a href="https://doi.org/10.5281/zenodo.14884702"><img src="https://img.shields.io/badge/DOI-10.5281/zenodo.14884702-41B5BE?style=flat" alt="Open World Holidays Framework DOI"></a>
74
74
  </td>
75
75
  </tr>
76
- <tr>
77
- <td>Snyk</td>
78
- <td>
79
- <a href="https://snyk.io/advisor/python/holidays/"><img src="https://snyk.io/advisor/python/holidays/badge.svg" alt="Open World Holidays Package Health Score"></a>
80
- </td>
81
- </tr>
82
76
  </table>
83
77
 
84
78
  ## Install
@@ -100,7 +94,7 @@ version upgrades.
100
94
 
101
95
  ## Documentation
102
96
 
103
- The documentation is hosted on [Read the Docs](https://holidays.readthedocs.io/).
97
+ The documentation is hosted on [Read the Docs](https://holidays.readthedocs.io).
104
98
 
105
99
  ## Quick Start
106
100
 
@@ -142,9 +136,9 @@ and detailed information.
142
136
 
143
137
  ## Available Countries
144
138
 
145
- We currently support 248 country codes. The standard way to refer to a country is by using its [ISO
146
- 3166-1 alpha-2 code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes), the same used
147
- for domain names, and for a subdivision its [ISO 3166-2
139
+ We currently support 249 country codes and are fully compatible with [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html).
140
+ The standard way to refer to a country is by using its [ISO 3166-1 alpha-2 code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes),
141
+ the same used for domain names, and for a subdivision its [ISO 3166-2
148
142
  code](https://en.wikipedia.org/wiki/ISO_3166-2). Some countries have common or foreign names or
149
143
  abbreviations as aliases for their subdivisions. These are defined in the (optional)
150
144
  `subdivisions_aliases` attribute. Some of the countries support more than one language for holiday
@@ -600,7 +594,7 @@ any) in brackets, available languages and additional holiday categories. All cou
600
594
  <td>Denmark</td>
601
595
  <td>DK</td>
602
596
  <td></td>
603
- <td><strong>da</strong>, en_US, uk</td>
597
+ <td><strong>da</strong>, en_US, th, uk</td>
604
598
  <td>OPTIONAL</td>
605
599
  </tr>
606
600
  <tr>
@@ -1265,7 +1259,7 @@ any) in brackets, available languages and additional holiday categories. All cou
1265
1259
  <td>Netherlands</td>
1266
1260
  <td>NL</td>
1267
1261
  <td></td>
1268
- <td>en_US, fy, <strong>nl</strong>, uk</td>
1262
+ <td>en_US, fy, <strong>nl</strong>, th, uk</td>
1269
1263
  <td>OPTIONAL</td>
1270
1264
  </tr>
1271
1265
  <tr>
@@ -1650,7 +1644,7 @@ any) in brackets, available languages and additional holiday categories. All cou
1650
1644
  <td>Spain</td>
1651
1645
  <td>ES</td>
1652
1646
  <td>Autonomous communities: AN (Andalucía), AR (Aragón), AS (Asturias), CB (Cantabria), CE (Ceuta), CL (Castilla y León), CM (Castilla-La Mancha), CN (Canarias), CT (Cataluña, Catalunya), EX (Extremadura), GA (Galicia), IB (Islas Baleares, Illes Balears), MC (Murcia), MD (Madrid), ML (Melilla), NC (Navarra), PV (País Vasco), RI (La Rioja), VC (Valenciana)</td>
1653
- <td>ca, en_US, <strong>es</strong>, uk</td>
1647
+ <td>ca, en_US, <strong>es</strong>, th, uk</td>
1654
1648
  <td></td>
1655
1649
  </tr>
1656
1650
  <tr>
@@ -1692,7 +1686,7 @@ any) in brackets, available languages and additional holiday categories. All cou
1692
1686
  <td>Switzerland</td>
1693
1687
  <td>CH</td>
1694
1688
  <td>Cantons: AG (Aargau), AI (Appenzell Innerrhoden), AR (Appenzell Ausserrhoden), BE (Bern, Berne), BL (Basel-Landschaft), BS (Basel-Stadt), FR (Freiburg, Fribourg), GE (Genève), GL (Glarus), GR (Graubünden, Grigioni, Grischun), JU (Jura), LU (Luzern), NE (Neuchâtel), NW (Nidwalden), OW (Obwalden), SG (Sankt Gallen), SH (Schaffhausen), SO (Solothurn), SZ (Schwyz), TG (Thurgau), TI (Ticino), UR (Uri), VD (Vaud), VS (Valais, Wallis), ZG (Zug), ZH (Zürich)</td>
1695
- <td><strong>de</strong>, en_US, fr, it, uk</td>
1689
+ <td><strong>de</strong>, en_US, fr, it, th, uk</td>
1696
1690
  <td>HALF_DAY, OPTIONAL</td>
1697
1691
  </tr>
1698
1692
  <tr>
@@ -1906,6 +1900,13 @@ any) in brackets, available languages and additional holiday categories. All cou
1906
1900
  <td></td>
1907
1901
  </tr>
1908
1902
  <tr>
1903
+ <td>Western Sahara</td>
1904
+ <td>EH</td>
1905
+ <td></td>
1906
+ <td><strong>ar</strong>, en_US, es, fr</td>
1907
+ <td></td>
1908
+ </tr>
1909
+ <tr>
1909
1910
  <td>Yemen</td>
1910
1911
  <td>YE</td>
1911
1912
  <td></td>