Repository: vacanza/holidays
Pull request #2505 (2025-04-28 12:54:44)

Docstring cleanup for Indochinese countries
<!--
  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.
-->

- Cleanups incorrect docstring description for Makha Bucha's holiday group assignment.
- Ensures Cambodia's holiday entries code comment ends with a dot ( . ).
- Sorts Thailand's holidays attributes assignment.

Doesn't otherwise affects holiday list in these countries.

## 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)
- [x] Existing code/documentation/test/process quality improvement (best practice, cleanup, refactoring, optimization)
- [ ] Dependency update (version deprecation/pin/upgrade)
- [ ] Bugfix (non-breaking change which fixes an issue)
- [ ] Breaking change (a code change causing existing functionality to break)
- [ ] New feature (new `holidays` functionality in general)

## Checklist

<!--
  Put an `x` in the boxes that apply. You can change them after PR is created.
-->

- [x] I've followed the [contributing guidelines][contributing-guidelines]
- [x] I've successfully run `make check`, all checks and tests are green

<!--
  Thanks again for your contribution!
-->

[contributing-guidelines]: https://github.com/vacanza/holidays/blob/dev/CONTRIBUTING.md
[docs]: https://github.com/vacanza/holidays/tree/dev/docs/source


coderabbitai[bot]: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- This is an auto-generated comment: review in progress by coderabbit.ai -->

> [!NOTE]
> Currently processing new changes in this PR. This may take a few minutes, please wait...
> 
> <details>
> <summary>📥 Commits</summary>
> 
> Reviewing files that changed from the base of the PR and between 856390cd907b7341762a096da75b03dfa66765de and 08e884439c452dc30498ce3bdad2ac1a710a76b7.
> 
> </details>
> 
> <details>
> <summary>📒 Files selected for processing (6)</summary>
> 
> * `holidays/countries/cambodia.py` (14 hunks)
> * `holidays/countries/thailand.py` (1 hunks)
> * `holidays/groups/thai.py` (2 hunks)
> * `holidays/locale/en_US/LC_MESSAGES/KH.po` (2 hunks)
> * `holidays/locale/km/LC_MESSAGES/KH.po` (2 hunks)
> * `holidays/locale/th/LC_MESSAGES/KH.po` (2 hunks)
> 
> </details>
> 
> ```ascii
>  ____________________________________________________________________________________________________________________________
> < There is nothing quite so useless as doing with great efficiency something that should not be done at all. - Peter Drucker >
>  ----------------------------------------------------------------------------------------------------------------------------
>   \
>    \   \
>         \ /\
>         ( )
>       .( o ).
> ```

<!-- end of auto-generated comment: review in progress by coderabbit.ai -->
<!-- usage_tips_start -->

> [!TIP]
> <details>
> <summary>CodeRabbit can use your project's `ruff` configuration to improve the quality of Python code reviews.</summary>
> 
> Add a Ruff [configuration file](https://docs.astral.sh/ruff/configuration/) to your project to customize how CodeRabbit runs `ruff`.
> 
> </details>

<!-- usage_tips_end -->
<!-- finishing_touch_checkbox_start -->

<details open="true">
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=vacanza/holidays&utm_content=2505):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
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=2505) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2505&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=2505&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=2505&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=2505&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=2505&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2505)


codecov[bot]: ## [Codecov](https://app.codecov.io/gh/vacanza/holidays/pull/2505?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 [(`856390c`)](https://app.codecov.io/gh/vacanza/holidays/commit/856390cd907b7341762a096da75b03dfa66765de?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) to head [(`08e8844`)](https://app.codecov.io/gh/vacanza/holidays/commit/08e884439c452dc30498ce3bdad2ac1a710a76b7?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     #2505   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          215       215           
  Lines        13588     13588           
  Branches      1931      1931           
=========================================
  Hits         13588     13588           
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/vacanza/holidays/pull/2505?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).

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
</details>
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=2505) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2505&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=2505&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=2505&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=2505&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=2505&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2505)


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=2505) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2505&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=2505&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=2505&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=2505&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=2505&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2505)



Patch:
diff --git a/holidays/calendars/hindu.py b/holidays/calendars/hindu.py
index 03a7f9ce..86a4e9df 100644
--- a/holidays/calendars/hindu.py
+++ b/holidays/calendars/hindu.py
@@ -35,6 +35,7 @@ MAHA_SHIVARATRI = "MAHA_SHIVARATRI"
 MAHAVIR_JAYANTI = "MAHAVIR_JAYANTI"
 MAKAR_SANKRANTI = "MAKAR_SANKRANTI"
 ONAM = "ONAM"
+PONGAL = "PONGAL"
 RAKSHA_BANDHAN = "RAKSHA_BANDHAN"
 RAM_NAVAMI = "RAM_NAVAMI"
 SHARAD_NAVRATRI = "SHARAD_NAVRATRI"
@@ -865,6 +866,44 @@ class _HinduLunisolar:
         2035: (SEP, 14),
     }
 
