Repository: vacanza/holidays
Pull request #2140 (2024-11-26 06:49:01)

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


codecov[bot]: ## [Codecov](https://app.codecov.io/gh/vacanza/holidays/pull/2140?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 100.00%. Comparing base [(`93b3ca9`)](https://app.codecov.io/gh/vacanza/holidays/commit/93b3ca994342dd79b509c23aaad28ed89dc8543c?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) to head [(`4603939`)](https://app.codecov.io/gh/vacanza/holidays/commit/46039397379a812c610e974c1c336ba580c444d3?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff            @@
##               dev     #2140   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          194       194           
  Lines        11716     11716           
  Branches      1771      1771           
=========================================
  Hits         11716     11716           
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/vacanza/holidays/pull/2140?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).

wth-d: > Hi @wth-d, thanks for addressing this! I'm really happy this feature request has found its implementer!
> 
> I understand it's still in a draft state, just though you'd like some early feedback on how to make your PR better:

Hi, thanks for your feedback and for posting this issue. I will try to address your feedback (it may have some delays).
arkid15r: > > Hi @wth-d, thanks for addressing this! I'm really happy this feature request has found its implementer!
> > I understand it's still in a draft state, just though you'd like some early feedback on how to make your PR better:
> 
> Hi, thanks for your feedback and for posting this issue. I will try to address your feedback (it may have some delays).

Hi @wth-d 
Any progress w/ `pop_named` tests? Are you still interested in working on it or don't mind to offload it to the maintainers :) ?

wth-d: 
> Hi @wth-d Any progress w/ `pop_named` tests? Are you still interested in working on it or don't mind to offload it to the maintainers :) ?


Hi, sorry I was busy in the last few weeks. I'm fine with offloading it to the maintainers now.

I've also got some draft of tests to add but haven't verified their correctness:

```python
    def test_contains(self):
        self.assertIn("2022-01-01", self.hb)
        removed_dates = self.hb.pop_named("Day", lookup="contains")
        self.assertEqual(len(removed_dates), 6)
        self.assertNotIn("2022-01-01", self.hb)
        self.assertNotIn("2022-06-19", self.hb)
        self.assertNotIn("2022-06-20", self.hb)
        self.assertNotIn("2022-07-04", self.hb)
        self.assertNotIn("2022-12-25", self.hb)
        self.assertNotIn("2022-12-26", self.hb)

    def test_exact(self):
        self.assertIn("2022-01-01", self.hb)
        removed_dates = self.hb.pop_named("Presidents' Day", lookup="exact")
        self.assertEqual(len(removed_dates), 1)
        self.assertNotIn("2022-02-21", self.hb)

    def test_icontains(self):
        self.assertIn("2022-01-01", self.hb)
        removed_dates = self.hb.pop_named("day", lookup="icontains")
        self.assertEqual(len(removed_dates), 6)
        self.assertNotIn("2022-01-01", self.hb)
        self.assertNotIn("2022-06-19", self.hb)
        self.assertNotIn("2022-06-20", self.hb)
        self.assertNotIn("2022-07-04", self.hb)
        self.assertNotIn("2022-12-25", self.hb)
        self.assertNotIn("2022-12-26", self.hb)
```

A strange thing was that when I executed `h.get_named("Day", lookup="contains", split_multiple_names=False)` using the holidays library installed from pip, I got this as the result:
```
[datetime.date(2022, 1, 1), datetime.date(2022, 5, 30), datetime.date(2022, 6, 19), 
datetime.date(2022, 6, 20), datetime.date(2022, 7, 4), datetime.date(2022, 9, 5), 
datetime.date(2022, 11, 11), datetime.date(2022, 12, 25), datetime.date(2022, 12, 26), 
datetime.date(2022, 1, 17)]
```
but when I executed it in the tests/test_holiday_base.py file, I got this:
```
[datetime.date(2022, 1, 1), datetime.date(2022, 6, 19), datetime.date(2022, 6, 20), 
datetime.date(2022, 7, 4), datetime.date(2022, 12, 25), datetime.date(2022, 12, 26)]
```

KJhellico: > but when I executed it in the tests/test_holiday_base.py file (using `self.hb` instead of `h`), I got this:

self.hb is special `CountryStub1` class, and it doesn't contain a full set of US holidays.
KJhellico: We need to add hanfling of all `lookup` variants [here](https://github.com/vacanza/holidays/pull/2140/files#diff-562f5d006e6ece6a66fcf913a179afa4d1486bc39eb18cd5b6d639df1fde2674L1056), similar to `get_named()`.
KJhellico: And in the case when we delete one holiday from multiple holidays date, should the method return this date?
arkid15r: > And in the case when we delete one holiday from multiple holidays date, should the method return this date?

I think yes as long as there is another holiday on the same date.
KJhellico: But according to documentation, it returns _list of dates **removed**_.  And this date has not been removed because there is still a holiday.
arkid15r: > But according to documentation, it returns _list of dates **removed**_. And this date has not been removed because there is still a holiday.

Right, I forgot we talk about `pop_named` not `get_named`. This is something we need think through in order to minimize confusion from end users perspective.
KJhellico: I decide to bring this good idea to completion.

When deleting _one_ holiday from multiple holidays date, this date will be _present_ in function result (i.e., function behavior has not changed).
sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2140) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [C Reliability Rating on New Code](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2140) (required ≥ A)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2140)

##   
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/light_bulb-16px.png '') Catch issues before they fail your Quality Gate with our IDE extension ![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/sonarlint-16px.png '') [SonarQube for IDE](https://www.sonarsource.com/products/sonarlint/features/connected-mode/?referrer=pull-request)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2140) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [1 New issue](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2140&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2140&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=vacanza_python-holidays&pullRequest=2140&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2140&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2140&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2140)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2140) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [1 New issue](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2140&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2140&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=vacanza_python-holidays&pullRequest=2140&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2140&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2140&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2140)



Patch:
diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml
index 3b0ad95e..7a96e6e4 100644
--- a/.github/workflows/ci-cd.yml
+++ b/.github/workflows/ci-cd.yml
@@ -35,16 +35,16 @@ jobs:
     runs-on: ubuntu-24.04
     steps:
       - name: Check out repository
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
 
       - name: Set up Python
-        uses: actions/setup-python@v5
+        uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55
         with:
           check-latest: true
           python-version: '3.13'
 
       - name: Run pre-commit
-        uses: pre-commit/action@v3.0.1
+        uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd
 
   code-ql:
     name: CodeQL
@@ -55,15 +55,15 @@ jobs:
     runs-on: ubuntu-24.04
     steps:
       - name: Check out repository
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
 
       - name: Initialize CodeQL
-        uses: github/codeql-action/init@v3
+        uses: github/codeql-action/init@1b549b9259bda1cb5ddde3b41741a82a2d15a841
         with:
           languages: python
 
       - name: Perform CodeQL Analysis
-        uses: github/codeql-action/analyze@v3
+        uses: github/codeql-action/analyze@1b549b9259bda1cb5ddde3b41741a82a2d15a841
         with:
           category: '/language:python'
 
@@ -86,10 +86,10 @@ jobs:
           - '3.13'
     steps:
       - name: Check out repository
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
 
       - name: Set up Python ${{ matrix.python-version }}
-        uses: actions/setup-python@v5
+        uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55
         with:
           allow-prereleases: true
           cache: pip
@@ -110,7 +110,7 @@ jobs:
           make test
 
       - name: Upload coverage to Codecov
-        uses: codecov/codecov-action@v5
+        uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574
         with:
           token: ${{ secrets.CODECOV_TOKEN }}
 
@@ -120,10 +120,10 @@ jobs:
     runs-on: ubuntu-24.04
     steps:
       - name: Check out repository
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
 
       - name: Set up Python
-        uses: actions/setup-python@v5
+        uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55
         with:
           cache: pip
           cache-dependency-path: |
@@ -142,7 +142,7 @@ jobs:
           make package
 
       - name: Upload package artifacts
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
         with:
           name: dist
           path: dist
@@ -158,7 +158,7 @@ jobs:
 
       - name: Upload SBOM
         if: startsWith(github.event.ref, 'refs/tags/v')
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
         with:
           name: sbom
           path: holidays-${{ env.VERSION }}-sbom.json
@@ -175,10 +175,10 @@ jobs:
           - windows-latest
     steps:
       - name: Check out repository
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
 
       - name: Set up Python
-        uses: actions/setup-python@v5
+        uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55
         with:
           cache: pip
           cache-dependency-path: |
@@ -188,7 +188,7 @@ jobs:
           python-version: '3.13'
 
       - name: Get package artifacts
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e
         with:
           name: dist
           path: dist
@@ -210,10 +210,10 @@ jobs:
     needs: test
     steps:
       - name: Check out repository
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
 
       - name: Set Up Python
-        uses: actions/setup-python@v5
+        uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55
         with:
           cache: pip
           cache-dependency-path: requirements/docs.txt
@@ -244,13 +244,13 @@ jobs:
     runs-on: ubuntu-24.04
     steps:
       - name: Download package artifacts
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e
         with:
           name: dist
           path: dist
 
       - name: Publish package distributions to PyPI
-        uses: pypa/gh-action-pypi-publish@release/v1
+        uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc
 
   sign-artifacts:
     name: Create SHA1 checksums and Sigstore signatures
@@ -261,7 +261,7 @@ jobs:
       id-token: write
     steps:
       - name: Download package artifacts
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e
         with:
           name: dist
           path: dist
@@ -274,14 +274,14 @@ jobs:
           done
 
       - name: Sign the files using Sigstore
-        uses: sigstore/gh-action-sigstore-python@v3.0.0
+        uses: sigstore/gh-action-sigstore-python@f514d46b907ebcd5bedc05145c03b69c1edd8b46
         with:
           inputs: |
             ./dist/*.tar.gz
             ./dist/*.whl
 
       - name: Upload package dist and signatures
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
         with:
           name: signed-artifacts
           path: dist
@@ -295,12 +295,12 @@ jobs:
       contents: write
     steps:
       - name: Download SBOM
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e
         with:
           name: sbom
 
       - name: Download package dist and signatures
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e
         with:
           name: signed-artifacts
           path: dist
diff --git a/.github/workflows/pre-commit-autoupdate.yml b/.github/workflows/pre-commit-autoupdate.yml
index 495a3ce8..43389d29 100644
--- a/.github/workflows/pre-commit-autoupdate.yml
+++ b/.github/workflows/pre-commit-autoupdate.yml
@@ -17,9 +17,9 @@ jobs:
       pull-requests: write
     runs-on: ubuntu-24.04
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
 
-      - uses: actions/setup-python@v5
+      - uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55
         with:
           cache: pip
           python-version: '3.12'
@@ -29,7 +29,7 @@ jobs:
           python -m pip install pre-commit
 
       - name: Use pre-commit environment cache
-        uses: actions/cache@v4
+        uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684
         with:
           key: ${{ runner.os }}-pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}
           path: ~/.cache/pre-commit
@@ -40,7 +40,7 @@ jobs:
           pre-commit autoupdate
           pre-commit run --all-files
 
-      - uses: peter-evans/create-pull-request@v7.0.8
+      - uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e
         with:
           base: dev
           body: Update pre-commit hooks to their latest versions.
diff --git a/.github/workflows/prl-labeler.yml b/.github/workflows/prl-labeler.yml
index 5ae9e911..d00a1d2a 100644
--- a/.github/workflows/prl-labeler.yml
+++ b/.github/workflows/prl-labeler.yml
@@ -10,4 +10,4 @@ jobs:
       pull-requests: write
     runs-on: ubuntu-24.04
     steps:
-      - uses: actions/labeler@v5
+      - uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9
diff --git a/.github/workflows/update-snapshots.yml b/.github/workflows/update-snapshots.yml
index fcfc3aed..38bcf549 100644
--- a/.github/workflows/update-snapshots.yml
+++ b/.github/workflows/update-snapshots.yml
@@ -16,10 +16,10 @@ jobs:
     runs-on: ubuntu-24.04
     steps:
       - name: Check out repository
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
 
       - name: Set up Python
-        uses: actions/setup-python@v5
+        uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55
         with:
           cache: pip
           cache-dependency-path: |
@@ -38,7 +38,7 @@ jobs:
         run: |
           make snapshot
 
-      - uses: peter-evans/create-pull-request@v7.0.8
+      - uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e
         with:
           base: dev
           body: Automatically generated snapshots update.
diff --git a/AUTHORS.md b/AUTHORS.md
index 042be933..a8e38eff 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -55,6 +55,7 @@ Greg Rafferty
 Győző Papp
 Heikki Orsila
 Henrik Sozzi
+Hiroki Kawahara
 Hugh McNamara
 Hugo van Kemenade
 Isabelle COWAN-BERGMAN
@@ -81,6 +82,7 @@ Kate Golovanova
 Kelsey Karin Hawley
 Koert van der Veer
 Koki Nomura
+Kriti Birda
 Maina Kamau
 Malthe Borch
 Marek Šuppa
@@ -144,4 +146,5 @@ Victor Luna
 Victor Miti
 Ville Skyttä
 Vu Nhat Chuong
+Wasif Shahzad
 Youhei Sakurai
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 2a78b351..a9207a1f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -103,6 +103,24 @@ The project provides MkDocs documentation under `./docs`, published online on
 Great documentation is absolutely key in any project. If you are not familiar with Markdown for
 MkDocs, you can read a primer [here](https://www.mkdocs.org/user-guide/writing-your-docs/).
 
+## GitHub Actions
+
+All new GitHub actions must use commit SHAs instead of version tags. When updating an action, contributors should explicitly use the commit SHA from the latest release.
+
+### Example
+
+Allowed:
+
+```yaml
+uses: actions/checkout@8fdb40e56baf9c5dc24e3ab5bc2a91db65f39f21
+```
+
+Not allowed:
+
+```yaml
+uses: actions/checkout@v4
+```
+
 ## Contributors
 
 In order to keep the list of contributors up to date, we encourage you add your name (in
diff --git a/README.md b/README.md
index 3a732d1e..fa562832 100644
--- a/README.md
+++ b/README.md
@@ -99,7 +99,7 @@ and detailed information.
 
 ## Available Countries
 
-We currently support 160 country codes. The standard way to refer to a country is by using its [ISO
+We currently support 162 country codes. The standard way to refer to a country is by using its [ISO
 3166-1 alpha-2 code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes), the same used
 for domain names, and for a subdivision its [ISO 3166-2
 code](https://en.wikipedia.org/wiki/ISO_3166-2). Some countries have common or foreign names or
@@ -498,6 +498,13 @@ any) in brackets, available languages and additional holiday categories. All cou
 <td></td>
 </tr>
 <tr>
+<td>Fiji</td>
+<td>FJ</td>
+<td></td>
+<td></td>
+<td>WORKDAY</td>
+</tr>
+<tr>
 <td>Finland</td>
 <td>FI</td>
 <td></td>
@@ -659,6 +666,13 @@ any) in brackets, available languages and additional holiday categories. All cou
 <td></td>
 </tr>
 <tr>
+<td>Ivory Coast</td>
+<td>CI</td>
+<td></td>
+<td>en_CI, en_US, <strong>fr</strong></td>
+<td></td>
+</tr>
+<tr>
 <td>Jamaica</td>
 <td>JM</td>
 <td></td>
@@ -914,7 +928,7 @@ any) in brackets, available languages and additional holiday categories. All cou
 <td>Pakistan</td>
 <td>PK</td>
 <td></td>
-<td></td>
+<td><strong>en_PK</strong>, en_US, ur_PK</td>
 <td></td>
 </tr>
 <tr>
diff --git a/docs/api.md b/docs/api.md
index 3ce73b6d..bd943a79 100644
--- a/docs/api.md
+++ b/docs/api.md
@@ -2,3 +2,4 @@
 
 ::: holidays.utils
 ::: holidays.holiday_base
+::: holidays.ical
diff --git a/docs/examples.md b/docs/examples.md
index d5def636..3598c3fa 100644
--- a/docs/examples.md
+++ b/docs/examples.md
@@ -394,5 +394,77 @@ True
 True
 ```
 
-!!! danger "Deprecated"
-    In the future
+## Generate iCalendar content and export to `.ics`
+
+[ICalExporter][holidays.ical.ICalExporter] facilitates the creation and export of iCalendar files
+in compliance with [RFC 5545](https://datatracker.ietf.org/doc/html/rfc5545).
+
+``` python
+>>> from holidays import country_holidays
+>>> from holidays.ical import ICalExporter
+>>> us_holidays = country_holidays('US', years=2020)
+# Initializes the iCalendar exporter.
+>>> exporter = ICalExporter(us_holidays)
+```
+
+To create iCalendar content, use `generate`.
+
+``` python
+>>> from holidays import country_holidays
+>>> from holidays.ical import ICalExporter
+>>> th_holidays = country_holidays('TH', years=2024)
+>>> exporter = ICalExporter(th_holidays)
+>>> ical_content = exporter.generate()
+# Thailand's Songkran Festival (April 13th–15th) should be counted as a single
+# VEVENT with a duration of three days.
+>>> ical_content.count("SUMMARY:วันสงกรานต์\r\n")
+1
+>>> "DURATION:P3D\r\n" in ical_content
+True
+# Adds ";LANGUAGE=" to SUMMARY too.
+>>> exporter = ICalExporter(th_holidays, show_language=True)
+>>> ical_content = exporter.generate()
+>>> ical_content.count("SUMMARY;LANGUAGE=th:วันสงกรานต์\r\n")
+1
+```
+
+!!! tip "Tip"
+    Although the iCalendar specification supports a wide range of language formats as outlined
+    in [RFC 5646](https://datatracker.ietf.org/doc/html/rfc5646), the Holidays object requires
+    that the `language` attribute adhere to the [ISO 639-1 or
+    ISO 639-2](https://www.loc.gov/standards/iso639-2/php/code_list.php) language codes,
+    such as `en` or `pap-AW`.
+
+    Additionally, if no `language` is specified for a holiday, but a `default_language` is set
+    for the Holiday object, the default language will be used instead.
+
+``` python
+>>> from holidays import country_holidays
+>>> from holidays.ical import ICalExporter
+>>> cn_holidays = country_holidays("CN", years=2024, language="en_US")
+>>> jp_holidays = country_holidays("JP", years=2024, language="en_US")
+>>> kr_holidays = country_holidays("KR", years=2024, language="en_US")
+>>> east_asia_holidays = cn_holidays + jp_holidays + kr_holidays
+>>> ical_content = ICalExporter(east_asia_holidays).generate()
+# Even with the combined China-Japan-Korea calendar, there should be only one
+# 'New Year's Day' VEVENT.
+>>> ical_content.count("SUMMARY:New Year's Day\r\n")
+1
+```
+
+To export to `.ics` format, use `save_ics`.
+
+``` python
+>>> from pathlib import Path
+>>> from holidays import financial_holidays
+>>> from holidays.ical import ICalExporter
+# Export the NYSE_2024_calendar.ics file in the current directory
+>>> nyse_exporter = ICalExporter(financial_holidays("NYSE", years=2024))
+>>> nyse_exporter.save_ics(file_path="NYSE_2024_calendar.ics")
+# Export the NYSE_2024_calendar.ics file to MS Windows' Downloads folder instead.
+>>> downloads_path = Path.home() / "Downloads"
+>>> nyse_exporter.save_ics(file_path=str(downloads_path / "NYSE_2024_calendar.ics"))
+```
+
+For advanced features and customization of the exported `.ics` output, consider using
+the [icalendar](https://github.com/collective/icalendar) package.
diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py
index 3268b1b9..97dd3d39 100644
--- a/holidays/countries/__init__.py
+++ b/holidays/countries/__init__.py
@@ -63,6 +63,7 @@ from .el_salvador import ElSalvador, SV, SLV
 from .estonia import Estonia, EE, EST
 from .eswatini import Eswatini, SZ, SZW, Swaziland
 from .ethiopia import Ethiopia, ET, ETH
+from .fiji import Fiji, FJ, FJI
 from .finland import Finland, FI, FIN
 from .france import France, FR, FRA
 from .gabon import Gabon, GA, GAB
@@ -86,6 +87,7 @@ from .ireland import Ireland, IE, IRL
 from .isle_of_man import IsleOfMan, IM, IMN
 from .israel import Israel, IL, ISR
 from .italy import Italy, IT, ITA
+from .ivory_coast import IvoryCoast, CI, CIV
 from .jamaica import Jamaica, JM, JAM
 from .japan import Japan, JP, JPN
 from .jersey import Jersey, JE, JEY
diff --git a/holidays/countries/fiji.py b/holidays/countries/fiji.py
new file mode 100644
index 00000000..a4a4d028
--- /dev/null
+++ b/holidays/countries/fiji.py
@@ -0,0 +1,183 @@
+#  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.md 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 holidays.calendars import _CustomHinduHolidays, _CustomIslamicHolidays
+from holidays.calendars.gregorian import SEP, OCT, NOV, DEC
+from holidays.constants import PUBLIC, WORKDAY
+from holidays.groups import (
+    ChristianHolidays,
+    HinduCalendarHolidays,
+    InternationalHolidays,
+    IslamicHolidays,
+)
+from holidays.observed_holiday_base import (
+    ObservedHolidayBase,
+    SAT_SUN_TO_NEXT_MON,
+    SAT_SUN_TO_NEXT_MON_TUE,
+    ALL_TO_NEAREST_MON,
+)
+
+
+class Fiji(
+    ObservedHolidayBase,
+    ChristianHolidays,
+    HinduCalendarHolidays,
+    InternationalHolidays,
+    IslamicHolidays,
+):
+    """Fiji holidays.
+
+    References:
+        * <https://laws.gov.fj/Acts/DisplayAct/2910#>
+        * <https://laws.gov.fj/LawsAsMade>
+        * <https://www.fiji.gov.fj/About-Fiji/Public-Holidays>
+        * <https://www.timeanddate.com/holidays/fiji/>
+        * <https://en.wikipedia.org/wiki/List_of_festivals_in_Fiji>
+        * <https://www.rnz.co.nz/international/pacific-news/249514/new-public-holiday-for-fiji>
+        * <https://www.fijitimes.com.fj/constitution-day-public-holiday-removed-cabinet/>
+        * <https://fijivillage.com/news/National-Sports-Day-celebrated-5krs29/>
+        * <https://fijivillage.com/news/Cabinet-approves-Ratu-Sir-Lala-Sukuna-Day-and-Girmit-Day-and-removes-Constitution-Day-as-a-public-holiday-f48r5x/>
+
+    Official Fiji Public Holidays Calendar:
+         * [2016](https://www.fiji.gov.fj/Media-Center/Press-Releases/GOVERNMENT-APPROVES-2016-PUBLIC-HOLIDAYS.aspx)
+         * [2017](https://www.fiji.gov.fj/Media-Centre/News/GOVERNMENT-APPROVES-2017-PUBLIC-HOLIDAYS)
+         * [2018](https://web.archive.org/web/20180727205733/http://www.employment.gov.fj/images/Laws/Press%20Release%20-%20Government%20Approves%202018%20Public%20Holidays.pdf)
+         * [2019](https://web.archive.org/web/20191018023027/https://www.fiji.gov.fj/About-Fiji/Public-Holidays)
+         * [2020](https://web.archive.org/web/20210103183942/https://www.fiji.gov.fj/About-Fiji/Public-Holidays)
+         * [2021-2022](https://web.archive.org/web/20221223004409/https://www.fiji.gov.fj/About-Fiji/Public-Holidays)
+         * [2023](https://web.archive.org/web/20231129154609/https://www.fiji.gov.fj/About-Fiji/Public-Holidays)
+         * [2024](https://web.archive.org/web/20250121185434/https://www.fiji.gov.fj/About-Fiji/Public-Holidays)
+         * [2025](https://web.archive.org/web/20250318092311/https://www.fiji.gov.fj/About-Fiji/Public-Holidays)
+    """
+
+    country = "FJ"
+    supported_categories = (PUBLIC, WORKDAY)
+    # %s (estimated).
+    estimated_label = "%s (estimated)"
+    # %s (observed).
+    observed_label = "%s (observed)"
+    # %s (observed, estimated).
+    observed_estimated_label = "%s (observed, estimated)"
+    # Act No. 13 of 2015
+    start_year = 2016
+
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        Args:
+            islamic_show_estimated:
+                Whether to add "estimated" label to Islamic holidays name
+                if holiday date is estimated.
+        """
+        ChristianHolidays.__init__(self)
+        HinduCalendarHolidays.__init__(self, cls=FijiHinduHolidays, show_estimated=True)
+        InternationalHolidays.__init__(self)
+        IslamicHolidays.__init__(
+            self, cls=FijiIslamicHolidays, show_estimated=islamic_show_estimated
+        )
+        kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_MON)
+        super().__init__(*args, **kwargs)
+
+    def _populate_public_holidays(self):
+        # New Year's Day.
+        self._add_observed(self._add_new_years_day("New Year's Day"))
+
+        # Good Friday.
+        self._add_good_friday("Good Friday")
+
+        # Easter Saturday.
+        self._add_holy_saturday("Easter Saturday")
+
+        # Easter Monday.
+        self._add_easter_monday("Easter Monday")
+
+        # National Sports Day.
+        if self._year <= 2018:
+            self._add_holiday_last_fri_of_jun("National Sports Day")
+
+        if self._year <= 2022:
+            # Constitution Day.
+            self._add_observed(self._add_holiday_sep_7("Constitution Day"))
+
+        if self._year >= 2023:
+            # Girmit Day.
+            self._move_holiday(
+                self._add_holiday_may_14("Girmit Day"),
+                rule=ALL_TO_NEAREST_MON,
+                show_observed_label=False,
+            )
+
+        # Ratu Sir Lala Sukuna Day.
+        name = "Ratu Sir Lala Sukuna Day"
+        if self._year == 2023:
+            self._add_holiday_last_mon_of_may(name)
+        elif self._year >= 2024:
+            self._add_holiday_last_fri_of_may(name)
+
+        # Fiji Day.
+        self._add_holiday_oct_10("Fiji Day")
+
+        # Diwali.
+        self._add_observed(self._add_diwali_india("Diwali"))
+
+        # Christmas Day.
+        self._add_observed(self._add_christmas_day("Christmas Day"), rule=SAT_SUN_TO_NEXT_MON_TUE)
+
+        # Boxing Day.
+        self._add_observed(self._add_christmas_day_two("Boxing Day"), rule=SAT_SUN_TO_NEXT_MON_TUE)
+
+        # Prophet Mohammed's Birthday.
+        for dt in self._add_mawlid_day("Prophet Mohammed's Birthday"):
+            self._add_observed(dt)
+
+    def _populate_workday_holidays(self):
+        if self._year >= 2023:
+            # Constitution Day.
+            self._add_holiday_sep_7("Constitution Day")
+
+
+class FJ(Fiji):
+    pass
+
+
+class FJI(Fiji):
+    pass
+
+
+class FijiHinduHolidays(_CustomHinduHolidays):
+    # https://www.timeanddate.com/holidays/fiji/diwali
+    DIWALI_INDIA_DATES = {
+        2016: (OCT, 31),
+        2017: (OCT, 19),
+        2018: (NOV, 7),
+        2019: (OCT, 28),
+        2020: (NOV, 14),
+        2021: (NOV, 4),
+        2022: (OCT, 25),
+        2023: (NOV, 13),
+        2024: (NOV, 1),
+        2025: (OCT, 21),
+    }
+
+
+class FijiIslamicHolidays(_CustomIslamicHolidays):
+    MAWLID_DATES = {
+        2016: (DEC, 12),
+        2017: (DEC, 2),
+        2018: (NOV, 19),
+        2019: (NOV, 9),
+        2020: (OCT, 31),
+        2021: (OCT, 18),
+        2022: (OCT, 7),  # looks like observed on FRI
+        2023: (SEP, 30),
+        2024: (SEP, 16),
+        2025: (SEP, 6),
+    }
diff --git a/holidays/countries/ivory_coast.py b/holidays/countries/ivory_coast.py
new file mode 100644
index 00000000..52c73dbf
--- /dev/null
+++ b/holidays/countries/ivory_coast.py
@@ -0,0 +1,156 @@
+#  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.md file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+
+from gettext import gettext as tr
+
+from holidays.calendars.gregorian import FEB, OCT
+from holidays.groups import (
+    ChristianHolidays,
+    InternationalHolidays,
+    IslamicHolidays,
+    StaticHolidays,
+)
+from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON
+
+
+class IvoryCoast(
+    ObservedHolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays, StaticHolidays
+):
+    """Ivory Coast holidays.
+
+    References:
+        * [Decree No. 96-205](https://www.droit-afrique.com/uploads/RCI-Decret-1996-205-jours-feries.pdf)
+        * Decree No. 2011-371:
+            * [page 1](https://web.archive.org/web/20180617165811/http://www.cgeci.org/cgeci/docs/documents/Doc-ferie-1.pdf)
+            * [page 2](https://web.archive.org/web/20180826205106/http://www.cgeci.org/cgeci/docs/documents/Doc-ferie-2.pdf)
+        * <https://fr.wikipedia.org/wiki/Fêtes_et_jours_fériés_en_Côte_d%27Ivoire>
+        * <https://en.wikipedia.org/wiki/Public_holidays_in_Ivory_Coast>
+        * <https://www.timeanddate.com/holidays/ivory-coast/>
+        * [National Peace Day](https://en.wikipedia.org/wiki/Ivory_Coast#Independence)
+
+    Note:
+        The oldest decree available online that underpins the public holidays defined here
+        for the Ivory Coast is Decree no. 96-205 of March 7, 1996.
+
+        In Islamic calendar, days begin at sunset. The naming convention "day after" refers
+        to the daylight hours following the night of the celebration, which is technically
+        the same Gregorian calendar day.
+
+        According to Decree no. 2011-371 of 4 November 2011, if Eid al-Fitr, Eid al-Adha
+        or Christmas Day falls on a Sunday, the following Monday is also a holiday.
+    """
+
+    country = "CI"
+    default_language = "fr"
+    # %s (estimated).
+    estimated_label = tr("%s (estimé)")
+    # Day after the %s.
+    observed_label = tr("Lendemain de la %s")
+    # Day after the %s (estimated).
+    observed_estimated_label = tr("Lendemain de la %s (estimé)")
+    start_year = 1997
+    supported_languages = ("en_CI", "en_US", "fr")
+
+    def __init__(self, islamic_show_estimated: bool = False, *args, **kwargs):
+        """
+        Args:
+            islamic_show_estimated:
+                Whether to add "estimated" label to Islamic holidays name
+                if holiday date is estimated.
+        """
+        ChristianHolidays.__init__(self)
+        # The observed dates for the Ivory Coast's islamic holidays have been verified against
+        # local references (COSIM) and align with the default Umm al-Qura calculations.
+        IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
+        InternationalHolidays.__init__(self)
+        StaticHolidays.__init__(self, IvoryCoastStaticHolidays)
+        kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
+        super().__init__(*args, **kwargs)
+
+    def _populate_public_holidays(self):
+        # New Year's Day.
+        self._add_new_years_day(tr("1er janvier"))
+
+        # Easter Monday.
+        self._add_easter_monday(tr("Lundi de Pâques"))
+
+        # Labor Day.
+        self._add_observed(self._add_labor_day(tr("Fête du travail")))
+
+        # Ascension Day.
+        self._add_ascension_thursday(tr("Jour de l’Ascension"))
+
+        # Whit Monday.
+        self._add_whit_monday(tr("Lundi de Pentecôte"))
+
+        # Independence Day.
+        self._add_observed(self._add_holiday_aug_7(tr("Fête Nationale")))
+
+        # Assumption Day.
+        self._add_assumption_of_mary_day(tr("Fête de l’Assomption"))
+
+        # National Peace Day.
+        self._add_holiday_nov_15(tr("Journée Nationale de la Paix"))
+
+        # All Saints' Day.
+        self._add_all_saints_day(tr("Fête de la Toussaint"))
+
+        if self._year <= 2000:
+            self._add_holiday_dec_7(
+                # Anniversary of death of President Felix Houphouet-Boigny.
+                tr("Anniversaire du décès du Président Felix Houphouet-Boigny")
+            )
+
+        # Christmas Day.
+        dt = self._add_christmas_day(tr("Fête de Noël"))
+        if self._year >= 2011:
+            self._add_observed(dt)
+
+        # Day after Prophet's Birthday.
+        self._add_mawlid_day(tr("Lendemain de l’Anniversaire de la Naissance du Prophète Mahomet"))
+
+        # Day after Night of Power.
+        self._add_laylat_al_qadr_day(tr("Lendemain de la Nuit du Destin"))
+
+        # Eid al-Fitr.
+        for dt in self._add_eid_al_fitr_day(tr("Fête de fin du Ramadan")):
+            if self._year >= 2012:
+                self._add_observed(dt)
+
+        # Eid al-Adha.
+        for dt in self._add_eid_al_adha_day(tr("Fête de la Tabaski")):
+            if self._year >= 2012:
+                self._add_observed(dt)
+
+
+class CI(IvoryCoast):
+    pass
+
+
+class CIV(IvoryCoast):
+    pass
+
+
+class IvoryCoastStaticHolidays:
+    """Ivory Coast special holidays.
+
+    References:
+        * [2010 Presidential Election](https://www.gouv.ci/_actualite-article.php?d=4.&recordID=1255&p=366)
+        * [2024 AFCON](https://apanews.net/public-holiday-as-cote-divoire-wins-afcon-trophy/)
+    """
+
+    special_public_holidays = {
+        # Public holiday for Presidential election preparation.
+        2010: (OCT, 29, tr("Jour férié pour la préparation de l'élection présidentielle")),
+        # 2024 African Cup of Nations Victory.
+        2024: (FEB, 12, tr("Victoire à la Coupe d’Afrique des Nations 2024")),
+    }
diff --git a/holidays/countries/pakistan.py b/holidays/countries/pakistan.py
index 431a3339..642a43e9 100644
--- a/holidays/countries/pakistan.py
+++ b/holidays/countries/pakistan.py
@@ -10,6 +10,8 @@
 #  Website: https://github.com/vacanza/holidays
 #  License: MIT (see LICENSE file)
 
+from gettext import gettext as tr
+
 from holidays.calendars import _CustomIslamicHolidays
 from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
 from holidays.groups import InternationalHolidays, IslamicHolidays
@@ -17,10 +19,19 @@ from holidays.holiday_base import HolidayBase
 
 
 class Pakistan(HolidayBase, InternationalHolidays, IslamicHolidays):
-    """Pakistan holidays."""
+    """Pakistan holidays.
+
+    References:
+        * <https://en.wikipedia.org/wiki/Public_holidays_in_Pakistan>
+        * <https://ur.wikipedia.org/wiki/تعطیلات_پاکستان>
+    """
 
     country = "PK"
+    default_language = "en_PK"
+    # %s (estimated).
+    estimated_label = tr("%s (estimated)")
     start_year = 1948
+    supported_languages = ("en_PK", "en_US", "ur_PK")
 
     def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
         """
@@ -36,41 +47,45 @@ class Pakistan(HolidayBase, InternationalHolidays, IslamicHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Kashmir Solidarity Day.
         if self._year >= 1990:
-            self._add_holiday_feb_5("Kashmir Solidarity Day")
+            # Kashmir Solidarity Day.
+            self._add_holiday_feb_5(tr("Kashmir Solidarity Day"))
 
-        # Pakistan Day.
         if self._year >= 1956:
-            self._add_holiday_mar_23("Pakistan Day")
+            # Pakistan Day.
+            self._add_holiday_mar_23(tr("Pakistan Day"))
 
-        # Labour Day.
         if self._year >= 1972:
-            self._add_labor_day("Labour Day")
+            # Labor Day.
+            self._add_labor_day(tr("Labour Day"))
 
         # Independence Day.
-        self._add_holiday_aug_14("Independence Day")
+        self._add_holiday_aug_14(tr("Independence Day"))
 
-        # Iqbal Day.
         if self._year <= 2014 or self._year >= 2022:
-            self._add_holiday_nov_9("Iqbal Day")
+            # Iqbal Day.
+            self._add_holiday_nov_9(tr("Iqbal Day"))
 
         # Quaid-e-Azam Day.
-        self._add_holiday_dec_25("Quaid-e-Azam Day")
+        self._add_holiday_dec_25(tr("Quaid-e-Azam Day"))
 
-        name = "Eid-ul-Fitr"
+        # Eid al-Fitr.
+        name = tr("Eid-ul-Fitr")
         self._add_eid_al_fitr_day(name)
         self._add_eid_al_fitr_day_two(name)
         self._add_eid_al_fitr_day_three(name)
 
-        name = "Eid-ul-Adha"
+        # Eid al-Adha.
+        name = tr("Eid-ul-Adha")
         self._add_eid_al_adha_day(name)
         self._add_eid_al_adha_day_two(name)
         self._add_eid_al_adha_day_three(name)
 
-        self._add_mawlid_day("Eid Milad-un-Nabi")
+        # Prophet's Birthday.
+        self._add_mawlid_day(tr("Eid Milad-un-Nabi"))
 
-        name = "Ashura"
+        # Ashura.
+        name = tr("Ashura")
         self._add_ashura_eve(name)
         self._add_ashura_day(name)
 
diff --git a/holidays/groups/islamic.py b/holidays/groups/islamic.py
index a76f815b..053e11da 100644
--- a/holidays/groups/islamic.py
+++ b/holidays/groups/islamic.py
@@ -295,6 +295,17 @@ class IslamicHolidays(EasternCalendarHolidays):
             name, self._islamic_calendar.isra_and_miraj_dates(self._year)
         )
 
+    def _add_laylat_al_qadr_day(self, name):
+        """
+        Add Laylat al-Qadr Day (27th day of 9th month).
+
+        The Night of Power.
+        https://en.wikipedia.org/wiki/Night_of_Power
+        """
+        return self._add_islamic_calendar_holiday(
+            name, self._islamic_calendar.ramadan_beginning_dates(self._year), days_delta=+26
+        )
+
     def _add_maldives_embraced_islam_day(self, name) -> set[date]:
         """
         Add Maldives Embraced Islam Day (1st day of 4th month).
diff --git a/holidays/holiday_base.py b/holidays/holiday_base.py
index 6fdc057a..65e50dcd 100644
--- a/holidays/holiday_base.py
+++ b/holidays/holiday_base.py
@@ -1172,26 +1172,40 @@ 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, holiday_name: str, lookup: str = "icontains") -> list[date]:
         """Remove all holidays matching the given name.
 
         This method removes all dates associated with a holiday name, so they are
-        no longer considered holidays. The match is case-insensitive, and partial
-        matches are also removed.
+        no longer considered holidays. The search by default is case-insensitive and
+        includes partial matches.
 
         Args:
-            name:
+            holiday_name:
                 The holiday's name to try to match.
 
+            lookup:
+                The holiday name lookup type:
+
+                * contains - case sensitive contains match;
+                * exact - case sensitive exact match;
+                * startswith - case sensitive starts with match;
+                * icontains - case insensitive contains match;
+                * iexact - case insensitive exact match;
+                * istartswith - case insensitive starts with match;
+
         Returns:
             A list of dates removed.
 
         Raises:
             KeyError: if date is not a holiday.
         """
-        use_exact_name = HOLIDAY_NAME_DELIMITER in name
-        if not (dts := self.get_named(name, split_multiple_names=not use_exact_name)):
-            raise KeyError(name)
+        use_exact_name = HOLIDAY_NAME_DELIMITER in holiday_name
+        if not (
+            dts := self.get_named(
+                holiday_name, lookup=lookup, split_multiple_names=not use_exact_name
+            )
+        ):
+            raise KeyError(holiday_name)
 
         popped = []
         for dt in dts:
@@ -1200,16 +1214,35 @@ class HolidayBase(dict[date, str]):
             popped.append(dt)
 
             # Keep the rest of holidays falling on the same date.
-            if not use_exact_name:
-                name_lower = name.lower()
+            if use_exact_name:
+                continue
+            if lookup == "icontains":
+                holiday_name_lower = holiday_name.lower()
                 holiday_names = [
-                    holiday_name
-                    for holiday_name in holiday_names
-                    if name_lower not in holiday_name.lower()
+                    name for name in holiday_names if holiday_name_lower not in name.lower()
                 ]
-
-                if holiday_names:
-                    self[dt] = HOLIDAY_NAME_DELIMITER.join(holiday_names)
+            elif lookup == "iexact":
+                holiday_name_lower = holiday_name.lower()
+                holiday_names = [
+                    name for name in holiday_names if holiday_name_lower != name.lower()
+                ]
+            elif lookup == "istartswith":
+                holiday_name_lower = holiday_name.lower()
+                holiday_names = [
+                    name
+                    for name in holiday_names
+                    if holiday_name_lower != name[: len(holiday_name)].lower()
+                ]
+            elif lookup == "contains":
+                holiday_names = [name for name in holiday_names if holiday_name not in name]
+            elif lookup == "exact":
+                holiday_names = [name for name in holiday_names if holiday_name != name]
+            else:  # startswith
+                holiday_names = [
+                    name for name in holiday_names if holiday_name != name[: len(holiday_name)]
+                ]
+            if holiday_names:
+                self[dt] = HOLIDAY_NAME_DELIMITER.join(holiday_names)
 
         return popped
 
@@ -1339,8 +1372,18 @@ class HolidaySum(HolidayBase):
             else:
                 setattr(self, attr, value)
 
+        # Retain language if they match and are strings.
+        # If language wasn't assigned, default_language acts as fallback.
+        h1_language = h1.language or h1.default_language
+        h2_language = h2.language or h2.default_language
+        if isinstance(h1_language, str) and h1_language == h2_language:
+            kwargs["language"] = h1_language
+
         HolidayBase.__init__(self, **kwargs)
 
+        # supported_languages is used for iCalExporter language check as well.
+        self.supported_languages = (h1_language,) if h1_language else ()
+
     def _populate(self, year):
         for operand in self.holidays:
             operand._populate(year)
diff --git a/holidays/ical.py b/holidays/ical.py
new file mode 100644
index 00000000..7f011b04
--- /dev/null
+++ b/holidays/ical.py
@@ -0,0 +1,228 @@
+#  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.md 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)
+
+import re
+import uuid
+from datetime import date, datetime, timedelta, timezone
+from typing import Union
+
+from holidays.holiday_base import HolidayBase
+from holidays.version import __version__
+
+# iCal-specific constants
+CONTENT_LINE_MAX_LENGTH = 75
+CONTENT_LINE_DELIMITER = "\r\n"
+CONTENT_LINE_DELIMITER_WRAP = f"{CONTENT_LINE_DELIMITER} "
+
+
+class ICalExporter:
+    def __init__(self, instance: HolidayBase, show_language: bool = False) -> None:
+        """Initialize iCalendar exporter.
+
+        Args:
+            show_language:
+                Determines whether to include the `;LANGUAGE=` attribute in the
+                `SUMMARY` field. Defaults to `False`.
+
+                If the `HolidaysBase` object has a `language` attribute, it will
+                be used. Otherwise, `default_language` will be used if available.
+
+                If neither attribute exists and `show_language=True`, an
+                exception will be raised.
+
+            instance:
+                `HolidaysBase` object containing holiday data.
+        """
+        self.holidays = instance
+        self.show_language = show_language
+        self.ical_timestamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
+        self.holidays_version = __version__
+        language = getattr(self.holidays, "language", None) or getattr(
+            self.holidays, "default_language", None
+        )
+        self.language = (
+            self._validate_language(language)
+            if isinstance(language, str)
+            and language in getattr(self.holidays, "supported_languages", [])
+            else None
+        )
+
+        if self.show_language and self.language is None:
+            raise ValueError("LANGUAGE cannot be included because the language code is missing.")
+
+    def _validate_language(self, language: str) -> str:
+        """Validate the language code to ensure it complies with RFC 5646.
+
+        In the current implementation, all languages must comply with
+        either ISO 639-1 or ISO 639-2 if specified (part of RFC 5646).
+
+        Args:
+            language:
+                The language code to validate.
+
+        Returns:
+            Validated language code.
+        """
+        # Remove whitespace (if any), transforms HolidaysBase default to RFC 5646 compliant
+        # i.e. `en_US` to `en-US`.
+        language = language.strip().replace("_", "-")
+
+        # ISO 639-1 and ISO 639-2 patterns, in compliance with RFC 5646.
+        iso639_pattern = re.compile(r"^[a-z]{2,3}(?:-[A-Z]{2})?$")
+
+        if not iso639_pattern.fullmatch(language):
+            raise ValueError(
+                f"Invalid language tag: '{language}'. Expected format follows "
+                "ISO 639-1 or ISO 639-2, e.g., 'en', 'en-US'. For more details, "
+                "refer to: https://www.loc.gov/standards/iso639-2/php/code_list.php."
+            )
+        return language
+
+    def _fold_line(self, line: str) -> str:
+        """Fold long lines according to RFC 5545.
+
+        Content lines SHOULD NOT exceed 75 octets. If a line is too long,
+        it must be split into multiple lines, with each continuation line
+        starting with a space.
+
+        Args:
+            line:
+                The content line to be folded.
+
+        Returns:
+            The folded content line.
+        """
+        if line.isascii():
+            # Simple split for ASCII: every (CONTENT_LINE_MAX_LENGTH - 1) chars,
+            # as first char of the next line is space
+            if len(line) > CONTENT_LINE_MAX_LENGTH:
+                return CONTENT_LINE_DELIMITER_WRAP.join(
+                    line[i : i + CONTENT_LINE_MAX_LENGTH - 1]
+                    for i in range(0, len(line), CONTENT_LINE_MAX_LENGTH - 1)
+                )
+
+        elif len(line.encode()) > CONTENT_LINE_MAX_LENGTH:
+            # Handle non-ASCII text while respecting byte length
+            parts = []
+            part_start = 0
+            part_len = 0
+            for i, char in enumerate(line):
+                char_byte_len = len(char.encode())
+                part_len += char_byte_len
+
+                if part_len > CONTENT_LINE_MAX_LENGTH:
+                    parts.append(line[part_start:i])
+                    part_start = i
+                    part_len = char_byte_len + 1  # line start with space
+
+            parts.append(line[part_start:])
+            return CONTENT_LINE_DELIMITER_WRAP.join(parts)
+
+        # Return as-is if it doesn't exceed the limit
+        return line
+
+    def _generate_event(self, dt: date, holiday_name: str, holiday_length: int = 1) -> list[str]:
+        """Generate a single holiday event.
+
+        Args:
+            dt:
+                Holiday date.
+
+            holiday_name:
+                Holiday name.
+
+            holiday_length:
+                Holiday length in days, default to 1.
+
+        Returns:
+            List of iCalendar format event lines.
+        """
+        # Escape special characters per RFC 5545.
+        # SEMICOLON is used as a delimiter in HolidayBase (HOLIDAY_NAME_DELIMITER = "; "),
+        # so a name with a semicolon gets split into two separate `VEVENT`s.
+        sanitized_holiday_name = (
+            holiday_name.replace("\\", "\\\\").replace(",", "\\,").replace(":", "\\:")
+        )
+        event_uid = f"{uuid.uuid4()}@{self.holidays_version}.holidays.local"
+        language_tag = f";LANGUAGE={self.language}" if self.show_language else ""
+
+        return [
+            "BEGIN:VEVENT",
+            f"DTSTAMP:{self.ical_timestamp}",
+            f"UID:{event_uid}",
+            self._fold_line(f"SUMMARY{language_tag}:{sanitized_holiday_name}"),
+            f"DTSTART;VALUE=DATE:{dt:%Y%m%d}",
+            f"DURATION:P{holiday_length}D",
+            "END:VEVENT",
+        ]
+
+    def generate(self, return_bytes: bool = False) -> Union[str, bytes]:
+        """Generate iCalendar data.
+
+        Args:
+            return_bytes:
+                If True, return bytes instead of string.
+
+        Returns:
+            The complete iCalendar data
+            (string or UTF-8 bytes depending on return_bytes).
+        """
+        lines = [
+            "BEGIN:VCALENDAR",
+            f"PRODID:-//Vacanza//Open World Holidays Framework v{self.holidays_version}//EN",
+            "VERSION:2.0",
+            "CALSCALE:GREGORIAN",
+        ]
+
+        sorted_dates = sorted(self.holidays.keys())
+        # Merged continuous holiday with the same name and use `DURATION` instead.
+        i = 0
+        while i < len(sorted_dates):
+            dt = sorted_dates[i]
+            names = self.holidays.get_list(dt)
+
+            for name in names:
+                days = 1
+                while (
+                    i + days < len(sorted_dates)
+                    and sorted_dates[i + days] == sorted_dates[i] + timedelta(days=days)
+                    and name in self.holidays.get_list(sorted_dates[i + days])
+                ):
+                    days += 1
+
+                lines.extend(self._generate_event(dt, name, days))
+
+            i += days
+
+        lines.append("END:VCALENDAR")
+        lines.append("")
+
+        output = CONTENT_LINE_DELIMITER.join(lines)
+        return output.encode() if return_bytes else output
+
+    def save_ics(self, file_path: str) -> None:
+        """Export the calendar data to a .ics file.
+
+        While RFC 5545 does not specifically forbid filenames for .ics files, but it’s advisable
+        to follow general filesystem conventions and avoid using problematic characters.
+
+        Args:
+            file_path:
+                Path to save the .ics file, including the filename (with extension).
+        """
+        # Generate and write out content (always in bytes for .ics)
+        content = self.generate(return_bytes=True)
+        if not content:
+            raise ValueError("Generated content is empty or invalid.")
+
+        with open(file_path, "wb") as file:
+            file.write(content)  # type: ignore  # this is always bytes, ignoring mypy error.
diff --git a/holidays/locale/en_CI/LC_MESSAGES/CI.po b/holidays/locale/en_CI/LC_MESSAGES/CI.po
new file mode 100644
index 00000000..b18320e9
--- /dev/null
+++ b/holidays/locale/en_CI/LC_MESSAGES/CI.po
@@ -0,0 +1,110 @@
+#  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.md 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)
+#
+# Ivory Coast holidays en_CI localization.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.70\n"
+"POT-Creation-Date: 2025-03-30 02:24+0530\n"
+"PO-Revision-Date: 2025-03-30 02:24+0530\n"
+"Last-Translator: Kriti Birda <workwithkritibirda@gmail.com>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: en_CI\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.5\n"
+"X-Source-Language: fr\n"
+
+#. New Year's Day.
+msgid "1er janvier"
+msgstr "New Year's Day"
+
+#. Labor Day.
+msgid "Fête du travail"
+msgstr "Labor Day"
+
+#. Independence Day.
+msgid "Fête Nationale"
+msgstr "Independence Day"
+
+#. National Peace Day.
+msgid "Journée Nationale de la Paix"
+msgstr "National Peace Day"
+
+#. Easter Monday.
+msgid "Lundi de Pâques"
+msgstr "Easter Monday"
+
+#. Whit Monday.
+msgid "Lundi de Pentecôte"
+msgstr "Whit Monday"
+
+#. Assumption Day.
+msgid "Fête de l’Assomption"
+msgstr "Assumption Day"
+
+#. All Saints' Day.
+msgid "Fête de la Toussaint"
+msgstr "All Saints' Day"
+
+#. Christmas Day.
+msgid "Fête de Noël"
+msgstr "Christmas Day"
+
+#. Ascension Day.
+msgid "Jour de l’Ascension"
+msgstr "Ascension Day"
+
+#. %s (estimated).
+#, c-format
+msgid "%s (estimé)"
+msgstr "%s (estimated)"
+
+#. Eid al-Fitr.
+msgid "Fête de fin du Ramadan"
+msgstr "Aid-El-Fitr"
+
+#. Eid al-Adha.
+msgid "Fête de la Tabaski"
+msgstr "Aid-El-Kebir"
+
+#. Day after Prophet's Birthday.
+msgid "Lendemain de l’Anniversaire de la Naissance du Prophète Mahomet"
+msgstr "Day after Maouloud"
+
+#. Day after Night of Power.
+msgid "Lendemain de la Nuit du Destin"
+msgstr "Day after Lailatou-Kadr"
+
+#. 2024 African Cup of Nations Victory.
+msgid "Victoire à la Coupe d’Afrique des Nations 2024"
+msgstr "2024 African Cup of Nations Victory"
+
+#. Day after the %s.
+#, c-format
+msgid "Lendemain de la %s"
+msgstr "Day after the %s"
+
+#. Day after the %s (estimated).
+#, c-format
+msgid "Lendemain de la %s (estimé)"
+msgstr "Day after the %s (estimated)"
+
+#. Anniversary of death of President Felix Houphouet-Boigny.
+msgid "Anniversaire du décès du Président Felix Houphouet-Boigny"
+msgstr "Anniversary of death of President Felix Houphouet-Boigny"
+
+#. Public holiday for Presidential election preparation.
+msgid "Jour férié pour la préparation de l'élection présidentielle"
+msgstr "Public holiday for Presidential election preparation"
diff --git a/holidays/locale/en_PK/LC_MESSAGES/PK.po b/holidays/locale/en_PK/LC_MESSAGES/PK.po
new file mode 100644
index 00000000..ed365dd6
--- /dev/null
+++ b/holidays/locale/en_PK/LC_MESSAGES/PK.po
@@ -0,0 +1,73 @@
+#  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.md 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)
+#
+# Pakistan holidays.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.70\n"
+"POT-Creation-Date: 2025-03-28 22:18+0500\n"
+"PO-Revision-Date: 2025-03-29 00:00+0500\n"
+"Last-Translator: Wasif Shahzad <wasif_shahzad_1@outlook.com>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: en_PK\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.5\n"
+"X-Generator: Poedit 3.5\n"
+"X-Source-Language: en_PK\n"
+
+#. Kashmir Solidarity Day.
+msgid "Kashmir Solidarity Day"
+msgstr ""
+
+#. Pakistan Day.
+msgid "Pakistan Day"
+msgstr ""
+
+#. Labor Day.
+msgid "Labour Day"
+msgstr ""
+
+#. Independence Day.
+msgid "Independence Day"
+msgstr ""
+
+#. Iqbal Day.
+msgid "Iqbal Day"
+msgstr ""
+
+#. Quaid-e-Azam Day.
+msgid "Quaid-e-Azam Day"
+msgstr ""
+
+#. Eid al-Fitr.
+msgid "Eid-ul-Fitr"
+msgstr ""
+
+#. Eid al-Adha.
+msgid "Eid-ul-Adha"
+msgstr ""
+
+#. Prophet's Birthday.
+msgid "Eid Milad-un-Nabi"
+msgstr ""
+
+#. Ashura.
+msgid "Ashura"
+msgstr ""
+
+#. %s (estimated).
+#, c-format
+msgid "%s (estimated)"
+msgstr ""
diff --git a/holidays/locale/en_US/LC_MESSAGES/CI.po b/holidays/locale/en_US/LC_MESSAGES/CI.po
new file mode 100644
index 00000000..2a598c5f
--- /dev/null
+++ b/holidays/locale/en_US/LC_MESSAGES/CI.po
@@ -0,0 +1,110 @@
+#  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.md 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)
+#
+# Ivory Coast holidays en_US localization.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.70\n"
+"POT-Creation-Date: 2025-03-30 02:24+0530\n"
+"PO-Revision-Date: 2025-03-30 02:24+0530\n"
+"Last-Translator: Kriti Birda <workwithkritibirda@gmail.com>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: en_US\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.5\n"
+"X-Source-Language: fr\n"
+
+#. New Year's Day.
+msgid "1er janvier"
+msgstr "New Year's Day"
+
+#. Labor Day.
+msgid "Fête du travail"
+msgstr "Labor Day"
+
+#. Independence Day.
+msgid "Fête Nationale"
+msgstr "Independence Day"
+
+#. National Peace Day.
+msgid "Journée Nationale de la Paix"
+msgstr "National Peace Day"
+
+#. Easter Monday.
+msgid "Lundi de Pâques"
+msgstr "Easter Monday"
+
+#. Whit Monday.
+msgid "Lundi de Pentecôte"
+msgstr "Whit Monday"
+
+#. Assumption Day.
+msgid "Fête de l’Assomption"
+msgstr "Assumption Day"
+
+#. All Saints' Day.
+msgid "Fête de la Toussaint"
+msgstr "All Saints' Day"
+
+#. Christmas Day.
+msgid "Fête de Noël"
+msgstr "Christmas Day"
+
+#. Ascension Day.
+msgid "Jour de l’Ascension"
+msgstr "Ascension Day"
+
+#. %s (estimated).
+#, c-format
+msgid "%s (estimé)"
+msgstr "%s (estimated)"
+
+#. Eid al-Fitr.
+msgid "Fête de fin du Ramadan"
+msgstr "Eid al-Fitr"
+
+#. Eid al-Adha.
+msgid "Fête de la Tabaski"
+msgstr "Eid al-Adha"
+
+#. Day after Prophet's Birthday.
+msgid "Lendemain de l’Anniversaire de la Naissance du Prophète Mahomet"
+msgstr "Day after Prophet's Birthday"
+
+#. Day after Night of Power.
+msgid "Lendemain de la Nuit du Destin"
+msgstr "Day after Night of Power"
+
+#. 2024 African Cup of Nations Victory.
+msgid "Victoire à la Coupe d’Afrique des Nations 2024"
+msgstr "2024 African Cup of Nations Victory"
+
+#. Day after the %s.
+#, c-format
+msgid "Lendemain de la %s"
+msgstr "Day after the %s"
+
+#. Day after the %s (estimated).
+#, c-format
+msgid "Lendemain de la %s (estimé)"
+msgstr "Day after the %s (estimated)"
+
+#. Anniversary of death of President Felix Houphouet-Boigny.
+msgid "Anniversaire du décès du Président Felix Houphouet-Boigny"
+msgstr "Anniversary of death of President Felix Houphouet-Boigny"
+
+#. Public holiday for Presidential election preparation.
+msgid "Jour férié pour la préparation de l'élection présidentielle"
+msgstr "Public holiday for Presidential election preparation"
diff --git a/holidays/locale/en_US/LC_MESSAGES/PK.po b/holidays/locale/en_US/LC_MESSAGES/PK.po
new file mode 100644
index 00000000..90b23313
--- /dev/null
+++ b/holidays/locale/en_US/LC_MESSAGES/PK.po
@@ -0,0 +1,73 @@
+#  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.md 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)
+#
+# Pakistan holidays en_US localization.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.70\n"
+"POT-Creation-Date: 2025-03-29 00:02+0500\n"
+"PO-Revision-Date: 2025-03-30 00:34+0500\n"
+"Last-Translator: Wasif Shahzad <wasif_shahzad_1@outlook.com>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: en_US\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.5\n"
+"X-Generator: Poedit 3.5\n"
+"X-Source-Language: en_PK\n"
+
+#. Kashmir Solidarity Day.
+msgid "Kashmir Solidarity Day"
+msgstr "Kashmir Solidarity Day"
+
+#. Pakistan Day.
+msgid "Pakistan Day"
+msgstr "Pakistan Day"
+
+#. Labor Day.
+msgid "Labour Day"
+msgstr "Labor Day"
+
+#. Independence Day.
+msgid "Independence Day"
+msgstr "Independence Day"
+
+#. Iqbal Day.
+msgid "Iqbal Day"
+msgstr "Iqbal Day"
+
+#. Quaid-e-Azam Day.
+msgid "Quaid-e-Azam Day"
+msgstr "Quaid-e-Azam Day"
+
+#. Eid al-Fitr.
+msgid "Eid-ul-Fitr"
+msgstr "Eid al-Fitr"
+
+#. Eid al-Adha.
+msgid "Eid-ul-Adha"
+msgstr "Eid al-Adha"
+
+#. Prophet's Birthday.
+msgid "Eid Milad-un-Nabi"
+msgstr "Prophet's Birthday"
+
+#. Ashura.
+msgid "Ashura"
+msgstr "Ashura"
+
+#. %s (estimated).
+#, c-format
+msgid "%s (estimated)"
+msgstr "%s (estimated)"
diff --git a/holidays/locale/fr/LC_MESSAGES/CI.po b/holidays/locale/fr/LC_MESSAGES/CI.po
new file mode 100644
index 00000000..252f4f67
--- /dev/null
+++ b/holidays/locale/fr/LC_MESSAGES/CI.po
@@ -0,0 +1,110 @@
+#  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.md 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)
+#
+# Ivory Coast holidays.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.70\n"
+"POT-Creation-Date: 2025-03-30 02:24+0530\n"
+"PO-Revision-Date: 2025-03-30 02:24+0530\n"
+"Last-Translator: Kriti Birda <workwithkritibirda@gmail.com>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.5\n"
+"X-Source-Language: fr\n"
+
+#. New Year's Day.
+msgid "1er janvier"
+msgstr ""
+
+#. Labor Day.
+msgid "Fête du travail"
+msgstr ""
+
+#. Independence Day.
+msgid "Fête Nationale"
+msgstr ""
+
+#. National Peace Day.
+msgid "Journée Nationale de la Paix"
+msgstr ""
+
+#. Easter Monday.
+msgid "Lundi de Pâques"
+msgstr ""
+
+#. Whit Monday.
+msgid "Lundi de Pentecôte"
+msgstr ""
+
+#. Assumption Day.
+msgid "Fête de l’Assomption"
+msgstr ""
+
+#. All Saints' Day.
+msgid "Fête de la Toussaint"
+msgstr ""
+
+#. Christmas Day.
+msgid "Fête de Noël"
+msgstr ""
+
+#. Ascension Day.
+msgid "Jour de l’Ascension"
+msgstr ""
+
+#. %s (estimated).
+#, c-format
+msgid "%s (estimé)"
+msgstr ""
+
+#. Eid al-Fitr.
+msgid "Fête de fin du Ramadan"
+msgstr ""
+
+#. Eid al-Adha.
+msgid "Fête de la Tabaski"
+msgstr ""
+
+#. Day after Prophet's Birthday.
+msgid "Lendemain de l’Anniversaire de la Naissance du Prophète Mahomet"
+msgstr ""
+
+#. Day after Night of Power.
+msgid "Lendemain de la Nuit du Destin"
+msgstr ""
+
+#. 2024 African Cup of Nations Victory.
+msgid "Victoire à la Coupe d’Afrique des Nations 2024"
+msgstr ""
+
+#. Day after the %s.
+#, c-format
+msgid "Lendemain de la %s"
+msgstr ""
+
+#. Day after the %s (estimated).
+#, c-format
+msgid "Lendemain de la %s (estimé)"
+msgstr ""
+
+#. Anniversary of death of President Felix Houphouet-Boigny.
+msgid "Anniversaire du décès du Président Felix Houphouet-Boigny"
+msgstr ""
+
+#. Public holiday for Presidential election preparation.
+msgid "Jour férié pour la préparation de l'élection présidentielle"
+msgstr ""
diff --git a/holidays/locale/hi/LC_MESSAGES/IN.po b/holidays/locale/hi/LC_MESSAGES/IN.po
index 40f9c476..bdad77d2 100644
--- a/holidays/locale/hi/LC_MESSAGES/IN.po
+++ b/holidays/locale/hi/LC_MESSAGES/IN.po
@@ -49,7 +49,7 @@ msgstr "बाल दिवस"
 
 #. Labor Day.
 msgid "Labour Day"
-msgstr "श्रमिक दिवस"
+msgstr "मजदूर दिवस"
 
 #. Diwali.
 msgid "Diwali"
@@ -81,7 +81,7 @@ msgstr "महावीर जयंती"
 
 #. Maha Shivaratri.
 msgid "Maha Shivaratri"
-msgstr "महा शिवरात्रि"
+msgstr "महाशिवरात्रि"
 
 #. Navratri / Sharad Navratri.
 msgid "Navratri / Sharad Navratri"
@@ -89,11 +89,11 @@ msgstr "नवरात्र/शरद नवरात्र"
 
 #. Ram Navami.
 msgid "Ram Navami"
-msgstr "राम नवमी"
+msgstr "रामनवमी"
 
 #. Maha Navami.
 msgid "Maha Navami"
-msgstr "महा नवमी"
+msgstr "महानवमी"
 
 #. Ganesh Chaturthi.
 msgid "Ganesh Chaturthi"
@@ -125,7 +125,7 @@ msgstr "क्रिसमस"
 
 #. Dr. B. R. Ambedkar Jayanti.
 msgid "Dr. B. R. Ambedkar's Jayanti"
-msgstr "डॉ. बी.आर. अम्बेडकर जयंती"
+msgstr "डॉ. बी.आर. आम्बेडकर जयंती"
 
 #. Andhra Pradesh Foundation Day.
 msgid "Andhra Pradesh Foundation Day"
@@ -173,7 +173,7 @@ msgstr "हरियाणा स्थापना दिवस"
 
 #. Jharkhand Formation Day.
 msgid "Jharkhand Formation Day"
-msgstr "झारखण्ड स्थापना दिवस"
+msgstr "झारखंड स्थापना दिवस"
 
 #. Karnataka Rajyotsav.
 msgid "Karnataka Rajyotsava"
@@ -217,7 +217,7 @@ msgstr "ओडिशा दिवस (उत्कल दिवस)"
 
 #. Maha Vishuva Sankranti.
 msgid "Maha Vishuva Sankranti / Pana Sankranti"
-msgstr "महा विशुव संक्रांति / पण संक्रांति"
+msgstr "महा विषुव संक्रांति / पण संक्रांति"
 
 #. Guru Gobind Singh Jayanti.
 msgid "Guru Gobind Singh Jayanti"
@@ -261,7 +261,7 @@ msgstr "पोंगल"
 
 #. Puthandu.
 msgid "Puthandu (Tamil New Year)"
-msgstr "पुथंडु (तमिल नव वर्ष)"
+msgstr "पुत्ताण्डु (तमिल नव वर्ष)"
 
 #. Telangana Formation Day.
 msgid "Telangana Formation Day"
diff --git a/holidays/locale/ur_PK/LC_MESSAGES/PK.po b/holidays/locale/ur_PK/LC_MESSAGES/PK.po
new file mode 100644
index 00000000..46aa8d6d
--- /dev/null
+++ b/holidays/locale/ur_PK/LC_MESSAGES/PK.po
@@ -0,0 +1,73 @@
+#  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.md 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)
+#
+# Pakistan holidays ur_PK localization.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.70\n"
+"POT-Creation-Date: 2025-03-29 00:09+0500\n"
+"PO-Revision-Date: 2025-03-29 23:00+0500\n"
+"Last-Translator: Wasif Shahzad <wasif_shahzad_1@outlook.com>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: ur_PK\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.5\n"
+"X-Generator: Poedit 3.5\n"
+"X-Source-Language: en_PK\n"
+
+#. Kashmir Solidarity Day.
+msgid "Kashmir Solidarity Day"
+msgstr "یوم یکجہتی کشمیر"
+
+#. Pakistan Day.
+msgid "Pakistan Day"
+msgstr "یوم پاکستان"
+
+#. Labor Day.
+msgid "Labour Day"
+msgstr "یوم مزدور"
+
+#. Independence Day.
+msgid "Independence Day"
+msgstr "یوم آزادی"
+
+#. Iqbal Day.
+msgid "Iqbal Day"
+msgstr "یوم اقبال"
+
+#. Quaid-e-Azam Day.
+msgid "Quaid-e-Azam Day"
+msgstr "یوم قائداعظم"
+
+#. Eid al-Fitr.
+msgid "Eid-ul-Fitr"
+msgstr "عید الفطر"
+
+#. Eid al-Adha.
+msgid "Eid-ul-Adha"
+msgstr "عید الاضحی"
+
+#. Prophet's Birthday.
+msgid "Eid Milad-un-Nabi"
+msgstr "عید میلاد النبی"
+
+#. Ashura.
+msgid "Ashura"
+msgstr "عاشورہ"
+
+#. %s (estimated).
+#, c-format
+msgid "%s (estimated)"
+msgstr "%s (اندازاً)"
diff --git a/holidays/observed_holiday_base.py b/holidays/observed_holiday_base.py
index d3545160..e1f5baa5 100644
--- a/holidays/observed_holiday_base.py
+++ b/holidays/observed_holiday_base.py
@@ -138,11 +138,14 @@ class ObservedHolidayBase(HolidayBase):
 
     def _add_observed(
         self,
-        dt: DateArg,
+        dt: Optional[DateArg] = None,
         name: Optional[str] = None,
         rule: Optional[ObservedRule] = None,
         show_observed_label: bool = True,
     ) -> tuple[bool, Optional[date]]:
+        if dt is None:
+            return False, None
+
         dt = dt if isinstance(dt, date) else date(self._year, *dt)
 
         if not self.observed or not self._is_observed(dt):
diff --git a/holidays/registry.py b/holidays/registry.py
index 09fead9c..a75947b1 100644
--- a/holidays/registry.py
+++ b/holidays/registry.py
@@ -72,6 +72,7 @@ COUNTRIES: RegistryDict = {
     "estonia": ("Estonia", "EE", "EST"),
     "eswatini": ("Eswatini", "SZ", "SZW", "Swaziland"),
     "ethiopia": ("Ethiopia", "ET", "ETH"),
+    "fiji": ("Fiji", "FJ", "FJI"),
     "finland": ("Finland", "FI", "FIN"),
     "france": ("France", "FR", "FRA"),
     "gabon": ("Gabon", "GA", "GAB"),
@@ -95,6 +96,7 @@ COUNTRIES: RegistryDict = {
     "isle_of_man": ("IsleOfMan", "IM", "IMN"),
     "israel": ("Israel", "IL", "ISR"),
     "italy": ("Italy", "IT", "ITA"),
+    "ivory_coast": ("IvoryCoast", "CI", "CIV"),
     "jamaica": ("Jamaica", "JM", "JAM"),
     "japan": ("Japan", "JP", "JPN"),
     "jersey": ("Jersey", "JE", "JEY"),
diff --git a/snapshots/countries/CI_COMMON.json b/snapshots/countries/CI_COMMON.json
new file mode 100644
index 00000000..b24ad9e4
--- /dev/null
+++ b/snapshots/countries/CI_COMMON.json
@@ -0,0 +1,801 @@
+{
+    "1997-01-01": "New Year's Day",
+    "1997-02-05": "Day after Night of Power",
+    "1997-02-08": "Eid al-Fitr",
+    "1997-03-31": "Easter Monday",
+    "1997-04-17": "Eid al-Adha",
+    "1997-05-01": "Labor Day",
+    "1997-05-08": "Ascension Day",
+    "1997-05-19": "Whit Monday",
+    "1997-07-16": "Day after Prophet's Birthday",
+    "1997-08-07": "Independence Day",
+    "1997-08-15": "Assumption Day",
+    "1997-11-01": "All Saints' Day",
+    "1997-11-15": "National Peace Day",
+    "1997-12-07": "Anniversary of death of President Felix Houphouet-Boigny",
+    "1997-12-25": "Christmas Day",
+    "1998-01-01": "New Year's Day",
+    "1998-01-25": "Day after Night of Power",
+    "1998-01-29": "Eid al-Fitr",
+    "1998-04-07": "Eid al-Adha",
+    "1998-04-13": "Easter Monday",
+    "1998-05-01": "Labor Day",
+    "1998-05-21": "Ascension Day",
+    "1998-06-01": "Whit Monday",
+    "1998-07-06": "Day after Prophet's Birthday",
+    "1998-08-07": "Independence Day",
+    "1998-08-15": "Assumption Day",
+    "1998-11-01": "All Saints' Day",
+    "1998-11-15": "National Peace Day",
+    "1998-12-07": "Anniversary of death of President Felix Houphouet-Boigny",
+    "1998-12-25": "Christmas Day",
+    "1999-01-01": "New Year's Day",
+    "1999-01-14": "Day after Night of Power",
+    "1999-01-18": "Eid al-Fitr",
+    "1999-03-27": "Eid al-Adha",
+    "1999-04-05": "Easter Monday",
+    "1999-05-01": "Labor Day",
+    "1999-05-13": "Ascension Day",
+    "1999-05-24": "Whit Monday",
+    "1999-06-26": "Day after Prophet's Birthday",
+    "1999-08-07": "Independence Day",
+    "1999-08-15": "Assumption Day",
+    "1999-11-01": "All Saints' Day",
+    "1999-11-15": "National Peace Day",
+    "1999-12-07": "Anniversary of death of President Felix Houphouet-Boigny",
+    "1999-12-25": "Christmas Day",
+    "2000-01-01": "New Year's Day",
+    "2000-01-04": "Day after Night of Power",
+    "2000-01-08": "Eid al-Fitr",
+    "2000-03-16": "Eid al-Adha",
+    "2000-04-24": "Easter Monday",
+    "2000-05-01": "Labor Day",
+    "2000-06-01": "Ascension Day",
+    "2000-06-12": "Whit Monday",
+    "2000-06-14": "Day after Prophet's Birthday",
+    "2000-08-07": "Independence Day",
+    "2000-08-15": "Assumption Day",
+    "2000-11-01": "All Saints' Day",
+    "2000-11-15": "National Peace Day",
+    "2000-12-07": "Anniversary of death of President Felix Houphouet-Boigny",
+    "2000-12-23": "Day after Night of Power",
+    "2000-12-25": "Christmas Day",
+    "2000-12-27": "Eid al-Fitr",
+    "2001-01-01": "New Year's Day",
+    "2001-03-05": "Eid al-Adha",
+    "2001-04-16": "Easter Monday",
+    "2001-05-01": "Labor Day",
+    "2001-05-24": "Ascension Day",
+    "2001-06-04": "Day after Prophet's Birthday; Whit Monday",
+    "2001-08-07": "Independence Day",
+    "2001-08-15": "Assumption Day",
+    "2001-11-01": "All Saints' Day",
+    "2001-11-15": "National Peace Day",
+    "2001-12-12": "Day after Night of Power",
+    "2001-12-16": "Eid al-Fitr",
+    "2001-12-25": "Christmas Day",
+    "2002-01-01": "New Year's Day",
+    "2002-02-22": "Eid al-Adha",
+    "2002-04-01": "Easter Monday",
+    "2002-05-01": "Labor Day",
+    "2002-05-09": "Ascension Day",
+    "2002-05-20": "Whit Monday",
+    "2002-05-24": "Day after Prophet's Birthday",
+    "2002-08-07": "Independence Day",
+    "2002-08-15": "Assumption Day",
+    "2002-11-01": "All Saints' Day",
+    "2002-11-15": "National Peace Day",
+    "2002-12-02": "Day after Night of Power",
+    "2002-12-05": "Eid al-Fitr",
+    "2002-12-25": "Christmas Day",
+    "2003-01-01": "New Year's Day",
+    "2003-02-11": "Eid al-Adha",
+    "2003-04-21": "Easter Monday",
+    "2003-05-01": "Labor Day",
+    "2003-05-13": "Day after Prophet's Birthday",
+    "2003-05-29": "Ascension Day",
+    "2003-06-09": "Whit Monday",
+    "2003-08-07": "Independence Day",
+    "2003-08-15": "Assumption Day",
+    "2003-11-01": "All Saints' Day",
+    "2003-11-15": "National Peace Day",
+    "2003-11-21": "Day after Night of Power",
+    "2003-11-25": "Eid al-Fitr",
+    "2003-12-25": "Christmas Day",
+    "2004-01-01": "New Year's Day",
+    "2004-02-01": "Eid al-Adha",
+    "2004-04-12": "Easter Monday",
+    "2004-05-01": "Day after Prophet's Birthday; Labor Day",
+    "2004-05-20": "Ascension Day",
+    "2004-05-31": "Whit Monday",
+    "2004-08-07": "Independence Day",
+    "2004-08-15": "Assumption Day",
+    "2004-11-01": "All Saints' Day",
+    "2004-11-10": "Day after Night of Power",
+    "2004-11-14": "Eid al-Fitr",
+    "2004-11-15": "National Peace Day",
+    "2004-12-25": "Christmas Day",
+    "2005-01-01": "New Year's Day",
+    "2005-01-21": "Eid al-Adha",
+    "2005-03-28": "Easter Monday",
+    "2005-04-21": "Day after Prophet's Birthday",
+    "2005-05-01": "Labor Day",
+    "2005-05-02": "Day after the Labor Day",
+    "2005-05-05": "Ascension Day",
+    "2005-05-16": "Whit Monday",
+    "2005-08-07": "Independence Day",
+    "2005-08-08": "Day after the Independence Day",
+    "2005-08-15": "Assumption Day",
+    "2005-10-30": "Day after Night of Power",
+    "2005-11-01": "All Saints' Day",
+    "2005-11-03": "Eid al-Fitr",
+    "2005-11-15": "National Peace Day",
+    "2005-12-25": "Christmas Day",
+    "2006-01-01": "New Year's Day",
+    "2006-01-10": "Eid al-Adha",
+    "2006-04-10": "Day after Prophet's Birthday",
+    "2006-04-17": "Easter Monday",
+    "2006-05-01": "Labor Day",
+    "2006-05-25": "Ascension Day",
+    "2006-06-05": "Whit Monday",
+    "2006-08-07": "Independence Day",
+    "2006-08-15": "Assumption Day",
+    "2006-10-20": "Day after Night of Power",
+    "2006-10-23": "Eid al-Fitr",
+    "2006-11-01": "All Saints' Day",
+    "2006-11-15": "National Peace Day",
+    "2006-12-25": "Christmas Day",
+    "2006-12-31": "Eid al-Adha",
+    "2007-01-01": "New Year's Day",
+    "2007-03-31": "Day after Prophet's Birthday",
+    "2007-04-09": "Easter Monday",
+    "2007-05-01": "Labor Day",
+    "2007-05-17": "Ascension Day",
+    "2007-05-28": "Whit Monday",
+    "2007-08-07": "Independence Day",
+    "2007-08-15": "Assumption Day",
+    "2007-10-09": "Day after Night of Power",
+    "2007-10-13": "Eid al-Fitr",
+    "2007-11-01": "All Saints' Day",
+    "2007-11-15": "National Peace Day",
+    "2007-12-20": "Eid al-Adha",
+    "2007-12-25": "Christmas Day",
+    "2008-01-01": "New Year's Day",
+    "2008-03-20": "Day after Prophet's Birthday",
+    "2008-03-24": "Easter Monday",
+    "2008-05-01": "Ascension Day; Labor Day",
+    "2008-05-12": "Whit Monday",
+    "2008-08-07": "Independence Day",
+    "2008-08-15": "Assumption Day",
+    "2008-09-27": "Day after Night of Power",
+    "2008-10-01": "Eid al-Fitr",
+    "2008-11-01": "All Saints' Day",
+    "2008-11-15": "National Peace Day",
+    "2008-12-08": "Eid al-Adha",
+    "2008-12-25": "Christmas Day",
+    "2009-01-01": "New Year's Day",
+    "2009-03-09": "Day after Prophet's Birthday",
+    "2009-04-13": "Easter Monday",
+    "2009-05-01": "Labor Day",
+    "2009-05-21": "Ascension Day",
+    "2009-06-01": "Whit Monday",
+    "2009-08-07": "Independence Day",
+    "2009-08-15": "Assumption Day",
+    "2009-09-17": "Day after Night of Power",
+    "2009-09-20": "Eid al-Fitr",
+    "2009-11-01": "All Saints' Day",
+    "2009-11-15": "National Peace Day",
+    "2009-11-27": "Eid al-Adha",
+    "2009-12-25": "Christmas Day",
+    "2010-01-01": "New Year's Day",
+    "2010-02-26": "Day after Prophet's Birthday",
+    "2010-04-05": "Easter Monday",
+    "2010-05-01": "Labor Day",
+    "2010-05-13": "Ascension Day",
+    "2010-05-24": "Whit Monday",
+    "2010-08-07": "Independence Day",
+    "2010-08-15": "Assumption Day",
+    "2010-09-06": "Day after Night of Power",
+    "2010-09-10": "Eid al-Fitr",
+    "2010-10-29": "Public holiday for Presidential election preparation",
+    "2010-11-01": "All Saints' Day",
+    "2010-11-15": "National Peace Day",
+    "2010-11-16": "Eid al-Adha",
+    "2010-12-25": "Christmas Day",
+    "2011-01-01": "New Year's Day",
+    "2011-02-15": "Day after Prophet's Birthday",
+    "2011-04-25": "Easter Monday",
+    "2011-05-01": "Labor Day",
+    "2011-05-02": "Day after the Labor Day",
+    "2011-06-02": "Ascension Day",
+    "2011-06-13": "Whit Monday",
+    "2011-08-07": "Independence Day",
+    "2011-08-08": "Day after the Independence Day",
+    "2011-08-15": "Assumption Day",
+    "2011-08-27": "Day after Night of Power",
+    "2011-08-30": "Eid al-Fitr",
+    "2011-11-01": "All Saints' Day",
+    "2011-11-06": "Eid al-Adha",
+    "2011-11-15": "National Peace Day",
+    "2011-12-25": "Christmas Day",
+    "2011-12-26": "Day after the Christmas Day",
+    "2012-01-01": "New Year's Day",
+    "2012-02-04": "Day after Prophet's Birthday",
+    "2012-04-09": "Easter Monday",
+    "2012-05-01": "Labor Day",
+    "2012-05-17": "Ascension Day",
+    "2012-05-28": "Whit Monday",
+    "2012-08-07": "Independence Day",
+    "2012-08-15": "Assumption Day; Day after Night of Power",
+    "2012-08-19": "Eid al-Fitr",
+    "2012-08-20": "Day after the Eid al-Fitr",
+    "2012-10-26": "Eid al-Adha",
+    "2012-11-01": "All Saints' Day",
+    "2012-11-15": "National Peace Day",
+    "2012-12-25": "Christmas Day",
+    "2013-01-01": "New Year's Day",
+    "2013-01-24": "Day after Prophet's Birthday",
+    "2013-04-01": "Easter Monday",
+    "2013-05-01": "Labor Day",
+    "2013-05-09": "Ascension Day",
+    "2013-05-20": "Whit Monday",
+    "2013-08-04": "Day after Night of Power",
+    "2013-08-07": "Independence Day",
+    "2013-08-08": "Eid al-Fitr",
+    "2013-08-15": "Assumption Day",
+    "2013-10-15": "Eid al-Adha",
+    "2013-11-01": "All Saints' Day",
+    "2013-11-15": "National Peace Day",
+    "2013-12-25": "Christmas Day",
+    "2014-01-01": "New Year's Day",
+    "2014-01-13": "Day after Prophet's Birthday",
+    "2014-04-21": "Easter Monday",
+    "2014-05-01": "Labor Day",
+    "2014-05-29": "Ascension Day",
+    "2014-06-09": "Whit Monday",
+    "2014-07-24": "Day after Night of Power",
+    "2014-07-28": "Eid al-Fitr",
+    "2014-08-07": "Independence Day",
+    "2014-08-15": "Assumption Day",
+    "2014-10-04": "Eid al-Adha",
+    "2014-11-01": "All Saints' Day",
+    "2014-11-15": "National Peace Day",
+    "2014-12-25": "Christmas Day",
+    "2015-01-01": "New Year's Day",
+    "2015-01-03": "Day after Prophet's Birthday",
+    "2015-04-06": "Easter Monday",
+    "2015-05-01": "Labor Day",
+    "2015-05-14": "Ascension Day",
+    "2015-05-25": "Whit Monday",
+    "2015-07-14": "Day after Night of Power",
+    "2015-07-17": "Eid al-Fitr",
+    "2015-08-07": "Independence Day",
+    "2015-08-15": "Assumption Day",
+    "2015-09-23": "Eid al-Adha",
+    "2015-11-01": "All Saints' Day",
+    "2015-11-15": "National Peace Day",
+    "2015-12-23": "Day after Prophet's Birthday",
+    "2015-12-25": "Christmas Day",
+    "2016-01-01": "New Year's Day",
+    "2016-03-28": "Easter Monday",
+    "2016-05-01": "Labor Day",
+    "2016-05-02": "Day after the Labor Day",
+    "2016-05-05": "Ascension Day",
+    "2016-05-16": "Whit Monday",
+    "2016-07-02": "Day after Night of Power",
+    "2016-07-06": "Eid al-Fitr",
+    "2016-08-07": "Independence Day",
+    "2016-08-08": "Day after the Independence Day",
+    "2016-08-15": "Assumption Day",
+    "2016-09-11": "Eid al-Adha",
+    "2016-09-12": "Day after the Eid al-Adha",
+    "2016-11-01": "All Saints' Day",
+    "2016-11-15": "National Peace Day",
+    "2016-12-11": "Day after Prophet's Birthday",
+    "2016-12-25": "Christmas Day",
+    "2016-12-26": "Day after the Christmas Day",
+    "2017-01-01": "New Year's Day",
+    "2017-04-17": "Easter Monday",
+    "2017-05-01": "Labor Day",
+    "2017-05-25": "Ascension Day",
+    "2017-06-05": "Whit Monday",
+    "2017-06-22": "Day after Night of Power",
+    "2017-06-25": "Eid al-Fitr",
+    "2017-06-26": "Day after the Eid al-Fitr",
+    "2017-08-07": "Independence Day",
+    "2017-08-15": "Assumption Day",
+    "2017-09-01": "Eid al-Adha",
+    "2017-11-01": "All Saints' Day",
+    "2017-11-15": "National Peace Day",
+    "2017-11-30": "Day after Prophet's Birthday",
+    "2017-12-25": "Christmas Day",
+    "2018-01-01": "New Year's Day",
+    "2018-04-02": "Easter Monday",
+    "2018-05-01": "Labor Day",
+    "2018-05-10": "Ascension Day",
+    "2018-05-21": "Whit Monday",
+    "2018-06-11": "Day after Night of Power",
+    "2018-06-15": "Eid al-Fitr",
+    "2018-08-07": "Independence Day",
+    "2018-08-15": "Assumption Day",
+    "2018-08-21": "Eid al-Adha",
+    "2018-11-01": "All Saints' Day",
+    "2018-11-15": "National Peace Day",
+    "2018-11-20": "Day after Prophet's Birthday",
+    "2018-12-25": "Christmas Day",
+    "2019-01-01": "New Year's Day",
+    "2019-04-22": "Easter Monday",
+    "2019-05-01": "Labor Day",
+    "2019-05-30": "Ascension Day",
+    "2019-06-01": "Day after Night of Power",
+    "2019-06-04": "Eid al-Fitr",
+    "2019-06-10": "Whit Monday",
+    "2019-08-07": "Independence Day",
+    "2019-08-11": "Eid al-Adha",
+    "2019-08-12": "Day after the Eid al-Adha",
+    "2019-08-15": "Assumption Day",
+    "2019-11-01": "All Saints' Day",
+    "2019-11-09": "Day after Prophet's Birthday",
+    "2019-11-15": "National Peace Day",
+    "2019-12-25": "Christmas Day",
+    "2020-01-01": "New Year's Day",
+    "2020-04-13": "Easter Monday",
+    "2020-05-01": "Labor Day",
+    "2020-05-20": "Day after Night of Power",
+    "2020-05-21": "Ascension Day",
+    "2020-05-24": "Eid al-Fitr",
+    "2020-05-25": "Day after the Eid al-Fitr",
+    "2020-06-01": "Whit Monday",
+    "2020-07-31": "Eid al-Adha",
+    "2020-08-07": "Independence Day",
+    "2020-08-15": "Assumption Day",
+    "2020-10-29": "Day after Prophet's Birthday",
+    "2020-11-01": "All Saints' Day",
+    "2020-11-15": "National Peace Day",
+    "2020-12-25": "Christmas Day",
+    "2021-01-01": "New Year's Day",
+    "2021-04-05": "Easter Monday",
+    "2021-05-01": "Labor Day",
+    "2021-05-09": "Day after Night of Power",
+    "2021-05-13": "Ascension Day; Eid al-Fitr",
+    "2021-05-24": "Whit Monday",
+    "2021-07-20": "Eid al-Adha",
+    "2021-08-07": "Independence Day",
+    "2021-08-15": "Assumption Day",
+    "2021-10-18": "Day after Prophet's Birthday",
+    "2021-11-01": "All Saints' Day",
+    "2021-11-15": "National Peace Day",
+    "2021-12-25": "Christmas Day",
+    "2022-01-01": "New Year's Day",
+    "2022-04-18": "Easter Monday",
+    "2022-04-28": "Day after Night of Power",
+    "2022-05-01": "Labor Day",
+    "2022-05-02": "Day after the Labor Day; Eid al-Fitr",
+    "2022-05-26": "Ascension Day",
+    "2022-06-06": "Whit Monday",
+    "2022-07-09": "Eid al-Adha",
+    "2022-08-07": "Independence Day",
+    "2022-08-08": "Day after the Independence Day",
+    "2022-08-15": "Assumption Day",
+    "2022-10-08": "Day after Prophet's Birthday",
+    "2022-11-01": "All Saints' Day",
+    "2022-11-15": "National Peace Day",
+    "2022-12-25": "Christmas Day",
+    "2022-12-26": "Day after the Christmas Day",
+    "2023-01-01": "New Year's Day",
+    "2023-04-10": "Easter Monday",
+    "2023-04-18": "Day after Night of Power",
+    "2023-04-21": "Eid al-Fitr",
+    "2023-05-01": "Labor Day",
+    "2023-05-18": "Ascension Day",
+    "2023-05-29": "Whit Monday",
+    "2023-06-28": "Eid al-Adha",
+    "2023-08-07": "Independence Day",
+    "2023-08-15": "Assumption Day",
+    "2023-09-27": "Day after Prophet's Birthday",
+    "2023-11-01": "All Saints' Day",
+    "2023-11-15": "National Peace Day",
+    "2023-12-25": "Christmas Day",
+    "2024-01-01": "New Year's Day",
+    "2024-02-12": "2024 African Cup of Nations Victory",
+    "2024-04-01": "Easter Monday",
+    "2024-04-06": "Day after Night of Power",
+    "2024-04-10": "Eid al-Fitr",
+    "2024-05-01": "Labor Day",
+    "2024-05-09": "Ascension Day",
+    "2024-05-20": "Whit Monday",
+    "2024-06-16": "Eid al-Adha",
+    "2024-06-17": "Day after the Eid al-Adha",
+    "2024-08-07": "Independence Day",
+    "2024-08-15": "Assumption Day",
+    "2024-09-15": "Day after Prophet's Birthday",
+    "2024-11-01": "All Saints' Day",
+    "2024-11-15": "National Peace Day",
+    "2024-12-25": "Christmas Day",
+    "2025-01-01": "New Year's Day",
+    "2025-03-27": "Day after Night of Power",
+    "2025-03-30": "Eid al-Fitr",
+    "2025-03-31": "Day after the Eid al-Fitr",
+    "2025-04-21": "Easter Monday",
+    "2025-05-01": "Labor Day",
+    "2025-05-29": "Ascension Day",
+    "2025-06-06": "Eid al-Adha",
+    "2025-06-09": "Whit Monday",
+    "2025-08-07": "Independence Day",
+    "2025-08-15": "Assumption Day",
+    "2025-09-04": "Day after Prophet's Birthday",
+    "2025-11-01": "All Saints' Day",
+    "2025-11-15": "National Peace Day",
+    "2025-12-25": "Christmas Day",
+    "2026-01-01": "New Year's Day",
+    "2026-03-16": "Day after Night of Power",
+    "2026-03-20": "Eid al-Fitr",
+    "2026-04-06": "Easter Monday",
+    "2026-05-01": "Labor Day",
+    "2026-05-14": "Ascension Day",
+    "2026-05-25": "Whit Monday",
+    "2026-05-27": "Eid al-Adha",
+    "2026-08-07": "Independence Day",
+    "2026-08-15": "Assumption Day",
+    "2026-08-25": "Day after Prophet's Birthday",
+    "2026-11-01": "All Saints' Day",
+    "2026-11-15": "National Peace Day",
+    "2026-12-25": "Christmas Day",
+    "2027-01-01": "New Year's Day",
+    "2027-03-06": "Day after Night of Power",
+    "2027-03-09": "Eid al-Fitr",
+    "2027-03-29": "Easter Monday",
+    "2027-05-01": "Labor Day",
+    "2027-05-06": "Ascension Day",
+    "2027-05-16": "Eid al-Adha",
+    "2027-05-17": "Day after the Eid al-Adha; Whit Monday",
+    "2027-08-07": "Independence Day",
+    "2027-08-14": "Day after Prophet's Birthday",
+    "2027-08-15": "Assumption Day",
+    "2027-11-01": "All Saints' Day",
+    "2027-11-15": "National Peace Day",
+    "2027-12-25": "Christmas Day",
+    "2028-01-01": "New Year's Day",
+    "2028-02-23": "Day after Night of Power",
+    "2028-02-26": "Eid al-Fitr",
+    "2028-04-17": "Easter Monday",
+    "2028-05-01": "Labor Day",
+    "2028-05-05": "Eid al-Adha",
+    "2028-05-25": "Ascension Day",
+    "2028-06-05": "Whit Monday",
+    "2028-08-03": "Day after Prophet's Birthday",
+    "2028-08-07": "Independence Day",
+    "2028-08-15": "Assumption Day",
+    "2028-11-01": "All Saints' Day",
+    "2028-11-15": "National Peace Day",
+    "2028-12-25": "Christmas Day",
+    "2029-01-01": "New Year's Day",
+    "2029-02-11": "Day after Night of Power",
+    "2029-02-14": "Eid al-Fitr",
+    "2029-04-02": "Easter Monday",
+    "2029-04-24": "Eid al-Adha",
+    "2029-05-01": "Labor Day",
+    "2029-05-10": "Ascension Day",
+    "2029-05-21": "Whit Monday",
+    "2029-07-24": "Day after Prophet's Birthday",
+    "2029-08-07": "Independence Day",
+    "2029-08-15": "Assumption Day",
+    "2029-11-01": "All Saints' Day",
+    "2029-11-15": "National Peace Day",
+    "2029-12-25": "Christmas Day",
+    "2030-01-01": "New Year's Day",
+    "2030-01-31": "Day after Night of Power",
+    "2030-02-04": "Eid al-Fitr",
+    "2030-04-13": "Eid al-Adha",
+    "2030-04-22": "Easter Monday",
+    "2030-05-01": "Labor Day",
+    "2030-05-30": "Ascension Day",
+    "2030-06-10": "Whit Monday",
+    "2030-07-13": "Day after Prophet's Birthday",
+    "2030-08-07": "Independence Day",
+    "2030-08-15": "Assumption Day",
+    "2030-11-01": "All Saints' Day",
+    "2030-11-15": "National Peace Day",
+    "2030-12-25": "Christmas Day",
+    "2031-01-01": "New Year's Day",
+    "2031-01-21": "Day after Night of Power",
+    "2031-01-24": "Eid al-Fitr",
+    "2031-04-02": "Eid al-Adha",
+    "2031-04-14": "Easter Monday",
+    "2031-05-01": "Labor Day",
+    "2031-05-22": "Ascension Day",
+    "2031-06-02": "Whit Monday",
+    "2031-07-02": "Day after Prophet's Birthday",
+    "2031-08-07": "Independence Day",
+    "2031-08-15": "Assumption Day",
+    "2031-11-01": "All Saints' Day",
+    "2031-11-15": "National Peace Day",
+    "2031-12-25": "Christmas Day",
+    "2032-01-01": "New Year's Day",
+    "2032-01-10": "Day after Night of Power",
+    "2032-01-14": "Eid al-Fitr",
+    "2032-03-22": "Eid al-Adha",
+    "2032-03-29": "Easter Monday",
+    "2032-05-01": "Labor Day",
+    "2032-05-06": "Ascension Day",
+    "2032-05-17": "Whit Monday",
+    "2032-06-20": "Day after Prophet's Birthday",
+    "2032-08-07": "Independence Day",
+    "2032-08-15": "Assumption Day",
+    "2032-11-01": "All Saints' Day",
+    "2032-11-15": "National Peace Day",
+    "2032-12-25": "Christmas Day",
+    "2032-12-30": "Day after Night of Power",
+    "2033-01-01": "New Year's Day",
+    "2033-01-02": "Eid al-Fitr",
+    "2033-01-03": "Day after the Eid al-Fitr",
+    "2033-03-11": "Eid al-Adha",
+    "2033-04-18": "Easter Monday",
+    "2033-05-01": "Labor Day",
+    "2033-05-02": "Day after the Labor Day",
+    "2033-05-26": "Ascension Day",
+    "2033-06-06": "Whit Monday",
+    "2033-06-09": "Day after Prophet's Birthday",
+    "2033-08-07": "Independence Day",
+    "2033-08-08": "Day after the Independence Day",
+    "2033-08-15": "Assumption Day",
+    "2033-11-01": "All Saints' Day",
+    "2033-11-15": "National Peace Day",
+    "2033-12-19": "Day after Night of Power",
+    "2033-12-23": "Eid al-Fitr",
+    "2033-12-25": "Christmas Day",
+    "2033-12-26": "Day after the Christmas Day",
+    "2034-01-01": "New Year's Day",
+    "2034-03-01": "Eid al-Adha",
+    "2034-04-10": "Easter Monday",
+    "2034-05-01": "Labor Day",
+    "2034-05-18": "Ascension Day",
+    "2034-05-29": "Whit Monday",
+    "2034-05-30": "Day after Prophet's Birthday",
+    "2034-08-07": "Independence Day",
+    "2034-08-15": "Assumption Day",
+    "2034-11-01": "All Saints' Day",
+    "2034-11-15": "National Peace Day",
+    "2034-12-08": "Day after Night of Power",
+    "2034-12-12": "Eid al-Fitr",
+    "2034-12-25": "Christmas Day",
+    "2035-01-01": "New Year's Day",
+    "2035-02-18": "Eid al-Adha",
+    "2035-02-19": "Day after the Eid al-Adha",
+    "2035-03-26": "Easter Monday",
+    "2035-05-01": "Labor Day",
+    "2035-05-03": "Ascension Day",
+    "2035-05-14": "Whit Monday",
+    "2035-05-20": "Day after Prophet's Birthday",
+    "2035-08-07": "Independence Day",
+    "2035-08-15": "Assumption Day",
+    "2035-11-01": "All Saints' Day",
+    "2035-11-15": "National Peace Day",
+    "2035-11-27": "Day after Night of Power",
+    "2035-12-01": "Eid al-Fitr",
+    "2035-12-25": "Christmas Day",
+    "2036-01-01": "New Year's Day",
+    "2036-02-07": "Eid al-Adha",
+    "2036-04-14": "Easter Monday",
+    "2036-05-01": "Labor Day",
+    "2036-05-08": "Day after Prophet's Birthday",
+    "2036-05-22": "Ascension Day",
+    "2036-06-02": "Whit Monday",
+    "2036-08-07": "Independence Day",
+    "2036-08-15": "Assumption Day",
+    "2036-11-01": "All Saints' Day",
+    "2036-11-15": "Day after Night of Power; National Peace Day",
+    "2036-11-19": "Eid al-Fitr",
+    "2036-12-25": "Christmas Day",
+    "2037-01-01": "New Year's Day",
+    "2037-01-26": "Eid al-Adha",
+    "2037-04-06": "Easter Monday",
+    "2037-04-28": "Day after Prophet's Birthday",
+    "2037-05-01": "Labor Day",
+    "2037-05-14": "Ascension Day",
+    "2037-05-25": "Whit Monday",
+    "2037-08-07": "Independence Day",
+    "2037-08-15": "Assumption Day",
+    "2037-11-01": "All Saints' Day",
+    "2037-11-05": "Day after Night of Power",
+    "2037-11-08": "Eid al-Fitr",
+    "2037-11-09": "Day after the Eid al-Fitr",
+    "2037-11-15": "National Peace Day",
+    "2037-12-25": "Christmas Day",
+    "2038-01-01": "New Year's Day",
+    "2038-01-16": "Eid al-Adha",
+    "2038-04-17": "Day after Prophet's Birthday",
+    "2038-04-26": "Easter Monday",
+    "2038-05-01": "Labor Day",
+    "2038-06-03": "Ascension Day",
+    "2038-06-14": "Whit Monday",
+    "2038-08-07": "Independence Day",
+    "2038-08-15": "Assumption Day",
+    "2038-10-26": "Day after Night of Power",
+    "2038-10-29": "Eid al-Fitr",
+    "2038-11-01": "All Saints' Day",
+    "2038-11-15": "National Peace Day",
+    "2038-12-25": "Christmas Day",
+    "2039-01-01": "New Year's Day",
+    "2039-01-05": "Eid al-Adha",
+    "2039-04-06": "Day after Prophet's Birthday",
+    "2039-04-11": "Easter Monday",
+    "2039-05-01": "Labor Day",
+    "2039-05-02": "Day after the Labor Day",
+    "2039-05-19": "Ascension Day",
+    "2039-05-30": "Whit Monday",
+    "2039-08-07": "Independence Day",
+    "2039-08-08": "Day after the Independence Day",
+    "2039-08-15": "Assumption Day",
+    "2039-10-15": "Day after Night of Power",
+    "2039-10-19": "Eid al-Fitr",
+    "2039-11-01": "All Saints' Day",
+    "2039-11-15": "National Peace Day",
+    "2039-12-25": "Christmas Day",
+    "2039-12-26": "Day after the Christmas Day; Eid al-Adha",
+    "2040-01-01": "New Year's Day",
+    "2040-03-25": "Day after Prophet's Birthday",
+    "2040-04-02": "Easter Monday",
+    "2040-05-01": "Labor Day",
+    "2040-05-10": "Ascension Day",
+    "2040-05-21": "Whit Monday",
+    "2040-08-07": "Independence Day",
+    "2040-08-15": "Assumption Day",
+    "2040-10-03": "Day after Night of Power",
+    "2040-10-07": "Eid al-Fitr",
+    "2040-10-08": "Day after the Eid al-Fitr",
+    "2040-11-01": "All Saints' Day",
+    "2040-11-15": "National Peace Day",
+    "2040-12-14": "Eid al-Adha",
+    "2040-12-25": "Christmas Day",
+    "2041-01-01": "New Year's Day",
+    "2041-03-15": "Day after Prophet's Birthday",
+    "2041-04-22": "Easter Monday",
+    "2041-05-01": "Labor Day",
+    "2041-05-30": "Ascension Day",
+    "2041-06-10": "Whit Monday",
+    "2041-08-07": "Independence Day",
+    "2041-08-15": "Assumption Day",
+    "2041-09-23": "Day after Night of Power",
+    "2041-09-26": "Eid al-Fitr",
+    "2041-11-01": "All Saints' Day",
+    "2041-11-15": "National Peace Day",
+    "2041-12-04": "Eid al-Adha",
+    "2041-12-25": "Christmas Day",
+    "2042-01-01": "New Year's Day",
+    "2042-03-04": "Day after Prophet's Birthday",
+    "2042-04-07": "Easter Monday",
+    "2042-05-01": "Labor Day",
+    "2042-05-15": "Ascension Day",
+    "2042-05-26": "Whit Monday",
+    "2042-08-07": "Independence Day",
+    "2042-08-15": "Assumption Day",
+    "2042-09-12": "Day after Night of Power",
+    "2042-09-15": "Eid al-Fitr",
+    "2042-11-01": "All Saints' Day",
+    "2042-11-15": "National Peace Day",
+    "2042-11-23": "Eid al-Adha",
+    "2042-11-24": "Day after the Eid al-Adha",
+    "2042-12-25": "Christmas Day",
+    "2043-01-01": "New Year's Day",
+    "2043-02-22": "Day after Prophet's Birthday",
+    "2043-03-30": "Easter Monday",
+    "2043-05-01": "Labor Day",
+    "2043-05-07": "Ascension Day",
+    "2043-05-18": "Whit Monday",
+    "2043-08-07": "Independence Day",
+    "2043-08-15": "Assumption Day",
+    "2043-09-01": "Day after Night of Power",
+    "2043-09-04": "Eid al-Fitr",
+    "2043-11-01": "All Saints' Day",
+    "2043-11-12": "Eid al-Adha",
+    "2043-11-15": "National Peace Day",
+    "2043-12-25": "Christmas Day",
+    "2044-01-01": "New Year's Day",
+    "2044-02-11": "Day after Prophet's Birthday",
+    "2044-04-18": "Easter Monday",
+    "2044-05-01": "Labor Day",
+    "2044-05-02": "Day after the Labor Day",
+    "2044-05-26": "Ascension Day",
+    "2044-06-06": "Whit Monday",
+    "2044-08-07": "Independence Day",
+    "2044-08-08": "Day after the Independence Day",
+    "2044-08-15": "Assumption Day",
+    "2044-08-21": "Day after Night of Power",
+    "2044-08-24": "Eid al-Fitr",
+    "2044-10-31": "Eid al-Adha",
+    "2044-11-01": "All Saints' Day",
+    "2044-11-15": "National Peace Day",
+    "2044-12-25": "Christmas Day",
+    "2044-12-26": "Day after the Christmas Day",
+    "2045-01-01": "New Year's Day",
+    "2045-01-30": "Day after Prophet's Birthday",
+    "2045-04-10": "Easter Monday",
+    "2045-05-01": "Labor Day",
+    "2045-05-18": "Ascension Day",
+    "2045-05-29": "Whit Monday",
+    "2045-08-07": "Independence Day",
+    "2045-08-10": "Day after Night of Power",
+    "2045-08-14": "Eid al-Fitr",
+    "2045-08-15": "Assumption Day",
+    "2045-10-21": "Eid al-Adha",
+    "2045-11-01": "All Saints' Day",
+    "2045-11-15": "National Peace Day",
+    "2045-12-25": "Christmas Day",
+    "2046-01-01": "New Year's Day",
+    "2046-01-19": "Day after Prophet's Birthday",
+    "2046-03-26": "Easter Monday",
+    "2046-05-01": "Labor Day",
+    "2046-05-03": "Ascension Day",
+    "2046-05-14": "Whit Monday",
+    "2046-07-31": "Day after Night of Power",
+    "2046-08-03": "Eid al-Fitr",
+    "2046-08-07": "Independence Day",
+    "2046-08-15": "Assumption Day",
+    "2046-10-10": "Eid al-Adha",
+    "2046-11-01": "All Saints' Day",
+    "2046-11-15": "National Peace Day",
+    "2046-12-25": "Christmas Day",
+    "2047-01-01": "New Year's Day",
+    "2047-01-08": "Day after Prophet's Birthday",
+    "2047-04-15": "Easter Monday",
+    "2047-05-01": "Labor Day",
+    "2047-05-23": "Ascension Day",
+    "2047-06-03": "Whit Monday",
+    "2047-07-20": "Day after Night of Power",
+    "2047-07-24": "Eid al-Fitr",
+    "2047-08-07": "Independence Day",
+    "2047-08-15": "Assumption Day",
+    "2047-09-30": "Eid al-Adha",
+    "2047-11-01": "All Saints' Day",
+    "2047-11-15": "National Peace Day",
+    "2047-12-25": "Christmas Day",
+    "2047-12-29": "Day after Prophet's Birthday",
+    "2048-01-01": "New Year's Day",
+    "2048-04-06": "Easter Monday",
+    "2048-05-01": "Labor Day",
+    "2048-05-14": "Ascension Day",
+    "2048-05-25": "Whit Monday",
+    "2048-07-08": "Day after Night of Power",
+    "2048-07-12": "Eid al-Fitr",
+    "2048-07-13": "Day after the Eid al-Fitr",
+    "2048-08-07": "Independence Day",
+    "2048-08-15": "Assumption Day",
+    "2048-09-19": "Eid al-Adha",
+    "2048-11-01": "All Saints' Day",
+    "2048-11-15": "National Peace Day",
+    "2048-12-18": "Day after Prophet's Birthday",
+    "2048-12-25": "Christmas Day",
+    "2049-01-01": "New Year's Day",
+    "2049-04-19": "Easter Monday",
+    "2049-05-01": "Labor Day",
+    "2049-05-27": "Ascension Day",
+    "2049-06-07": "Whit Monday",
+    "2049-06-28": "Day after Night of Power",
+    "2049-07-01": "Eid al-Fitr",
+    "2049-08-07": "Independence Day",
+    "2049-08-15": "Assumption Day",
+    "2049-09-08": "Eid al-Adha",
+    "2049-11-01": "All Saints' Day",
+    "2049-11-15": "National Peace Day",
+    "2049-12-07": "Day after Prophet's Birthday",
+    "2049-12-25": "Christmas Day",
+    "2050-01-01": "New Year's Day",
+    "2050-04-11": "Easter Monday",
+    "2050-05-01": "Labor Day",
+    "2050-05-02": "Day after the Labor Day",
+    "2050-05-19": "Ascension Day",
+    "2050-05-30": "Whit Monday",
+    "2050-06-17": "Day after Night of Power",
+    "2050-06-20": "Eid al-Fitr",
+    "2050-08-07": "Independence Day",
+    "2050-08-08": "Day after the Independence Day",
+    "2050-08-15": "Assumption Day",
+    "2050-08-28": "Eid al-Adha",
+    "2050-08-29": "Day after the Eid al-Adha",
+    "2050-11-01": "All Saints' Day",
+    "2050-11-15": "National Peace Day",
+    "2050-11-26": "Day after Prophet's Birthday",
+    "2050-12-25": "Christmas Day",
+    "2050-12-26": "Day after the Christmas Day"
+}
diff --git a/snapshots/countries/FJ_COMMON.json b/snapshots/countries/FJ_COMMON.json
new file mode 100644
index 00000000..cd9a9d96
--- /dev/null
+++ b/snapshots/countries/FJ_COMMON.json
@@ -0,0 +1,447 @@
+{
+    "2016-01-01": "New Year's Day",
+    "2016-03-25": "Good Friday",
+    "2016-03-26": "Easter Saturday",
+    "2016-03-28": "Easter Monday",
+    "2016-06-24": "National Sports Day",
+    "2016-09-07": "Constitution Day",
+    "2016-10-10": "Fiji Day",
+    "2016-10-31": "Diwali",
+    "2016-12-12": "Prophet Mohammed's Birthday",
+    "2016-12-25": "Christmas Day",
+    "2016-12-26": "Boxing Day",
+    "2016-12-27": "Christmas Day (observed)",
+    "2017-01-01": "New Year's Day",
+    "2017-01-02": "New Year's Day (observed)",
+    "2017-04-14": "Good Friday",
+    "2017-04-15": "Easter Saturday",
+    "2017-04-17": "Easter Monday",
+    "2017-06-30": "National Sports Day",
+    "2017-09-07": "Constitution Day",
+    "2017-10-10": "Fiji Day",
+    "2017-10-19": "Diwali",
+    "2017-12-02": "Prophet Mohammed's Birthday",
+    "2017-12-04": "Prophet Mohammed's Birthday (observed)",
+    "2017-12-25": "Christmas Day",
+    "2017-12-26": "Boxing Day",
+    "2018-01-01": "New Year's Day",
+    "2018-03-30": "Good Friday",
+    "2018-03-31": "Easter Saturday",
+    "2018-04-02": "Easter Monday",
+    "2018-06-29": "National Sports Day",
+    "2018-09-07": "Constitution Day",
+    "2018-10-10": "Fiji Day",
+    "2018-11-07": "Diwali",
+    "2018-11-19": "Prophet Mohammed's Birthday",
+    "2018-12-25": "Christmas Day",
+    "2018-12-26": "Boxing Day",
+    "2019-01-01": "New Year's Day",
+    "2019-04-19": "Good Friday",
+    "2019-04-20": "Easter Saturday",
+    "2019-04-22": "Easter Monday",
+    "2019-09-07": "Constitution Day",
+    "2019-09-09": "Constitution Day (observed)",
+    "2019-10-10": "Fiji Day",
+    "2019-10-28": "Diwali",
+    "2019-11-09": "Prophet Mohammed's Birthday",
+    "2019-11-11": "Prophet Mohammed's Birthday (observed)",
+    "2019-12-25": "Christmas Day",
+    "2019-12-26": "Boxing Day",
+    "2020-01-01": "New Year's Day",
+    "2020-04-10": "Good Friday",
+    "2020-04-11": "Easter Saturday",
+    "2020-04-13": "Easter Monday",
+    "2020-09-07": "Constitution Day",
+    "2020-10-10": "Fiji Day",
+    "2020-10-31": "Prophet Mohammed's Birthday",
+    "2020-11-02": "Prophet Mohammed's Birthday (observed)",
+    "2020-11-14": "Diwali",
+    "2020-11-16": "Diwali (observed)",
+    "2020-12-25": "Christmas Day",
+    "2020-12-26": "Boxing Day",
+    "2020-12-28": "Boxing Day (observed)",
+    "2021-01-01": "New Year's Day",
+    "2021-04-02": "Good Friday",
+    "2021-04-03": "Easter Saturday",
+    "2021-04-05": "Easter Monday",
+    "2021-09-07": "Constitution Day",
+    "2021-10-10": "Fiji Day",
+    "2021-10-18": "Prophet Mohammed's Birthday",
+    "2021-11-04": "Diwali",
+    "2021-12-25": "Christmas Day",
+    "2021-12-26": "Boxing Day",
+    "2021-12-27": "Christmas Day (observed)",
+    "2021-12-28": "Boxing Day (observed)",
+    "2022-01-01": "New Year's Day",
+    "2022-01-03": "New Year's Day (observed)",
+    "2022-04-15": "Good Friday",
+    "2022-04-16": "Easter Saturday",
+    "2022-04-18": "Easter Monday",
+    "2022-09-07": "Constitution Day",
+    "2022-10-07": "Prophet Mohammed's Birthday",
+    "2022-10-10": "Fiji Day",
+    "2022-10-25": "Diwali",
+    "2022-12-25": "Christmas Day",
+    "2022-12-26": "Boxing Day",
+    "2022-12-27": "Christmas Day (observed)",
+    "2023-01-01": "New Year's Day",
+    "2023-01-02": "New Year's Day (observed)",
+    "2023-04-07": "Good Friday",
+    "2023-04-08": "Easter Saturday",
+    "2023-04-10": "Easter Monday",
+    "2023-05-15": "Girmit Day",
+    "2023-05-29": "Ratu Sir Lala Sukuna Day",
+    "2023-09-07": "Constitution Day",
+    "2023-09-30": "Prophet Mohammed's Birthday",
+    "2023-10-02": "Prophet Mohammed's Birthday (observed)",
+    "2023-10-10": "Fiji Day",
+    "2023-11-13": "Diwali",
+    "2023-12-25": "Christmas Day",
+    "2023-12-26": "Boxing Day",
+    "2024-01-01": "New Year's Day",
+    "2024-03-29": "Good Friday",
+    "2024-03-30": "Easter Saturday",
+    "2024-04-01": "Easter Monday",
+    "2024-05-13": "Girmit Day",
+    "2024-05-31": "Ratu Sir Lala Sukuna Day",
+    "2024-09-07": "Constitution Day",
+    "2024-09-16": "Prophet Mohammed's Birthday",
+    "2024-10-10": "Fiji Day",
+    "2024-11-01": "Diwali",
+    "2024-12-25": "Christmas Day",
+    "2024-12-26": "Boxing Day",
+    "2025-01-01": "New Year's Day",
+    "2025-04-18": "Good Friday",
+    "2025-04-19": "Easter Saturday",
+    "2025-04-21": "Easter Monday",
+    "2025-05-12": "Girmit Day",
+    "2025-05-30": "Ratu Sir Lala Sukuna Day",
+    "2025-09-06": "Prophet Mohammed's Birthday",
+    "2025-09-07": "Constitution Day",
+    "2025-09-08": "Prophet Mohammed's Birthday (observed)",
+    "2025-10-10": "Fiji Day",
+    "2025-10-21": "Diwali",
+    "2025-12-25": "Christmas Day",
+    "2025-12-26": "Boxing Day",
+    "2026-01-01": "New Year's Day",
+    "2026-04-03": "Good Friday",
+    "2026-04-04": "Easter Saturday",
+    "2026-04-06": "Easter Monday",
+    "2026-05-11": "Girmit Day",
+    "2026-05-29": "Ratu Sir Lala Sukuna Day",
+    "2026-08-25": "Prophet Mohammed's Birthday (estimated)",
+    "2026-09-07": "Constitution Day",
+    "2026-10-10": "Fiji Day",
+    "2026-11-08": "Diwali (estimated)",
+    "2026-11-09": "Diwali (observed, estimated)",
+    "2026-12-25": "Christmas Day",
+    "2026-12-26": "Boxing Day",
+    "2026-12-28": "Boxing Day (observed)",
+    "2027-01-01": "New Year's Day",
+    "2027-03-26": "Good Friday",
+    "2027-03-27": "Easter Saturday",
+    "2027-03-29": "Easter Monday",
+    "2027-05-17": "Girmit Day",
+    "2027-05-28": "Ratu Sir Lala Sukuna Day",
+    "2027-08-14": "Prophet Mohammed's Birthday (estimated)",
+    "2027-08-16": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2027-09-07": "Constitution Day",
+    "2027-10-10": "Fiji Day",
+    "2027-10-29": "Diwali (estimated)",
+    "2027-12-25": "Christmas Day",
+    "2027-12-26": "Boxing Day",
+    "2027-12-27": "Christmas Day (observed)",
+    "2027-12-28": "Boxing Day (observed)",
+    "2028-01-01": "New Year's Day",
+    "2028-01-03": "New Year's Day (observed)",
+    "2028-04-14": "Good Friday",
+    "2028-04-15": "Easter Saturday",
+    "2028-04-17": "Easter Monday",
+    "2028-05-15": "Girmit Day",
+    "2028-05-26": "Ratu Sir Lala Sukuna Day",
+    "2028-08-03": "Prophet Mohammed's Birthday (estimated)",
+    "2028-09-07": "Constitution Day",
+    "2028-10-10": "Fiji Day",
+    "2028-10-17": "Diwali (estimated)",
+    "2028-12-25": "Christmas Day",
+    "2028-12-26": "Boxing Day",
+    "2029-01-01": "New Year's Day",
+    "2029-03-30": "Good Friday",
+    "2029-03-31": "Easter Saturday",
+    "2029-04-02": "Easter Monday",
+    "2029-05-14": "Girmit Day",
+    "2029-05-25": "Ratu Sir Lala Sukuna Day",
+    "2029-07-24": "Prophet Mohammed's Birthday (estimated)",
+    "2029-09-07": "Constitution Day",
+    "2029-10-10": "Fiji Day",
+    "2029-11-05": "Diwali (estimated)",
+    "2029-12-25": "Christmas Day",
+    "2029-12-26": "Boxing Day",
+    "2030-01-01": "New Year's Day",
+    "2030-04-19": "Good Friday",
+    "2030-04-20": "Easter Saturday",
+    "2030-04-22": "Easter Monday",
+    "2030-05-13": "Girmit Day",
+    "2030-05-31": "Ratu Sir Lala Sukuna Day",
+    "2030-07-13": "Prophet Mohammed's Birthday (estimated)",
+    "2030-07-15": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2030-09-07": "Constitution Day",
+    "2030-10-10": "Fiji Day",
+    "2030-10-26": "Diwali (estimated)",
+    "2030-10-28": "Diwali (observed, estimated)",
+    "2030-12-25": "Christmas Day",
+    "2030-12-26": "Boxing Day",
+    "2031-01-01": "New Year's Day",
+    "2031-04-11": "Good Friday",
+    "2031-04-12": "Easter Saturday",
+    "2031-04-14": "Easter Monday",
+    "2031-05-12": "Girmit Day",
+    "2031-05-30": "Ratu Sir Lala Sukuna Day",
+    "2031-07-02": "Prophet Mohammed's Birthday (estimated)",
+    "2031-09-07": "Constitution Day",
+    "2031-10-10": "Fiji Day",
+    "2031-11-14": "Diwali (estimated)",
+    "2031-12-25": "Christmas Day",
+    "2031-12-26": "Boxing Day",
+    "2032-01-01": "New Year's Day",
+    "2032-03-26": "Good Friday",
+    "2032-03-27": "Easter Saturday",
+    "2032-03-29": "Easter Monday",
+    "2032-05-17": "Girmit Day",
+    "2032-05-28": "Ratu Sir Lala Sukuna Day",
+    "2032-06-20": "Prophet Mohammed's Birthday (estimated)",
+    "2032-06-21": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2032-09-07": "Constitution Day",
+    "2032-10-10": "Fiji Day",
+    "2032-11-02": "Diwali (estimated)",
+    "2032-12-25": "Christmas Day",
+    "2032-12-26": "Boxing Day",
+    "2032-12-27": "Christmas Day (observed)",
+    "2032-12-28": "Boxing Day (observed)",
+    "2033-01-01": "New Year's Day",
+    "2033-01-03": "New Year's Day (observed)",
+    "2033-04-15": "Good Friday",
+    "2033-04-16": "Easter Saturday",
+    "2033-04-18": "Easter Monday",
+    "2033-05-16": "Girmit Day",
+    "2033-05-27": "Ratu Sir Lala Sukuna Day",
+    "2033-06-09": "Prophet Mohammed's Birthday (estimated)",
+    "2033-09-07": "Constitution Day",
+    "2033-10-10": "Fiji Day",
+    "2033-10-22": "Diwali (estimated)",
+    "2033-10-24": "Diwali (observed, estimated)",
+    "2033-12-25": "Christmas Day",
+    "2033-12-26": "Boxing Day",
+    "2033-12-27": "Christmas Day (observed)",
+    "2034-01-01": "New Year's Day",
+    "2034-01-02": "New Year's Day (observed)",
+    "2034-04-07": "Good Friday",
+    "2034-04-08": "Easter Saturday",
+    "2034-04-10": "Easter Monday",
+    "2034-05-15": "Girmit Day",
+    "2034-05-26": "Ratu Sir Lala Sukuna Day",
+    "2034-05-30": "Prophet Mohammed's Birthday (estimated)",
+    "2034-09-07": "Constitution Day",
+    "2034-10-10": "Fiji Day",
+    "2034-11-10": "Diwali (estimated)",
+    "2034-12-25": "Christmas Day",
+    "2034-12-26": "Boxing Day",
+    "2035-01-01": "New Year's Day",
+    "2035-03-23": "Good Friday",
+    "2035-03-24": "Easter Saturday",
+    "2035-03-26": "Easter Monday",
+    "2035-05-14": "Girmit Day",
+    "2035-05-20": "Prophet Mohammed's Birthday (estimated)",
+    "2035-05-21": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2035-05-25": "Ratu Sir Lala Sukuna Day",
+    "2035-09-07": "Constitution Day",
+    "2035-10-10": "Fiji Day",
+    "2035-10-30": "Diwali (estimated)",
+    "2035-12-25": "Christmas Day",
+    "2035-12-26": "Boxing Day",
+    "2036-01-01": "New Year's Day",
+    "2036-04-11": "Good Friday",
+    "2036-04-12": "Easter Saturday",
+    "2036-04-14": "Easter Monday",
+    "2036-05-08": "Prophet Mohammed's Birthday (estimated)",
+    "2036-05-12": "Girmit Day",
+    "2036-05-30": "Ratu Sir Lala Sukuna Day",
+    "2036-09-07": "Constitution Day",
+    "2036-10-10": "Fiji Day",
+    "2036-12-25": "Christmas Day",
+    "2036-12-26": "Boxing Day",
+    "2037-01-01": "New Year's Day",
+    "2037-04-03": "Good Friday",
+    "2037-04-04": "Easter Saturday",
+    "2037-04-06": "Easter Monday",
+    "2037-04-28": "Prophet Mohammed's Birthday (estimated)",
+    "2037-05-11": "Girmit Day",
+    "2037-05-29": "Ratu Sir Lala Sukuna Day",
+    "2037-09-07": "Constitution Day",
+    "2037-10-10": "Fiji Day",
+    "2037-12-25": "Christmas Day",
+    "2037-12-26": "Boxing Day",
+    "2037-12-28": "Boxing Day (observed)",
+    "2038-01-01": "New Year's Day",
+    "2038-04-17": "Prophet Mohammed's Birthday (estimated)",
+    "2038-04-19": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2038-04-23": "Good Friday",
+    "2038-04-24": "Easter Saturday",
+    "2038-04-26": "Easter Monday",
+    "2038-05-17": "Girmit Day",
+    "2038-05-28": "Ratu Sir Lala Sukuna Day",
+    "2038-09-07": "Constitution Day",
+    "2038-10-10": "Fiji Day",
+    "2038-12-25": "Christmas Day",
+    "2038-12-26": "Boxing Day",
+    "2038-12-27": "Christmas Day (observed)",
+    "2038-12-28": "Boxing Day (observed)",
+    "2039-01-01": "New Year's Day",
+    "2039-01-03": "New Year's Day (observed)",
+    "2039-04-06": "Prophet Mohammed's Birthday (estimated)",
+    "2039-04-08": "Good Friday",
+    "2039-04-09": "Easter Saturday",
+    "2039-04-11": "Easter Monday",
+    "2039-05-16": "Girmit Day",
+    "2039-05-27": "Ratu Sir Lala Sukuna Day",
+    "2039-09-07": "Constitution Day",
+    "2039-10-10": "Fiji Day",
+    "2039-12-25": "Christmas Day",
+    "2039-12-26": "Boxing Day",
+    "2039-12-27": "Christmas Day (observed)",
+    "2040-01-01": "New Year's Day",
+    "2040-01-02": "New Year's Day (observed)",
+    "2040-03-25": "Prophet Mohammed's Birthday (estimated)",
+    "2040-03-26": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2040-03-30": "Good Friday",
+    "2040-03-31": "Easter Saturday",
+    "2040-04-02": "Easter Monday",
+    "2040-05-14": "Girmit Day",
+    "2040-05-25": "Ratu Sir Lala Sukuna Day",
+    "2040-09-07": "Constitution Day",
+    "2040-10-10": "Fiji Day",
+    "2040-12-25": "Christmas Day",
+    "2040-12-26": "Boxing Day",
+    "2041-01-01": "New Year's Day",
+    "2041-03-15": "Prophet Mohammed's Birthday (estimated)",
+    "2041-04-19": "Good Friday",
+    "2041-04-20": "Easter Saturday",
+    "2041-04-22": "Easter Monday",
+    "2041-05-13": "Girmit Day",
+    "2041-05-31": "Ratu Sir Lala Sukuna Day",
+    "2041-09-07": "Constitution Day",
+    "2041-10-10": "Fiji Day",
+    "2041-12-25": "Christmas Day",
+    "2041-12-26": "Boxing Day",
+    "2042-01-01": "New Year's Day",
+    "2042-03-04": "Prophet Mohammed's Birthday (estimated)",
+    "2042-04-04": "Good Friday",
+    "2042-04-05": "Easter Saturday",
+    "2042-04-07": "Easter Monday",
+    "2042-05-12": "Girmit Day",
+    "2042-05-30": "Ratu Sir Lala Sukuna Day",
+    "2042-09-07": "Constitution Day",
+    "2042-10-10": "Fiji Day",
+    "2042-12-25": "Christmas Day",
+    "2042-12-26": "Boxing Day",
+    "2043-01-01": "New Year's Day",
+    "2043-02-22": "Prophet Mohammed's Birthday (estimated)",
+    "2043-02-23": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2043-03-27": "Good Friday",
+    "2043-03-28": "Easter Saturday",
+    "2043-03-30": "Easter Monday",
+    "2043-05-11": "Girmit Day",
+    "2043-05-29": "Ratu Sir Lala Sukuna Day",
+    "2043-09-07": "Constitution Day",
+    "2043-10-10": "Fiji Day",
+    "2043-12-25": "Christmas Day",
+    "2043-12-26": "Boxing Day",
+    "2043-12-28": "Boxing Day (observed)",
+    "2044-01-01": "New Year's Day",
+    "2044-02-11": "Prophet Mohammed's Birthday (estimated)",
+    "2044-04-15": "Good Friday",
+    "2044-04-16": "Easter Saturday",
+    "2044-04-18": "Easter Monday",
+    "2044-05-16": "Girmit Day",
+    "2044-05-27": "Ratu Sir Lala Sukuna Day",
+    "2044-09-07": "Constitution Day",
+    "2044-10-10": "Fiji Day",
+    "2044-12-25": "Christmas Day",
+    "2044-12-26": "Boxing Day",
+    "2044-12-27": "Christmas Day (observed)",
+    "2045-01-01": "New Year's Day",
+    "2045-01-02": "New Year's Day (observed)",
+    "2045-01-30": "Prophet Mohammed's Birthday (estimated)",
+    "2045-04-07": "Good Friday",
+    "2045-04-08": "Easter Saturday",
+    "2045-04-10": "Easter Monday",
+    "2045-05-15": "Girmit Day",
+    "2045-05-26": "Ratu Sir Lala Sukuna Day",
+    "2045-09-07": "Constitution Day",
+    "2045-10-10": "Fiji Day",
+    "2045-12-25": "Christmas Day",
+    "2045-12-26": "Boxing Day",
+    "2046-01-01": "New Year's Day",
+    "2046-01-19": "Prophet Mohammed's Birthday (estimated)",
+    "2046-03-23": "Good Friday",
+    "2046-03-24": "Easter Saturday",
+    "2046-03-26": "Easter Monday",
+    "2046-05-14": "Girmit Day",
+    "2046-05-25": "Ratu Sir Lala Sukuna Day",
+    "2046-09-07": "Constitution Day",
+    "2046-10-10": "Fiji Day",
+    "2046-12-25": "Christmas Day",
+    "2046-12-26": "Boxing Day",
+    "2047-01-01": "New Year's Day",
+    "2047-01-08": "Prophet Mohammed's Birthday (estimated)",
+    "2047-04-12": "Good Friday",
+    "2047-04-13": "Easter Saturday",
+    "2047-04-15": "Easter Monday",
+    "2047-05-13": "Girmit Day",
+    "2047-05-31": "Ratu Sir Lala Sukuna Day",
+    "2047-09-07": "Constitution Day",
+    "2047-10-10": "Fiji Day",
+    "2047-12-25": "Christmas Day",
+    "2047-12-26": "Boxing Day",
+    "2047-12-29": "Prophet Mohammed's Birthday (estimated)",
+    "2047-12-30": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2048-01-01": "New Year's Day",
+    "2048-04-03": "Good Friday",
+    "2048-04-04": "Easter Saturday",
+    "2048-04-06": "Easter Monday",
+    "2048-05-11": "Girmit Day",
+    "2048-05-29": "Ratu Sir Lala Sukuna Day",
+    "2048-09-07": "Constitution Day",
+    "2048-10-10": "Fiji Day",
+    "2048-12-18": "Prophet Mohammed's Birthday (estimated)",
+    "2048-12-25": "Christmas Day",
+    "2048-12-26": "Boxing Day",
+    "2048-12-28": "Boxing Day (observed)",
+    "2049-01-01": "New Year's Day",
+    "2049-04-16": "Good Friday",
+    "2049-04-17": "Easter Saturday",
+    "2049-04-19": "Easter Monday",
+    "2049-05-17": "Girmit Day",
+    "2049-05-28": "Ratu Sir Lala Sukuna Day",
+    "2049-09-07": "Constitution Day",
+    "2049-10-10": "Fiji Day",
+    "2049-12-07": "Prophet Mohammed's Birthday (estimated)",
+    "2049-12-25": "Christmas Day",
+    "2049-12-26": "Boxing Day",
+    "2049-12-27": "Christmas Day (observed)",
+    "2049-12-28": "Boxing Day (observed)",
+    "2050-01-01": "New Year's Day",
+    "2050-01-03": "New Year's Day (observed)",
+    "2050-04-08": "Good Friday",
+    "2050-04-09": "Easter Saturday",
+    "2050-04-11": "Easter Monday",
+    "2050-05-16": "Girmit Day",
+    "2050-05-27": "Ratu Sir Lala Sukuna Day",
+    "2050-09-07": "Constitution Day",
+    "2050-10-10": "Fiji Day",
+    "2050-11-26": "Prophet Mohammed's Birthday (estimated)",
+    "2050-11-28": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2050-12-25": "Christmas Day",
+    "2050-12-26": "Boxing Day",
+    "2050-12-27": "Christmas Day (observed)"
+}
diff --git a/snapshots/countries/PK_COMMON.json b/snapshots/countries/PK_COMMON.json
index f1055ac6..737b16f3 100644
--- a/snapshots/countries/PK_COMMON.json
+++ b/snapshots/countries/PK_COMMON.json
@@ -1,1451 +1,1451 @@
 {
-    "1950-01-01": "Eid Milad-un-Nabi (estimated)",
-    "1950-07-16": "Eid-ul-Fitr (estimated)",
-    "1950-07-17": "Eid-ul-Fitr (estimated)",
-    "1950-07-18": "Eid-ul-Fitr (estimated)",
+    "1950-01-01": "Prophet's Birthday (estimated)",
+    "1950-07-16": "Eid al-Fitr (estimated)",
+    "1950-07-17": "Eid al-Fitr (estimated)",
+    "1950-07-18": "Eid al-Fitr (estimated)",
     "1950-08-14": "Independence Day",
-    "1950-09-23": "Eid-ul-Adha (estimated)",
-    "1950-09-24": "Eid-ul-Adha (estimated)",
-    "1950-09-25": "Eid-ul-Adha (estimated)",
+    "1950-09-23": "Eid al-Adha (estimated)",
+    "1950-09-24": "Eid al-Adha (estimated)",
+    "1950-09-25": "Eid al-Adha (estimated)",
     "1950-10-21": "Ashura (estimated)",
     "1950-10-22": "Ashura (estimated)",
     "1950-11-09": "Iqbal Day",
-    "1950-12-22": "Eid Milad-un-Nabi (estimated)",
+    "1950-12-22": "Prophet's Birthday (estimated)",
     "1950-12-25": "Quaid-e-Azam Day",
-    "1951-07-06": "Eid-ul-Fitr (estimated)",
-    "1951-07-07": "Eid-ul-Fitr (estimated)",
-    "1951-07-08": "Eid-ul-Fitr (estimated)",
+    "1951-07-06": "Eid al-Fitr (estimated)",
+    "1951-07-07": "Eid al-Fitr (estimated)",
+    "1951-07-08": "Eid al-Fitr (estimated)",
     "1951-08-14": "Independence Day",
-    "1951-09-12": "Eid-ul-Adha (estimated)",
-    "1951-09-13": "Eid-ul-Adha (estimated)",
-    "1951-09-14": "Eid-ul-Adha (estimated)",
+    "1951-09-12": "Eid al-Adha (estimated)",
+    "1951-09-13": "Eid al-Adha (estimated)",
+    "1951-09-14": "Eid al-Adha (estimated)",
     "1951-10-10": "Ashura (estimated)",
     "1951-10-11": "Ashura (estimated)",
     "1951-11-09": "Iqbal Day",
-    "1951-12-11": "Eid Milad-un-Nabi (estimated)",
+    "1951-12-11": "Prophet's Birthday (estimated)",
     "1951-12-25": "Quaid-e-Azam Day",
-    "1952-06-23": "Eid-ul-Fitr (estimated)",
-    "1952-06-24": "Eid-ul-Fitr (estimated)",
-    "1952-06-25": "Eid-ul-Fitr (estimated)",
+    "1952-06-23": "Eid al-Fitr (estimated)",
+    "1952-06-24": "Eid al-Fitr (estimated)",
+    "1952-06-25": "Eid al-Fitr (estimated)",
     "1952-08-14": "Independence Day",
-    "1952-08-31": "Eid-ul-Adha (estimated)",
-    "1952-09-01": "Eid-ul-Adha (estimated)",
-    "1952-09-02": "Eid-ul-Adha (estimated)",
+    "1952-08-31": "Eid al-Adha (estimated)",
+    "1952-09-01": "Eid al-Adha (estimated)",
+    "1952-09-02": "Eid al-Adha (estimated)",
     "1952-09-29": "Ashura (estimated)",
     "1952-09-30": "Ashura (estimated)",
     "1952-11-09": "Iqbal Day",
-    "1952-11-30": "Eid Milad-un-Nabi (estimated)",
+    "1952-11-30": "Prophet's Birthday (estimated)",
     "1952-12-25": "Quaid-e-Azam Day",
-    "1953-06-13": "Eid-ul-Fitr (estimated)",
-    "1953-06-14": "Eid-ul-Fitr (estimated)",
-    "1953-06-15": "Eid-ul-Fitr (estimated)",
+    "1953-06-13": "Eid al-Fitr (estimated)",
+    "1953-06-14": "Eid al-Fitr (estimated)",
+    "1953-06-15": "Eid al-Fitr (estimated)",
     "1953-08-14": "Independence Day",
-    "1953-08-20": "Eid-ul-Adha (estimated)",
-    "1953-08-21": "Eid-ul-Adha (estimated)",
-    "1953-08-22": "Eid-ul-Adha (estimated)",
+    "1953-08-20": "Eid al-Adha (estimated)",
+    "1953-08-21": "Eid al-Adha (estimated)",
+    "1953-08-22": "Eid al-Adha (estimated)",
     "1953-09-18": "Ashura (estimated)",
     "1953-09-19": "Ashura (estimated)",
     "1953-11-09": "Iqbal Day",
-    "1953-11-19": "Eid Milad-un-Nabi (estimated)",
+    "1953-11-19": "Prophet's Birthday (estimated)",
     "1953-12-25": "Quaid-e-Azam Day",
-    "1954-06-02": "Eid-ul-Fitr (estimated)",
-    "1954-06-03": "Eid-ul-Fitr (estimated)",
-    "1954-06-04": "Eid-ul-Fitr (estimated)",
-    "1954-08-09": "Eid-ul-Adha (estimated)",
-    "1954-08-10": "Eid-ul-Adha (estimated)",
-    "1954-08-11": "Eid-ul-Adha (estimated)",
+    "1954-06-02": "Eid al-Fitr (estimated)",
+    "1954-06-03": "Eid al-Fitr (estimated)",
+    "1954-06-04": "Eid al-Fitr (estimated)",
+    "1954-08-09": "Eid al-Adha (estimated)",
+    "1954-08-10": "Eid al-Adha (estimated)",
+    "1954-08-11": "Eid al-Adha (estimated)",
     "1954-08-14": "Independence Day",
     "1954-09-07": "Ashura (estimated)",
     "1954-09-08": "Ashura (estimated)",
-    "1954-11-08": "Eid Milad-un-Nabi (estimated)",
+    "1954-11-08": "Prophet's Birthday (estimated)",
     "1954-11-09": "Iqbal Day",
     "1954-12-25": "Quaid-e-Azam Day",
-    "1955-05-23": "Eid-ul-Fitr (estimated)",
-    "1955-05-24": "Eid-ul-Fitr (estimated)",
-    "1955-05-25": "Eid-ul-Fitr (estimated)",
-    "1955-07-30": "Eid-ul-Adha (estimated)",
-    "1955-07-31": "Eid-ul-Adha (estimated)",
-    "1955-08-01": "Eid-ul-Adha (estimated)",
+    "1955-05-23": "Eid al-Fitr (estimated)",
+    "1955-05-24": "Eid al-Fitr (estimated)",
+    "1955-05-25": "Eid al-Fitr (estimated)",
+    "1955-07-30": "Eid al-Adha (estimated)",
+    "1955-07-31": "Eid al-Adha (estimated)",
+    "1955-08-01": "Eid al-Adha (estimated)",
     "1955-08-14": "Independence Day",
     "1955-08-28": "Ashura (estimated)",
     "1955-08-29": "Ashura (estimated)",
-    "1955-10-29": "Eid Milad-un-Nabi (estimated)",
+    "1955-10-29": "Prophet's Birthday (estimated)",
     "1955-11-09": "Iqbal Day",
     "1955-12-25": "Quaid-e-Azam Day",
     "1956-03-23": "Pakistan Day",
-    "1956-05-11": "Eid-ul-Fitr (estimated)",
-    "1956-05-12": "Eid-ul-Fitr (estimated)",
-    "1956-05-13": "Eid-ul-Fitr (estimated)",
-    "1956-07-19": "Eid-ul-Adha (estimated)",
-    "1956-07-20": "Eid-ul-Adha (estimated)",
-    "1956-07-21": "Eid-ul-Adha (estimated)",
+    "1956-05-11": "Eid al-Fitr (estimated)",
+    "1956-05-12": "Eid al-Fitr (estimated)",
+    "1956-05-13": "Eid al-Fitr (estimated)",
+    "1956-07-19": "Eid al-Adha (estimated)",
+    "1956-07-20": "Eid al-Adha (estimated)",
+    "1956-07-21": "Eid al-Adha (estimated)",
     "1956-08-14": "Independence Day",
     "1956-08-16": "Ashura (estimated)",
     "1956-08-17": "Ashura (estimated)",
-    "1956-10-17": "Eid Milad-un-Nabi (estimated)",
+    "1956-10-17": "Prophet's Birthday (estimated)",
     "1956-11-09": "Iqbal Day",
     "1956-12-25": "Quaid-e-Azam Day",
     "1957-03-23": "Pakistan Day",
-    "1957-05-01": "Eid-ul-Fitr (estimated)",
-    "1957-05-02": "Eid-ul-Fitr (estimated)",
-    "1957-05-03": "Eid-ul-Fitr (estimated)",
-    "1957-07-08": "Eid-ul-Adha (estimated)",
-    "1957-07-09": "Eid-ul-Adha (estimated)",
-    "1957-07-10": "Eid-ul-Adha (estimated)",
+    "1957-05-01": "Eid al-Fitr (estimated)",
+    "1957-05-02": "Eid al-Fitr (estimated)",
+    "1957-05-03": "Eid al-Fitr (estimated)",
+    "1957-07-08": "Eid al-Adha (estimated)",
+    "1957-07-09": "Eid al-Adha (estimated)",
+    "1957-07-10": "Eid al-Adha (estimated)",
     "1957-08-05": "Ashura (estimated)",
     "1957-08-06": "Ashura (estimated)",
     "1957-08-14": "Independence Day",
-    "1957-10-06": "Eid Milad-un-Nabi (estimated)",
+    "1957-10-06": "Prophet's Birthday (estimated)",
     "1957-11-09": "Iqbal Day",
     "1957-12-25": "Quaid-e-Azam Day",
     "1958-03-23": "Pakistan Day",
-    "1958-04-20": "Eid-ul-Fitr (estimated)",
-    "1958-04-21": "Eid-ul-Fitr (estimated)",
-    "1958-04-22": "Eid-ul-Fitr (estimated)",
-    "1958-06-27": "Eid-ul-Adha (estimated)",
-    "1958-06-28": "Eid-ul-Adha (estimated)",
-    "1958-06-29": "Eid-ul-Adha (estimated)",
+    "1958-04-20": "Eid al-Fitr (estimated)",
+    "1958-04-21": "Eid al-Fitr (estimated)",
+    "1958-04-22": "Eid al-Fitr (estimated)",
+    "1958-06-27": "Eid al-Adha (estimated)",
+    "1958-06-28": "Eid al-Adha (estimated)",
+    "1958-06-29": "Eid al-Adha (estimated)",
     "1958-07-26": "Ashura (estimated)",
     "1958-07-27": "Ashura (estimated)",
     "1958-08-14": "Independence Day",
-    "1958-09-26": "Eid Milad-un-Nabi (estimated)",
+    "1958-09-26": "Prophet's Birthday (estimated)",
     "1958-11-09": "Iqbal Day",
     "1958-12-25": "Quaid-e-Azam Day",
     "1959-03-23": "Pakistan Day",
-    "1959-04-10": "Eid-ul-Fitr (estimated)",
-    "1959-04-11": "Eid-ul-Fitr (estimated)",
-    "1959-04-12": "Eid-ul-Fitr (estimated)",
-    "1959-06-17": "Eid-ul-Adha (estimated)",
-    "1959-06-18": "Eid-ul-Adha (estimated)",
-    "1959-06-19": "Eid-ul-Adha (estimated)",
+    "1959-04-10": "Eid al-Fitr (estimated)",
+    "1959-04-11": "Eid al-Fitr (estimated)",
+    "1959-04-12": "Eid al-Fitr (estimated)",
+    "1959-06-17": "Eid al-Adha (estimated)",
+    "1959-06-18": "Eid al-Adha (estimated)",
+    "1959-06-19": "Eid al-Adha (estimated)",
     "1959-07-15": "Ashura (estimated)",
     "1959-07-16": "Ashura (estimated)",
     "1959-08-14": "Independence Day",
-    "1959-09-15": "Eid Milad-un-Nabi (estimated)",
+    "1959-09-15": "Prophet's Birthday (estimated)",
     "1959-11-09": "Iqbal Day",
     "1959-12-25": "Quaid-e-Azam Day",
     "1960-03-23": "Pakistan Day",
-    "1960-03-28": "Eid-ul-Fitr (estimated)",
-    "1960-03-29": "Eid-ul-Fitr (estimated)",
-    "1960-03-30": "Eid-ul-Fitr (estimated)",
-    "1960-06-04": "Eid-ul-Adha (estimated)",
-    "1960-06-05": "Eid-ul-Adha (estimated)",
-    "1960-06-06": "Eid-ul-Adha (estimated)",
+    "1960-03-28": "Eid al-Fitr (estimated)",
+    "1960-03-29": "Eid al-Fitr (estimated)",
+    "1960-03-30": "Eid al-Fitr (estimated)",
+    "1960-06-04": "Eid al-Adha (estimated)",
+    "1960-06-05": "Eid al-Adha (estimated)",
+    "1960-06-06": "Eid al-Adha (estimated)",
     "1960-07-03": "Ashura (estimated)",
     "1960-07-04": "Ashura (estimated)",
     "1960-08-14": "Independence Day",
-    "1960-09-03": "Eid Milad-un-Nabi (estimated)",
+    "1960-09-03": "Prophet's Birthday (estimated)",
     "1960-11-09": "Iqbal Day",
     "1960-12-25": "Quaid-e-Azam Day",
-    "1961-03-18": "Eid-ul-Fitr (estimated)",
-    "1961-03-19": "Eid-ul-Fitr (estimated)",
-    "1961-03-20": "Eid-ul-Fitr (estimated)",
+    "1961-03-18": "Eid al-Fitr (estimated)",
+    "1961-03-19": "Eid al-Fitr (estimated)",
+    "1961-03-20": "Eid al-Fitr (estimated)",
     "1961-03-23": "Pakistan Day",
-    "1961-05-25": "Eid-ul-Adha (estimated)",
-    "1961-05-26": "Eid-ul-Adha (estimated)",
-    "1961-05-27": "Eid-ul-Adha (estimated)",
+    "1961-05-25": "Eid al-Adha (estimated)",
+    "1961-05-26": "Eid al-Adha (estimated)",
+    "1961-05-27": "Eid al-Adha (estimated)",
     "1961-06-22": "Ashura (estimated)",
     "1961-06-23": "Ashura (estimated)",
     "1961-08-14": "Independence Day",
-    "1961-08-23": "Eid Milad-un-Nabi (estimated)",
+    "1961-08-23": "Prophet's Birthday (estimated)",
     "1961-11-09": "Iqbal Day",
     "1961-12-25": "Quaid-e-Azam Day",
-    "1962-03-07": "Eid-ul-Fitr (estimated)",
-    "1962-03-08": "Eid-ul-Fitr (estimated)",
-    "1962-03-09": "Eid-ul-Fitr (estimated)",
+    "1962-03-07": "Eid al-Fitr (estimated)",
+    "1962-03-08": "Eid al-Fitr (estimated)",
+    "1962-03-09": "Eid al-Fitr (estimated)",
     "1962-03-23": "Pakistan Day",
-    "1962-05-14": "Eid-ul-Adha (estimated)",
-    "1962-05-15": "Eid-ul-Adha (estimated)",
-    "1962-05-16": "Eid-ul-Adha (estimated)",
+    "1962-05-14": "Eid al-Adha (estimated)",
+    "1962-05-15": "Eid al-Adha (estimated)",
+    "1962-05-16": "Eid al-Adha (estimated)",
     "1962-06-11": "Ashura (estimated)",
     "1962-06-12": "Ashura (estimated)",
-    "1962-08-12": "Eid Milad-un-Nabi (estimated)",
+    "1962-08-12": "Prophet's Birthday (estimated)",
     "1962-08-14": "Independence Day",
     "1962-11-09": "Iqbal Day",
     "1962-12-25": "Quaid-e-Azam Day",
-    "1963-02-24": "Eid-ul-Fitr (estimated)",
-    "1963-02-25": "Eid-ul-Fitr (estimated)",
-    "1963-02-26": "Eid-ul-Fitr (estimated)",
+    "1963-02-24": "Eid al-Fitr (estimated)",
+    "1963-02-25": "Eid al-Fitr (estimated)",
+    "1963-02-26": "Eid al-Fitr (estimated)",
     "1963-03-23": "Pakistan Day",
-    "1963-05-03": "Eid-ul-Adha (estimated)",
-    "1963-05-04": "Eid-ul-Adha (estimated)",
-    "1963-05-05": "Eid-ul-Adha (estimated)",
+    "1963-05-03": "Eid al-Adha (estimated)",
+    "1963-05-04": "Eid al-Adha (estimated)",
+    "1963-05-05": "Eid al-Adha (estimated)",
     "1963-06-01": "Ashura (estimated)",
     "1963-06-02": "Ashura (estimated)",
-    "1963-08-02": "Eid Milad-un-Nabi (estimated)",
+    "1963-08-02": "Prophet's Birthday (estimated)",
     "1963-08-14": "Independence Day",
     "1963-11-09": "Iqbal Day",
     "1963-12-25": "Quaid-e-Azam Day",
-    "1964-02-14": "Eid-ul-Fitr (estimated)",
-    "1964-02-15": "Eid-ul-Fitr (estimated)",
-    "1964-02-16": "Eid-ul-Fitr (estimated)",
+    "1964-02-14": "Eid al-Fitr (estimated)",
+    "1964-02-15": "Eid al-Fitr (estimated)",
+    "1964-02-16": "Eid al-Fitr (estimated)",
     "1964-03-23": "Pakistan Day",
-    "1964-04-22": "Eid-ul-Adha (estimated)",
-    "1964-04-23": "Eid-ul-Adha (estimated)",
-    "1964-04-24": "Eid-ul-Adha (estimated)",
+    "1964-04-22": "Eid al-Adha (estimated)",
+    "1964-04-23": "Eid al-Adha (estimated)",
+    "1964-04-24": "Eid al-Adha (estimated)",
     "1964-05-20": "Ashura (estimated)",
     "1964-05-21": "Ashura (estimated)",
-    "1964-07-21": "Eid Milad-un-Nabi (estimated)",
+    "1964-07-21": "Prophet's Birthday (estimated)",
     "1964-08-14": "Independence Day",
     "1964-11-09": "Iqbal Day",
     "1964-12-25": "Quaid-e-Azam Day",
-    "1965-02-02": "Eid-ul-Fitr (estimated)",
-    "1965-02-03": "Eid-ul-Fitr (estimated)",
-    "1965-02-04": "Eid-ul-Fitr (estimated)",
+    "1965-02-02": "Eid al-Fitr (estimated)",
+    "1965-02-03": "Eid al-Fitr (estimated)",
+    "1965-02-04": "Eid al-Fitr (estimated)",
     "1965-03-23": "Pakistan Day",
-    "1965-04-11": "Eid-ul-Adha (estimated)",
-    "1965-04-12": "Eid-ul-Adha (estimated)",
-    "1965-04-13": "Eid-ul-Adha (estimated)",
+    "1965-04-11": "Eid al-Adha (estimated)",
+    "1965-04-12": "Eid al-Adha (estimated)",
+    "1965-04-13": "Eid al-Adha (estimated)",
     "1965-05-09": "Ashura (estimated)",
     "1965-05-10": "Ashura (estimated)",
-    "1965-07-10": "Eid Milad-un-Nabi (estimated)",
+    "1965-07-10": "Prophet's Birthday (estimated)",
     "1965-08-14": "Independence Day",
     "1965-11-09": "Iqbal Day",
     "1965-12-25": "Quaid-e-Azam Day",
-    "1966-01-22": "Eid-ul-Fitr (estimated)",
-    "1966-01-23": "Eid-ul-Fitr (estimated)",
-    "1966-01-24": "Eid-ul-Fitr (estimated)",
+    "1966-01-22": "Eid al-Fitr (estimated)",
+    "1966-01-23": "Eid al-Fitr (estimated)",
+    "1966-01-24": "Eid al-Fitr (estimated)",
     "1966-03-23": "Pakistan Day",
-    "1966-04-01": "Eid-ul-Adha (estimated)",
-    "1966-04-02": "Eid-ul-Adha (estimated)",
-    "1966-04-03": "Eid-ul-Adha (estimated)",
+    "1966-04-01": "Eid al-Adha (estimated)",
+    "1966-04-02": "Eid al-Adha (estimated)",
+    "1966-04-03": "Eid al-Adha (estimated)",
     "1966-04-29": "Ashura (estimated)",
     "1966-04-30": "Ashura (estimated)",
-    "1966-07-01": "Eid Milad-un-Nabi (estimated)",
+    "1966-07-01": "Prophet's Birthday (estimated)",
     "1966-08-14": "Independence Day",
     "1966-11-09": "Iqbal Day",
     "1966-12-25": "Quaid-e-Azam Day",
-    "1967-01-12": "Eid-ul-Fitr (estimated)",
-    "1967-01-13": "Eid-ul-Fitr (estimated)",
-    "1967-01-14": "Eid-ul-Fitr (estimated)",
-    "1967-03-21": "Eid-ul-Adha (estimated)",
-    "1967-03-22": "Eid-ul-Adha (estimated)",
-    "1967-03-23": "Eid-ul-Adha (estimated); Pakistan Day",
+    "1967-01-12": "Eid al-Fitr (estimated)",
+    "1967-01-13": "Eid al-Fitr (estimated)",
+    "1967-01-14": "Eid al-Fitr (estimated)",
+    "1967-03-21": "Eid al-Adha (estimated)",
+    "1967-03-22": "Eid al-Adha (estimated)",
+    "1967-03-23": "Eid al-Adha (estimated); Pakistan Day",
     "1967-04-19": "Ashura (estimated)",
     "1967-04-20": "Ashura (estimated)",
-    "1967-06-19": "Eid Milad-un-Nabi (estimated)",
+    "1967-06-19": "Prophet's Birthday (estimated)",
     "1967-08-14": "Independence Day",
     "1967-11-09": "Iqbal Day",
     "1967-12-25": "Quaid-e-Azam Day",
-    "1968-01-01": "Eid-ul-Fitr (estimated)",
-    "1968-01-02": "Eid-ul-Fitr (estimated)",
-    "1968-01-03": "Eid-ul-Fitr (estimated)",
-    "1968-03-09": "Eid-ul-Adha (estimated)",
-    "1968-03-10": "Eid-ul-Adha (estimated)",
-    "1968-03-11": "Eid-ul-Adha (estimated)",
+    "1968-01-01": "Eid al-Fitr (estimated)",
+    "1968-01-02": "Eid al-Fitr (estimated)",
+    "1968-01-03": "Eid al-Fitr (estimated)",
+    "1968-03-09": "Eid al-Adha (estimated)",
+    "1968-03-10": "Eid al-Adha (estimated)",
+    "1968-03-11": "Eid al-Adha (estimated)",
     "1968-03-23": "Pakistan Day",
     "1968-04-07": "Ashura (estimated)",
     "1968-04-08": "Ashura (estimated)",
-    "1968-06-08": "Eid Milad-un-Nabi (estimated)",
+    "1968-06-08": "Prophet's Birthday (estimated)",
     "1968-08-14": "Independence Day",
     "1968-11-09": "Iqbal Day",
-    "1968-12-21": "Eid-ul-Fitr (estimated)",
-    "1968-12-22": "Eid-ul-Fitr (estimated)",
-    "1968-12-23": "Eid-ul-Fitr (estimated)",
+    "1968-12-21": "Eid al-Fitr (estimated)",
+    "1968-12-22": "Eid al-Fitr (estimated)",
+    "1968-12-23": "Eid al-Fitr (estimated)",
     "1968-12-25": "Quaid-e-Azam Day",
-    "1969-02-27": "Eid-ul-Adha (estimated)",
-    "1969-02-28": "Eid-ul-Adha (estimated)",
-    "1969-03-01": "Eid-ul-Adha (estimated)",
+    "1969-02-27": "Eid al-Adha (estimated)",
+    "1969-02-28": "Eid al-Adha (estimated)",
+    "1969-03-01": "Eid al-Adha (estimated)",
     "1969-03-23": "Pakistan Day",
     "1969-03-27": "Ashura (estimated)",
     "1969-03-28": "Ashura (estimated)",
-    "1969-05-28": "Eid Milad-un-Nabi (estimated)",
+    "1969-05-28": "Prophet's Birthday (estimated)",
     "1969-08-14": "Independence Day",
     "1969-11-09": "Iqbal Day",
-    "1969-12-10": "Eid-ul-Fitr (estimated)",
-    "1969-12-11": "Eid-ul-Fitr (estimated)",
-    "1969-12-12": "Eid-ul-Fitr (estimated)",
+    "1969-12-10": "Eid al-Fitr (estimated)",
+    "1969-12-11": "Eid al-Fitr (estimated)",
+    "1969-12-12": "Eid al-Fitr (estimated)",
     "1969-12-25": "Quaid-e-Azam Day",
-    "1970-02-16": "Eid-ul-Adha (estimated)",
-    "1970-02-17": "Eid-ul-Adha (estimated)",
-    "1970-02-18": "Eid-ul-Adha (estimated)",
+    "1970-02-16": "Eid al-Adha (estimated)",
+    "1970-02-17": "Eid al-Adha (estimated)",
+    "1970-02-18": "Eid al-Adha (estimated)",
     "1970-03-17": "Ashura (estimated)",
     "1970-03-18": "Ashura (estimated)",
     "1970-03-23": "Pakistan Day",
-    "1970-05-18": "Eid Milad-un-Nabi (estimated)",
+    "1970-05-18": "Prophet's Birthday (estimated)",
     "1970-08-14": "Independence Day",
     "1970-11-09": "Iqbal Day",
-    "1970-11-30": "Eid-ul-Fitr (estimated)",
-    "1970-12-01": "Eid-ul-Fitr (estimated)",
-    "1970-12-02": "Eid-ul-Fitr (estimated)",
+    "1970-11-30": "Eid al-Fitr (estimated)",
+    "1970-12-01": "Eid al-Fitr (estimated)",
+    "1970-12-02": "Eid al-Fitr (estimated)",
     "1970-12-25": "Quaid-e-Azam Day",
-    "1971-02-06": "Eid-ul-Adha (estimated)",
-    "1971-02-07": "Eid-ul-Adha (estimated)",
-    "1971-02-08": "Eid-ul-Adha (estimated)",
+    "1971-02-06": "Eid al-Adha (estimated)",
+    "1971-02-07": "Eid al-Adha (estimated)",
+    "1971-02-08": "Eid al-Adha (estimated)",
     "1971-03-06": "Ashura (estimated)",
     "1971-03-07": "Ashura (estimated)",
     "1971-03-23": "Pakistan Day",
-    "1971-05-07": "Eid Milad-un-Nabi (estimated)",
+    "1971-05-07": "Prophet's Birthday (estimated)",
     "1971-08-14": "Independence Day",
     "1971-11-09": "Iqbal Day",
-    "1971-11-19": "Eid-ul-Fitr (estimated)",
-    "1971-11-20": "Eid-ul-Fitr (estimated)",
-    "1971-11-21": "Eid-ul-Fitr (estimated)",
+    "1971-11-19": "Eid al-Fitr (estimated)",
+    "1971-11-20": "Eid al-Fitr (estimated)",
+    "1971-11-21": "Eid al-Fitr (estimated)",
     "1971-12-25": "Quaid-e-Azam Day",
-    "1972-01-26": "Eid-ul-Adha (estimated)",
-    "1972-01-27": "Eid-ul-Adha (estimated)",
-    "1972-01-28": "Eid-ul-Adha (estimated)",
+    "1972-01-26": "Eid al-Adha (estimated)",
+    "1972-01-27": "Eid al-Adha (estimated)",
+    "1972-01-28": "Eid al-Adha (estimated)",
     "1972-02-24": "Ashura (estimated)",
     "1972-02-25": "Ashura (estimated)",
     "1972-03-23": "Pakistan Day",
-    "1972-04-25": "Eid Milad-un-Nabi (estimated)",
-    "1972-05-01": "Labour Day",
+    "1972-04-25": "Prophet's Birthday (estimated)",
+    "1972-05-01": "Labor Day",
     "1972-08-14": "Independence Day",
-    "1972-11-07": "Eid-ul-Fitr (estimated)",
-    "1972-11-08": "Eid-ul-Fitr (estimated)",
-    "1972-11-09": "Eid-ul-Fitr (estimated); Iqbal Day",
+    "1972-11-07": "Eid al-Fitr (estimated)",
+    "1972-11-08": "Eid al-Fitr (estimated)",
+    "1972-11-09": "Eid al-Fitr (estimated); Iqbal Day",
     "1972-12-25": "Quaid-e-Azam Day",
-    "1973-01-14": "Eid-ul-Adha (estimated)",
-    "1973-01-15": "Eid-ul-Adha (estimated)",
-    "1973-01-16": "Eid-ul-Adha (estimated)",
+    "1973-01-14": "Eid al-Adha (estimated)",
+    "1973-01-15": "Eid al-Adha (estimated)",
+    "1973-01-16": "Eid al-Adha (estimated)",
     "1973-02-12": "Ashura (estimated)",
     "1973-02-13": "Ashura (estimated)",
     "1973-03-23": "Pakistan Day",
-    "1973-04-15": "Eid Milad-un-Nabi (estimated)",
-    "1973-05-01": "Labour Day",
+    "1973-04-15": "Prophet's Birthday (estimated)",
+    "1973-05-01": "Labor Day",
     "1973-08-14": "Independence Day",
-    "1973-10-27": "Eid-ul-Fitr (estimated)",
-    "1973-10-28": "Eid-ul-Fitr (estimated)",
-    "1973-10-29": "Eid-ul-Fitr (estimated)",
+    "1973-10-27": "Eid al-Fitr (estimated)",
+    "1973-10-28": "Eid al-Fitr (estimated)",
+    "1973-10-29": "Eid al-Fitr (estimated)",
     "1973-11-09": "Iqbal Day",
     "1973-12-25": "Quaid-e-Azam Day",
-    "1974-01-03": "Eid-ul-Adha (estimated)",
-    "1974-01-04": "Eid-ul-Adha (estimated)",
-    "1974-01-05": "Eid-ul-Adha (estimated)",
+    "1974-01-03": "Eid al-Adha (estimated)",
+    "1974-01-04": "Eid al-Adha (estimated)",
+    "1974-01-05": "Eid al-Adha (estimated)",
     "1974-02-01": "Ashura (estimated)",
     "1974-02-02": "Ashura (estimated)",
     "1974-03-23": "Pakistan Day",
-    "1974-04-04": "Eid Milad-un-Nabi (estimated)",
-    "1974-05-01": "Labour Day",
+    "1974-04-04": "Prophet's Birthday (estimated)",
+    "1974-05-01": "Labor Day",
     "1974-08-14": "Independence Day",
-    "1974-10-16": "Eid-ul-Fitr (estimated)",
-    "1974-10-17": "Eid-ul-Fitr (estimated)",
-    "1974-10-18": "Eid-ul-Fitr (estimated)",
+    "1974-10-16": "Eid al-Fitr (estimated)",
+    "1974-10-17": "Eid al-Fitr (estimated)",
+    "1974-10-18": "Eid al-Fitr (estimated)",
     "1974-11-09": "Iqbal Day",
-    "1974-12-24": "Eid-ul-Adha (estimated)",
-    "1974-12-25": "Eid-ul-Adha (estimated); Quaid-e-Azam Day",
-    "1974-12-26": "Eid-ul-Adha (estimated)",
+    "1974-12-24": "Eid al-Adha (estimated)",
+    "1974-12-25": "Eid al-Adha (estimated); Quaid-e-Azam Day",
+    "1974-12-26": "Eid al-Adha (estimated)",
     "1975-01-21": "Ashura (estimated)",
     "1975-01-22": "Ashura (estimated)",
     "1975-03-23": "Pakistan Day",
-    "1975-03-24": "Eid Milad-un-Nabi (estimated)",
-    "1975-05-01": "Labour Day",
+    "1975-03-24": "Prophet's Birthday (estimated)",
+    "1975-05-01": "Labor Day",
     "1975-08-14": "Independence Day",
-    "1975-10-06": "Eid-ul-Fitr (estimated)",
-    "1975-10-07": "Eid-ul-Fitr (estimated)",
-    "1975-10-08": "Eid-ul-Fitr (estimated)",
+    "1975-10-06": "Eid al-Fitr (estimated)",
+    "1975-10-07": "Eid al-Fitr (estimated)",
+    "1975-10-08": "Eid al-Fitr (estimated)",
     "1975-11-09": "Iqbal Day",
-    "1975-12-13": "Eid-ul-Adha (estimated)",
-    "1975-12-14": "Eid-ul-Adha (estimated)",
-    "1975-12-15": "Eid-ul-Adha (estimated)",
+    "1975-12-13": "Eid al-Adha (estimated)",
+    "1975-12-14": "Eid al-Adha (estimated)",
+    "1975-12-15": "Eid al-Adha (estimated)",
     "1975-12-25": "Quaid-e-Azam Day",
     "1976-01-10": "Ashura (estimated)",
     "1976-01-11": "Ashura (estimated)",
-    "1976-03-12": "Eid Milad-un-Nabi (estimated)",
+    "1976-03-12": "Prophet's Birthday (estimated)",
     "1976-03-23": "Pakistan Day",
-    "1976-05-01": "Labour Day",
+    "1976-05-01": "Labor Day",
     "1976-08-14": "Independence Day",
-    "1976-09-24": "Eid-ul-Fitr (estimated)",
-    "1976-09-25": "Eid-ul-Fitr (estimated)",
-    "1976-09-26": "Eid-ul-Fitr (estimated)",
+    "1976-09-24": "Eid al-Fitr (estimated)",
+    "1976-09-25": "Eid al-Fitr (estimated)",
+    "1976-09-26": "Eid al-Fitr (estimated)",
     "1976-11-09": "Iqbal Day",
-    "1976-12-01": "Eid-ul-Adha (estimated)",
-    "1976-12-02": "Eid-ul-Adha (estimated)",
-    "1976-12-03": "Eid-ul-Adha (estimated)",
+    "1976-12-01": "Eid al-Adha (estimated)",
+    "1976-12-02": "Eid al-Adha (estimated)",
+    "1976-12-03": "Eid al-Adha (estimated)",
     "1976-12-25": "Quaid-e-Azam Day",
     "1976-12-30": "Ashura (estimated)",
     "1976-12-31": "Ashura (estimated)",
-    "1977-03-02": "Eid Milad-un-Nabi (estimated)",
+    "1977-03-02": "Prophet's Birthday (estimated)",
     "1977-03-23": "Pakistan Day",
-    "1977-05-01": "Labour Day",
+    "1977-05-01": "Labor Day",
     "1977-08-14": "Independence Day",
-    "1977-09-14": "Eid-ul-Fitr (estimated)",
-    "1977-09-15": "Eid-ul-Fitr (estimated)",
-    "1977-09-16": "Eid-ul-Fitr (estimated)",
+    "1977-09-14": "Eid al-Fitr (estimated)",
+    "1977-09-15": "Eid al-Fitr (estimated)",
+    "1977-09-16": "Eid al-Fitr (estimated)",
     "1977-11-09": "Iqbal Day",
-    "1977-11-21": "Eid-ul-Adha (estimated)",
-    "1977-11-22": "Eid-ul-Adha (estimated)",
-    "1977-11-23": "Eid-ul-Adha (estimated)",
+    "1977-11-21": "Eid al-Adha (estimated)",
+    "1977-11-22": "Eid al-Adha (estimated)",
+    "1977-11-23": "Eid al-Adha (estimated)",
     "1977-12-19": "Ashura (estimated)",
     "1977-12-20": "Ashura (estimated)",
     "1977-12-25": "Quaid-e-Azam Day",
-    "1978-02-19": "Eid Milad-un-Nabi (estimated)",
+    "1978-02-19": "Prophet's Birthday (estimated)",
     "1978-03-23": "Pakistan Day",
-    "1978-05-01": "Labour Day",
+    "1978-05-01": "Labor Day",
     "1978-08-14": "Independence Day",
-    "1978-09-03": "Eid-ul-Fitr (estimated)",
-    "1978-09-04": "Eid-ul-Fitr (estimated)",
-    "1978-09-05": "Eid-ul-Fitr (estimated)",
+    "1978-09-03": "Eid al-Fitr (estimated)",
+    "1978-09-04": "Eid al-Fitr (estimated)",
+    "1978-09-05": "Eid al-Fitr (estimated)",
     "1978-11-09": "Iqbal Day",
-    "1978-11-10": "Eid-ul-Adha (estimated)",
-    "1978-11-11": "Eid-ul-Adha (estimated)",
-    "1978-11-12": "Eid-ul-Adha (estimated)",
+    "1978-11-10": "Eid al-Adha (estimated)",
+    "1978-11-11": "Eid al-Adha (estimated)",
+    "1978-11-12": "Eid al-Adha (estimated)",
     "1978-12-09": "Ashura (estimated)",
     "1978-12-10": "Ashura (estimated)",
     "1978-12-25": "Quaid-e-Azam Day",
-    "1979-02-09": "Eid Milad-un-Nabi (estimated)",
+    "1979-02-09": "Prophet's Birthday (estimated)",
     "1979-03-23": "Pakistan Day",
-    "1979-05-01": "Labour Day",
+    "1979-05-01": "Labor Day",
     "1979-08-14": "Independence Day",
-    "1979-08-23": "Eid-ul-Fitr (estimated)",
-    "1979-08-24": "Eid-ul-Fitr (estimated)",
-    "1979-08-25": "Eid-ul-Fitr (estimated)",
-    "1979-10-31": "Eid-ul-Adha (estimated)",
-    "1979-11-01": "Eid-ul-Adha (estimated)",
-    "1979-11-02": "Eid-ul-Adha (estimated)",
+    "1979-08-23": "Eid al-Fitr (estimated)",
+    "1979-08-24": "Eid al-Fitr (estimated)",
+    "1979-08-25": "Eid al-Fitr (estimated)",
+    "1979-10-31": "Eid al-Adha (estimated)",
+    "1979-11-01": "Eid al-Adha (estimated)",
+    "1979-11-02": "Eid al-Adha (estimated)",
     "1979-11-09": "Iqbal Day",
     "1979-11-28": "Ashura (estimated)",
     "1979-11-29": "Ashura (estimated)",
     "1979-12-25": "Quaid-e-Azam Day",
-    "1980-01-30": "Eid Milad-un-Nabi (estimated)",
+    "1980-01-30": "Prophet's Birthday (estimated)",
     "1980-03-23": "Pakistan Day",
-    "1980-05-01": "Labour Day",
-    "1980-08-12": "Eid-ul-Fitr (estimated)",
-    "1980-08-13": "Eid-ul-Fitr (estimated)",
-    "1980-08-14": "Eid-ul-Fitr (estimated); Independence Day",
-    "1980-10-19": "Eid-ul-Adha (estimated)",
-    "1980-10-20": "Eid-ul-Adha (estimated)",
-    "1980-10-21": "Eid-ul-Adha (estimated)",
+    "1980-05-01": "Labor Day",
+    "1980-08-12": "Eid al-Fitr (estimated)",
+    "1980-08-13": "Eid al-Fitr (estimated)",
+    "1980-08-14": "Eid al-Fitr (estimated); Independence Day",
+    "1980-10-19": "Eid al-Adha (estimated)",
+    "1980-10-20": "Eid al-Adha (estimated)",
+    "1980-10-21": "Eid al-Adha (estimated)",
     "1980-11-09": "Iqbal Day",
     "1980-11-17": "Ashura (estimated)",
     "1980-11-18": "Ashura (estimated)",
     "1980-12-25": "Quaid-e-Azam Day",
-    "1981-01-18": "Eid Milad-un-Nabi (estimated)",
+    "1981-01-18": "Prophet's Birthday (estimated)",
     "1981-03-23": "Pakistan Day",
-    "1981-05-01": "Labour Day",
-    "1981-08-01": "Eid-ul-Fitr (estimated)",
-    "1981-08-02": "Eid-ul-Fitr (estimated)",
-    "1981-08-03": "Eid-ul-Fitr (estimated)",
+    "1981-05-01": "Labor Day",
+    "1981-08-01": "Eid al-Fitr (estimated)",
+    "1981-08-02": "Eid al-Fitr (estimated)",
+    "1981-08-03": "Eid al-Fitr (estimated)",
     "1981-08-14": "Independence Day",
-    "1981-10-08": "Eid-ul-Adha (estimated)",
-    "1981-10-09": "Eid-ul-Adha (estimated)",
-    "1981-10-10": "Eid-ul-Adha (estimated)",
+    "1981-10-08": "Eid al-Adha (estimated)",
+    "1981-10-09": "Eid al-Adha (estimated)",
+    "1981-10-10": "Eid al-Adha (estimated)",
     "1981-11-05": "Ashura (estimated)",
     "1981-11-06": "Ashura (estimated)",
     "1981-11-09": "Iqbal Day",
     "1981-12-25": "Quaid-e-Azam Day",
-    "1982-01-07": "Eid Milad-un-Nabi (estimated)",
+    "1982-01-07": "Prophet's Birthday (estimated)",
     "1982-03-23": "Pakistan Day",
-    "1982-05-01": "Labour Day",
-    "1982-07-21": "Eid-ul-Fitr (estimated)",
-    "1982-07-22": "Eid-ul-Fitr (estimated)",
-    "1982-07-23": "Eid-ul-Fitr (estimated)",
+    "1982-05-01": "Labor Day",
+    "1982-07-21": "Eid al-Fitr (estimated)",
+    "1982-07-22": "Eid al-Fitr (estimated)",
+    "1982-07-23": "Eid al-Fitr (estimated)",
     "1982-08-14": "Independence Day",
-    "1982-09-27": "Eid-ul-Adha (estimated)",
-    "1982-09-28": "Eid-ul-Adha (estimated)",
-    "1982-09-29": "Eid-ul-Adha (estimated)",
+    "1982-09-27": "Eid al-Adha (estimated)",
+    "1982-09-28": "Eid al-Adha (estimated)",
+    "1982-09-29": "Eid al-Adha (estimated)",
     "1982-10-26": "Ashura (estimated)",
     "1982-10-27": "Ashura (estimated)",
     "1982-11-09": "Iqbal Day",
     "1982-12-25": "Quaid-e-Azam Day",
-    "1982-12-27": "Eid Milad-un-Nabi (estimated)",
+    "1982-12-27": "Prophet's Birthday (estimated)",
     "1983-03-23": "Pakistan Day",
-    "1983-05-01": "Labour Day",
-    "1983-07-11": "Eid-ul-Fitr (estimated)",
-    "1983-07-12": "Eid-ul-Fitr (estimated)",
-    "1983-07-13": "Eid-ul-Fitr (estimated)",
+    "1983-05-01": "Labor Day",
+    "1983-07-11": "Eid al-Fitr (estimated)",
+    "1983-07-12": "Eid al-Fitr (estimated)",
+    "1983-07-13": "Eid al-Fitr (estimated)",
     "1983-08-14": "Independence Day",
-    "1983-09-17": "Eid-ul-Adha (estimated)",
-    "1983-09-18": "Eid-ul-Adha (estimated)",
-    "1983-09-19": "Eid-ul-Adha (estimated)",
+    "1983-09-17": "Eid al-Adha (estimated)",
+    "1983-09-18": "Eid al-Adha (estimated)",
+    "1983-09-19": "Eid al-Adha (estimated)",
     "1983-10-15": "Ashura (estimated)",
     "1983-10-16": "Ashura (estimated)",
     "1983-11-09": "Iqbal Day",
-    "1983-12-16": "Eid Milad-un-Nabi (estimated)",
+    "1983-12-16": "Prophet's Birthday (estimated)",
     "1983-12-25": "Quaid-e-Azam Day",
     "1984-03-23": "Pakistan Day",
-    "1984-05-01": "Labour Day",
-    "1984-06-30": "Eid-ul-Fitr (estimated)",
-    "1984-07-01": "Eid-ul-Fitr (estimated)",
-    "1984-07-02": "Eid-ul-Fitr (estimated)",
+    "1984-05-01": "Labor Day",
+    "1984-06-30": "Eid al-Fitr (estimated)",
+    "1984-07-01": "Eid al-Fitr (estimated)",
+    "1984-07-02": "Eid al-Fitr (estimated)",
     "1984-08-14": "Independence Day",
-    "1984-09-05": "Eid-ul-Adha (estimated)",
-    "1984-09-06": "Eid-ul-Adha (estimated)",
-    "1984-09-07": "Eid-ul-Adha (estimated)",
+    "1984-09-05": "Eid al-Adha (estimated)",
+    "1984-09-06": "Eid al-Adha (estimated)",
+    "1984-09-07": "Eid al-Adha (estimated)",
     "1984-10-04": "Ashura (estimated)",
     "1984-10-05": "Ashura (estimated)",
     "1984-11-09": "Iqbal Day",
-    "1984-12-04": "Eid Milad-un-Nabi (estimated)",
+    "1984-12-04": "Prophet's Birthday (estimated)",
     "1984-12-25": "Quaid-e-Azam Day",
     "1985-03-23": "Pakistan Day",
-    "1985-05-01": "Labour Day",
-    "1985-06-19": "Eid-ul-Fitr (estimated)",
-    "1985-06-20": "Eid-ul-Fitr (estimated)",
-    "1985-06-21": "Eid-ul-Fitr (estimated)",
+    "1985-05-01": "Labor Day",
+    "1985-06-19": "Eid al-Fitr (estimated)",
+    "1985-06-20": "Eid al-Fitr (estimated)",
+    "1985-06-21": "Eid al-Fitr (estimated)",
     "1985-08-14": "Independence Day",
-    "1985-08-26": "Eid-ul-Adha (estimated)",
-    "1985-08-27": "Eid-ul-Adha (estimated)",
-    "1985-08-28": "Eid-ul-Adha (estimated)",
+    "1985-08-26": "Eid al-Adha (estimated)",
+    "1985-08-27": "Eid al-Adha (estimated)",
+    "1985-08-28": "Eid al-Adha (estimated)",
     "1985-09-23": "Ashura (estimated)",
     "1985-09-24": "Ashura (estimated)",
     "1985-11-09": "Iqbal Day",
-    "1985-11-24": "Eid Milad-un-Nabi (estimated)",
+    "1985-11-24": "Prophet's Birthday (estimated)",
     "1985-12-25": "Quaid-e-Azam Day",
     "1986-03-23": "Pakistan Day",
-    "1986-05-01": "Labour Day",
-    "1986-06-08": "Eid-ul-Fitr (estimated)",
-    "1986-06-09": "Eid-ul-Fitr (estimated)",
-    "1986-06-10": "Eid-ul-Fitr (estimated)",
+    "1986-05-01": "Labor Day",
+    "1986-06-08": "Eid al-Fitr (estimated)",
+    "1986-06-09": "Eid al-Fitr (estimated)",
+    "1986-06-10": "Eid al-Fitr (estimated)",
     "1986-08-14": "Independence Day",
-    "1986-08-15": "Eid-ul-Adha (estimated)",
-    "1986-08-16": "Eid-ul-Adha (estimated)",
-    "1986-08-17": "Eid-ul-Adha (estimated)",
+    "1986-08-15": "Eid al-Adha (estimated)",
+    "1986-08-16": "Eid al-Adha (estimated)",
+    "1986-08-17": "Eid al-Adha (estimated)",
     "1986-09-13": "Ashura (estimated)",
     "1986-09-14": "Ashura (estimated)",
     "1986-11-09": "Iqbal Day",
-    "1986-11-14": "Eid Milad-un-Nabi (estimated)",
+    "1986-11-14": "Prophet's Birthday (estimated)",
     "1986-12-25": "Quaid-e-Azam Day",
     "1987-03-23": "Pakistan Day",
-    "1987-05-01": "Labour Day",
-    "1987-05-28": "Eid-ul-Fitr (estimated)",
-    "1987-05-29": "Eid-ul-Fitr (estimated)",
-    "1987-05-30": "Eid-ul-Fitr (estimated)",
-    "1987-08-04": "Eid-ul-Adha (estimated)",
-    "1987-08-05": "Eid-ul-Adha (estimated)",
-    "1987-08-06": "Eid-ul-Adha (estimated)",
+    "1987-05-01": "Labor Day",
+    "1987-05-28": "Eid al-Fitr (estimated)",
+    "1987-05-29": "Eid al-Fitr (estimated)",
+    "1987-05-30": "Eid al-Fitr (estimated)",
+    "1987-08-04": "Eid al-Adha (estimated)",
+    "1987-08-05": "Eid al-Adha (estimated)",
+    "1987-08-06": "Eid al-Adha (estimated)",
     "1987-08-14": "Independence Day",
     "1987-09-02": "Ashura (estimated)",
     "1987-09-03": "Ashura (estimated)",
-    "1987-11-03": "Eid Milad-un-Nabi (estimated)",
+    "1987-11-03": "Prophet's Birthday (estimated)",
     "1987-11-09": "Iqbal Day",
     "1987-12-25": "Quaid-e-Azam Day",
     "1988-03-23": "Pakistan Day",
-    "1988-05-01": "Labour Day",
-    "1988-05-16": "Eid-ul-Fitr (estimated)",
-    "1988-05-17": "Eid-ul-Fitr (estimated)",
-    "1988-05-18": "Eid-ul-Fitr (estimated)",
-    "1988-07-23": "Eid-ul-Adha (estimated)",
-    "1988-07-24": "Eid-ul-Adha (estimated)",
-    "1988-07-25": "Eid-ul-Adha (estimated)",
+    "1988-05-01": "Labor Day",
+    "1988-05-16": "Eid al-Fitr (estimated)",
+    "1988-05-17": "Eid al-Fitr (estimated)",
+    "1988-05-18": "Eid al-Fitr (estimated)",
+    "1988-07-23": "Eid al-Adha (estimated)",
+    "1988-07-24": "Eid al-Adha (estimated)",
+    "1988-07-25": "Eid al-Adha (estimated)",
     "1988-08-14": "Independence Day",
     "1988-08-21": "Ashura (estimated)",
     "1988-08-22": "Ashura (estimated)",
-    "1988-10-22": "Eid Milad-un-Nabi (estimated)",
+    "1988-10-22": "Prophet's Birthday (estimated)",
     "1988-11-09": "Iqbal Day",
     "1988-12-25": "Quaid-e-Azam Day",
     "1989-03-23": "Pakistan Day",
-    "1989-05-01": "Labour Day",
-    "1989-05-06": "Eid-ul-Fitr (estimated)",
-    "1989-05-07": "Eid-ul-Fitr (estimated)",
-    "1989-05-08": "Eid-ul-Fitr (estimated)",
-    "1989-07-13": "Eid-ul-Adha (estimated)",
-    "1989-07-14": "Eid-ul-Adha (estimated)",
-    "1989-07-15": "Eid-ul-Adha (estimated)",
+    "1989-05-01": "Labor Day",
+    "1989-05-06": "Eid al-Fitr (estimated)",
+    "1989-05-07": "Eid al-Fitr (estimated)",
+    "1989-05-08": "Eid al-Fitr (estimated)",
+    "1989-07-13": "Eid al-Adha (estimated)",
+    "1989-07-14": "Eid al-Adha (estimated)",
+    "1989-07-15": "Eid al-Adha (estimated)",
     "1989-08-10": "Ashura (estimated)",
     "1989-08-11": "Ashura (estimated)",
     "1989-08-14": "Independence Day",
-    "1989-10-11": "Eid Milad-un-Nabi (estimated)",
+    "1989-10-11": "Prophet's Birthday (estimated)",
     "1989-11-09": "Iqbal Day",
     "1989-12-25": "Quaid-e-Azam Day",
     "1990-02-05": "Kashmir Solidarity Day",
     "1990-03-23": "Pakistan Day",
-    "1990-04-26": "Eid-ul-Fitr (estimated)",
-    "1990-04-27": "Eid-ul-Fitr (estimated)",
-    "1990-04-28": "Eid-ul-Fitr (estimated)",
-    "1990-05-01": "Labour Day",
-    "1990-07-02": "Eid-ul-Adha (estimated)",
-    "1990-07-03": "Eid-ul-Adha (estimated)",
-    "1990-07-04": "Eid-ul-Adha (estimated)",
+    "1990-04-26": "Eid al-Fitr (estimated)",
+    "1990-04-27": "Eid al-Fitr (estimated)",
+    "1990-04-28": "Eid al-Fitr (estimated)",
+    "1990-05-01": "Labor Day",
+    "1990-07-02": "Eid al-Adha (estimated)",
+    "1990-07-03": "Eid al-Adha (estimated)",
+    "1990-07-04": "Eid al-Adha (estimated)",
     "1990-07-31": "Ashura (estimated)",
     "1990-08-01": "Ashura (estimated)",
     "1990-08-14": "Independence Day",
-    "1990-10-01": "Eid Milad-un-Nabi (estimated)",
+    "1990-10-01": "Prophet's Birthday (estimated)",
     "1990-11-09": "Iqbal Day",
     "1990-12-25": "Quaid-e-Azam Day",
     "1991-02-05": "Kashmir Solidarity Day",
     "1991-03-23": "Pakistan Day",
-    "1991-04-15": "Eid-ul-Fitr (estimated)",
-    "1991-04-16": "Eid-ul-Fitr (estimated)",
-    "1991-04-17": "Eid-ul-Fitr (estimated)",
-    "1991-05-01": "Labour Day",
-    "1991-06-22": "Eid-ul-Adha (estimated)",
-    "1991-06-23": "Eid-ul-Adha (estimated)",
-    "1991-06-24": "Eid-ul-Adha (estimated)",
+    "1991-04-15": "Eid al-Fitr (estimated)",
+    "1991-04-16": "Eid al-Fitr (estimated)",
+    "1991-04-17": "Eid al-Fitr (estimated)",
+    "1991-05-01": "Labor Day",
+    "1991-06-22": "Eid al-Adha (estimated)",
+    "1991-06-23": "Eid al-Adha (estimated)",
+    "1991-06-24": "Eid al-Adha (estimated)",
     "1991-07-20": "Ashura (estimated)",
     "1991-07-21": "Ashura (estimated)",
     "1991-08-14": "Independence Day",
-    "1991-09-20": "Eid Milad-un-Nabi (estimated)",
+    "1991-09-20": "Prophet's Birthday (estimated)",
     "1991-11-09": "Iqbal Day",
     "1991-12-25": "Quaid-e-Azam Day",
     "1992-02-05": "Kashmir Solidarity Day",
     "1992-03-23": "Pakistan Day",
-    "1992-04-04": "Eid-ul-Fitr (estimated)",
-    "1992-04-05": "Eid-ul-Fitr (estimated)",
-    "1992-04-06": "Eid-ul-Fitr (estimated)",
-    "1992-05-01": "Labour Day",
-    "1992-06-11": "Eid-ul-Adha (estimated)",
-    "1992-06-12": "Eid-ul-Adha (estimated)",
-    "1992-06-13": "Eid-ul-Adha (estimated)",
+    "1992-04-04": "Eid al-Fitr (estimated)",
+    "1992-04-05": "Eid al-Fitr (estimated)",
+    "1992-04-06": "Eid al-Fitr (estimated)",
+    "1992-05-01": "Labor Day",
+    "1992-06-11": "Eid al-Adha (estimated)",
+    "1992-06-12": "Eid al-Adha (estimated)",
+    "1992-06-13": "Eid al-Adha (estimated)",
     "1992-07-09": "Ashura (estimated)",
     "1992-07-10": "Ashura (estimated)",
     "1992-08-14": "Independence Day",
-    "1992-09-09": "Eid Milad-un-Nabi (estimated)",
+    "1992-09-09": "Prophet's Birthday (estimated)",
     "1992-11-09": "Iqbal Day",
     "1992-12-25": "Quaid-e-Azam Day",
     "1993-02-05": "Kashmir Solidarity Day",
     "1993-03-23": "Pakistan Day",
-    "1993-03-24": "Eid-ul-Fitr (estimated)",
-    "1993-03-25": "Eid-ul-Fitr (estimated)",
-    "1993-03-26": "Eid-ul-Fitr (estimated)",
-    "1993-05-01": "Labour Day",
-    "1993-05-31": "Eid-ul-Adha (estimated)",
-    "1993-06-01": "Eid-ul-Adha (estimated)",
-    "1993-06-02": "Eid-ul-Adha (estimated)",
+    "1993-03-24": "Eid al-Fitr (estimated)",
+    "1993-03-25": "Eid al-Fitr (estimated)",
+    "1993-03-26": "Eid al-Fitr (estimated)",
+    "1993-05-01": "Labor Day",
+    "1993-05-31": "Eid al-Adha (estimated)",
+    "1993-06-01": "Eid al-Adha (estimated)",
+    "1993-06-02": "Eid al-Adha (estimated)",
     "1993-06-29": "Ashura (estimated)",
     "1993-06-30": "Ashura (estimated)",
     "1993-08-14": "Independence Day",
-    "1993-08-29": "Eid Milad-un-Nabi (estimated)",
+    "1993-08-29": "Prophet's Birthday (estimated)",
     "1993-11-09": "Iqbal Day",
     "1993-12-25": "Quaid-e-Azam Day",
     "1994-02-05": "Kashmir Solidarity Day",
-    "1994-03-13": "Eid-ul-Fitr (estimated)",
-    "1994-03-14": "Eid-ul-Fitr (estimated)",
-    "1994-03-15": "Eid-ul-Fitr (estimated)",
+    "1994-03-13": "Eid al-Fitr (estimated)",
+    "1994-03-14": "Eid al-Fitr (estimated)",
+    "1994-03-15": "Eid al-Fitr (estimated)",
     "1994-03-23": "Pakistan Day",
-    "1994-05-01": "Labour Day",
-    "1994-05-20": "Eid-ul-Adha (estimated)",
-    "1994-05-21": "Eid-ul-Adha (estimated)",
-    "1994-05-22": "Eid-ul-Adha (estimated)",
+    "1994-05-01": "Labor Day",
+    "1994-05-20": "Eid al-Adha (estimated)",
+    "1994-05-21": "Eid al-Adha (estimated)",
+    "1994-05-22": "Eid al-Adha (estimated)",
     "1994-06-18": "Ashura (estimated)",
     "1994-06-19": "Ashura (estimated)",
     "1994-08-14": "Independence Day",
-    "1994-08-19": "Eid Milad-un-Nabi (estimated)",
+    "1994-08-19": "Prophet's Birthday (estimated)",
     "1994-11-09": "Iqbal Day",
     "1994-12-25": "Quaid-e-Azam Day",
     "1995-02-05": "Kashmir Solidarity Day",
-    "1995-03-02": "Eid-ul-Fitr (estimated)",
-    "1995-03-03": "Eid-ul-Fitr (estimated)",
-    "1995-03-04": "Eid-ul-Fitr (estimated)",
+    "1995-03-02": "Eid al-Fitr (estimated)",
+    "1995-03-03": "Eid al-Fitr (estimated)",
+    "1995-03-04": "Eid al-Fitr (estimated)",
     "1995-03-23": "Pakistan Day",
-    "1995-05-01": "Labour Day",
-    "1995-05-09": "Eid-ul-Adha (estimated)",
-    "1995-05-10": "Eid-ul-Adha (estimated)",
-    "1995-05-11": "Eid-ul-Adha (estimated)",
+    "1995-05-01": "Labor Day",
+    "1995-05-09": "Eid al-Adha (estimated)",
+    "1995-05-10": "Eid al-Adha (estimated)",
+    "1995-05-11": "Eid al-Adha (estimated)",
     "1995-06-07": "Ashura (estimated)",
     "1995-06-08": "Ashura (estimated)",
-    "1995-08-08": "Eid Milad-un-Nabi (estimated)",
+    "1995-08-08": "Prophet's Birthday (estimated)",
     "1995-08-14": "Independence Day",
     "1995-11-09": "Iqbal Day",
     "1995-12-25": "Quaid-e-Azam Day",
     "1996-02-05": "Kashmir Solidarity Day",
-    "1996-02-19": "Eid-ul-Fitr (estimated)",
-    "1996-02-20": "Eid-ul-Fitr (estimated)",
-    "1996-02-21": "Eid-ul-Fitr (estimated)",
+    "1996-02-19": "Eid al-Fitr (estimated)",
+    "1996-02-20": "Eid al-Fitr (estimated)",
+    "1996-02-21": "Eid al-Fitr (estimated)",
     "1996-03-23": "Pakistan Day",
-    "1996-04-27": "Eid-ul-Adha (estimated)",
-    "1996-04-28": "Eid-ul-Adha (estimated)",
-    "1996-04-29": "Eid-ul-Adha (estimated)",
-    "1996-05-01": "Labour Day",
+    "1996-04-27": "Eid al-Adha (estimated)",
+    "1996-04-28": "Eid al-Adha (estimated)",
+    "1996-04-29": "Eid al-Adha (estimated)",
+    "1996-05-01": "Labor Day",
     "1996-05-26": "Ashura (estimated)",
     "1996-05-27": "Ashura (estimated)",
-    "1996-07-27": "Eid Milad-un-Nabi (estimated)",
+    "1996-07-27": "Prophet's Birthday (estimated)",
     "1996-08-14": "Independence Day",
     "1996-11-09": "Iqbal Day",
     "1996-12-25": "Quaid-e-Azam Day",
     "1997-02-05": "Kashmir Solidarity Day",
-    "1997-02-08": "Eid-ul-Fitr (estimated)",
-    "1997-02-09": "Eid-ul-Fitr (estimated)",
-    "1997-02-10": "Eid-ul-Fitr (estimated)",
+    "1997-02-08": "Eid al-Fitr (estimated)",
+    "1997-02-09": "Eid al-Fitr (estimated)",
+    "1997-02-10": "Eid al-Fitr (estimated)",
     "1997-03-23": "Pakistan Day",
-    "1997-04-17": "Eid-ul-Adha (estimated)",
-    "1997-04-18": "Eid-ul-Adha (estimated)",
-    "1997-04-19": "Eid-ul-Adha (estimated)",
-    "1997-05-01": "Labour Day",
+    "1997-04-17": "Eid al-Adha (estimated)",
+    "1997-04-18": "Eid al-Adha (estimated)",
+    "1997-04-19": "Eid al-Adha (estimated)",
+    "1997-05-01": "Labor Day",
     "1997-05-15": "Ashura (estimated)",
     "1997-05-16": "Ashura (estimated)",
-    "1997-07-16": "Eid Milad-un-Nabi (estimated)",
+    "1997-07-16": "Prophet's Birthday (estimated)",
     "1997-08-14": "Independence Day",
     "1997-11-09": "Iqbal Day",
     "1997-12-25": "Quaid-e-Azam Day",
-    "1998-01-29": "Eid-ul-Fitr (estimated)",
-    "1998-01-30": "Eid-ul-Fitr (estimated)",
-    "1998-01-31": "Eid-ul-Fitr (estimated)",
+    "1998-01-29": "Eid al-Fitr (estimated)",
+    "1998-01-30": "Eid al-Fitr (estimated)",
+    "1998-01-31": "Eid al-Fitr (estimated)",
     "1998-02-05": "Kashmir Solidarity Day",
     "1998-03-23": "Pakistan Day",
-    "1998-04-07": "Eid-ul-Adha (estimated)",
-    "1998-04-08": "Eid-ul-Adha (estimated)",
-    "1998-04-09": "Eid-ul-Adha (estimated)",
-    "1998-05-01": "Labour Day",
+    "1998-04-07": "Eid al-Adha (estimated)",
+    "1998-04-08": "Eid al-Adha (estimated)",
+    "1998-04-09": "Eid al-Adha (estimated)",
+    "1998-05-01": "Labor Day",
     "1998-05-05": "Ashura (estimated)",
     "1998-05-06": "Ashura (estimated)",
-    "1998-07-06": "Eid Milad-un-Nabi (estimated)",
+    "1998-07-06": "Prophet's Birthday (estimated)",
     "1998-08-14": "Independence Day",
     "1998-11-09": "Iqbal Day",
     "1998-12-25": "Quaid-e-Azam Day",
-    "1999-01-18": "Eid-ul-Fitr (estimated)",
-    "1999-01-19": "Eid-ul-Fitr (estimated)",
-    "1999-01-20": "Eid-ul-Fitr (estimated)",
+    "1999-01-18": "Eid al-Fitr (estimated)",
+    "1999-01-19": "Eid al-Fitr (estimated)",
+    "1999-01-20": "Eid al-Fitr (estimated)",
     "1999-02-05": "Kashmir Solidarity Day",
     "1999-03-23": "Pakistan Day",
-    "1999-03-27": "Eid-ul-Adha (estimated)",
-    "1999-03-28": "Eid-ul-Adha (estimated)",
-    "1999-03-29": "Eid-ul-Adha (estimated)",
+    "1999-03-27": "Eid al-Adha (estimated)",
+    "1999-03-28": "Eid al-Adha (estimated)",
+    "1999-03-29": "Eid al-Adha (estimated)",
     "1999-04-25": "Ashura (estimated)",
     "1999-04-26": "Ashura (estimated)",
-    "1999-05-01": "Labour Day",
-    "1999-06-26": "Eid Milad-un-Nabi (estimated)",
+    "1999-05-01": "Labor Day",
+    "1999-06-26": "Prophet's Birthday (estimated)",
     "1999-08-14": "Independence Day",
     "1999-11-09": "Iqbal Day",
     "1999-12-25": "Quaid-e-Azam Day",
-    "2000-01-08": "Eid-ul-Fitr (estimated)",
-    "2000-01-09": "Eid-ul-Fitr (estimated)",
-    "2000-01-10": "Eid-ul-Fitr (estimated)",
+    "2000-01-08": "Eid al-Fitr (estimated)",
+    "2000-01-09": "Eid al-Fitr (estimated)",
+    "2000-01-10": "Eid al-Fitr (estimated)",
     "2000-02-05": "Kashmir Solidarity Day",
-    "2000-03-16": "Eid-ul-Adha (estimated)",
-    "2000-03-17": "Eid-ul-Adha (estimated)",
-    "2000-03-18": "Eid-ul-Adha (estimated)",
+    "2000-03-16": "Eid al-Adha (estimated)",
+    "2000-03-17": "Eid al-Adha (estimated)",
+    "2000-03-18": "Eid al-Adha (estimated)",
     "2000-03-23": "Pakistan Day",
     "2000-04-14": "Ashura (estimated)",
     "2000-04-15": "Ashura (estimated)",
-    "2000-05-01": "Labour Day",
-    "2000-06-14": "Eid Milad-un-Nabi (estimated)",
+    "2000-05-01": "Labor Day",
+    "2000-06-14": "Prophet's Birthday (estimated)",
     "2000-08-14": "Independence Day",
     "2000-11-09": "Iqbal Day",
     "2000-12-25": "Quaid-e-Azam Day",
-    "2000-12-27": "Eid-ul-Fitr (estimated)",
-    "2000-12-28": "Eid-ul-Fitr (estimated)",
-    "2000-12-29": "Eid-ul-Fitr (estimated)",
+    "2000-12-27": "Eid al-Fitr (estimated)",
+    "2000-12-28": "Eid al-Fitr (estimated)",
+    "2000-12-29": "Eid al-Fitr (estimated)",
     "2001-02-05": "Kashmir Solidarity Day",
-    "2001-03-05": "Eid-ul-Adha (estimated)",
-    "2001-03-06": "Eid-ul-Adha (estimated)",
-    "2001-03-07": "Eid-ul-Adha (estimated)",
+    "2001-03-05": "Eid al-Adha (estimated)",
+    "2001-03-06": "Eid al-Adha (estimated)",
+    "2001-03-07": "Eid al-Adha (estimated)",
     "2001-03-23": "Pakistan Day",
     "2001-04-03": "Ashura (estimated)",
     "2001-04-04": "Ashura (estimated)",
-    "2001-05-01": "Labour Day",
-    "2001-06-04": "Eid Milad-un-Nabi (estimated)",
+    "2001-05-01": "Labor Day",
+    "2001-06-04": "Prophet's Birthday (estimated)",
     "2001-08-14": "Independence Day",
     "2001-11-09": "Iqbal Day",
-    "2001-12-16": "Eid-ul-Fitr (estimated)",
-    "2001-12-17": "Eid-ul-Fitr (estimated)",
-    "2001-12-18": "Eid-ul-Fitr (estimated)",
+    "2001-12-16": "Eid al-Fitr (estimated)",
+    "2001-12-17": "Eid al-Fitr (estimated)",
+    "2001-12-18": "Eid al-Fitr (estimated)",
     "2001-12-25": "Quaid-e-Azam Day",
     "2002-02-05": "Kashmir Solidarity Day",
-    "2002-02-22": "Eid-ul-Adha (estimated)",
-    "2002-02-23": "Eid-ul-Adha (estimated)",
-    "2002-02-24": "Eid-ul-Adha (estimated)",
+    "2002-02-22": "Eid al-Adha (estimated)",
+    "2002-02-23": "Eid al-Adha (estimated)",
+    "2002-02-24": "Eid al-Adha (estimated)",
     "2002-03-23": "Ashura (estimated); Pakistan Day",
     "2002-03-24": "Ashura (estimated)",
-    "2002-05-01": "Labour Day",
-    "2002-05-24": "Eid Milad-un-Nabi (estimated)",
+    "2002-05-01": "Labor Day",
+    "2002-05-24": "Prophet's Birthday (estimated)",
     "2002-08-14": "Independence Day",
     "2002-11-09": "Iqbal Day",
-    "2002-12-05": "Eid-ul-Fitr (estimated)",
-    "2002-12-06": "Eid-ul-Fitr (estimated)",
-    "2002-12-07": "Eid-ul-Fitr (estimated)",
+    "2002-12-05": "Eid al-Fitr (estimated)",
+    "2002-12-06": "Eid al-Fitr (estimated)",
+    "2002-12-07": "Eid al-Fitr (estimated)",
     "2002-12-25": "Quaid-e-Azam Day",
     "2003-02-05": "Kashmir Solidarity Day",
-    "2003-02-11": "Eid-ul-Adha (estimated)",
-    "2003-02-12": "Eid-ul-Adha (estimated)",
-    "2003-02-13": "Eid-ul-Adha (estimated)",
+    "2003-02-11": "Eid al-Adha (estimated)",
+    "2003-02-12": "Eid al-Adha (estimated)",
+    "2003-02-13": "Eid al-Adha (estimated)",
     "2003-03-12": "Ashura (estimated)",
     "2003-03-13": "Ashura (estimated)",
     "2003-03-23": "Pakistan Day",
-    "2003-05-01": "Labour Day",
-    "2003-05-13": "Eid Milad-un-Nabi (estimated)",
+    "2003-05-01": "Labor Day",
+    "2003-05-13": "Prophet's Birthday (estimated)",
     "2003-08-14": "Independence Day",
     "2003-11-09": "Iqbal Day",
-    "2003-11-25": "Eid-ul-Fitr (estimated)",
-    "2003-11-26": "Eid-ul-Fitr (estimated)",
-    "2003-11-27": "Eid-ul-Fitr (estimated)",
+    "2003-11-25": "Eid al-Fitr (estimated)",
+    "2003-11-26": "Eid al-Fitr (estimated)",
+    "2003-11-27": "Eid al-Fitr (estimated)",
     "2003-12-25": "Quaid-e-Azam Day",
-    "2004-02-01": "Eid-ul-Adha (estimated)",
-    "2004-02-02": "Eid-ul-Adha (estimated)",
-    "2004-02-03": "Eid-ul-Adha (estimated)",
+    "2004-02-01": "Eid al-Adha (estimated)",
+    "2004-02-02": "Eid al-Adha (estimated)",
+    "2004-02-03": "Eid al-Adha (estimated)",
     "2004-02-05": "Kashmir Solidarity Day",
     "2004-02-29": "Ashura (estimated)",
     "2004-03-01": "Ashura (estimated)",
     "2004-03-23": "Pakistan Day",
-    "2004-05-01": "Eid Milad-un-Nabi (estimated); Labour Day",
+    "2004-05-01": "Labor Day; Prophet's Birthday (estimated)",
     "2004-08-14": "Independence Day",
     "2004-11-09": "Iqbal Day",
-    "2004-11-14": "Eid-ul-Fitr (estimated)",
-    "2004-11-15": "Eid-ul-Fitr (estimated)",
-    "2004-11-16": "Eid-ul-Fitr (estimated)",
+    "2004-11-14": "Eid al-Fitr (estimated)",
+    "2004-11-15": "Eid al-Fitr (estimated)",
+    "2004-11-16": "Eid al-Fitr (estimated)",
     "2004-12-25": "Quaid-e-Azam Day",
-    "2005-01-21": "Eid-ul-Adha",
-    "2005-01-22": "Eid-ul-Adha",
-    "2005-01-23": "Eid-ul-Adha",
+    "2005-01-21": "Eid al-Adha",
+    "2005-01-22": "Eid al-Adha",
+    "2005-01-23": "Eid al-Adha",
     "2005-02-05": "Kashmir Solidarity Day",
     "2005-02-17": "Ashura",
     "2005-02-18": "Ashura",
     "2005-03-23": "Pakistan Day",
-    "2005-04-22": "Eid Milad-un-Nabi",
-    "2005-05-01": "Labour Day",
+    "2005-04-22": "Prophet's Birthday",
+    "2005-05-01": "Labor Day",
     "2005-08-14": "Independence Day",
-    "2005-11-04": "Eid-ul-Fitr",
-    "2005-11-05": "Eid-ul-Fitr",
-    "2005-11-06": "Eid-ul-Fitr",
+    "2005-11-04": "Eid al-Fitr",
+    "2005-11-05": "Eid al-Fitr",
+    "2005-11-06": "Eid al-Fitr",
     "2005-11-09": "Iqbal Day",
     "2005-12-25": "Quaid-e-Azam Day",
-    "2006-01-10": "Eid-ul-Adha",
-    "2006-01-11": "Eid-ul-Adha",
-    "2006-01-12": "Eid-ul-Adha",
+    "2006-01-10": "Eid al-Adha",
+    "2006-01-11": "Eid al-Adha",
+    "2006-01-12": "Eid al-Adha",
     "2006-02-05": "Kashmir Solidarity Day",
     "2006-02-07": "Ashura",
     "2006-02-08": "Ashura",
     "2006-03-23": "Pakistan Day",
-    "2006-04-11": "Eid Milad-un-Nabi",
-    "2006-05-01": "Labour Day",
+    "2006-04-11": "Prophet's Birthday",
+    "2006-05-01": "Labor Day",
     "2006-08-14": "Independence Day",
-    "2006-10-24": "Eid-ul-Fitr",
-    "2006-10-25": "Eid-ul-Fitr",
-    "2006-10-26": "Eid-ul-Fitr",
+    "2006-10-24": "Eid al-Fitr",
+    "2006-10-25": "Eid al-Fitr",
+    "2006-10-26": "Eid al-Fitr",
     "2006-11-09": "Iqbal Day",
     "2006-12-25": "Quaid-e-Azam Day",
-    "2006-12-31": "Eid-ul-Adha",
-    "2007-01-01": "Eid-ul-Adha",
-    "2007-01-02": "Eid-ul-Adha",
+    "2006-12-31": "Eid al-Adha",
+    "2007-01-01": "Eid al-Adha",
+    "2007-01-02": "Eid al-Adha",
     "2007-01-27": "Ashura",
     "2007-01-28": "Ashura",
     "2007-02-05": "Kashmir Solidarity Day",
     "2007-03-23": "Pakistan Day",
-    "2007-03-31": "Eid Milad-un-Nabi",
-    "2007-05-01": "Labour Day",
+    "2007-03-31": "Prophet's Birthday",
+    "2007-05-01": "Labor Day",
     "2007-08-14": "Independence Day",
-    "2007-10-13": "Eid-ul-Fitr",
-    "2007-10-14": "Eid-ul-Fitr",
-    "2007-10-15": "Eid-ul-Fitr",
+    "2007-10-13": "Eid al-Fitr",
+    "2007-10-14": "Eid al-Fitr",
+    "2007-10-15": "Eid al-Fitr",
     "2007-11-09": "Iqbal Day",
-    "2007-12-20": "Eid-ul-Adha",
-    "2007-12-21": "Eid-ul-Adha",
-    "2007-12-22": "Eid-ul-Adha",
+    "2007-12-20": "Eid al-Adha",
+    "2007-12-21": "Eid al-Adha",
+    "2007-12-22": "Eid al-Adha",
     "2007-12-25": "Quaid-e-Azam Day",
     "2008-01-17": "Ashura",
     "2008-01-18": "Ashura",
     "2008-02-05": "Kashmir Solidarity Day",
-    "2008-03-21": "Eid Milad-un-Nabi",
+    "2008-03-21": "Prophet's Birthday",
     "2008-03-23": "Pakistan Day",
-    "2008-05-01": "Labour Day",
+    "2008-05-01": "Labor Day",
     "2008-08-14": "Independence Day",
-    "2008-10-02": "Eid-ul-Fitr",
-    "2008-10-03": "Eid-ul-Fitr",
-    "2008-10-04": "Eid-ul-Fitr",
+    "2008-10-02": "Eid al-Fitr",
+    "2008-10-03": "Eid al-Fitr",
+    "2008-10-04": "Eid al-Fitr",
     "2008-11-09": "Iqbal Day",
-    "2008-12-09": "Eid-ul-Adha",
-    "2008-12-10": "Eid-ul-Adha",
-    "2008-12-11": "Eid-ul-Adha",
+    "2008-12-09": "Eid al-Adha",
+    "2008-12-10": "Eid al-Adha",
+    "2008-12-11": "Eid al-Adha",
     "2008-12-25": "Quaid-e-Azam Day",
     "2009-01-05": "Ashura",
     "2009-01-06": "Ashura",
     "2009-02-05": "Kashmir Solidarity Day",
-    "2009-03-09": "Eid Milad-un-Nabi",
+    "2009-03-09": "Prophet's Birthday",
     "2009-03-23": "Pakistan Day",
-    "2009-05-01": "Labour Day",
+    "2009-05-01": "Labor Day",
     "2009-08-14": "Independence Day",
-    "2009-09-21": "Eid-ul-Fitr",
-    "2009-09-22": "Eid-ul-Fitr",
-    "2009-09-23": "Eid-ul-Fitr",
+    "2009-09-21": "Eid al-Fitr",
+    "2009-09-22": "Eid al-Fitr",
+    "2009-09-23": "Eid al-Fitr",
     "2009-11-09": "Iqbal Day",
-    "2009-11-28": "Eid-ul-Adha",
-    "2009-11-29": "Eid-ul-Adha",
-    "2009-11-30": "Eid-ul-Adha",
+    "2009-11-28": "Eid al-Adha",
+    "2009-11-29": "Eid al-Adha",
+    "2009-11-30": "Eid al-Adha",
     "2009-12-25": "Ashura; Quaid-e-Azam Day",
     "2009-12-26": "Ashura",
     "2010-02-05": "Kashmir Solidarity Day",
-    "2010-03-01": "Eid Milad-un-Nabi",
+    "2010-03-01": "Prophet's Birthday",
     "2010-03-23": "Pakistan Day",
-    "2010-05-01": "Labour Day",
+    "2010-05-01": "Labor Day",
     "2010-08-14": "Independence Day",
-    "2010-09-10": "Eid-ul-Fitr",
-    "2010-09-11": "Eid-ul-Fitr",
-    "2010-09-12": "Eid-ul-Fitr",
+    "2010-09-10": "Eid al-Fitr",
+    "2010-09-11": "Eid al-Fitr",
+    "2010-09-12": "Eid al-Fitr",
     "2010-11-09": "Iqbal Day",
-    "2010-11-17": "Eid-ul-Adha",
-    "2010-11-18": "Eid-ul-Adha",
-    "2010-11-19": "Eid-ul-Adha",
+    "2010-11-17": "Eid al-Adha",
+    "2010-11-18": "Eid al-Adha",
+    "2010-11-19": "Eid al-Adha",
     "2010-12-15": "Ashura",
     "2010-12-16": "Ashura",
     "2010-12-25": "Quaid-e-Azam Day",
     "2011-02-05": "Kashmir Solidarity Day",
-    "2011-02-17": "Eid Milad-un-Nabi",
+    "2011-02-17": "Prophet's Birthday",
     "2011-03-23": "Pakistan Day",
-    "2011-05-01": "Labour Day",
+    "2011-05-01": "Labor Day",
     "2011-08-14": "Independence Day",
-    "2011-08-31": "Eid-ul-Fitr",
-    "2011-09-01": "Eid-ul-Fitr",
-    "2011-09-02": "Eid-ul-Fitr",
-    "2011-11-07": "Eid-ul-Adha",
-    "2011-11-08": "Eid-ul-Adha",
-    "2011-11-09": "Eid-ul-Adha; Iqbal Day",
+    "2011-08-31": "Eid al-Fitr",
+    "2011-09-01": "Eid al-Fitr",
+    "2011-09-02": "Eid al-Fitr",
+    "2011-11-07": "Eid al-Adha",
+    "2011-11-08": "Eid al-Adha",
+    "2011-11-09": "Eid al-Adha; Iqbal Day",
     "2011-12-04": "Ashura",
     "2011-12-05": "Ashura",
     "2011-12-25": "Quaid-e-Azam Day",
-    "2012-02-05": "Eid Milad-un-Nabi; Kashmir Solidarity Day",
+    "2012-02-05": "Kashmir Solidarity Day; Prophet's Birthday",
     "2012-03-23": "Pakistan Day",
-    "2012-05-01": "Labour Day",
+    "2012-05-01": "Labor Day",
     "2012-08-14": "Independence Day",
-    "2012-08-19": "Eid-ul-Fitr",
-    "2012-08-20": "Eid-ul-Fitr",
-    "2012-08-21": "Eid-ul-Fitr",
-    "2012-10-26": "Eid-ul-Adha",
-    "2012-10-27": "Eid-ul-Adha",
-    "2012-10-28": "Eid-ul-Adha",
+    "2012-08-19": "Eid al-Fitr",
+    "2012-08-20": "Eid al-Fitr",
+    "2012-08-21": "Eid al-Fitr",
+    "2012-10-26": "Eid al-Adha",
+    "2012-10-27": "Eid al-Adha",
+    "2012-10-28": "Eid al-Adha",
     "2012-11-09": "Iqbal Day",
     "2012-11-22": "Ashura",
     "2012-11-23": "Ashura",
     "2012-12-25": "Quaid-e-Azam Day",
-    "2013-01-24": "Eid Milad-un-Nabi",
+    "2013-01-24": "Prophet's Birthday",
     "2013-02-05": "Kashmir Solidarity Day",
     "2013-03-23": "Pakistan Day",
-    "2013-05-01": "Labour Day",
-    "2013-08-08": "Eid-ul-Fitr",
-    "2013-08-09": "Eid-ul-Fitr",
-    "2013-08-10": "Eid-ul-Fitr",
+    "2013-05-01": "Labor Day",
+    "2013-08-08": "Eid al-Fitr",
+    "2013-08-09": "Eid al-Fitr",
+    "2013-08-10": "Eid al-Fitr",
     "2013-08-14": "Independence Day",
-    "2013-10-15": "Eid-ul-Adha",
-    "2013-10-16": "Eid-ul-Adha",
-    "2013-10-17": "Eid-ul-Adha",
+    "2013-10-15": "Eid al-Adha",
+    "2013-10-16": "Eid al-Adha",
+    "2013-10-17": "Eid al-Adha",
     "2013-11-09": "Iqbal Day",
     "2013-11-12": "Ashura",
     "2013-11-13": "Ashura",
     "2013-12-25": "Quaid-e-Azam Day",
-    "2014-01-14": "Eid Milad-un-Nabi",
+    "2014-01-14": "Prophet's Birthday",
     "2014-02-05": "Kashmir Solidarity Day",
     "2014-03-23": "Pakistan Day",
-    "2014-05-01": "Labour Day",
-    "2014-07-29": "Eid-ul-Fitr",
-    "2014-07-30": "Eid-ul-Fitr",
-    "2014-07-31": "Eid-ul-Fitr",
+    "2014-05-01": "Labor Day",
+    "2014-07-29": "Eid al-Fitr",
+    "2014-07-30": "Eid al-Fitr",
+    "2014-07-31": "Eid al-Fitr",
     "2014-08-14": "Independence Day",
-    "2014-10-06": "Eid-ul-Adha",
-    "2014-10-07": "Eid-ul-Adha",
-    "2014-10-08": "Eid-ul-Adha",
+    "2014-10-06": "Eid al-Adha",
+    "2014-10-07": "Eid al-Adha",
+    "2014-10-08": "Eid al-Adha",
     "2014-11-02": "Ashura",
     "2014-11-03": "Ashura",
     "2014-11-09": "Iqbal Day",
     "2014-12-25": "Quaid-e-Azam Day",
-    "2015-01-04": "Eid Milad-un-Nabi",
+    "2015-01-04": "Prophet's Birthday",
     "2015-02-05": "Kashmir Solidarity Day",
     "2015-03-23": "Pakistan Day",
-    "2015-05-01": "Labour Day",
-    "2015-07-17": "Eid-ul-Fitr",
-    "2015-07-18": "Eid-ul-Fitr",
-    "2015-07-19": "Eid-ul-Fitr",
+    "2015-05-01": "Labor Day",
+    "2015-07-17": "Eid al-Fitr",
+    "2015-07-18": "Eid al-Fitr",
+    "2015-07-19": "Eid al-Fitr",
     "2015-08-14": "Independence Day",
-    "2015-09-24": "Eid-ul-Adha",
-    "2015-09-25": "Eid-ul-Adha",
-    "2015-09-26": "Eid-ul-Adha",
+    "2015-09-24": "Eid al-Adha",
+    "2015-09-25": "Eid al-Adha",
+    "2015-09-26": "Eid al-Adha",
     "2015-10-22": "Ashura",
     "2015-10-23": "Ashura",
     "2015-12-25": "Quaid-e-Azam Day",
     "2016-02-05": "Kashmir Solidarity Day",
     "2016-03-23": "Pakistan Day",
-    "2016-05-01": "Labour Day",
-    "2016-07-06": "Eid-ul-Fitr",
-    "2016-07-07": "Eid-ul-Fitr",
-    "2016-07-08": "Eid-ul-Fitr",
+    "2016-05-01": "Labor Day",
+    "2016-07-06": "Eid al-Fitr",
+    "2016-07-07": "Eid al-Fitr",
+    "2016-07-08": "Eid al-Fitr",
     "2016-08-14": "Independence Day",
-    "2016-09-12": "Eid-ul-Adha",
-    "2016-09-13": "Eid-ul-Adha",
-    "2016-09-14": "Eid-ul-Adha",
+    "2016-09-12": "Eid al-Adha",
+    "2016-09-13": "Eid al-Adha",
+    "2016-09-14": "Eid al-Adha",
     "2016-10-10": "Ashura",
     "2016-10-11": "Ashura",
-    "2016-12-12": "Eid Milad-un-Nabi",
+    "2016-12-12": "Prophet's Birthday",
     "2016-12-25": "Quaid-e-Azam Day",
     "2017-02-05": "Kashmir Solidarity Day",
     "2017-03-23": "Pakistan Day",
-    "2017-05-01": "Labour Day",
-    "2017-06-26": "Eid-ul-Fitr",
-    "2017-06-27": "Eid-ul-Fitr",
-    "2017-06-28": "Eid-ul-Fitr",
+    "2017-05-01": "Labor Day",
+    "2017-06-26": "Eid al-Fitr",
+    "2017-06-27": "Eid al-Fitr",
+    "2017-06-28": "Eid al-Fitr",
     "2017-08-14": "Independence Day",
-    "2017-09-02": "Eid-ul-Adha",
-    "2017-09-03": "Eid-ul-Adha",
-    "2017-09-04": "Eid-ul-Adha",
+    "2017-09-02": "Eid al-Adha",
+    "2017-09-03": "Eid al-Adha",
+    "2017-09-04": "Eid al-Adha",
     "2017-09-29": "Ashura",
     "2017-09-30": "Ashura",
-    "2017-12-01": "Eid Milad-un-Nabi",
+    "2017-12-01": "Prophet's Birthday",
     "2017-12-25": "Quaid-e-Azam Day",
     "2018-02-05": "Kashmir Solidarity Day",
     "2018-03-23": "Pakistan Day",
-    "2018-05-01": "Labour Day",
-    "2018-06-16": "Eid-ul-Fitr",
-    "2018-06-17": "Eid-ul-Fitr",
-    "2018-06-18": "Eid-ul-Fitr",
+    "2018-05-01": "Labor Day",
+    "2018-06-16": "Eid al-Fitr",
+    "2018-06-17": "Eid al-Fitr",
+    "2018-06-18": "Eid al-Fitr",
     "2018-08-14": "Independence Day",
-    "2018-08-22": "Eid-ul-Adha",
-    "2018-08-23": "Eid-ul-Adha",
-    "2018-08-24": "Eid-ul-Adha",
+    "2018-08-22": "Eid al-Adha",
+    "2018-08-23": "Eid al-Adha",
+    "2018-08-24": "Eid al-Adha",
     "2018-09-20": "Ashura",
     "2018-09-21": "Ashura",
-    "2018-11-21": "Eid Milad-un-Nabi",
+    "2018-11-21": "Prophet's Birthday",
     "2018-12-25": "Quaid-e-Azam Day",
     "2019-02-05": "Kashmir Solidarity Day",
     "2019-03-23": "Pakistan Day",
-    "2019-05-01": "Labour Day",
-    "2019-06-05": "Eid-ul-Fitr",
-    "2019-06-06": "Eid-ul-Fitr",
-    "2019-06-07": "Eid-ul-Fitr",
-    "2019-08-12": "Eid-ul-Adha",
-    "2019-08-13": "Eid-ul-Adha",
-    "2019-08-14": "Eid-ul-Adha; Independence Day",
+    "2019-05-01": "Labor Day",
+    "2019-06-05": "Eid al-Fitr",
+    "2019-06-06": "Eid al-Fitr",
+    "2019-06-07": "Eid al-Fitr",
+    "2019-08-12": "Eid al-Adha",
+    "2019-08-13": "Eid al-Adha",
+    "2019-08-14": "Eid al-Adha; Independence Day",
     "2019-09-08": "Ashura",
     "2019-09-09": "Ashura",
-    "2019-11-10": "Eid Milad-un-Nabi",
+    "2019-11-10": "Prophet's Birthday",
     "2019-12-25": "Quaid-e-Azam Day",
     "2020-02-05": "Kashmir Solidarity Day",
     "2020-03-23": "Pakistan Day",
-    "2020-05-01": "Labour Day",
-    "2020-05-24": "Eid-ul-Fitr",
-    "2020-05-25": "Eid-ul-Fitr",
-    "2020-05-26": "Eid-ul-Fitr",
-    "2020-07-31": "Eid-ul-Adha",
-    "2020-08-01": "Eid-ul-Adha",
-    "2020-08-02": "Eid-ul-Adha",
+    "2020-05-01": "Labor Day",
+    "2020-05-24": "Eid al-Fitr",
+    "2020-05-25": "Eid al-Fitr",
+    "2020-05-26": "Eid al-Fitr",
+    "2020-07-31": "Eid al-Adha",
+    "2020-08-01": "Eid al-Adha",
+    "2020-08-02": "Eid al-Adha",
     "2020-08-14": "Independence Day",
     "2020-08-28": "Ashura",
     "2020-08-29": "Ashura",
-    "2020-10-30": "Eid Milad-un-Nabi",
+    "2020-10-30": "Prophet's Birthday",
     "2020-12-25": "Quaid-e-Azam Day",
     "2021-02-05": "Kashmir Solidarity Day",
     "2021-03-23": "Pakistan Day",
-    "2021-05-01": "Labour Day",
-    "2021-05-13": "Eid-ul-Fitr",
-    "2021-05-14": "Eid-ul-Fitr",
-    "2021-05-15": "Eid-ul-Fitr",
-    "2021-07-21": "Eid-ul-Adha",
-    "2021-07-22": "Eid-ul-Adha",
-    "2021-07-23": "Eid-ul-Adha",
+    "2021-05-01": "Labor Day",
+    "2021-05-13": "Eid al-Fitr",
+    "2021-05-14": "Eid al-Fitr",
+    "2021-05-15": "Eid al-Fitr",
+    "2021-07-21": "Eid al-Adha",
+    "2021-07-22": "Eid al-Adha",
+    "2021-07-23": "Eid al-Adha",
     "2021-08-14": "Independence Day",
     "2021-08-17": "Ashura",
     "2021-08-18": "Ashura",
-    "2021-10-19": "Eid Milad-un-Nabi",
+    "2021-10-19": "Prophet's Birthday",
     "2021-12-25": "Quaid-e-Azam Day",
     "2022-02-05": "Kashmir Solidarity Day",
     "2022-03-23": "Pakistan Day",
-    "2022-05-01": "Labour Day",
-    "2022-05-03": "Eid-ul-Fitr",
-    "2022-05-04": "Eid-ul-Fitr",
-    "2022-05-05": "Eid-ul-Fitr",
-    "2022-07-10": "Eid-ul-Adha",
-    "2022-07-11": "Eid-ul-Adha",
-    "2022-07-12": "Eid-ul-Adha",
+    "2022-05-01": "Labor Day",
+    "2022-05-03": "Eid al-Fitr",
+    "2022-05-04": "Eid al-Fitr",
+    "2022-05-05": "Eid al-Fitr",
+    "2022-07-10": "Eid al-Adha",
+    "2022-07-11": "Eid al-Adha",
+    "2022-07-12": "Eid al-Adha",
     "2022-08-08": "Ashura",
     "2022-08-09": "Ashura",
     "2022-08-14": "Independence Day",
-    "2022-10-09": "Eid Milad-un-Nabi",
+    "2022-10-09": "Prophet's Birthday",
     "2022-11-09": "Iqbal Day",
     "2022-12-25": "Quaid-e-Azam Day",
     "2023-02-05": "Kashmir Solidarity Day",
     "2023-03-23": "Pakistan Day",
-    "2023-04-22": "Eid-ul-Fitr",
-    "2023-04-23": "Eid-ul-Fitr",
-    "2023-04-24": "Eid-ul-Fitr",
-    "2023-05-01": "Labour Day",
-    "2023-06-29": "Eid-ul-Adha",
-    "2023-06-30": "Eid-ul-Adha",
-    "2023-07-01": "Eid-ul-Adha",
+    "2023-04-22": "Eid al-Fitr",
+    "2023-04-23": "Eid al-Fitr",
+    "2023-04-24": "Eid al-Fitr",
+    "2023-05-01": "Labor Day",
+    "2023-06-29": "Eid al-Adha",
+    "2023-06-30": "Eid al-Adha",
+    "2023-07-01": "Eid al-Adha",
     "2023-07-27": "Ashura",
     "2023-07-28": "Ashura",
     "2023-08-14": "Independence Day",
-    "2023-09-29": "Eid Milad-un-Nabi",
+    "2023-09-29": "Prophet's Birthday",
     "2023-11-09": "Iqbal Day",
     "2023-12-25": "Quaid-e-Azam Day",
     "2024-02-05": "Kashmir Solidarity Day",
     "2024-03-23": "Pakistan Day",
-    "2024-04-10": "Eid-ul-Fitr",
-    "2024-04-11": "Eid-ul-Fitr",
-    "2024-04-12": "Eid-ul-Fitr",
-    "2024-05-01": "Labour Day",
-    "2024-06-17": "Eid-ul-Adha",
-    "2024-06-18": "Eid-ul-Adha",
-    "2024-06-19": "Eid-ul-Adha",
+    "2024-04-10": "Eid al-Fitr",
+    "2024-04-11": "Eid al-Fitr",
+    "2024-04-12": "Eid al-Fitr",
+    "2024-05-01": "Labor Day",
+    "2024-06-17": "Eid al-Adha",
+    "2024-06-18": "Eid al-Adha",
+    "2024-06-19": "Eid al-Adha",
     "2024-07-15": "Ashura",
     "2024-07-16": "Ashura",
     "2024-08-14": "Independence Day",
-    "2024-09-17": "Eid Milad-un-Nabi",
+    "2024-09-17": "Prophet's Birthday",
     "2024-11-09": "Iqbal Day",
     "2024-12-25": "Quaid-e-Azam Day",
     "2025-02-05": "Kashmir Solidarity Day",
     "2025-03-23": "Pakistan Day",
-    "2025-03-30": "Eid-ul-Fitr (estimated)",
-    "2025-03-31": "Eid-ul-Fitr (estimated)",
-    "2025-04-01": "Eid-ul-Fitr (estimated)",
-    "2025-05-01": "Labour Day",
-    "2025-06-06": "Eid-ul-Adha (estimated)",
-    "2025-06-07": "Eid-ul-Adha (estimated)",
-    "2025-06-08": "Eid-ul-Adha (estimated)",
+    "2025-03-30": "Eid al-Fitr (estimated)",
+    "2025-03-31": "Eid al-Fitr (estimated)",
+    "2025-04-01": "Eid al-Fitr (estimated)",
+    "2025-05-01": "Labor Day",
+    "2025-06-06": "Eid al-Adha (estimated)",
+    "2025-06-07": "Eid al-Adha (estimated)",
+    "2025-06-08": "Eid al-Adha (estimated)",
     "2025-07-04": "Ashura (estimated)",
     "2025-07-05": "Ashura (estimated)",
     "2025-08-14": "Independence Day",
-    "2025-09-04": "Eid Milad-un-Nabi (estimated)",
+    "2025-09-04": "Prophet's Birthday (estimated)",
     "2025-11-09": "Iqbal Day",
     "2025-12-25": "Quaid-e-Azam Day",
     "2026-02-05": "Kashmir Solidarity Day",
-    "2026-03-20": "Eid-ul-Fitr (estimated)",
-    "2026-03-21": "Eid-ul-Fitr (estimated)",
-    "2026-03-22": "Eid-ul-Fitr (estimated)",
+    "2026-03-20": "Eid al-Fitr (estimated)",
+    "2026-03-21": "Eid al-Fitr (estimated)",
+    "2026-03-22": "Eid al-Fitr (estimated)",
     "2026-03-23": "Pakistan Day",
-    "2026-05-01": "Labour Day",
-    "2026-05-27": "Eid-ul-Adha (estimated)",
-    "2026-05-28": "Eid-ul-Adha (estimated)",
-    "2026-05-29": "Eid-ul-Adha (estimated)",
+    "2026-05-01": "Labor Day",
+    "2026-05-27": "Eid al-Adha (estimated)",
+    "2026-05-28": "Eid al-Adha (estimated)",
+    "2026-05-29": "Eid al-Adha (estimated)",
     "2026-06-24": "Ashura (estimated)",
     "2026-06-25": "Ashura (estimated)",
     "2026-08-14": "Independence Day",
-    "2026-08-25": "Eid Milad-un-Nabi (estimated)",
+    "2026-08-25": "Prophet's Birthday (estimated)",
     "2026-11-09": "Iqbal Day",
     "2026-12-25": "Quaid-e-Azam Day",
     "2027-02-05": "Kashmir Solidarity Day",
-    "2027-03-09": "Eid-ul-Fitr (estimated)",
-    "2027-03-10": "Eid-ul-Fitr (estimated)",
-    "2027-03-11": "Eid-ul-Fitr (estimated)",
+    "2027-03-09": "Eid al-Fitr (estimated)",
+    "2027-03-10": "Eid al-Fitr (estimated)",
+    "2027-03-11": "Eid al-Fitr (estimated)",
     "2027-03-23": "Pakistan Day",
-    "2027-05-01": "Labour Day",
-    "2027-05-16": "Eid-ul-Adha (estimated)",
-    "2027-05-17": "Eid-ul-Adha (estimated)",
-    "2027-05-18": "Eid-ul-Adha (estimated)",
+    "2027-05-01": "Labor Day",
+    "2027-05-16": "Eid al-Adha (estimated)",
+    "2027-05-17": "Eid al-Adha (estimated)",
+    "2027-05-18": "Eid al-Adha (estimated)",
     "2027-06-14": "Ashura (estimated)",
     "2027-06-15": "Ashura (estimated)",
-    "2027-08-14": "Eid Milad-un-Nabi (estimated); Independence Day",
+    "2027-08-14": "Independence Day; Prophet's Birthday (estimated)",
     "2027-11-09": "Iqbal Day",
     "2027-12-25": "Quaid-e-Azam Day",
     "2028-02-05": "Kashmir Solidarity Day",
-    "2028-02-26": "Eid-ul-Fitr (estimated)",
-    "2028-02-27": "Eid-ul-Fitr (estimated)",
-    "2028-02-28": "Eid-ul-Fitr (estimated)",
+    "2028-02-26": "Eid al-Fitr (estimated)",
+    "2028-02-27": "Eid al-Fitr (estimated)",
+    "2028-02-28": "Eid al-Fitr (estimated)",
     "2028-03-23": "Pakistan Day",
-    "2028-05-01": "Labour Day",
-    "2028-05-05": "Eid-ul-Adha (estimated)",
-    "2028-05-06": "Eid-ul-Adha (estimated)",
-    "2028-05-07": "Eid-ul-Adha (estimated)",
+    "2028-05-01": "Labor Day",
+    "2028-05-05": "Eid al-Adha (estimated)",
+    "2028-05-06": "Eid al-Adha (estimated)",
+    "2028-05-07": "Eid al-Adha (estimated)",
     "2028-06-02": "Ashura (estimated)",
     "2028-06-03": "Ashura (estimated)",
-    "2028-08-03": "Eid Milad-un-Nabi (estimated)",
+    "2028-08-03": "Prophet's Birthday (estimated)",
     "2028-08-14": "Independence Day",
     "2028-11-09": "Iqbal Day",
     "2028-12-25": "Quaid-e-Azam Day",
     "2029-02-05": "Kashmir Solidarity Day",
-    "2029-02-14": "Eid-ul-Fitr (estimated)",
-    "2029-02-15": "Eid-ul-Fitr (estimated)",
-    "2029-02-16": "Eid-ul-Fitr (estimated)",
+    "2029-02-14": "Eid al-Fitr (estimated)",
+    "2029-02-15": "Eid al-Fitr (estimated)",
+    "2029-02-16": "Eid al-Fitr (estimated)",
     "2029-03-23": "Pakistan Day",
-    "2029-04-24": "Eid-ul-Adha (estimated)",
-    "2029-04-25": "Eid-ul-Adha (estimated)",
-    "2029-04-26": "Eid-ul-Adha (estimated)",
-    "2029-05-01": "Labour Day",
+    "2029-04-24": "Eid al-Adha (estimated)",
+    "2029-04-25": "Eid al-Adha (estimated)",
+    "2029-04-26": "Eid al-Adha (estimated)",
+    "2029-05-01": "Labor Day",
     "2029-05-22": "Ashura (estimated)",
     "2029-05-23": "Ashura (estimated)",
-    "2029-07-24": "Eid Milad-un-Nabi (estimated)",
+    "2029-07-24": "Prophet's Birthday (estimated)",
     "2029-08-14": "Independence Day",
     "2029-11-09": "Iqbal Day",
     "2029-12-25": "Quaid-e-Azam Day",
-    "2030-02-04": "Eid-ul-Fitr (estimated)",
-    "2030-02-05": "Eid-ul-Fitr (estimated); Kashmir Solidarity Day",
-    "2030-02-06": "Eid-ul-Fitr (estimated)",
+    "2030-02-04": "Eid al-Fitr (estimated)",
+    "2030-02-05": "Eid al-Fitr (estimated); Kashmir Solidarity Day",
+    "2030-02-06": "Eid al-Fitr (estimated)",
     "2030-03-23": "Pakistan Day",
-    "2030-04-13": "Eid-ul-Adha (estimated)",
-    "2030-04-14": "Eid-ul-Adha (estimated)",
-    "2030-04-15": "Eid-ul-Adha (estimated)",
-    "2030-05-01": "Labour Day",
+    "2030-04-13": "Eid al-Adha (estimated)",
+    "2030-04-14": "Eid al-Adha (estimated)",
+    "2030-04-15": "Eid al-Adha (estimated)",
+    "2030-05-01": "Labor Day",
     "2030-05-11": "Ashura (estimated)",
     "2030-05-12": "Ashura (estimated)",
-    "2030-07-13": "Eid Milad-un-Nabi (estimated)",
+    "2030-07-13": "Prophet's Birthday (estimated)",
     "2030-08-14": "Independence Day",
     "2030-11-09": "Iqbal Day",
     "2030-12-25": "Quaid-e-Azam Day",
-    "2031-01-24": "Eid-ul-Fitr (estimated)",
-    "2031-01-25": "Eid-ul-Fitr (estimated)",
-    "2031-01-26": "Eid-ul-Fitr (estimated)",
+    "2031-01-24": "Eid al-Fitr (estimated)",
+    "2031-01-25": "Eid al-Fitr (estimated)",
+    "2031-01-26": "Eid al-Fitr (estimated)",
     "2031-02-05": "Kashmir Solidarity Day",
     "2031-03-23": "Pakistan Day",
-    "2031-04-02": "Eid-ul-Adha (estimated)",
-    "2031-04-03": "Eid-ul-Adha (estimated)",
-    "2031-04-04": "Eid-ul-Adha (estimated)",
-    "2031-05-01": "Ashura (estimated); Labour Day",
+    "2031-04-02": "Eid al-Adha (estimated)",
+    "2031-04-03": "Eid al-Adha (estimated)",
+    "2031-04-04": "Eid al-Adha (estimated)",
+    "2031-05-01": "Ashura (estimated); Labor Day",
     "2031-05-02": "Ashura (estimated)",
-    "2031-07-02": "Eid Milad-un-Nabi (estimated)",
+    "2031-07-02": "Prophet's Birthday (estimated)",
     "2031-08-14": "Independence Day",
     "2031-11-09": "Iqbal Day",
     "2031-12-25": "Quaid-e-Azam Day",
-    "2032-01-14": "Eid-ul-Fitr (estimated)",
-    "2032-01-15": "Eid-ul-Fitr (estimated)",
-    "2032-01-16": "Eid-ul-Fitr (estimated)",
+    "2032-01-14": "Eid al-Fitr (estimated)",
+    "2032-01-15": "Eid al-Fitr (estimated)",
+    "2032-01-16": "Eid al-Fitr (estimated)",
     "2032-02-05": "Kashmir Solidarity Day",
-    "2032-03-22": "Eid-ul-Adha (estimated)",
-    "2032-03-23": "Eid-ul-Adha (estimated); Pakistan Day",
-    "2032-03-24": "Eid-ul-Adha (estimated)",
+    "2032-03-22": "Eid al-Adha (estimated)",
+    "2032-03-23": "Eid al-Adha (estimated); Pakistan Day",
+    "2032-03-24": "Eid al-Adha (estimated)",
     "2032-04-19": "Ashura (estimated)",
     "2032-04-20": "Ashura (estimated)",
-    "2032-05-01": "Labour Day",
-    "2032-06-20": "Eid Milad-un-Nabi (estimated)",
+    "2032-05-01": "Labor Day",
+    "2032-06-20": "Prophet's Birthday (estimated)",
     "2032-08-14": "Independence Day",
     "2032-11-09": "Iqbal Day",
     "2032-12-25": "Quaid-e-Azam Day",
-    "2033-01-02": "Eid-ul-Fitr (estimated)",
-    "2033-01-03": "Eid-ul-Fitr (estimated)",
-    "2033-01-04": "Eid-ul-Fitr (estimated)",
+    "2033-01-02": "Eid al-Fitr (estimated)",
+    "2033-01-03": "Eid al-Fitr (estimated)",
+    "2033-01-04": "Eid al-Fitr (estimated)",
     "2033-02-05": "Kashmir Solidarity Day",
-    "2033-03-11": "Eid-ul-Adha (estimated)",
-    "2033-03-12": "Eid-ul-Adha (estimated)",
-    "2033-03-13": "Eid-ul-Adha (estimated)",
+    "2033-03-11": "Eid al-Adha (estimated)",
+    "2033-03-12": "Eid al-Adha (estimated)",
+    "2033-03-13": "Eid al-Adha (estimated)",
     "2033-03-23": "Pakistan Day",
     "2033-04-09": "Ashura (estimated)",
     "2033-04-10": "Ashura (estimated)",
-    "2033-05-01": "Labour Day",
-    "2033-06-09": "Eid Milad-un-Nabi (estimated)",
+    "2033-05-01": "Labor Day",
+    "2033-06-09": "Prophet's Birthday (estimated)",
     "2033-08-14": "Independence Day",
     "2033-11-09": "Iqbal Day",
-    "2033-12-23": "Eid-ul-Fitr (estimated)",
-    "2033-12-24": "Eid-ul-Fitr (estimated)",
-    "2033-12-25": "Eid-ul-Fitr (estimated); Quaid-e-Azam Day",
+    "2033-12-23": "Eid al-Fitr (estimated)",
+    "2033-12-24": "Eid al-Fitr (estimated)",
+    "2033-12-25": "Eid al-Fitr (estimated); Quaid-e-Azam Day",
     "2034-02-05": "Kashmir Solidarity Day",
-    "2034-03-01": "Eid-ul-Adha (estimated)",
-    "2034-03-02": "Eid-ul-Adha (estimated)",
-    "2034-03-03": "Eid-ul-Adha (estimated)",
+    "2034-03-01": "Eid al-Adha (estimated)",
+    "2034-03-02": "Eid al-Adha (estimated)",
+    "2034-03-03": "Eid al-Adha (estimated)",
     "2034-03-23": "Pakistan Day",
     "2034-03-29": "Ashura (estimated)",
     "2034-03-30": "Ashura (estimated)",
-    "2034-05-01": "Labour Day",
-    "2034-05-30": "Eid Milad-un-Nabi (estimated)",
+    "2034-05-01": "Labor Day",
+    "2034-05-30": "Prophet's Birthday (estimated)",
     "2034-08-14": "Independence Day",
     "2034-11-09": "Iqbal Day",
-    "2034-12-12": "Eid-ul-Fitr (estimated)",
-    "2034-12-13": "Eid-ul-Fitr (estimated)",
-    "2034-12-14": "Eid-ul-Fitr (estimated)",
+    "2034-12-12": "Eid al-Fitr (estimated)",
+    "2034-12-13": "Eid al-Fitr (estimated)",
+    "2034-12-14": "Eid al-Fitr (estimated)",
     "2034-12-25": "Quaid-e-Azam Day",
     "2035-02-05": "Kashmir Solidarity Day",
-    "2035-02-18": "Eid-ul-Adha (estimated)",
-    "2035-02-19": "Eid-ul-Adha (estimated)",
-    "2035-02-20": "Eid-ul-Adha (estimated)",
+    "2035-02-18": "Eid al-Adha (estimated)",
+    "2035-02-19": "Eid al-Adha (estimated)",
+    "2035-02-20": "Eid al-Adha (estimated)",
     "2035-03-19": "Ashura (estimated)",
     "2035-03-20": "Ashura (estimated)",
     "2035-03-23": "Pakistan Day",
-    "2035-05-01": "Labour Day",
-    "2035-05-20": "Eid Milad-un-Nabi (estimated)",
+    "2035-05-01": "Labor Day",
+    "2035-05-20": "Prophet's Birthday (estimated)",
     "2035-08-14": "Independence Day",
     "2035-11-09": "Iqbal Day",
-    "2035-12-01": "Eid-ul-Fitr (estimated)",
-    "2035-12-02": "Eid-ul-Fitr (estimated)",
-    "2035-12-03": "Eid-ul-Fitr (estimated)",
+    "2035-12-01": "Eid al-Fitr (estimated)",
+    "2035-12-02": "Eid al-Fitr (estimated)",
+    "2035-12-03": "Eid al-Fitr (estimated)",
     "2035-12-25": "Quaid-e-Azam Day",
     "2036-02-05": "Kashmir Solidarity Day",
-    "2036-02-07": "Eid-ul-Adha (estimated)",
-    "2036-02-08": "Eid-ul-Adha (estimated)",
-    "2036-02-09": "Eid-ul-Adha (estimated)",
+    "2036-02-07": "Eid al-Adha (estimated)",
+    "2036-02-08": "Eid al-Adha (estimated)",
+    "2036-02-09": "Eid al-Adha (estimated)",
     "2036-03-07": "Ashura (estimated)",
     "2036-03-08": "Ashura (estimated)",
     "2036-03-23": "Pakistan Day",
-    "2036-05-01": "Labour Day",
-    "2036-05-08": "Eid Milad-un-Nabi (estimated)",
+    "2036-05-01": "Labor Day",
+    "2036-05-08": "Prophet's Birthday (estimated)",
     "2036-08-14": "Independence Day",
     "2036-11-09": "Iqbal Day",
-    "2036-11-19": "Eid-ul-Fitr (estimated)",
-    "2036-11-20": "Eid-ul-Fitr (estimated)",
-    "2036-11-21": "Eid-ul-Fitr (estimated)",
+    "2036-11-19": "Eid al-Fitr (estimated)",
+    "2036-11-20": "Eid al-Fitr (estimated)",
+    "2036-11-21": "Eid al-Fitr (estimated)",
     "2036-12-25": "Quaid-e-Azam Day",
-    "2037-01-26": "Eid-ul-Adha (estimated)",
-    "2037-01-27": "Eid-ul-Adha (estimated)",
-    "2037-01-28": "Eid-ul-Adha (estimated)",
+    "2037-01-26": "Eid al-Adha (estimated)",
+    "2037-01-27": "Eid al-Adha (estimated)",
+    "2037-01-28": "Eid al-Adha (estimated)",
     "2037-02-05": "Kashmir Solidarity Day",
     "2037-02-24": "Ashura (estimated)",
     "2037-02-25": "Ashura (estimated)",
     "2037-03-23": "Pakistan Day",
-    "2037-04-28": "Eid Milad-un-Nabi (estimated)",
-    "2037-05-01": "Labour Day",
+    "2037-04-28": "Prophet's Birthday (estimated)",
+    "2037-05-01": "Labor Day",
     "2037-08-14": "Independence Day",
-    "2037-11-08": "Eid-ul-Fitr (estimated)",
-    "2037-11-09": "Eid-ul-Fitr (estimated); Iqbal Day",
-    "2037-11-10": "Eid-ul-Fitr (estimated)",
+    "2037-11-08": "Eid al-Fitr (estimated)",
+    "2037-11-09": "Eid al-Fitr (estimated); Iqbal Day",
+    "2037-11-10": "Eid al-Fitr (estimated)",
     "2037-12-25": "Quaid-e-Azam Day",
-    "2038-01-16": "Eid-ul-Adha (estimated)",
-    "2038-01-17": "Eid-ul-Adha (estimated)",
-    "2038-01-18": "Eid-ul-Adha (estimated)",
+    "2038-01-16": "Eid al-Adha (estimated)",
+    "2038-01-17": "Eid al-Adha (estimated)",
+    "2038-01-18": "Eid al-Adha (estimated)",
     "2038-02-05": "Kashmir Solidarity Day",
     "2038-02-13": "Ashura (estimated)",
     "2038-02-14": "Ashura (estimated)",
     "2038-03-23": "Pakistan Day",
-    "2038-04-17": "Eid Milad-un-Nabi (estimated)",
-    "2038-05-01": "Labour Day",
+    "2038-04-17": "Prophet's Birthday (estimated)",
+    "2038-05-01": "Labor Day",
     "2038-08-14": "Independence Day",
-    "2038-10-29": "Eid-ul-Fitr (estimated)",
-    "2038-10-30": "Eid-ul-Fitr (estimated)",
-    "2038-10-31": "Eid-ul-Fitr (estimated)",
+    "2038-10-29": "Eid al-Fitr (estimated)",
+    "2038-10-30": "Eid al-Fitr (estimated)",
+    "2038-10-31": "Eid al-Fitr (estimated)",
     "2038-11-09": "Iqbal Day",
     "2038-12-25": "Quaid-e-Azam Day",
-    "2039-01-05": "Eid-ul-Adha (estimated)",
-    "2039-01-06": "Eid-ul-Adha (estimated)",
-    "2039-01-07": "Eid-ul-Adha (estimated)",
+    "2039-01-05": "Eid al-Adha (estimated)",
+    "2039-01-06": "Eid al-Adha (estimated)",
+    "2039-01-07": "Eid al-Adha (estimated)",
     "2039-02-03": "Ashura (estimated)",
     "2039-02-04": "Ashura (estimated)",
     "2039-02-05": "Kashmir Solidarity Day",
     "2039-03-23": "Pakistan Day",
-    "2039-04-06": "Eid Milad-un-Nabi (estimated)",
-    "2039-05-01": "Labour Day",
+    "2039-04-06": "Prophet's Birthday (estimated)",
+    "2039-05-01": "Labor Day",
     "2039-08-14": "Independence Day",
-    "2039-10-19": "Eid-ul-Fitr (estimated)",
-    "2039-10-20": "Eid-ul-Fitr (estimated)",
-    "2039-10-21": "Eid-ul-Fitr (estimated)",
+    "2039-10-19": "Eid al-Fitr (estimated)",
+    "2039-10-20": "Eid al-Fitr (estimated)",
+    "2039-10-21": "Eid al-Fitr (estimated)",
     "2039-11-09": "Iqbal Day",
     "2039-12-25": "Quaid-e-Azam Day",
-    "2039-12-26": "Eid-ul-Adha (estimated)",
-    "2039-12-27": "Eid-ul-Adha (estimated)",
-    "2039-12-28": "Eid-ul-Adha (estimated)",
+    "2039-12-26": "Eid al-Adha (estimated)",
+    "2039-12-27": "Eid al-Adha (estimated)",
+    "2039-12-28": "Eid al-Adha (estimated)",
     "2040-01-23": "Ashura (estimated)",
     "2040-01-24": "Ashura (estimated)",
     "2040-02-05": "Kashmir Solidarity Day",
     "2040-03-23": "Pakistan Day",
-    "2040-03-25": "Eid Milad-un-Nabi (estimated)",
-    "2040-05-01": "Labour Day",
+    "2040-03-25": "Prophet's Birthday (estimated)",
+    "2040-05-01": "Labor Day",
     "2040-08-14": "Independence Day",
-    "2040-10-07": "Eid-ul-Fitr (estimated)",
-    "2040-10-08": "Eid-ul-Fitr (estimated)",
-    "2040-10-09": "Eid-ul-Fitr (estimated)",
+    "2040-10-07": "Eid al-Fitr (estimated)",
+    "2040-10-08": "Eid al-Fitr (estimated)",
+    "2040-10-09": "Eid al-Fitr (estimated)",
     "2040-11-09": "Iqbal Day",
-    "2040-12-14": "Eid-ul-Adha (estimated)",
-    "2040-12-15": "Eid-ul-Adha (estimated)",
-    "2040-12-16": "Eid-ul-Adha (estimated)",
+    "2040-12-14": "Eid al-Adha (estimated)",
+    "2040-12-15": "Eid al-Adha (estimated)",
+    "2040-12-16": "Eid al-Adha (estimated)",
     "2040-12-25": "Quaid-e-Azam Day",
     "2041-01-12": "Ashura (estimated)",
     "2041-01-13": "Ashura (estimated)",
     "2041-02-05": "Kashmir Solidarity Day",
-    "2041-03-15": "Eid Milad-un-Nabi (estimated)",
+    "2041-03-15": "Prophet's Birthday (estimated)",
     "2041-03-23": "Pakistan Day",
-    "2041-05-01": "Labour Day",
+    "2041-05-01": "Labor Day",
     "2041-08-14": "Independence Day",
-    "2041-09-26": "Eid-ul-Fitr (estimated)",
-    "2041-09-27": "Eid-ul-Fitr (estimated)",
-    "2041-09-28": "Eid-ul-Fitr (estimated)",
+    "2041-09-26": "Eid al-Fitr (estimated)",
+    "2041-09-27": "Eid al-Fitr (estimated)",
+    "2041-09-28": "Eid al-Fitr (estimated)",
     "2041-11-09": "Iqbal Day",
-    "2041-12-04": "Eid-ul-Adha (estimated)",
-    "2041-12-05": "Eid-ul-Adha (estimated)",
-    "2041-12-06": "Eid-ul-Adha (estimated)",
+    "2041-12-04": "Eid al-Adha (estimated)",
+    "2041-12-05": "Eid al-Adha (estimated)",
+    "2041-12-06": "Eid al-Adha (estimated)",
     "2041-12-25": "Quaid-e-Azam Day",
     "2042-01-01": "Ashura (estimated)",
     "2042-01-02": "Ashura (estimated)",
     "2042-02-05": "Kashmir Solidarity Day",
-    "2042-03-04": "Eid Milad-un-Nabi (estimated)",
+    "2042-03-04": "Prophet's Birthday (estimated)",
     "2042-03-23": "Pakistan Day",
-    "2042-05-01": "Labour Day",
+    "2042-05-01": "Labor Day",
     "2042-08-14": "Independence Day",
-    "2042-09-15": "Eid-ul-Fitr (estimated)",
-    "2042-09-16": "Eid-ul-Fitr (estimated)",
-    "2042-09-17": "Eid-ul-Fitr (estimated)",
+    "2042-09-15": "Eid al-Fitr (estimated)",
+    "2042-09-16": "Eid al-Fitr (estimated)",
+    "2042-09-17": "Eid al-Fitr (estimated)",
     "2042-11-09": "Iqbal Day",
-    "2042-11-23": "Eid-ul-Adha (estimated)",
-    "2042-11-24": "Eid-ul-Adha (estimated)",
-    "2042-11-25": "Eid-ul-Adha (estimated)",
+    "2042-11-23": "Eid al-Adha (estimated)",
+    "2042-11-24": "Eid al-Adha (estimated)",
+    "2042-11-25": "Eid al-Adha (estimated)",
     "2042-12-22": "Ashura (estimated)",
     "2042-12-23": "Ashura (estimated)",
     "2042-12-25": "Quaid-e-Azam Day",
     "2043-02-05": "Kashmir Solidarity Day",
-    "2043-02-22": "Eid Milad-un-Nabi (estimated)",
+    "2043-02-22": "Prophet's Birthday (estimated)",
     "2043-03-23": "Pakistan Day",
-    "2043-05-01": "Labour Day",
+    "2043-05-01": "Labor Day",
     "2043-08-14": "Independence Day",
-    "2043-09-04": "Eid-ul-Fitr (estimated)",
-    "2043-09-05": "Eid-ul-Fitr (estimated)",
-    "2043-09-06": "Eid-ul-Fitr (estimated)",
+    "2043-09-04": "Eid al-Fitr (estimated)",
+    "2043-09-05": "Eid al-Fitr (estimated)",
+    "2043-09-06": "Eid al-Fitr (estimated)",
     "2043-11-09": "Iqbal Day",
-    "2043-11-12": "Eid-ul-Adha (estimated)",
-    "2043-11-13": "Eid-ul-Adha (estimated)",
-    "2043-11-14": "Eid-ul-Adha (estimated)",
+    "2043-11-12": "Eid al-Adha (estimated)",
+    "2043-11-13": "Eid al-Adha (estimated)",
+    "2043-11-14": "Eid al-Adha (estimated)",
     "2043-12-11": "Ashura (estimated)",
     "2043-12-12": "Ashura (estimated)",
     "2043-12-25": "Quaid-e-Azam Day",
     "2044-02-05": "Kashmir Solidarity Day",
-    "2044-02-11": "Eid Milad-un-Nabi (estimated)",
+    "2044-02-11": "Prophet's Birthday (estimated)",
     "2044-03-23": "Pakistan Day",
-    "2044-05-01": "Labour Day",
+    "2044-05-01": "Labor Day",
     "2044-08-14": "Independence Day",
-    "2044-08-24": "Eid-ul-Fitr (estimated)",
-    "2044-08-25": "Eid-ul-Fitr (estimated)",
-    "2044-08-26": "Eid-ul-Fitr (estimated)",
-    "2044-10-31": "Eid-ul-Adha (estimated)",
-    "2044-11-01": "Eid-ul-Adha (estimated)",
-    "2044-11-02": "Eid-ul-Adha (estimated)",
+    "2044-08-24": "Eid al-Fitr (estimated)",
+    "2044-08-25": "Eid al-Fitr (estimated)",
+    "2044-08-26": "Eid al-Fitr (estimated)",
+    "2044-10-31": "Eid al-Adha (estimated)",
+    "2044-11-01": "Eid al-Adha (estimated)",
+    "2044-11-02": "Eid al-Adha (estimated)",
     "2044-11-09": "Iqbal Day",
     "2044-11-29": "Ashura (estimated)",
     "2044-11-30": "Ashura (estimated)",
     "2044-12-25": "Quaid-e-Azam Day",
-    "2045-01-30": "Eid Milad-un-Nabi (estimated)",
+    "2045-01-30": "Prophet's Birthday (estimated)",
     "2045-02-05": "Kashmir Solidarity Day",
     "2045-03-23": "Pakistan Day",
-    "2045-05-01": "Labour Day",
-    "2045-08-14": "Eid-ul-Fitr (estimated); Independence Day",
-    "2045-08-15": "Eid-ul-Fitr (estimated)",
-    "2045-08-16": "Eid-ul-Fitr (estimated)",
-    "2045-10-21": "Eid-ul-Adha (estimated)",
-    "2045-10-22": "Eid-ul-Adha (estimated)",
-    "2045-10-23": "Eid-ul-Adha (estimated)",
+    "2045-05-01": "Labor Day",
+    "2045-08-14": "Eid al-Fitr (estimated); Independence Day",
+    "2045-08-15": "Eid al-Fitr (estimated)",
+    "2045-08-16": "Eid al-Fitr (estimated)",
+    "2045-10-21": "Eid al-Adha (estimated)",
+    "2045-10-22": "Eid al-Adha (estimated)",
+    "2045-10-23": "Eid al-Adha (estimated)",
     "2045-11-09": "Iqbal Day",
     "2045-11-18": "Ashura (estimated)",
     "2045-11-19": "Ashura (estimated)",
     "2045-12-25": "Quaid-e-Azam Day",
-    "2046-01-19": "Eid Milad-un-Nabi (estimated)",
+    "2046-01-19": "Prophet's Birthday (estimated)",
     "2046-02-05": "Kashmir Solidarity Day",
     "2046-03-23": "Pakistan Day",
-    "2046-05-01": "Labour Day",
-    "2046-08-03": "Eid-ul-Fitr (estimated)",
-    "2046-08-04": "Eid-ul-Fitr (estimated)",
-    "2046-08-05": "Eid-ul-Fitr (estimated)",
+    "2046-05-01": "Labor Day",
+    "2046-08-03": "Eid al-Fitr (estimated)",
+    "2046-08-04": "Eid al-Fitr (estimated)",
+    "2046-08-05": "Eid al-Fitr (estimated)",
     "2046-08-14": "Independence Day",
-    "2046-10-10": "Eid-ul-Adha (estimated)",
-    "2046-10-11": "Eid-ul-Adha (estimated)",
-    "2046-10-12": "Eid-ul-Adha (estimated)",
+    "2046-10-10": "Eid al-Adha (estimated)",
+    "2046-10-11": "Eid al-Adha (estimated)",
+    "2046-10-12": "Eid al-Adha (estimated)",
     "2046-11-08": "Ashura (estimated)",
     "2046-11-09": "Ashura (estimated); Iqbal Day",
     "2046-12-25": "Quaid-e-Azam Day",
-    "2047-01-08": "Eid Milad-un-Nabi (estimated)",
+    "2047-01-08": "Prophet's Birthday (estimated)",
     "2047-02-05": "Kashmir Solidarity Day",
     "2047-03-23": "Pakistan Day",
-    "2047-05-01": "Labour Day",
-    "2047-07-24": "Eid-ul-Fitr (estimated)",
-    "2047-07-25": "Eid-ul-Fitr (estimated)",
-    "2047-07-26": "Eid-ul-Fitr (estimated)",
+    "2047-05-01": "Labor Day",
+    "2047-07-24": "Eid al-Fitr (estimated)",
+    "2047-07-25": "Eid al-Fitr (estimated)",
+    "2047-07-26": "Eid al-Fitr (estimated)",
     "2047-08-14": "Independence Day",
-    "2047-09-30": "Eid-ul-Adha (estimated)",
-    "2047-10-01": "Eid-ul-Adha (estimated)",
-    "2047-10-02": "Eid-ul-Adha (estimated)",
+    "2047-09-30": "Eid al-Adha (estimated)",
+    "2047-10-01": "Eid al-Adha (estimated)",
+    "2047-10-02": "Eid al-Adha (estimated)",
     "2047-10-28": "Ashura (estimated)",
     "2047-10-29": "Ashura (estimated)",
     "2047-11-09": "Iqbal Day",
     "2047-12-25": "Quaid-e-Azam Day",
-    "2047-12-29": "Eid Milad-un-Nabi (estimated)",
+    "2047-12-29": "Prophet's Birthday (estimated)",
     "2048-02-05": "Kashmir Solidarity Day",
     "2048-03-23": "Pakistan Day",
-    "2048-05-01": "Labour Day",
-    "2048-07-12": "Eid-ul-Fitr (estimated)",
-    "2048-07-13": "Eid-ul-Fitr (estimated)",
-    "2048-07-14": "Eid-ul-Fitr (estimated)",
+    "2048-05-01": "Labor Day",
+    "2048-07-12": "Eid al-Fitr (estimated)",
+    "2048-07-13": "Eid al-Fitr (estimated)",
+    "2048-07-14": "Eid al-Fitr (estimated)",
     "2048-08-14": "Independence Day",
-    "2048-09-19": "Eid-ul-Adha (estimated)",
-    "2048-09-20": "Eid-ul-Adha (estimated)",
-    "2048-09-21": "Eid-ul-Adha (estimated)",
+    "2048-09-19": "Eid al-Adha (estimated)",
+    "2048-09-20": "Eid al-Adha (estimated)",
+    "2048-09-21": "Eid al-Adha (estimated)",
     "2048-10-17": "Ashura (estimated)",
     "2048-10-18": "Ashura (estimated)",
     "2048-11-09": "Iqbal Day",
-    "2048-12-18": "Eid Milad-un-Nabi (estimated)",
+    "2048-12-18": "Prophet's Birthday (estimated)",
     "2048-12-25": "Quaid-e-Azam Day",
     "2049-02-05": "Kashmir Solidarity Day",
     "2049-03-23": "Pakistan Day",
-    "2049-05-01": "Labour Day",
-    "2049-07-01": "Eid-ul-Fitr (estimated)",
-    "2049-07-02": "Eid-ul-Fitr (estimated)",
-    "2049-07-03": "Eid-ul-Fitr (estimated)",
+    "2049-05-01": "Labor Day",
+    "2049-07-01": "Eid al-Fitr (estimated)",
+    "2049-07-02": "Eid al-Fitr (estimated)",
+    "2049-07-03": "Eid al-Fitr (estimated)",
     "2049-08-14": "Independence Day",
-    "2049-09-08": "Eid-ul-Adha (estimated)",
-    "2049-09-09": "Eid-ul-Adha (estimated)",
-    "2049-09-10": "Eid-ul-Adha (estimated)",
+    "2049-09-08": "Eid al-Adha (estimated)",
+    "2049-09-09": "Eid al-Adha (estimated)",
+    "2049-09-10": "Eid al-Adha (estimated)",
     "2049-10-06": "Ashura (estimated)",
     "2049-10-07": "Ashura (estimated)",
     "2049-11-09": "Iqbal Day",
-    "2049-12-07": "Eid Milad-un-Nabi (estimated)",
+    "2049-12-07": "Prophet's Birthday (estimated)",
     "2049-12-25": "Quaid-e-Azam Day",
     "2050-02-05": "Kashmir Solidarity Day",
     "2050-03-23": "Pakistan Day",
-    "2050-05-01": "Labour Day",
-    "2050-06-20": "Eid-ul-Fitr (estimated)",
-    "2050-06-21": "Eid-ul-Fitr (estimated)",
-    "2050-06-22": "Eid-ul-Fitr (estimated)",
+    "2050-05-01": "Labor Day",
+    "2050-06-20": "Eid al-Fitr (estimated)",
+    "2050-06-21": "Eid al-Fitr (estimated)",
+    "2050-06-22": "Eid al-Fitr (estimated)",
     "2050-08-14": "Independence Day",
-    "2050-08-28": "Eid-ul-Adha (estimated)",
-    "2050-08-29": "Eid-ul-Adha (estimated)",
-    "2050-08-30": "Eid-ul-Adha (estimated)",
+    "2050-08-28": "Eid al-Adha (estimated)",
+    "2050-08-29": "Eid al-Adha (estimated)",
+    "2050-08-30": "Eid al-Adha (estimated)",
     "2050-09-25": "Ashura (estimated)",
     "2050-09-26": "Ashura (estimated)",
     "2050-11-09": "Iqbal Day",
-    "2050-11-26": "Eid Milad-un-Nabi (estimated)",
+    "2050-11-26": "Prophet's Birthday (estimated)",
     "2050-12-25": "Quaid-e-Azam Day"
 }


Test patch:
diff --git a/requirements/tests.txt b/requirements/tests.txt
index 3d46f1ff..b7aad74e 100644
--- a/requirements/tests.txt
+++ b/requirements/tests.txt
@@ -1,11 +1,11 @@
 # Test requirements.
 
 coverage==7.7.1
-importlib-metadata==8.6.1
+importlib-metadata==8.6.1; python_version < '3.10'
 numpy<2.1.0; python_version < '3.10'
 numpy==2.2.4; python_version >= '3.10'
 polib==1.2.0
 pytest-cov==6.0.0
 pytest-xdist==3.6.1
 pytest==8.3.5
-zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability
+zipp>=3.19.1; python_version < '3.10' # not directly required, pinned by Snyk to avoid a vulnerability
diff --git a/tests/countries/test_fiji.py b/tests/countries/test_fiji.py
new file mode 100644
index 00000000..f35badd1
--- /dev/null
+++ b/tests/countries/test_fiji.py
@@ -0,0 +1,342 @@
+#  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.md file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+
+from unittest import TestCase
+
+from holidays.constants import PUBLIC, WORKDAY
+from holidays.countries.fiji import Fiji, FJ, FJI
+from tests.common import CommonCountryTests
+
+
+class TestFiji(CommonCountryTests, TestCase):
+    @classmethod
+    def setUpClass(cls):
+        years = range(2016, 2050)
+        super().setUpClass(Fiji, years=years)
+        cls.workday_holidays = Fiji(categories=WORKDAY, years=years)
+
+    def test_country_aliases(self):
+        self.assertAliases(Fiji, FJ, FJI)
+
+    def test_no_holidays(self):
+        self.assertNoHolidays(Fiji(years=2015, categories=PUBLIC))
+        self.assertNoHolidays(Fiji(years=2022, categories=WORKDAY))
+
+    def test_new_years_day(self):
+        name = "New Year's Day"
+
+        self.assertHolidayName(name, (f"{year}-01-01" for year in range(2016, 2050)))
+        dt_obs = (
+            "2017-01-02",
+            "2022-01-03",
+            "2023-01-02",
+        )
+        self.assertHolidayName(f"{name} (observed)", dt_obs)
+        self.assertNoNonObservedHoliday(dt_obs)
+
+    def test_good_friday(self):
+        name = "Good Friday"
+
+        dt = (
+            "2018-03-30",
+            "2019-04-19",
+            "2020-04-10",
+            "2021-04-02",
+            "2022-04-15",
+            "2023-04-07",
+            "2024-03-29",
+        )
+        self.assertHolidayName(name, dt)
+        self.assertHolidayName(name, range(2016, 2050))
+
+    def test_easter_saturday(self):
+        name = "Easter Saturday"
+
+        dt = (
+            "2018-03-31",
+            "2019-04-20",
+            "2020-04-11",
+            "2021-04-03",
+            "2022-04-16",
+            "2023-04-08",
+            "2024-03-30",
+        )
+        self.assertHolidayName(name, dt)
+        self.assertHolidayName(name, range(2016, 2050))
+
+    def test_easter_monday(self):
+        name = "Easter Monday"
+
+        dt = (
+            "2018-04-02",
+            "2019-04-22",
+            "2020-04-13",
+            "2021-04-05",
+            "2022-04-18",
+            "2023-04-10",
+            "2024-04-01",
+        )
+        self.assertHolidayName(name, dt)
+        self.assertHolidayName(name, range(2016, 2050))
+
+    def test_girmit_day(self):
+        name = "Girmit Day"
+
+        dt = (
+            "2023-05-15",
+            "2024-05-13",
+            "2025-05-12",
+        )
+        self.assertHolidayName(name, dt)
+        self.assertHolidayName(name, range(2023, 2050))
+        self.assertNoHolidayName(name, range(2016, 2023))
+
+    def test_national_sports_day(self):
+        name = "National Sports Day"
+
+        # Public Holidays
+        dt = (
+            "2016-06-24",
+            "2017-06-30",
+            "2018-06-29",
+        )
+        self.assertHolidayName(name, dt)
+        self.assertNoHolidayName(name, range(2019, 2050))
+
+    def test_constitution_day(self):
+        name = "Constitution Day"
+
+        # Public Holidays
+        self.assertHolidayName(name, (f"{year}-09-07" for year in range(2016, 2023)))
+        self.assertNoHolidayName(name, range(2023, 2050))
+
+        dt_obs = ("2019-09-09",)
+        self.assertHolidayName(f"{name} (observed)", dt_obs)
+        self.assertNoNonObservedHoliday(dt_obs)
+
+        # Workdays.
+        self.assertHolidayName(
+            name, self.workday_holidays, (f"{year}-09-07" for year in range(2023, 2050))
+        )
+        self.assertNoHolidayName(name, self.workday_holidays, range(2016, 2023))
+
+    def test_ratu_sir_lala_sukuna_day(self):
+        name = "Ratu Sir Lala Sukuna Day"
+
+        # Public Holidays.
+        dt = (
+            "2023-05-29",
+            "2024-05-31",
+            "2025-05-30",
+        )
+        self.assertHolidayName(name, dt)
+        self.assertHolidayName(name, range(2023, 2050))
+        self.assertNoHolidayName(name, range(2016, 2023))
+
+    def test_fiji_day(self):
+        self.assertHolidayName("Fiji Day", (f"{year}-10-10" for year in range(2016, 2050)))
+
+    def test_diwali(self):
+        name = "Diwali"
+
+        self.assertHolidayName(
+            name,
+            "2016-10-31",
+            "2017-10-19",
+            "2018-11-07",
+            "2019-10-28",
+            "2020-11-14",
+            "2021-11-04",
+            "2022-10-25",
+            "2023-11-13",
+            "2024-11-01",
+            "2025-10-21",
+        )
+
+        dt_obs = ("2020-11-16",)
+        self.assertHolidayName(f"{name} (observed)", dt_obs)
+        self.assertNoNonObservedHoliday(dt_obs)
+
+    def test_christmas_day(self):
+        name = "Christmas Day"
+
+        self.assertHolidayName(name, (f"{year}-12-25" for year in range(2016, 2050)))
+
+        dt_obs = (
+            "2016-12-27",
+            "2021-12-27",
+            "2022-12-27",
+        )
+        self.assertHolidayName(f"{name} (observed)", dt_obs)
+        self.assertNoNonObservedHoliday(dt_obs)
+
+    def test_boxing_day(self):
+        name = "Boxing Day"
+
+        self.assertHolidayName(name, (f"{year}-12-26" for year in range(2016, 2050)))
+
+        dt_obs = (
+            "2020-12-28",
+            "2021-12-28",
+            "2026-12-28",
+            "2027-12-28",
+        )
+        self.assertHolidayName(f"{name} (observed)", dt_obs)
+        self.assertNoNonObservedHoliday(dt_obs)
+
+    def test_prophets_birthday(self):
+        name = "Prophet Mohammed's Birthday"
+        self.assertHolidayName(
+            name,
+            "2018-11-19",
+            "2019-11-09",
+            "2020-10-31",
+            "2021-10-18",
+            "2022-10-07",
+            "2023-09-30",
+            "2024-09-16",
+        )
+        dt_obs = (
+            "2019-11-11",
+            "2020-11-02",
+            "2023-10-02",
+            "2025-09-08",
+        )
+        self.assertHolidayName(f"{name} (observed)", dt_obs)
+        self.assertNoNonObservedHoliday(dt_obs)
+
+    def test_2019(self):
+        # https://web.archive.org/web/20191018023027/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2019),
+            ("2019-01-01", "New Year's Day"),
+            ("2019-04-19", "Good Friday"),
+            ("2019-04-20", "Easter Saturday"),
+            ("2019-04-22", "Easter Monday"),
+            ("2019-09-07", "Constitution Day"),
+            ("2019-09-09", "Constitution Day (observed)"),
+            ("2019-10-10", "Fiji Day"),
+            ("2019-10-28", "Diwali"),
+            ("2019-11-09", "Prophet Mohammed's Birthday"),
+            ("2019-11-11", "Prophet Mohammed's Birthday (observed)"),
+            ("2019-12-25", "Christmas Day"),
+            ("2019-12-26", "Boxing Day"),
+        )
+
+    def test_2020(self):
+        # https://web.archive.org/web/20210103183942/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2020),
+            ("2020-01-01", "New Year's Day"),
+            ("2020-04-10", "Good Friday"),
+            ("2020-04-11", "Easter Saturday"),
+            ("2020-04-13", "Easter Monday"),
+            ("2020-09-07", "Constitution Day"),
+            ("2020-10-10", "Fiji Day"),
+            ("2020-10-31", "Prophet Mohammed's Birthday"),
+            ("2020-11-02", "Prophet Mohammed's Birthday (observed)"),
+            ("2020-11-14", "Diwali"),
+            ("2020-11-16", "Diwali (observed)"),
+            ("2020-12-25", "Christmas Day"),
+            ("2020-12-26", "Boxing Day"),
+            ("2020-12-28", "Boxing Day (observed)"),
+        )
+
+    def test_2021(self):
+        # https://web.archive.org/web/20221223004409/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2021),
+            ("2021-01-01", "New Year's Day"),
+            ("2021-04-02", "Good Friday"),
+            ("2021-04-03", "Easter Saturday"),
+            ("2021-04-05", "Easter Monday"),
+            ("2021-09-07", "Constitution Day"),
+            ("2021-10-10", "Fiji Day"),
+            ("2021-10-18", "Prophet Mohammed's Birthday"),
+            ("2021-11-04", "Diwali"),
+            ("2021-12-25", "Christmas Day"),
+            ("2021-12-26", "Boxing Day"),
+            ("2021-12-27", "Christmas Day (observed)"),
+            ("2021-12-28", "Boxing Day (observed)"),
+        )
+
+    def test_2022(self):
+        # https://web.archive.org/web/20221223004409/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2022),
+            ("2022-01-01", "New Year's Day"),
+            ("2022-01-03", "New Year's Day (observed)"),
+            ("2022-04-15", "Good Friday"),
+            ("2022-04-16", "Easter Saturday"),
+            ("2022-04-18", "Easter Monday"),
+            ("2022-09-07", "Constitution Day"),
+            ("2022-10-07", "Prophet Mohammed's Birthday"),
+            ("2022-10-10", "Fiji Day"),
+            ("2022-10-25", "Diwali"),
+            ("2022-12-25", "Christmas Day"),
+            ("2022-12-26", "Boxing Day"),
+            ("2022-12-27", "Christmas Day (observed)"),
+        )
+
+    def test_2023(self):
+        # https://web.archive.org/web/20231129154609/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2023),
+            ("2023-01-01", "New Year's Day"),
+            ("2023-01-02", "New Year's Day (observed)"),
+            ("2023-04-07", "Good Friday"),
+            ("2023-04-08", "Easter Saturday"),
+            ("2023-04-10", "Easter Monday"),
+            ("2023-05-15", "Girmit Day"),
+            ("2023-05-29", "Ratu Sir Lala Sukuna Day"),
+            ("2023-09-30", "Prophet Mohammed's Birthday"),
+            ("2023-10-02", "Prophet Mohammed's Birthday (observed)"),
+            ("2023-10-10", "Fiji Day"),
+            ("2023-11-13", "Diwali"),
+            ("2023-12-25", "Christmas Day"),
+            ("2023-12-26", "Boxing Day"),
+        )
+
+    def test_2024(self):
+        # https://web.archive.org/web/20250121185434/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2024),
+            ("2024-01-01", "New Year's Day"),
+            ("2024-03-29", "Good Friday"),
+            ("2024-03-30", "Easter Saturday"),
+            ("2024-04-01", "Easter Monday"),
+            ("2024-05-13", "Girmit Day"),
+            ("2024-05-31", "Ratu Sir Lala Sukuna Day"),
+            ("2024-09-16", "Prophet Mohammed's Birthday"),
+            ("2024-10-10", "Fiji Day"),
+            ("2024-11-01", "Diwali"),
+            ("2024-12-25", "Christmas Day"),
+            ("2024-12-26", "Boxing Day"),
+        )
+
+    def test_2025(self):
+        # https://web.archive.org/web/20250121185434/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2025),
+            ("2025-01-01", "New Year's Day"),
+            ("2025-04-18", "Good Friday"),
+            ("2025-04-19", "Easter Saturday"),
+            ("2025-04-21", "Easter Monday"),
+            ("2025-05-12", "Girmit Day"),
+            ("2025-05-30", "Ratu Sir Lala Sukuna Day"),
+            ("2025-09-06", "Prophet Mohammed's Birthday"),
+            ("2025-09-08", "Prophet Mohammed's Birthday (observed)"),
+            ("2025-10-10", "Fiji Day"),
+            ("2025-10-21", "Diwali"),
+            ("2025-12-25", "Christmas Day"),
+            ("2025-12-26", "Boxing Day"),
+        )
diff --git a/tests/countries/test_india.py b/tests/countries/test_india.py
index 68b5ef8b..fce9ee09 100644
--- a/tests/countries/test_india.py
+++ b/tests/countries/test_india.py
@@ -569,20 +569,20 @@ class TestIndia(CommonCountryTests, TestCase):
             ("2018-01-14", "उत्तरायण; पोंगल; मकर संक्रांति; माघ बिहू"),
             ("2018-01-24", "यूपी स्थापना दिवस"),
             ("2018-01-26", "गणतंत्र दिवस"),
-            ("2018-02-13", "महा शिवरात्रि"),
+            ("2018-02-13", "महाशिवरात्रि"),
             ("2018-02-19", "छत्रपति शिवाजी महाराज जयंती"),
             ("2018-02-20", "मिज़ोरम राज्य दिवस"),
             ("2018-03-02", "होली"),
             ("2018-03-18", "गुडी पाडवा"),
             ("2018-03-22", "बिहार दिवस"),
-            ("2018-03-25", "पाम संडे; राम नवमी"),
+            ("2018-03-25", "पाम संडे; रामनवमी"),
             ("2018-03-29", "महावीर जयंती"),
             ("2018-03-30", "गुड फ्राइडे; राजस्थान दिवस"),
             ("2018-04-01", "ईस्टर संडे; ओडिशा दिवस (उत्कल दिवस)"),
-            ("2018-04-14", "डॉ. बी.आर. अम्बेडकर जयंती; पुथंडु (तमिल नव वर्ष); वैसाखी"),
-            ("2018-04-15", "पोहेला बोइशाख; महा विशुव संक्रांति / पण संक्रांति; हिमाचल दिवस"),
+            ("2018-04-14", "डॉ. बी.आर. आम्बेडकर जयंती; पुत्ताण्डु (तमिल नव वर्ष); वैसाखी"),
+            ("2018-04-15", "पोहेला बोइशाख; महा विषुव संक्रांति / पण संक्रांति; हिमाचल दिवस"),
             ("2018-04-30", "बुद्ध पूर्णिमा"),
-            ("2018-05-01", "गुजरात दिवस; महाराष्ट्र दिवस; श्रमिक दिवस"),
+            ("2018-05-01", "गुजरात दिवस; मजदूर दिवस; महाराष्ट्र दिवस"),
             ("2018-05-09", "रवींद्र जयंती"),
             ("2018-05-16", "सिक्किम राज्य दिवस"),
             ("2018-06-02", "तेलंगाना स्थापना दिवस"),
@@ -599,7 +599,7 @@ class TestIndia(CommonCountryTests, TestCase):
             ("2018-10-02", "गांधी जयंती"),
             ("2018-10-06", "बतुकम्मा महोत्सव"),
             ("2018-10-10", "नवरात्र/शरद नवरात्र"),
-            ("2018-10-18", "महा नवमी"),
+            ("2018-10-18", "महानवमी"),
             ("2018-10-19", "दशहरा"),
             ("2018-10-31", "सरदार वल्लभभाई पटेल जयंती"),
             (
@@ -614,7 +614,7 @@ class TestIndia(CommonCountryTests, TestCase):
             ("2018-11-08", "गोवर्धन पूजा"),
             ("2018-11-13", "छठ पूजा"),
             ("2018-11-14", "बाल दिवस"),
-            ("2018-11-15", "झारखण्ड स्थापना दिवस"),
+            ("2018-11-15", "झारखंड स्थापना दिवस"),
             ("2018-11-21", "मिलाद-उन-नबी"),
             ("2018-11-23", "गुरु नानक जयंती"),
             ("2018-12-01", "नागालैंड राज्य उद्घाटन दिवस"),
diff --git a/tests/countries/test_ivory_coast.py b/tests/countries/test_ivory_coast.py
new file mode 100644
index 00000000..d7fcd950
--- /dev/null
+++ b/tests/countries/test_ivory_coast.py
@@ -0,0 +1,279 @@
+#  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.md file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+from unittest import TestCase
+
+from holidays.countries import IvoryCoast, CI, CIV
+from tests.common import CommonCountryTests
+
+
+class TestIvoryCoast(CommonCountryTests, TestCase):
+    @classmethod
+    def setUpClass(cls):
+        years = range(1997, 2050)
+        super().setUpClass(IvoryCoast, years=years, years_non_observed=years)
+
+    def test_country_aliases(self):
+        self.assertAliases(IvoryCoast, CI, CIV)
+
+    def test_no_holidays(self):
+        self.assertNoHolidays(IvoryCoast(years=1996))
+
+    def test_special_holidays(self):
+        self.assertHoliday(
+            "2010-10-29",
+            "2024-02-12",
+        )
+
+    def test_new_years_day(self):
+        self.assertHolidayName("1er janvier", (f"{year}-01-01" for year in range(1997, 2050)))
+
+    def test_labor_day(self):
+        name = "Fête du travail"
+        self.assertHolidayName(name, (f"{year}-05-01" for year in range(1997, 2050)))
+        dt = (
+            "2005-05-02",
+            "2011-05-02",
+            "2016-05-02",
+        )
+        self.assertHolidayName(f"Lendemain de la {name}", dt)
+        self.assertNoNonObservedHoliday(dt)
+
+    def test_independence_day(self):
+        name = "Fête Nationale"
+        self.assertHolidayName(name, (f"{year}-08-07" for year in range(1997, 2050)))
+        dt = (
+            "2005-08-08",
+            "2011-08-08",
+            "2016-08-08",
+            "2022-08-08",
+        )
+        self.assertHolidayName(f"Lendemain de la {name}", dt)
+        self.assertNoNonObservedHoliday(dt)
+
+    def test_national_peace_day(self):
+        self.assertHolidayName(
+            "Journée Nationale de la Paix", (f"{year}-11-15" for year in range(1997, 2050))
+        )
+
+    def test_easter_monday(self):
+        name = "Lundi de Pâques"
+        self.assertHolidayName(
+            name,
+            "2019-04-22",
+            "2020-04-13",
+            "2021-04-05",
+            "2022-04-18",
+            "2023-04-10",
+            "2024-04-01",
+        )
+        self.assertHolidayName(name, range(1997, 2050))
+
+    def test_ascension_day(self):
+        name = "Jour de l’Ascension"
+        self.assertHolidayName(
+            name,
+            "2019-05-30",
+            "2020-05-21",
+            "2021-05-13",
+            "2022-05-26",
+            "2023-05-18",
+            "2024-05-09",
+        )
+        self.assertHolidayName(name, range(1997, 2050))
+
+    def test_whit_monday(self):
+        name = "Lundi de Pentecôte"
+        self.assertHolidayName(
+            name,
+            "2019-06-10",
+            "2020-06-01",
+            "2021-05-24",
+            "2022-06-06",
+            "2023-05-29",
+            "2024-05-20",
+        )
+        self.assertHolidayName(name, range(1997, 2050))
+
+    def test_assumption_day(self):
+        self.assertHolidayName(
+            "Fête de l’Assomption", (f"{year}-08-15" for year in range(1997, 2050))
+        )
+
+    def test_all_saints_day(self):
+        self.assertHolidayName(
+            "Fête de la Toussaint", (f"{year}-11-01" for year in range(1997, 2050))
+        )
+
+    def test_anniversary_of_death_of_first_president(self):
+        name = "Anniversaire du décès du Président Felix Houphouet-Boigny"
+        self.assertHolidayName(
+            name,
+            "1997-12-07",
+            "1998-12-07",
+            "1999-12-07",
+            "2000-12-07",
+        )
+        self.assertNoHolidayName(name, range(2001, 2050))
+
+    def test_christmas_day(self):
+        name = "Fête de Noël"
+        self.assertHolidayName(name, (f"{year}-12-25" for year in range(1997, 2050)))
+        dt = (
+            "2011-12-26",
+            "2016-12-26",
+            "2022-12-26",
+        )
+        self.assertHolidayName(f"Lendemain de la {name}", dt)
+        self.assertNoNonObservedHoliday(dt)
+
+    def test_eid_al_fitr(self):
+        name = "Fête de fin du Ramadan"
+        self.assertHolidayName(
+            name,
+            "2021-05-13",
+            "2022-05-02",
+            "2023-04-21",
+            "2024-04-10",
+            "2025-03-30",
+        )
+        self.assertHolidayName(name, range(1997, 2050))
+        dt = (
+            "2012-08-20",
+            "2017-06-26",
+            "2020-05-25",
+            "2025-03-31",
+        )
+        self.assertHolidayName(f"Lendemain de la {name}", dt)
+        self.assertNoNonObservedHoliday(dt)
+
+    def test_eid_al_adha(self):
+        name = "Fête de la Tabaski"
+        self.assertHolidayName(
+            name,
+            "2021-07-20",
+            "2022-07-09",
+            "2023-06-28",
+            "2024-06-16",
+            "2025-06-06",
+        )
+        self.assertHolidayName(name, range(1997, 2050))
+        dt = (
+            "2016-09-12",
+            "2019-08-12",
+            "2024-06-17",
+        )
+        self.assertHolidayName(f"Lendemain de la {name}", dt)
+        self.assertNoNonObservedHoliday(dt)
+
+    def test_day_after_mawlid(self):
+        name = "Lendemain de l’Anniversaire de la Naissance du Prophète Mahomet"
+        self.assertHolidayName(
+            name,
+            "2021-10-18",
+            "2022-10-08",
+            "2023-09-27",
+            "2024-09-15",
+            "2025-09-04",
+        )
+        self.assertHolidayName(name, range(1997, 2050))
+
+    def test_day_after_laylat_al_qadr(self):
+        name = "Lendemain de la Nuit du Destin"
+        self.assertHolidayName(
+            name,
+            "2021-05-09",
+            "2022-04-28",
+            "2023-04-18",
+            "2024-04-06",
+            "2025-03-27",
+        )
+        self.assertHolidayName(name, range(1997, 2050))
+
+    def test_2024(self):
+        self.assertHolidays(
+            IvoryCoast(years=2024),
+            ("2024-01-01", "1er janvier"),
+            ("2024-02-12", "Victoire à la Coupe d’Afrique des Nations 2024"),
+            ("2024-04-06", "Lendemain de la Nuit du Destin"),
+            ("2024-04-10", "Fête de fin du Ramadan"),
+            ("2024-04-01", "Lundi de Pâques"),
+            ("2024-05-01", "Fête du travail"),
+            ("2024-05-09", "Jour de l’Ascension"),
+            ("2024-05-20", "Lundi de Pentecôte"),
+            ("2024-06-16", "Fête de la Tabaski"),
+            ("2024-06-17", "Lendemain de la Fête de la Tabaski"),
+            ("2024-08-07", "Fête Nationale"),
+            ("2024-08-15", "Fête de l’Assomption"),
+            ("2024-09-15", "Lendemain de l’Anniversaire de la Naissance du Prophète Mahomet"),
+            ("2024-11-01", "Fête de la Toussaint"),
+            ("2024-11-15", "Journée Nationale de la Paix"),
+            ("2024-12-25", "Fête de Noël"),
+        )
+
+    def test_l10n_default(self):
+        self.assertLocalizedHolidays(
+            ("2025-01-01", "1er janvier"),
+            ("2025-03-27", "Lendemain de la Nuit du Destin"),
+            ("2025-03-30", "Fête de fin du Ramadan"),
+            ("2025-03-31", "Lendemain de la Fête de fin du Ramadan"),
+            ("2025-04-21", "Lundi de Pâques"),
+            ("2025-05-01", "Fête du travail"),
+            ("2025-05-29", "Jour de l’Ascension"),
+            ("2025-06-06", "Fête de la Tabaski"),
+            ("2025-06-09", "Lundi de Pentecôte"),
+            ("2025-08-07", "Fête Nationale"),
+            ("2025-08-15", "Fête de l’Assomption"),
+            ("2025-09-04", "Lendemain de l’Anniversaire de la Naissance du Prophète Mahomet"),
+            ("2025-11-01", "Fête de la Toussaint"),
+            ("2025-11-15", "Journée Nationale de la Paix"),
+            ("2025-12-25", "Fête de Noël"),
+        )
+
+    def test_l10n_en_ci(self):
+        self.assertLocalizedHolidays(
+            "en_CI",
+            ("2025-01-01", "New Year's Day"),
+            ("2025-03-27", "Day after Lailatou-Kadr"),
+            ("2025-03-30", "Aid-El-Fitr"),
+            ("2025-03-31", "Day after the Aid-El-Fitr"),
+            ("2025-04-21", "Easter Monday"),
+            ("2025-05-01", "Labor Day"),
+            ("2025-05-29", "Ascension Day"),
+            ("2025-06-06", "Aid-El-Kebir"),
+            ("2025-06-09", "Whit Monday"),
+            ("2025-08-07", "Independence Day"),
+            ("2025-08-15", "Assumption Day"),
+            ("2025-09-04", "Day after Maouloud"),
+            ("2025-11-01", "All Saints' Day"),
+            ("2025-11-15", "National Peace Day"),
+            ("2025-12-25", "Christmas Day"),
+        )
+
+    def test_l10n_en_us(self):
+        self.assertLocalizedHolidays(
+            "en_US",
+            ("2025-01-01", "New Year's Day"),
+            ("2025-03-27", "Day after Night of Power"),
+            ("2025-03-30", "Eid al-Fitr"),
+            ("2025-03-31", "Day after the Eid al-Fitr"),
+            ("2025-04-21", "Easter Monday"),
+            ("2025-05-01", "Labor Day"),
+            ("2025-05-29", "Ascension Day"),
+            ("2025-06-06", "Eid al-Adha"),
+            ("2025-06-09", "Whit Monday"),
+            ("2025-08-07", "Independence Day"),
+            ("2025-08-15", "Assumption Day"),
+            ("2025-09-04", "Day after Prophet's Birthday"),
+            ("2025-11-01", "All Saints' Day"),
+            ("2025-11-15", "National Peace Day"),
+            ("2025-12-25", "Christmas Day"),
+        )
diff --git a/tests/countries/test_pakistan.py b/tests/countries/test_pakistan.py
index 19113022..39276643 100644
--- a/tests/countries/test_pakistan.py
+++ b/tests/countries/test_pakistan.py
@@ -203,3 +203,62 @@ class TestPakistan(CommonCountryTests, TestCase):
             ("2022-11-09", "Iqbal Day"),
             ("2022-12-25", "Quaid-e-Azam Day"),
         )
+
+    def test_l10n_default(self):
+        self.assertLocalizedHolidays(
+            ("2022-02-05", "Kashmir Solidarity Day"),
+            ("2022-03-23", "Pakistan Day"),
+            ("2022-05-01", "Labour Day"),
+            ("2022-05-03", "Eid-ul-Fitr"),
+            ("2022-05-04", "Eid-ul-Fitr"),
+            ("2022-05-05", "Eid-ul-Fitr"),
+            ("2022-07-10", "Eid-ul-Adha"),
+            ("2022-07-11", "Eid-ul-Adha"),
+            ("2022-07-12", "Eid-ul-Adha"),
+            ("2022-08-08", "Ashura"),
+            ("2022-08-09", "Ashura"),
+            ("2022-08-14", "Independence Day"),
+            ("2022-10-09", "Eid Milad-un-Nabi"),
+            ("2022-11-09", "Iqbal Day"),
+            ("2022-12-25", "Quaid-e-Azam Day"),
+        )
+
+    def test_l10n_en_us(self):
+        self.assertLocalizedHolidays(
+            "en_US",
+            ("2022-02-05", "Kashmir Solidarity Day"),
+            ("2022-03-23", "Pakistan Day"),
+            ("2022-05-01", "Labor Day"),
+            ("2022-05-03", "Eid al-Fitr"),
+            ("2022-05-04", "Eid al-Fitr"),
+            ("2022-05-05", "Eid al-Fitr"),
+            ("2022-07-10", "Eid al-Adha"),
+            ("2022-07-11", "Eid al-Adha"),
+            ("2022-07-12", "Eid al-Adha"),
+            ("2022-08-08", "Ashura"),
+            ("2022-08-09", "Ashura"),
+            ("2022-08-14", "Independence Day"),
+            ("2022-10-09", "Prophet's Birthday"),
+            ("2022-11-09", "Iqbal Day"),
+            ("2022-12-25", "Quaid-e-Azam Day"),
+        )
+
+    def test_l10n_ur_pk(self):
+        self.assertLocalizedHolidays(
+            "ur_PK",
+            ("2022-02-05", "یوم یکجہتی کشمیر"),
+            ("2022-03-23", "یوم پاکستان"),
+            ("2022-05-01", "یوم مزدور"),
+            ("2022-05-03", "عید الفطر"),
+            ("2022-05-04", "عید الفطر"),
+            ("2022-05-05", "عید الفطر"),
+            ("2022-07-10", "عید الاضحی"),
+            ("2022-07-11", "عید الاضحی"),
+            ("2022-07-12", "عید الاضحی"),
+            ("2022-08-08", "عاشورہ"),
+            ("2022-08-09", "عاشورہ"),
+            ("2022-08-14", "یوم آزادی"),
+            ("2022-10-09", "عید میلاد النبی"),
+            ("2022-11-09", "یوم اقبال"),
+            ("2022-12-25", "یوم قائداعظم"),
+        )
diff --git a/tests/test_holiday_base.py b/tests/test_holiday_base.py
index 59b003bc..4951411c 100644
--- a/tests/test_holiday_base.py
+++ b/tests/test_holiday_base.py
@@ -839,6 +839,82 @@ class TestPopNamed(unittest.TestCase):
             self.assertNotIn(dt, self.hb)
         self.assertRaises(KeyError, lambda: self.hb.pop_named("New Year"))
 
+    def test_contains(self):
+        self.assertIn("2022-01-01", self.hb)
+        removed_dates = self.hb.pop_named("Day", lookup="contains")
+        self.assertEqual(len(removed_dates), 6)
+        self.assertNotIn("2022-01-01", self.hb)
+        self.assertNotIn("2022-06-19", self.hb)
+        self.assertNotIn("2022-06-20", self.hb)
+        self.assertNotIn("2022-07-04", self.hb)
+        self.assertNotIn("2022-12-25", self.hb)
+        self.assertNotIn("2022-12-26", self.hb)
+
+    def test_icontains(self):
+        self.assertIn("2022-01-01", self.hb)
+        removed_dates = self.hb.pop_named("day", lookup="icontains")
+        self.assertEqual(len(removed_dates), 6)
+        self.assertNotIn("2022-01-01", self.hb)
+        self.assertNotIn("2022-06-19", self.hb)
+        self.assertNotIn("2022-06-20", self.hb)
+        self.assertNotIn("2022-07-04", self.hb)
+        self.assertNotIn("2022-12-25", self.hb)
+        self.assertNotIn("2022-12-26", self.hb)
+
+    def test_exact(self):
+        self.assertIn("2022-01-01", self.hb)
+        removed_dates = self.hb.pop_named("Independence Day", lookup="exact")
+        self.assertEqual(len(removed_dates), 1)
+        self.assertNotIn("2022-07-04", self.hb)
+        self.assertIn("2022-06-19", self.hb)
+        self.assertIn("2022-06-20", self.hb)
+
+        hb = CountryStub1(years=2025)
+        hb["2024-02-02"] = "Big Groundhog Day; Groundhog Day"
+        removed_dates = hb.pop_named("Groundhog Day", lookup="exact")
+        self.assertEqual(len(removed_dates), 1)
+        self.assertEqual(hb["2024-02-02"], "Big Groundhog Day")
+
+    def test_iexact(self):
+        self.assertIn("2022-01-01", self.hb)
+        removed_dates = self.hb.pop_named("independence day", lookup="iexact")
+        self.assertEqual(len(removed_dates), 1)
+        self.assertNotIn("2022-07-04", self.hb)
+        self.assertIn("2022-06-19", self.hb)
+        self.assertIn("2022-06-20", self.hb)
+
+        hb = CountryStub1(years=2025)
+        hb["2024-02-02"] = "Big Groundhog Day; Groundhog Day"
+        removed_dates = hb.pop_named("Groundhog day", lookup="iexact")
+        self.assertEqual(len(removed_dates), 1)
+        self.assertEqual(hb["2024-02-02"], "Big Groundhog Day")
+
+    def test_startswith(self):
+        self.assertIn("2022-01-01", self.hb)
+        removed_dates = self.hb.pop_named("Independence", lookup="startswith")
+        self.assertEqual(len(removed_dates), 1)
+        self.assertNotIn("2022-07-04", self.hb)
+        self.assertIn("2022-06-19", self.hb)
+        self.assertIn("2022-06-20", self.hb)
+
+        removed_dates = self.hb.pop_named("Christmas", lookup="startswith")
+        self.assertEqual(len(removed_dates), 2)
+        self.assertNotIn("2022-12-25", self.hb)
+        self.assertNotIn("2022-12-26", self.hb)
+
+    def test_istartswith(self):
+        self.assertIn("2022-01-01", self.hb)
+        removed_dates = self.hb.pop_named("independence", lookup="istartswith")
+        self.assertEqual(len(removed_dates), 1)
+        self.assertNotIn("2022-07-04", self.hb)
+        self.assertIn("2022-06-19", self.hb)
+        self.assertIn("2022-06-20", self.hb)
+
+        removed_dates = self.hb.pop_named("christmas", lookup="istartswith")
+        self.assertEqual(len(removed_dates), 2)
+        self.assertNotIn("2022-12-25", self.hb)
+        self.assertNotIn("2022-12-26", self.hb)
+
 
 class TestRepr(unittest.TestCase):
     def test_base(self):
diff --git a/tests/test_ical.py b/tests/test_ical.py
new file mode 100644
index 00000000..60866ddb
--- /dev/null
+++ b/tests/test_ical.py
@@ -0,0 +1,440 @@
+#  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.md 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)
+
+import os
+import tempfile
+from datetime import date, datetime
+from unittest import TestCase
+from unittest.mock import patch, MagicMock
+
+from holidays import country_holidays, financial_holidays
+from holidays.holiday_base import HolidayBase
+from holidays.ical import CONTENT_LINE_DELIMITER, CONTENT_LINE_MAX_LENGTH, ICalExporter
+
+
+class MockHolidays(HolidayBase):
+    def __init__(self, language: str = "en"):
+        super().__init__()
+        self.language = language
+        self.supported_languages = (language,)
+
+    def _add_custom_holiday(self, name: str, dt: date = date(2024, 1, 1), year: int = 2024):
+        super()._populate(year)
+        self._add_holiday(name, dt)
+        return self
+
+
+class MockDatetime(datetime):
+    @classmethod
+    def now(cls, tz=None):
+        return cls(2023, 1, 1, 11, 25, 47, tzinfo=tz if tz else None)
+
+
+class TestIcalExporter(TestCase):
+    def setUp(self):
+        self.exporter = ICalExporter(None)
+        self.exporter.generate = MagicMock(return_value=b"BEGIN:VCALENDAR...END:VCALENDAR")
+        self.id_holidays = country_holidays("ID", years=2000, language="en_US")
+        self.jp_holidays = country_holidays("JP", years=2000, language="ja")
+        self.th_holidays = country_holidays("TH", years=2024)
+        self.us_holidays = country_holidays("US", years=2024)
+        self.id_exporter = ICalExporter(self.id_holidays)
+        self.jp_exporter = ICalExporter(self.jp_holidays)
+        self.th_exporter = ICalExporter(self.th_holidays)
+        self.us_exporter = ICalExporter(self.us_holidays)
+
+    def _assert_line_lengths(self, holiday_name):
+        test_holidays = MockHolidays()._add_custom_holiday(holiday_name)
+        lines = ICalExporter(test_holidays).generate().split(CONTENT_LINE_DELIMITER)
+        previous_line = None
+
+        for line in lines:
+            self.assertLessEqual(
+                len(line.encode()),
+                CONTENT_LINE_MAX_LENGTH,
+                f"Content line exceeds RFC 5545 content line length: {repr(line)}",
+            )
+
+            # If continuation line (starts with a space).
+            if line.startswith(" "):
+                self.assertIsNot(
+                    previous_line,
+                    None,
+                    f"Continuation line found without a preceding line: {repr(line)}",
+                )
+            previous_line = line
+
+    def _assert_byte_output(self, exporter, expected_bytes):
+        output = exporter.generate(return_bytes=True)
+        self.assertIsInstance(output, bytes)
+        self.assertIn(expected_bytes, output.split(CONTENT_LINE_DELIMITER.encode()))
+
+    def _assert_special_char_handling(self, escaped_name, sanitized_name):
+        test_holidays = MockHolidays()._add_custom_holiday(escaped_name)
+        output = ICalExporter(test_holidays).generate()
+        self.assertIn(
+            f"SUMMARY:{sanitized_name}\r\n",
+            output,
+            f"Failed for holiday name: {escaped_name}",
+        )
+
+    def _assert_valid_language_code(self, language_name):
+        language_name = language_name.replace("_", "-")
+        test_holidays = MockHolidays(language=language_name)._add_custom_holiday("Test")
+        output = ICalExporter(test_holidays, show_language=True).generate()
+        self.assertIn(
+            f"SUMMARY;LANGUAGE={language_name}:Test\r\n",
+            output,
+            f"Failed to find holiday with language name: {language_name}",
+        )
+
+    def _assert_invalid_language_code(self, language_name):
+        language_name = language_name.replace("_", "-")
+        test_holidays = MockHolidays(language=language_name)._add_custom_holiday("Test")
+        with self.assertRaises(ValueError) as context:
+            ICalExporter(test_holidays, show_language=True).generate()
+        self.assertEqual(
+            str(context.exception),
+            (
+                f"Invalid language tag: '{language_name}'. Expected format follows "
+                "ISO 639-1 or ISO 639-2, e.g., 'en', 'en-US'. For more details, "
+                "refer to: https://www.loc.gov/standards/iso639-2/php/code_list.php."
+            ),
+        )
+
+    def _assert_holidaysum_language(self, holidays, language_name):
+        exporter = ICalExporter(holidays, show_language=True)
+        lines = exporter.generate().split(CONTENT_LINE_DELIMITER)
+        for line in lines:
+            if line.startswith("SUMMARY"):
+                self.assertIn(
+                    f"SUMMARY;LANGUAGE={language_name}:",
+                    line,
+                    f"Failed to find holiday with language name: {language_name}",
+                )
+
+    def _assert_language_not_provided(self, holidays):
+        with self.assertRaises(ValueError) as context:
+            ICalExporter(holidays, show_language=True)
+        self.assertEqual(
+            str(context.exception),
+            "LANGUAGE cannot be included because the language code is missing.",
+        )
+
+    def test_basic_calendar_structure(self):
+        output = self.us_exporter.generate()
+
+        # iCalendar File Header.
+        self.assertIn("BEGIN:VCALENDAR", output)
+        self.assertIn("PRODID:", output)
+        self.assertIn("VERSION:2.0", output)
+        self.assertIn("CALSCALE:GREGORIAN", output)
+        self.assertIn("END:VCALENDAR", output)
+
+        # iCalendar's individual `VEVENT`.
+        self.assertIn("BEGIN:VEVENT", output)
+        self.assertIn("DTSTAMP:", output)
+        self.assertIn("UID:", output)
+        self.assertIn("SUMMARY:New Year's Day", output)
+        self.assertIn("DTSTART;VALUE=DATE:20240101", output)
+        self.assertIn("DURATION:P1D", output)
+        self.assertIn("END:VEVENT", output)
+
+    @patch("holidays.ical.datetime", MockDatetime)
+    def test_ical_timestamp(self):
+        # The whole .ics output should use the same DTSTAMP.
+        expected_timestamp = "20230101T112547Z"
+
+        exporter = ICalExporter(self.us_holidays)
+        output = exporter.generate()
+        lines = output.splitlines()
+        for line in lines:
+            if line.startswith("DTSTAMP:"):
+                self.assertIn(
+                    expected_timestamp,
+                    line,
+                    f"Expected DTSTAMP to contain {expected_timestamp}, but got {line}",
+                )
+
+    def test_valid_language_code(self):
+        # Primary Code.
+        self._assert_valid_language_code("th")
+        self._assert_valid_language_code("pap")
+
+        # Primary Code with Region.
+        self._assert_valid_language_code("en_US")
+        self._assert_valid_language_code("pap_AW")
+
+    def test_invalid_language_code(self):
+        # Invalid structures.
+        self._assert_invalid_language_code("123-en")
+        self._assert_invalid_language_code("en--US")
+
+        # Capitalization.
+        self._assert_invalid_language_code("EN-US")
+        self._assert_invalid_language_code("en-us")
+        self._assert_invalid_language_code("EN-us")
+
+        # Over lang char limit.
+        self._assert_invalid_language_code("polynesian")
+
+        # Non-ASCII alphanum.
+        self._assert_invalid_language_code("ไทย")
+
+        # Gibberish.
+        self._assert_invalid_language_code("abc-!@#")
+
+        # Valid RFC 5646 codes but not ISO 639.
+        self._assert_invalid_language_code("i-klingon")
+        self._assert_invalid_language_code("es-419")
+        self._assert_invalid_language_code("zh_Hant")
+        self._assert_invalid_language_code("sl-rozaj")
+        self._assert_invalid_language_code("de-CH-1996")
+        self._assert_invalid_language_code("az-Latn-AZ")
+        self._assert_invalid_language_code("en-US-u-co-emoji")
+        self._assert_invalid_language_code("ja-JP-u-ca-japanese")
+        self._assert_invalid_language_code("x-mobile")
+
+    def test_show_language_combined_holidays_list(self):
+        # HolidaySum init (language provided for both).
+        my_holidays = country_holidays("MY", years=2024, language="en_US")
+        combined_holidays = my_holidays + self.id_holidays
+        self._assert_holidaysum_language(combined_holidays, "en-US")
+
+        # HolidaySum add  (language provided for both).
+        sg_holidays = country_holidays("SG", years=2024, language="en_US")
+        combined_holidays += sg_holidays
+        self._assert_holidaysum_language(combined_holidays, "en-US")
+
+        # HolidaySum (one was not provide language, but default_language exists).
+        jp_holidays = country_holidays("JP", years=2000, language="th")
+        combined_holidays = self.th_holidays + jp_holidays
+        self._assert_holidaysum_language(combined_holidays, "th")
+
+    def test_show_language_true_language_code_none(self):
+        # Neither language nor default_language param exists.
+        nyse_holidays = financial_holidays("NYSE", years=2024)
+        self._assert_language_not_provided(nyse_holidays)
+
+        # Combined Holidays List, one of them is None -> language got set to None.
+        self._assert_language_not_provided(nyse_holidays + self.jp_holidays)
+
+        # Combined Holidays List, different language -> language got set to None.
+        self._assert_language_not_provided(self.th_holidays + self.jp_holidays)
+
+    def test_multiple_holidays_same_date(self):
+        # "วันพ่อแห่งชาติ" and "วันชาติ" are both on DEC 5th.
+        output = self.th_exporter.generate()
+
+        self.assertIn("SUMMARY:วันพ่อแห่งชาติ", output)
+        self.assertIn("SUMMARY:วันชาติ", output)
+
+    def test_single_holiday_multiple_date_continuous(self):
+        # 3x "วันสงกรานต์", 1x "ชดเชยวันสงกรานต์".
+        output = self.th_exporter.generate()
+
+        songkran_count = output.count("SUMMARY:วันสงกรานต์\r\n")
+        self.assertEqual(songkran_count, 1)
+        self.assertIn("DTSTART;VALUE=DATE:20240413\r\n", output)
+        self.assertIn("DURATION:P3D\r\n", output)
+
+    def test_single_holiday_multiple_date_continuous_overlap(self):
+        # "День міжнародної солідарності трудящих" x2
+        # but 2005-05-01 got "Великдень (Пасха)" as well.
+        ua_holidays = country_holidays("UA", years=2005)
+        output = ICalExporter(ua_holidays).generate()
+
+        labor_day_count = output.count("SUMMARY:День міжнародної солідарності трудя\r\n щих\r\n")
+        self.assertEqual(labor_day_count, 1)
+        self.assertIn("DTSTART;VALUE=DATE:20050501\r\n", output)
+        self.assertIn("DURATION:P2D\r\n", output)
+
+    def test_single_holiday_multiple_date_noncontinuous(self):
+        # 2x "Eid al-Fitr", 2x "Eid al-Fitr Second Day".
+        output = self.id_exporter.generate()
+
+        eid_al_fitr_count = output.count("SUMMARY:Eid al-Fitr\r\n")
+        self.assertEqual(eid_al_fitr_count, 2)
+        eid_duration_count = output.count("DURATION:P1D\r\n")
+        self.assertGreaterEqual(eid_duration_count, 2, "Expected at least 2 single-day events")
+
+    def test_generate_from_combined_holidays_list(self):
+        # All 3 "New Year's Day" should be merged into 1 single instance.
+        cn_holidays = country_holidays("CN", years=2024, language="en_US")
+        jp_holidays = country_holidays("JP", years=2024, language="en_US")
+        kr_holidays = country_holidays("KR", years=2024, language="en_US")
+        east_asia_holidays = cn_holidays + jp_holidays + kr_holidays
+        output = ICalExporter(east_asia_holidays).generate()
+
+        new_years_day_count = output.count("SUMMARY:New Year's Day\r\n")
+        self.assertEqual(new_years_day_count, 1)
+        self.assertIn("DTSTART;VALUE=DATE:20240101\r\n", output)
+
+    def test_escape_character_holiday_names(self):
+        # Default case, no action taken.
+        self._assert_special_char_handling("Fête Nationale", "Fête Nationale")
+
+        # SINGLE QUOTES, no action taken.
+        self._assert_special_char_handling("Single 'Quotes' Holiday", "Single 'Quotes' Holiday")
+
+        # DOUBLE QUOTES, no action taken.
+        self._assert_special_char_handling('Double "Quotes" Holiday', 'Double "Quotes" Holiday')
+
+        # COMMA.
+        self._assert_special_char_handling(
+            "Dia de Portugal, de Camões e das Comunidades Portuguesas",
+            "Dia de Portugal\\, de Camões e das Comunidades Portuguesas",
+        )
+
+        # COLON.
+        self._assert_special_char_handling("Special: Holiday Event", "Special\\: Holiday Event")
+
+        # BACKSLASH.
+        self._assert_special_char_handling("Backslash\\Holiday", "Backslash\\\\Holiday")
+
+        # SEMICOLON is used as a delimiter in HolidayBase (HOLIDAY_NAME_DELIMITER = "; "),
+        # so a name with a semicolon gets split into two separate `VEVENT`s.
+        self._assert_special_char_handling("Christmas; Celebration", "Celebration")
+
+    def test_localized_holiday_names(self):
+        output = self.jp_exporter.generate()
+
+        self.assertIn("SUMMARY:元日\r\n", output)
+
+    def test_empty_holidays(self):
+        exporter = ICalExporter(country_holidays("TH", years=1800))
+        output = exporter.generate()
+
+        # iCalendar File Header.
+        self.assertIn("BEGIN:VCALENDAR", output)
+        self.assertIn("PRODID:", output)
+        self.assertIn("VERSION:2.0", output)
+        self.assertIn("CALSCALE:GREGORIAN", output)
+        self.assertIn("END:VCALENDAR", output)
+
+        # Verify no `VEVENT`s are generated for empty holiday set.
+        self.assertNotIn("BEGIN:VEVENT", output)
+        self.assertNotIn("DTSTAMP:", output)
+        self.assertNotIn("UID:", output)
+        self.assertNotIn("SUMMARY:", output)
+        self.assertNotIn("DTSTART;", output)
+        self.assertNotIn("DURATION:", output)
+        self.assertNotIn("END:VEVENT", output)
+
+    def test_line_folding_edge_cases(self):
+        # 74 octets.
+        line_74_bytes = "x" * 66
+        self._assert_line_lengths(line_74_bytes)
+
+        # 75 octets.
+        exact_75_bytes = "x" * 72 + "あ"
+        self._assert_line_lengths(exact_75_bytes)
+
+        # 76 octets.
+        needs_adjustment = "x" * 73 + "あ"
+        self._assert_line_lengths(needs_adjustment)
+
+    def test_long_holiday(self):
+        # ASCII-only
+        ascii_fold_test = (
+            "Krungthepmahanakhon Amonrattanakosin Mahintharayutthaya Mahadilokphop "
+            "Noppharatratchathaniburirom Udomratchaniwetmahasathan Amonphimanawatansathit "
+            "Sakkathattiyawitsanukamprasit"
+        )
+        self._assert_line_lengths(ascii_fold_test)
+
+        # UTF-8
+        utf8_fold_test = (
+            "กรุงเทพมหานคร อมรรัตนโกสินทร์ มหินทรายุธยา มหาดิลกภพ นพรัตนราชธานีบูรีรมย์ "
+            "อุดมราชนิเวศน์มหาสถาน อมรพิมานอวตารสถิต สักกะทัตติยวิษณุกรรมประสิทธิ์"
+        )
+        self._assert_line_lengths(utf8_fold_test)
+
+        # Emojis test (Unicode codepoints for emojis)
+        emoji_fold_test = "🎉🎊🎈🎁🎀✨🌟🌈🍀🐶🐱🦄🐯🐯🦄💥🌍🌎🌏🎶🎵🎧🎤🎬🎼🎷🎸"
+        self._assert_line_lengths(emoji_fold_test)
+
+        # Multi-codepoint graphemes (combinations of accents and other modifiers)
+        grapheme_fold_test = "áèîöũčñ𝒜𝒩𝒲👩‍🚀👨‍🍳👩‍🔬👨‍🎤👩‍🎨👨‍🚒"
+        self._assert_line_lengths(grapheme_fold_test)
+
+    def test_return_bytes(self):
+        self._assert_byte_output(self.us_exporter, b"SUMMARY:New Year's Day")
+        self._assert_byte_output(self.jp_exporter, b"SUMMARY:\xe5\x85\x83\xe6\x97\xa5")
+
+    def test_crlf_line_endings(self):
+        output = self.th_exporter.generate()
+
+        lines = output.splitlines(True)
+        for line in lines:
+            self.assertTrue(
+                line.endswith(CONTENT_LINE_DELIMITER), f"Line did not end with CRLF: {repr(line)}"
+            )
+
+    def test_unique_uid_generation(self):
+        # 1st generation should yield unique UUIDs for each VEVENT.
+        output = self.us_exporter.generate()
+        uids = [line for line in output.split(CONTENT_LINE_DELIMITER) if line.startswith("UID:")]
+
+        self.assertEqual(len(uids), len(set(uids)), "Duplicate UIDs found in iCal output.")
+
+        # 2nd generation should yield different UUIDs.
+        output_2 = self.us_exporter.generate()
+        uids_2 = [
+            line for line in output_2.split(CONTENT_LINE_DELIMITER) if line.startswith("UID:")
+        ]
+
+        self.assertEqual(len(uids_2), len(set(uids_2)), "Duplicate UIDs found in 2nd iCal output.")
+
+        # Ensure that there is no overlap at all between UIDs from both attempt.
+        self.assertTrue(set(uids).isdisjoint(set(uids_2)), "Some UIDs are reused")
+
+    def test_save_ics_valid_path(self):
+        with tempfile.TemporaryDirectory() as valid_path:
+            file_path = os.path.join(valid_path, "test_calendar.ics")
+
+            self.us_exporter.save_ics(file_path=file_path)
+            self.assertTrue(os.path.exists(file_path), f"File should be created at {file_path}")
+
+    def test_save_ics_empty_content(self):
+        self.exporter.generate = MagicMock(return_value=b"")
+
+        with tempfile.NamedTemporaryFile(suffix=".ics") as temp_file:
+            with self.assertRaises(ValueError) as context:
+                self.exporter.save_ics(file_path=temp_file.name)
+            self.assertEqual(str(context.exception), "Generated content is empty or invalid.")
+
+    def test_save_ics_file_overwrite(self):
+        with tempfile.NamedTemporaryFile(suffix=".ics", delete=False) as temp_file:
+            temp_file.write(b"Old content")
+            temp_file.close()
+
+            self.us_exporter.save_ics(file_path=temp_file.name)
+            with open(temp_file.name) as file:
+                new_content = file.read()
+
+            self.assertNotEqual(new_content, "Old content", "The file was not overwritten.")
+            self.assertIn("BEGIN:VCALENDAR", new_content, "New content is not valid iCalendar")
+            os.remove(temp_file.name)
+
+    def test_save_ics_with_utf8_name(self):
+        with tempfile.NamedTemporaryFile(
+            prefix="test_ปฏิทิน", suffix=".ics", delete=False
+        ) as temp_file:
+            temp_file.close()
+
+            self.th_exporter.save_ics(file_path=temp_file.name)
+            self.assertTrue(
+                os.path.exists(temp_file.name),
+                "File should be created with special characters in the name.",
+            )
+            os.remove(temp_file.name)
diff --git a/tests/test_package.py b/tests/test_package.py
index 36daff62..28de2f93 100644
--- a/tests/test_package.py
+++ b/tests/test_package.py
@@ -10,9 +10,14 @@
 #  Website: https://github.com/vacanza/holidays
 #  License: MIT (see LICENSE file)
 
-from unittest import TestCase
+import sys
+
+if sys.version_info >= (3, 10):
+    from importlib.metadata import metadata
+else:
+    from importlib_metadata import metadata
 
-from importlib_metadata import metadata
+from unittest import TestCase
 
 import holidays