+    PONGAL_DATES = {
+        2001: (JAN, 14),
+        2002: (JAN, 14),
+        2003: (JAN, 15),
+        2004: (JAN, 15),
+        2005: (JAN, 14),
+        2006: (JAN, 14),
+        2007: (JAN, 15),
+        2008: (JAN, 15),
+        2009: (JAN, 14),
+        2010: (JAN, 14),
+        2011: (JAN, 15),
+        2012: (JAN, 15),
+        2013: (JAN, 14),
+        2014: (JAN, 14),
+        2015: (JAN, 15),
+        2016: (JAN, 15),
+        2017: (JAN, 14),
+        2018: (JAN, 14),
+        2019: (JAN, 15),
+        2020: (JAN, 15),
+        2021: (JAN, 14),
+        2022: (JAN, 14),
+        2023: (JAN, 15),
+        2024: (JAN, 15),
+        2025: (JAN, 14),
+        2026: (JAN, 14),
+        2027: (JAN, 15),
+        2028: (JAN, 15),
+        2029: (JAN, 14),
+        2030: (JAN, 14),
+        2031: (JAN, 15),
+        2032: (JAN, 15),
+        2033: (JAN, 14),
+        2034: (JAN, 14),
+        2035: (JAN, 15),
+    }
+
     # https://www.timeanddate.com/holidays/india/raksha-bandhan
     RAKSHA_BANDHAN_DATES = {
         2001: (AUG, 4),
@@ -1270,6 +1309,9 @@ class _HinduLunisolar:
     def holi_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(HOLI, year)
 
+    def pongal_date(self, year: int) -> tuple[Optional[date], bool]:
+        return self._get_holiday(PONGAL, year)
+
     def janmashtami_date(self, year: int) -> tuple[Optional[date], bool]:
         return self._get_holiday(JANMASHTAMI, year)
 
diff --git a/holidays/countries/cambodia.py b/holidays/countries/cambodia.py
index 235dffb7..77aed1a2 100644
--- a/holidays/countries/cambodia.py
+++ b/holidays/countries/cambodia.py
@@ -71,7 +71,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # ទិវាអន្តរជាតិនារី
         # Status: In-Use.
 
-        # International Women's Rights Day
+        # International Women's Rights Day.
         self._add_womens_day(tr("ទិវាអន្តរជាតិនារី"))
 
         #  ពិធីបុណ្យចូលឆ្នាំថ្មីប្រពៃណីជាតិ
@@ -80,7 +80,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # for years 2001-2050.
 
         if self._year != 2020:
-            # Khmer New Year's Day
+            # Khmer New Year's Day.
             sangkranta = tr("ពិធីបុណ្យចូលឆ្នាំថ្មីប្រពៃណីជាតិ")
             sangkranta_years_apr_14 = {
                 2017,
@@ -106,7 +106,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         #  ទិវាពលកម្មអន្តរជាតិ
         # Status: In-Use.
 
-        # International Labor Day
+        # International Labor Day.
         self._add_labor_day(tr("ទិវាពលកម្មអន្តរជាតិ"))
 
         # ព្រះរាជពិធីបុណ្យចម្រើនព្រះជន្ម ព្រះករុណា ព្រះបាទសម្តេចព្រះបរមនាថ នរោត្តម សីហមុនី
@@ -116,7 +116,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         if self._year >= 2005:
             king_sihamoni_bday = tr(
                 # Birthday of His Majesty Preah Bat Samdech Preah Boromneath
-                # NORODOM SIHAMONI, King of Cambodia
+                # NORODOM SIHAMONI, King of Cambodia.
                 "ព្រះរាជពិធីបុណ្យចម្រើនព្រះជន្ម ព្រះករុណា ព្រះបាទសម្តេចព្រះបរមនាថ នរោត្តម សីហមុនី"
             )
             self._add_holiday_may_14(king_sihamoni_bday)
@@ -132,7 +132,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # its name changed to present one in 2001.
 
         if 2018 <= self._year <= 2019:
-            # National Day of Remembrance
+            # National Day of Remembrance.
             self._add_holiday_may_20(tr("ទិវាជាតិនៃការចងចាំ"))
 
         # ទិវាកុមារអន្តរជាតិ
@@ -140,7 +140,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # Assumed to start in 1993, defunct from 2020 onwards.
 
         if self._year <= 2019:
-            # International Children's Day
+            # International Children's Day.
             self._add_childrens_day(tr("ទិវាកុមារអន្តរជាតិ"))
 
         # ព្រះរាជពិធីបុណ្យចម្រើនព្រះជន្ម សម្តេចព្រះមហាក្សត្រី ព្រះវររាជមាតា នរោត្តម មុនិនាថ សីហនុ
@@ -149,7 +149,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
 
         if self._year >= 1994:
             self._add_holiday_jun_18(
-                # Birthday of Her Majesty the Queen-Mother NORODOM MONINEATH SIHANOUK of Cambodia
+                # Birthday of Her Majesty the Queen-Mother NORODOM MONINEATH SIHANOUK of Cambodia.
                 tr("ព្រះរាជពិធីបុណ្យចម្រើនព្រះជន្ម សម្តេចព្រះមហាក្សត្រី ព្រះវររាជមាតា នរោត្តម មុនិនាថ សីហនុ")
             )
 
@@ -157,7 +157,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # Status: In-Use.
         # Starts in 1993
 
-        # Constitution Day
+        # Constitution Day.
         self._add_holiday_sep_24(tr("ទិវាប្រកាសរដ្ឋធម្មនុញ្ញ"))
 
         # ទិវាប្រារព្ឋពិធីគោរពព្រះវិញ្ញាណក្ខន្ឋ ព្រះករុណា ព្រះបាទសម្តេចព្រះ នរោត្តម សីហនុ
@@ -167,7 +167,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
 
         if self._year >= 2012:
             self._add_holiday_oct_15(
-                # Mourning Day of the Late King-Father NORODOM SIHANOUK of Cambodia
+                # Mourning Day of the Late King-Father NORODOM SIHANOUK of Cambodia.
                 tr(
                     "ទិវាប្រារព្ឋពិធីគោរពព្រះវិញ្ញាណក្ខន្ឋ ព្រះករុណា ព្រះបាទសម្តេចព្រះ នរោត្តម "
                     "សីហនុ ព្រះមហាវីរក្សត្រ ព្រះវររាជបិតាឯករាជ្យ បូរណភាពទឹកដី និងឯកភាពជាតិខ្មែរ "
@@ -180,7 +180,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # Assumed to start in 1993, defunct from 2020 onwards.
 
         if self._year <= 2019:
-            # Paris Peace Agreement's Day
+            # Paris Peace Agreement's Day.
             self._add_holiday_oct_23(tr("ទិវារំលឹកសន្ធិសញ្ញាសន្តិភាពទីក្រុងប៉ារីស"))
 
         # ព្រះរាជពិធីគ្រងព្រះបរមរាជសម្បត្តិ របស់ ព្រះករុណា
@@ -192,7 +192,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         if self._year >= 2004:
             self._add_holiday_oct_29(
                 # Coronation Day of His Majesty Preah Bat Samdech Preah
-                # Boromneath NORODOM SIHAMONI, King of Cambodia
+                # Boromneath NORODOM SIHAMONI, King of Cambodia.
                 tr(
                     "ព្រះរាជពិធីគ្រងព្រះបរមរាជសម្បត្តិ របស់ ព្រះករុណា "
                     "ព្រះបាទសម្តេចព្រះបរមនាថ នរោត្តម សីហមុនី "
@@ -204,7 +204,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # Status: In-Use.
         # Starts in 1953
 
-        # National Independence Day
+        # National Independence Day.
         self._add_holiday_nov_9(tr("ពិធីបុណ្យឯករាជ្យជាតិ"))
 
         # ទិវាសិទ្ធិមនុស្សអន្តរជាតិ
@@ -212,7 +212,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # Assumed to start in 1993, defunct from 2020 onwards.
 
         if self._year <= 2019:
-            # International Human Rights Day
+            # International Human Rights Day.
             self._add_holiday_dec_10(tr("ទិវាសិទ្ធិមនុស្សអន្តរជាតិ"))
 
         # Cambodian Lunar Calendar Holidays
@@ -225,7 +225,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # Defunct from 2020 onwards.
 
         if self._year <= 2019:
-            # Meak Bochea Day
+            # Meak Bochea Day.
             self._add_makha_bucha(tr("ពិធីបុណ្យមាឃបូជា"))
 
         # ពិធីបុណ្យវិសាខបូជា
@@ -234,7 +234,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # This utilizes Thai calendar as a base, though are calculated to always happen
         # in the Traditional Visakhamas month (May).
 
-        # Visaka Bochea Day
+        # Visaka Bochea Day.
         self._add_visakha_bucha(tr("ពិធីបុណ្យវិសាខបូជា"))
 
         # ព្រះរាជពិធីច្រត់ព្រះនង្គ័ល
@@ -242,7 +242,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # 4th Waning Day of Month 6.
         # Unlike Thai ones, Cambodian Royal Ploughing Ceremony is always fixed.
 
-        # Royal Ploughing Ceremony
+        # Royal Ploughing Ceremony.
         self._add_preah_neangkoal(tr("ព្រះរាជពិធីច្រត់ព្រះនង្គ័ល"))
 
         # ពិធីបុណ្យភ្ផុំបិណ្ឌ
@@ -250,7 +250,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # 14th Waning Day of Month 10 - 1st Waxing Day of Month 11.
         # The 3rd day is added as a public holiday from 2017 onwards.
 
-        # Pchum Ben Day
+        # Pchum Ben Day.
         pchum_ben = tr("ពិធីបុណ្យភ្ផុំបិណ្ឌ")
         pchum_ben_date = self._add_pchum_ben(pchum_ben)
         self._add_holiday(pchum_ben, _timedelta(pchum_ben_date, -1))
@@ -261,7 +261,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         # Status: In-Use.
         # 14th Waxing Day of Month 12 - 1st Waning Day of Month 12.
 
-        # Water Festival
+        # Water Festival.
         bon_om_touk = tr("ព្រះរាជពិធីបុណ្យអុំទូក បណ្តែតប្រទីប និងសំពះព្រះខែអកអំបុក")
         bon_om_touk_date = self._add_loy_krathong(bon_om_touk)
         self._add_holiday(bon_om_touk, _timedelta(bon_om_touk_date, -1))
@@ -288,13 +288,13 @@ class KHM(Cambodia):
 
 class CambodiaStaticHolidays:
     sangkranta_in_lieu_covid = tr(
-        # Khmer New Year's Replacement Holiday
+        # Khmer New Year's Replacement Holiday.
         "ថ្ងៃឈប់សម្រាកសងជំនួសឲ្យពិធីបុណ្យចូលឆ្នាំថ្មីប្រពៃណីជាតិ"
     )
-    # Special Public Holiday
+    # Special Public Holiday.
     special_in_lieu_holidays = tr("ថ្ងៃឈប់សម្រាកសងជំនួស")
 
-    # Khmer New Year's Day
+    # Khmer New Year's Day.
     sangkranta = tr("ពិធីបុណ្យចូលឆ្នាំថ្មីប្រពៃណីជាតិ")
 
     special_public_holidays = {
diff --git a/holidays/countries/india.py b/holidays/countries/india.py
index 56ee2be0..9df99893 100644
--- a/holidays/countries/india.py
+++ b/holidays/countries/india.py
@@ -37,6 +37,9 @@ class India(
         * <https://www.calendarlabs.com/holidays/india/2021>
         * <https://slusi.dacnet.nic.in/watershedatlas/list_of_state_abbreviation.htm>
         * <https://vahan.parivahan.gov.in/vahan4dashboard/>
+        * Tamil Nadu:
+            * [Tamil Monthly Calendar](https://www.tamildailycalendar.com/tamil_monthly_calendar.php)
+            * [Tamil Calendar](https://www.prokerala.com/general/calendar/tamilcalendar.php)
     """
 
     country = "IN"
@@ -456,7 +459,11 @@ class India(
     # Tamil Nadu.
     def _populate_subdiv_tn_public_holidays(self):
         # Pongal.
-        self._add_makar_sankranti(tr("Pongal"))
+        self._add_pongal(tr("Pongal"))
+        # Thiruvalluvar Day / Mattu Pongal.
+        self._add_thiruvalluvar_day(tr("Thiruvalluvar Day / Mattu Pongal"))
+        # Uzhavar Thirunal.
+        self._add_uzhavar_thirunal(tr("Uzhavar Thirunal"))
         # Dr. B. R. Ambedkar Jayanti.
         self._add_holiday_apr_14(tr("Dr. B. R. Ambedkar's Jayanti"))
         # Puthandu.
diff --git a/holidays/countries/thailand.py b/holidays/countries/thailand.py
index 08ed25b1..14dc31e1 100644
--- a/holidays/countries/thailand.py
+++ b/holidays/countries/thailand.py
@@ -181,13 +181,13 @@ class Thailand(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiC
     """
 
     country = "TH"
-    supported_categories = (ARMED_FORCES, BANK, GOVERNMENT, PUBLIC, SCHOOL, WORKDAY)
     default_language = "th"
     # %s (in lieu).
     observed_label = tr("ชดเชย%s")
-    supported_languages = ("en_US", "th")
     # First Holiday Decree was promulgated in March 1914.
     start_year = 1914
+    supported_categories = (ARMED_FORCES, BANK, GOVERNMENT, PUBLIC, SCHOOL, WORKDAY)
+    supported_languages = ("en_US", "th")
 
     def __init__(self, *args, **kwargs):
         InternationalHolidays.__init__(self)
diff --git a/holidays/groups/hindu.py b/holidays/groups/hindu.py
index e08c156d..6843cf1a 100644
--- a/holidays/groups/hindu.py
+++ b/holidays/groups/hindu.py
@@ -28,7 +28,7 @@ class HinduCalendarHolidays(EasternCalendarHolidays):
         self._hindu_calendar_show_estimated = show_estimated
 
     def _add_hindu_calendar_holiday(
-        self, name: str, dt_estimated: tuple[Optional[date], bool]
+        self, name: str, dt_estimated: tuple[Optional[date], bool], days_delta: int = 0
     ) -> Optional[date]:
         """
         Add Hindu calendar holiday.
@@ -38,7 +38,7 @@ class HinduCalendarHolidays(EasternCalendarHolidays):
         """
 
         return self._add_eastern_calendar_holiday(
-            name, dt_estimated, self._hindu_calendar_show_estimated
+            name, dt_estimated, self._hindu_calendar_show_estimated, days_delta
         )
 
     def _add_hindu_calendar_holiday_set(
@@ -256,6 +256,18 @@ class HinduCalendarHolidays(EasternCalendarHolidays):
         """
         return self._add_hindu_calendar_holiday(name, self._hindu_calendar.onam_date(self._year))
 
+    def _add_pongal(self, name) -> Optional[date]:
+        """
+        Add Pongal.
+
+        Pongal is a major harvest festival celebrated in Tamil Nadu, India, marking the
+        beginning of the sun's northward journey (Uttarayana). It is usually observed
+        on January 14th or 15th every year, coinciding with the Tamil month of Thai.
+        The festival is dedicated to the Sun God and marks a season of prosperity and abundance.
+        https://en.wikipedia.org/wiki/Pongal_(festival)
+        """
+        return self._add_hindu_calendar_holiday(name, self._hindu_calendar.pongal_date(self._year))
+
     def _add_raksha_bandhan(self, name) -> Optional[date]:
         """
         Add Raksha Bandhan.
@@ -306,6 +318,36 @@ class HinduCalendarHolidays(EasternCalendarHolidays):
             name, self._hindu_calendar.thaipusam_date(self._year)
         )
 
+    def _add_thiruvalluvar_day(self, name) -> Optional[date]:
+        """
+        Add Thiruvalluvar Day and Mattu Pongal.
+
+        Thiruvalluvar Day and Mattu Pongal are celebrated in Tamil Nadu, India, as part
+        of the Pongal festival. Thiruvalluvar Day honors the classical Tamil poet and
+        philosopher Thiruvalluvar, while Mattu Pongal is dedicated to cattle, recognizing
+        their importance in agriculture. Both events usually fall on January 15th or 16th
+        each year during the Tamil month of Thai.
+        https://en.wikipedia.org/wiki/Thiruvalluvar_Day
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Mattu_Pongal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.pongal_date(self._year), days_delta=+1
+        )
+
+    def _add_uzhavar_thirunal(self, name) -> Optional[date]:
+        """
+        Add Uzhavar Thirunal.
+
+        Uzhavar Thirunal is a harvest festival celebrated in Tamil Nadu, India,
+        as part of the Pongal festivities. It is dedicated to honoring farmers
+        (uzhavar) and their contribution to agriculture. Uzhavar Thirunal usually
+        falls on January 16th or 17th each year.
+        https://en.wikipedia.org/wiki/Pongal_(festival)#Uzhavar_Thirunal
+        """
+        return self._add_hindu_calendar_holiday(
+            name, self._hindu_calendar.pongal_date(self._year), days_delta=+2
+        )
+
     def _add_vaisakhi(self, name) -> Optional[date]:
         """
         Add Vaisakhi.
diff --git a/holidays/groups/thai.py b/holidays/groups/thai.py
index 202fb9e5..239a606d 100644
--- a/holidays/groups/thai.py
+++ b/holidays/groups/thai.py
@@ -118,13 +118,13 @@ class ThaiCalendarHolidays:
         """
         Add Makha Bucha.
 
-        Māgha Pūjā (also written as Makha Bucha Day) is a Buddhist festival
-        celebrated on the 15th Waxing Day (Full Moon) of Month 3.
+        Māgha Pūjā (also written as Makha Bousa and Meak Bochea Day) is a Buddhist
+        festival celebrated on the 15th Waxing Day (Full Moon) of Month 3.
 
         Khmer variant: always fall on Month 3.
         Thai variant:  will use Month 4 instead for Athikamat years.
 
-        https://en.wikipedia.org/wiki/M%C4%81gha_P%C5%ABj%C4%81
+        https://en.wikipedia.org/wiki/Māgha_Pūjā
         """
         calendar = calendar or self.__calendar
 
@@ -190,14 +190,14 @@ class ThaiCalendarHolidays:
         """
         Add Visakha Bucha.
 
-        Vesak(also written as Makha Bucha Day and Meak Bochea Day) is a
+        Vesak (also written as Visakha Bousa Day and Visaka Bochea Day) is a
         Buddhist festival celebrated on the 15th Waxing Day (Full Moon)
         of Month 6.
 
         Khmer variant: always fall on Month 6.
         Thai variant:  will use Month 7 instead for Athikamat years.
 
-        https://en.wikipedia.org/wiki/M%C4%81gha_P%C5%ABj%C4%81
+        https://en.wikipedia.org/wiki/Vesak
         """
         calendar = calendar or self.__calendar
 
diff --git a/holidays/locale/en_IN/LC_MESSAGES/IN.po b/holidays/locale/en_IN/LC_MESSAGES/IN.po
index 7e321e12..fe3deb1e 100644
--- a/holidays/locale/en_IN/LC_MESSAGES/IN.po
+++ b/holidays/locale/en_IN/LC_MESSAGES/IN.po
@@ -14,7 +14,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.69\n"
+"Project-Id-Version: Holidays 0.72\n"
 "POT-Creation-Date: 2025-02-28 02:31+0530\n"
 "PO-Revision-Date: 2025-03-01 15:11+0530\n"
 "Last-Translator: Ankush Kapoor <work.ankushkapoor1626@gmail.com>\n"
@@ -306,3 +306,11 @@ msgstr ""
 #. Buddha Purnima.
 msgid "Buddha Purnima"
 msgstr ""
+
+#. Thiruvalluvar Day / Mattu Pongal.
+msgid "Thiruvalluvar Day / Mattu Pongal"
+msgstr ""
+
+#. Uzhavar Thirunal.
+msgid "Uzhavar Thirunal"
+msgstr ""
diff --git a/holidays/locale/en_US/LC_MESSAGES/IN.po b/holidays/locale/en_US/LC_MESSAGES/IN.po
index 2924b9f8..61671090 100644
--- a/holidays/locale/en_US/LC_MESSAGES/IN.po
+++ b/holidays/locale/en_US/LC_MESSAGES/IN.po
@@ -14,7 +14,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.69\n"
+"Project-Id-Version: Holidays 0.72\n"
 "POT-Creation-Date: 2025-03-02 12:31+0530\n"
 "PO-Revision-Date: 2025-03-02 12:54+0530\n"
 "Last-Translator: Ankush Kapoor <work.ankushkapoor1626@gmail.com>\n"
@@ -307,3 +307,11 @@ msgstr "Magh Bihu"
 #. Buddha Purnima.
 msgid "Buddha Purnima"
 msgstr "Buddha Purnima"
+
+#. Thiruvalluvar Day / Mattu Pongal.
+msgid "Thiruvalluvar Day / Mattu Pongal"
+msgstr "Thiruvalluvar Day / Mattu Pongal"
+
+#. Uzhavar Thirunal.
+msgid "Uzhavar Thirunal"
+msgstr "Uzhavar Thirunal"
diff --git a/holidays/locale/en_US/LC_MESSAGES/KH.po b/holidays/locale/en_US/LC_MESSAGES/KH.po
index 246c5ab0..114dd598 100644
--- a/holidays/locale/en_US/LC_MESSAGES/KH.po
+++ b/holidays/locale/en_US/LC_MESSAGES/KH.po
@@ -16,7 +16,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Holidays 0.61\n"
 "POT-Creation-Date: 2023-06-07 20:10+0700\n"
-"PO-Revision-Date: 2024-11-06 00:20+0700\n"
+"PO-Revision-Date: 2025-04-28 09:57+0700\n"
 "Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
 "Language-Team: Holidays Localization Team\n"
 "Language: en_US\n"
@@ -24,13 +24,13 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 3.5\n"
+"X-Generator: Poedit 3.6\n"
 
-#. Khmer New Year's Replacement Holiday
+#. Khmer New Year's Replacement Holiday.
 msgid "ថ្ងៃឈប់សម្រាកសងជំនួសឲ្យពិធីបុណ្យចូលឆ្នាំថ្មីប្រពៃណីជាតិ"
 msgstr "Khmer New Year's Replacement Holiday"
 
-#. Special Public Holiday
+#. Special Public Holiday.
 msgid "ថ្ងៃឈប់សម្រាកសងជំនួស"
 msgstr "Special Public Holiday"
 
@@ -42,80 +42,80 @@ msgstr "International New Year Day"
 msgid "ទិវាជ័យជម្នះលើរបបប្រល័យពូជសាសន៍"
 msgstr "Day of Victory over the Genocidal Regime"
 
-#. International Women's Rights Day
+#. International Women's Rights Day.
 msgid "ទិវាអន្តរជាតិនារី"
 msgstr "International Women's Rights Day"
 
-#. Khmer New Year's Day
+#. Khmer New Year's Day.
 msgid "ពិធីបុណ្យចូលឆ្នាំថ្មីប្រពៃណីជាតិ"
 msgstr "Khmer New Year's Day"
 
-#. International Labor Day
+#. International Labor Day.
 msgid "ទិវាពលកម្មអន្តរជាតិ"
 msgstr "International Labor Day"
 
-#. Birthday of His Majesty Preah Bat Samdech Preah Boromneath NORODOM SIHAMONI, King of Cambodia
+#. Birthday of His Majesty Preah Bat Samdech Preah Boromneath NORODOM SIHAMONI, King of Cambodia.
 msgid "ព្រះរាជពិធីបុណ្យចម្រើនព្រះជន្ម ព្រះករុណា ព្រះបាទសម្តេចព្រះបរមនាថ នរោត្តម សីហមុនី"
 msgstr "HM King Norodom Sihamoni's Birthday"
 
-#. National Day of Remembrance
+#. National Day of Remembrance.
 msgid "ទិវាជាតិនៃការចងចាំ"
 msgstr "National Day of Remembrance"
 
-#. International Children's Day
+#. International Children's Day.
 msgid "ទិវាកុមារអន្តរជាតិ"
 msgstr "International Children's Day"
 
-#. Birthday of Her Majesty the Queen-Mother NORODOM MONINEATH SIHANOUK of Cambodia
+#. Birthday of Her Majesty the Queen-Mother NORODOM MONINEATH SIHANOUK of Cambodia.
 msgid "ព្រះរាជពិធីបុណ្យចម្រើនព្រះជន្ម សម្តេចព្រះមហាក្សត្រី ព្រះវររាជមាតា នរោត្តម មុនិនាថ សីហនុ"
 msgstr "HM Queen Norodom Monineath Sihanouk the Queen-Mother's Birthday"
 
-#. Constitution Day
+#. Constitution Day.
 msgid "ទិវាប្រកាសរដ្ឋធម្មនុញ្ញ"
 msgstr "Constitution Day"
 
-#. Mourning Day of the Late King-Father NORODOM SIHANOUK of Cambodia
+#. Mourning Day of the Late King-Father NORODOM SIHANOUK of Cambodia.
 msgid ""
 "ទិវាប្រារព្ឋពិធីគោរពព្រះវិញ្ញាណក្ខន្ឋ ព្រះករុណា ព្រះបាទសម្តេចព្រះ នរោត្តម សីហនុ ព្រះមហាវីរក្សត្រ "
 "ព្រះវររាជបិតាឯករាជ្យ បូរណភាពទឹកដី និងឯកភាពជាតិខ្មែរ ព្រះបរមរតនកោដ្ឋ"
 msgstr "HM King Norodom Sihanouk Mourning Day"
 
-#. Paris Peace Agreement's Day
+#. Paris Peace Agreement's Day.
 msgid "ទិវារំលឹកសន្ធិសញ្ញាសន្តិភាពទីក្រុងប៉ារីស"
 msgstr "Paris Peace Agreement's Day"
 
 #. Coronation Day of His Majesty Preah Bat Samdech Preah Boromneath NORODOM SIHAMONI, King of
-#. Cambodia
+#. Cambodia.
 msgid ""
 "ព្រះរាជពិធីគ្រងព្រះបរមរាជសម្បត្តិ របស់ ព្រះករុណា ព្រះបាទសម្តេចព្រះបរមនាថ នរោត្តម សីហមុនី "
 "ព្រះមហាក្សត្រនៃព្រះរាជាណាចក្រកម្ពុជា"
 msgstr "HM King Norodom Sihamoni's Coronation Day"
 
-#. National Independence Day
+#. National Independence Day.
 msgid "ពិធីបុណ្យឯករាជ្យជាតិ"
 msgstr "National Independence Day"
 
-#. International Human Rights Day
+#. International Human Rights Day.
 msgid "ទិវាសិទ្ធិមនុស្សអន្តរជាតិ"
 msgstr "International Human Rights Day"
 
-#. Meak Bochea Day
+#. Meak Bochea Day.
 msgid "ពិធីបុណ្យមាឃបូជា"
 msgstr "Meak Bochea Day"
 
-#. Visaka Bochea Day
+#. Visaka Bochea Day.
 msgid "ពិធីបុណ្យវិសាខបូជា"
 msgstr "Visaka Bochea Day"
 
-#. Royal Ploughing Ceremony
+#. Royal Ploughing Ceremony.
 msgid "ព្រះរាជពិធីច្រត់ព្រះនង្គ័ល"
 msgstr "Royal Ploughing Ceremony"
 
-#. Pchum Ben Day
+#. Pchum Ben Day.
 msgid "ពិធីបុណ្យភ្ផុំបិណ្ឌ"
 msgstr "Pchum Ben Day"
 
-#. Water Festival
+#. Water Festival.
 msgid "ព្រះរាជពិធីបុណ្យអុំទូក បណ្តែតប្រទីប និងសំពះព្រះខែអកអំបុក"
 msgstr "Water Festival"
 
diff --git a/holidays/locale/hi/LC_MESSAGES/IN.po b/holidays/locale/hi/LC_MESSAGES/IN.po
index 86b400c3..dd28b206 100644
--- a/holidays/locale/hi/LC_MESSAGES/IN.po
+++ b/holidays/locale/hi/LC_MESSAGES/IN.po
@@ -14,7 +14,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.69\n"
+"Project-Id-Version: Holidays 0.72\n"
 "POT-Creation-Date: 2025-02-28 01:24+0530\n"
 "PO-Revision-Date: 2025-03-01 15:11+0530\n"
 "Last-Translator: Ankush Kapoor <work.ankushkapoor1626@gmail.com>\n"
@@ -306,3 +306,11 @@ msgstr "माघ बिहू"
 #. Buddha Purnima.
 msgid "Buddha Purnima"
 msgstr "बुद्ध पूर्णिमा"
+
+#. Thiruvalluvar Day / Mattu Pongal.
+msgid "Thiruvalluvar Day / Mattu Pongal"
+msgstr "तिरुवल्लुवर दिवस / मट्टू पोंगल"
+
+#. Uzhavar Thirunal.
+msgid "Uzhavar Thirunal"
+msgstr "उझावर थिरुनल"
diff --git a/holidays/locale/km/LC_MESSAGES/KH.po b/holidays/locale/km/LC_MESSAGES/KH.po
index 9ff9b57e..a45f4344 100644
--- a/holidays/locale/km/LC_MESSAGES/KH.po
+++ b/holidays/locale/km/LC_MESSAGES/KH.po
@@ -16,7 +16,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Holidays 0.61\n"
 "POT-Creation-Date: 2023-06-07 20:10+0700\n"
-"PO-Revision-Date: 2024-11-06 00:21+0700\n"
+"PO-Revision-Date: 2025-04-28 09:57+0700\n"
 "Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
 "Language-Team: Holidays Localization Team\n"
 "Language: km\n"
@@ -24,13 +24,13 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 3.5\n"
+"X-Generator: Poedit 3.6\n"
 
-#. Khmer New Year's Replacement Holiday
+#. Khmer New Year's Replacement Holiday.
 msgid "ថ្ងៃឈប់សម្រាកសងជំនួសឲ្យពិធីបុណ្យចូលឆ្នាំថ្មីប្រពៃណីជាតិ"
 msgstr ""
 
-#. Special Public Holiday
+#. Special Public Holiday.
 msgid "ថ្ងៃឈប់សម្រាកសងជំនួស"
 msgstr ""
 
@@ -42,80 +42,80 @@ msgstr ""
 msgid "ទិវាជ័យជម្នះលើរបបប្រល័យពូជសាសន៍"
 msgstr ""
 
-#. International Women's Rights Day
+#. International Women's Rights Day.
 msgid "ទិវាអន្តរជាតិនារី"
 msgstr ""
 
-#. Khmer New Year's Day
+#. Khmer New Year's Day.
 msgid "ពិធីបុណ្យចូលឆ្នាំថ្មីប្រពៃណីជាតិ"
 msgstr ""
 
-#. International Labor Day
+#. International Labor Day.
 msgid "ទិវាពលកម្មអន្តរជាតិ"
 msgstr ""
 
-#. Birthday of His Majesty Preah Bat Samdech Preah Boromneath NORODOM SIHAMONI, King of Cambodia
+#. Birthday of His Majesty Preah Bat Samdech Preah Boromneath NORODOM SIHAMONI, King of Cambodia.
 msgid "ព្រះរាជពិធីបុណ្យចម្រើនព្រះជន្ម ព្រះករុណា ព្រះបាទសម្តេចព្រះបរមនាថ នរោត្តម សីហមុនី"
 msgstr ""
 
-#. National Day of Remembrance
+#. National Day of Remembrance.
 msgid "ទិវាជាតិនៃការចងចាំ"
 msgstr ""
 
-#. International Children's Day
+#. International Children's Day.
 msgid "ទិវាកុមារអន្តរជាតិ"
 msgstr ""
 
-#. Birthday of Her Majesty the Queen-Mother NORODOM MONINEATH SIHANOUK of Cambodia
+#. Birthday of Her Majesty the Queen-Mother NORODOM MONINEATH SIHANOUK of Cambodia.
 msgid "ព្រះរាជពិធីបុណ្យចម្រើនព្រះជន្ម សម្តេចព្រះមហាក្សត្រី ព្រះវររាជមាតា នរោត្តម មុនិនាថ សីហនុ"
 msgstr ""
 
-#. Constitution Day
+#. Constitution Day.
 msgid "ទិវាប្រកាសរដ្ឋធម្មនុញ្ញ"
 msgstr ""
 
-#. Mourning Day of the Late King-Father NORODOM SIHANOUK of Cambodia
+#. Mourning Day of the Late King-Father NORODOM SIHANOUK of Cambodia.
 msgid ""
 "ទិវាប្រារព្ឋពិធីគោរពព្រះវិញ្ញាណក្ខន្ឋ ព្រះករុណា ព្រះបាទសម្តេចព្រះ នរោត្តម សីហនុ ព្រះមហាវីរក្សត្រ "
 "ព្រះវររាជបិតាឯករាជ្យ បូរណភាពទឹកដី និងឯកភាពជាតិខ្មែរ ព្រះបរមរតនកោដ្ឋ"
 msgstr ""
 
-#. Paris Peace Agreement's Day
+#. Paris Peace Agreement's Day.
 msgid "ទិវារំលឹកសន្ធិសញ្ញាសន្តិភាពទីក្រុងប៉ារីស"
 msgstr ""
 
 #. Coronation Day of His Majesty Preah Bat Samdech Preah Boromneath NORODOM SIHAMONI, King of
-#. Cambodia
+#. Cambodia.
 msgid ""
 "ព្រះរាជពិធីគ្រងព្រះបរមរាជសម្បត្តិ របស់ ព្រះករុណា ព្រះបាទសម្តេចព្រះបរមនាថ នរោត្តម សីហមុនី "
 "ព្រះមហាក្សត្រនៃព្រះរាជាណាចក្រកម្ពុជា"
 msgstr ""
 
-#. National Independence Day
+#. National Independence Day.
 msgid "ពិធីបុណ្យឯករាជ្យជាតិ"
 msgstr ""
 
-#. International Human Rights Day
+#. International Human Rights Day.
 msgid "ទិវាសិទ្ធិមនុស្សអន្តរជាតិ"
 msgstr ""
 
-#. Meak Bochea Day
+#. Meak Bochea Day.
 msgid "ពិធីបុណ្យមាឃបូជា"
 msgstr ""
 
-#. Visaka Bochea Day
+#. Visaka Bochea Day.
 msgid "ពិធីបុណ្យវិសាខបូជា"
 msgstr ""
 
-#. Royal Ploughing Ceremony
+#. Royal Ploughing Ceremony.
 msgid "ព្រះរាជពិធីច្រត់ព្រះនង្គ័ល"
 msgstr ""
 
-#. Pchum Ben Day
+#. Pchum Ben Day.
 msgid "ពិធីបុណ្យភ្ផុំបិណ្ឌ"
 msgstr ""
 
-#. Water Festival
+#. Water Festival.
 msgid "ព្រះរាជពិធីបុណ្យអុំទូក បណ្តែតប្រទីប និងសំពះព្រះខែអកអំបុក"
 msgstr ""
 
diff --git a/holidays/locale/th/LC_MESSAGES/KH.po b/holidays/locale/th/LC_MESSAGES/KH.po
index ee2f3cb9..9a2a07ca 100644
--- a/holidays/locale/th/LC_MESSAGES/KH.po
+++ b/holidays/locale/th/LC_MESSAGES/KH.po
@@ -16,7 +16,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Holidays 0.61\n"
 "POT-Creation-Date: 2023-06-07 20:10+0700\n"
-"PO-Revision-Date: 2024-11-06 00:21+0700\n"
+"PO-Revision-Date: 2025-04-28 09:57+0700\n"
 "Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
 "Language-Team: Holidays Localization Team\n"
 "Language: th\n"
@@ -24,13 +24,13 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 3.5\n"
+"X-Generator: Poedit 3.6\n"
 
-#. Khmer New Year's Replacement Holiday
+#. Khmer New Year's Replacement Holiday.
 msgid "ថ្ងៃឈប់សម្រាកសងជំនួសឲ្យពិធីបុណ្យចូលឆ្នាំថ្មីប្រពៃណីជាតិ"
 msgstr "วันหยุดชดเชยเทศกาลขึ้นปีใหม่ประเพณี"
 
-#. Special Public Holiday
+#. Special Public Holiday.
 msgid "ថ្ងៃឈប់សម្រាកសងជំនួស"
 msgstr "วันหยุดชดเชย"
 
@@ -42,41 +42,41 @@ msgstr "วันปีใหม่สากล"
 msgid "ទិវាជ័យជម្នះលើរបបប្រល័យពូជសាសន៍"
 msgstr "วันชัยชนะเหนือระบอบฆ่าล้างเผ่าพันธุ์เขมรแดง"
 
-#. International Women's Rights Day
+#. International Women's Rights Day.
 msgid "ទិវាអន្តរជាតិនារី"
 msgstr "วันสตรีสากล"
 
-#. Khmer New Year's Day
+#. Khmer New Year's Day.
 msgid "ពិធីបុណ្យចូលឆ្នាំថ្មីប្រពៃណីជាតិ"
 msgstr "เทศกาลขึ้นปีใหม่ประเพณี"
 
-#. International Labor Day
+#. International Labor Day.
 msgid "ទិវាពលកម្មអន្តរជាតិ"
 msgstr "วันแรงงานสากล"
 
-#. Birthday of His Majesty Preah Bat Samdech Preah Boromneath NORODOM SIHAMONI, King of Cambodia
+#. Birthday of His Majesty Preah Bat Samdech Preah Boromneath NORODOM SIHAMONI, King of Cambodia.
 msgid "ព្រះរាជពិធីបុណ្យចម្រើនព្រះជន្ម ព្រះករុណា ព្រះបាទសម្តេចព្រះបរមនាថ នរោត្តម សីហមុនី"
 msgstr ""
 "พระราชพิธีเฉลิมพระชนมพรรษา พระบาทสมเด็จพระบรมนาถ นโรดมสีหมุนี "
 "พระมหากษัตริย์แห่งราชอาณาจักรกัมพูชา"
 
-#. National Day of Remembrance
+#. National Day of Remembrance.
 msgid "ទិវាជាតិនៃការចងចាំ"
 msgstr "วันแห่งความทรงจำ"
 
-#. International Children's Day
+#. International Children's Day.
 msgid "ទិវាកុមារអន្តរជាតិ"
 msgstr "วันเด็กสากล"
 
-#. Birthday of Her Majesty the Queen-Mother NORODOM MONINEATH SIHANOUK of Cambodia
+#. Birthday of Her Majesty the Queen-Mother NORODOM MONINEATH SIHANOUK of Cambodia.
 msgid "ព្រះរាជពិធីបុណ្យចម្រើនព្រះជន្ម សម្តេចព្រះមហាក្សត្រី ព្រះវររាជមាតា នរោត្តម មុនិនាថ សីហនុ"
 msgstr "พระราชพิธีเฉลิมพระชนมพรรษา สมเด็จพระบรมราชินี นโรดม มนีนาถ สีหนุ"
 
-#. Constitution Day
+#. Constitution Day.
 msgid "ទិវាប្រកាសរដ្ឋធម្មនុញ្ញ"
 msgstr "วันรัฐธรรมนูญ"
 
-#. Mourning Day of the Late King-Father NORODOM SIHANOUK of Cambodia
+#. Mourning Day of the Late King-Father NORODOM SIHANOUK of Cambodia.
 msgid ""
 "ទិវាប្រារព្ឋពិធីគោរពព្រះវិញ្ញាណក្ខន្ឋ ព្រះករុណា ព្រះបាទសម្តេចព្រះ នរោត្តម សីហនុ ព្រះមហាវីរក្សត្រ "
 "ព្រះវររាជបិតាឯករាជ្យ បូរណភាពទឹកដី និងឯកភាពជាតិខ្មែរ ព្រះបរមរតនកោដ្ឋ"
@@ -84,12 +84,12 @@ msgstr ""
 "วันสดุดีพระบาทสมเด็จพระบรมนาถนโรดม สีหนุ พระบิดาแห่งเอกราช บูรณภาพแห่งดินแดน "
 "และเอกภาพของชาติกัมพูชา"
 
-#. Paris Peace Agreement's Day
+#. Paris Peace Agreement's Day.
 msgid "ទិវារំលឹកសន្ធិសញ្ញាសន្តិភាពទីក្រុងប៉ារីស"
 msgstr "วันรำลึกข้อตกลงสันติภาพกรุงปารีส"
 
 #. Coronation Day of His Majesty Preah Bat Samdech Preah Boromneath NORODOM SIHAMONI, King of
-#. Cambodia
+#. Cambodia.
 msgid ""
 "ព្រះរាជពិធីគ្រងព្រះបរមរាជសម្បត្តិ របស់ ព្រះករុណា ព្រះបាទសម្តេចព្រះបរមនាថ នរោត្តម សីហមុនី "
 "ព្រះមហាក្សត្រនៃព្រះរាជាណាចក្រកម្ពុជា"
@@ -97,31 +97,31 @@ msgstr ""
 "พระราชพิธีเฉลิมฉลองการขึ้นครองราชสมบัติ พระบาทสมเด็จพระบรมนาถ นโรดมสีหมุนี "
 "พระมหากษัตริย์แห่งราชอาณาจักรกัมพูชา"
 
-#. National Independence Day
+#. National Independence Day.
 msgid "ពិធីបុណ្យឯករាជ្យជាតិ"
 msgstr "วันประกาศเอกราชจากฝรั่งเศส"
 
-#. International Human Rights Day
+#. International Human Rights Day.
 msgid "ទិវាសិទ្ធិមនុស្សអន្តរជាតិ"
 msgstr "วันสิทธิมนุษยชนโลก"
 
-#. Meak Bochea Day
+#. Meak Bochea Day.
 msgid "ពិធីបុណ្យមាឃបូជា"
 msgstr "วันมาฆบูชา"
 
-#. Visaka Bochea Day
+#. Visaka Bochea Day.
 msgid "ពិធីបុណ្យវិសាខបូជា"
 msgstr "วันวิสาขบูชา"
 
-#. Royal Ploughing Ceremony
+#. Royal Ploughing Ceremony.
 msgid "ព្រះរាជពិធីច្រត់ព្រះនង្គ័ល"
 msgstr "พระราชพิธีบุญจรดพระนังคัลแรกนาขวัญ"
 
-#. Pchum Ben Day
+#. Pchum Ben Day.
 msgid "ពិធីបុណ្យភ្ផុំបិណ្ឌ"
 msgstr "เทศกาลงานวันสาร์ทภจุมบิณฑ์เขมร"
 
-#. Water Festival
+#. Water Festival.
 msgid "ព្រះរាជពិធីបុណ្យអុំទូក បណ្តែតប្រទីប និងសំពះព្រះខែអកអំបុក"
 msgstr "พระราชพิธีบุญแข่งเรือลอยกระทงไฟไหว้พระจันทร์และกินข้าวเม่า"
 


Test patch:
diff --git a/tests/countries/test_india.py b/tests/countries/test_india.py
index 07dc3624..2dd385b4 100644
--- a/tests/countries/test_india.py
+++ b/tests/countries/test_india.py
@@ -147,6 +147,8 @@ class TestIndia(CommonCountryTests, TestCase):
             ),
             "TN": (
                 "2018-01-14",
+                "2018-01-15",
+                "2018-01-16",
                 "2018-04-14",
             ),
             "TS": (
@@ -393,6 +395,32 @@ class TestIndia(CommonCountryTests, TestCase):
             else:
                 self.assertNoHolidayName(name, India(subdiv=subdiv), dt)
 
+        dt = (
+            "2001-01-15",
+            "2010-01-15",
+            "2025-01-15",
+            "2035-01-16",
+        )
+        name = "Thiruvalluvar Day / Mattu Pongal"
+        for subdiv in India.subdivisions:
+            if subdiv in {"TN"}:
+                self.assertHolidayName(name, India(subdiv=subdiv), dt)
+            else:
+                self.assertNoHolidayName(name, India(subdiv=subdiv), dt)
+
+        dt = (
+            "2001-01-16",
+            "2010-01-16",
+            "2025-01-16",
+            "2035-01-17",
+        )
+        name = "Uzhavar Thirunal"
+        for subdiv in India.subdivisions:
+            if subdiv in {"TN"}:
+                self.assertHolidayName(name, India(subdiv=subdiv), dt)
+            else:
+                self.assertNoHolidayName(name, India(subdiv=subdiv), dt)
+
     def test_ranged_optional_holidays(self):
         opt_holidays = India(categories=OPTIONAL)
 
@@ -501,6 +529,8 @@ class TestIndia(CommonCountryTests, TestCase):
         self.assertLocalizedHolidays(
             ("2018-01-13", "Lohri"),
             ("2018-01-14", "Magh Bihu; Makar Sankranti; Pongal; Uttarayan"),
+            ("2018-01-15", "Thiruvalluvar Day / Mattu Pongal"),
+            ("2018-01-16", "Uzhavar Thirunal"),
             ("2018-01-24", "UP Formation Day"),
             ("2018-01-26", "Republic Day"),
             ("2018-02-13", "Maha Shivaratri"),
@@ -567,6 +597,8 @@ class TestIndia(CommonCountryTests, TestCase):
             "hi",
             ("2018-01-13", "लोहड़ी"),
             ("2018-01-14", "उत्तरायण; पोंगल; मकर संक्रांति; माघ बिहू"),
+            ("2018-01-15", "तिरुवल्लुवर दिवस / मट्टू पोंगल"),
+            ("2018-01-16", "उझावर थिरुनल"),
             ("2018-01-24", "यूपी स्थापना दिवस"),
             ("2018-01-26", "गणतंत्र दिवस"),
             ("2018-02-13", "महाशिवरात्रि"),
@@ -628,6 +660,8 @@ class TestIndia(CommonCountryTests, TestCase):
             "en_US",
             ("2018-01-13", "Lohri"),
             ("2018-01-14", "Magh Bihu; Makar Sankranti; Pongal; Uttarayan"),
+            ("2018-01-15", "Thiruvalluvar Day / Mattu Pongal"),
+            ("2018-01-16", "Uzhavar Thirunal"),
             ("2018-01-24", "UP Formation Day"),
             ("2018-01-26", "Republic Day"),
             ("2018-02-13", "Maha Shivaratri"),