+
Skip to content

Add Faroe Islands holidays #2606

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 23 commits into from

Conversation

Shrot101
Copy link
Contributor

@Shrot101 Shrot101 commented Jun 6, 2025

Proposed change

  • Introduced a new holiday provider: Faroe Islands.
  • Implemented all official public holidays based on trusted sources.
  • Included half-day recognition (e.g., Ólavsøkuaftan).
  • Created country aliases: FO and FRO.

Type of change

  • 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)
  • New feature (new holidays functionality in general)

Fixed: #2511

Checklist

References

https://visitfaroeislands.com/en/plan-your-stay/before-you-arrive-in-the-faroe-islands/public-holidays
https://en.wikipedia.org/wiki/Public_holidays_in_the_Faroe_Islands

Copy link
Contributor

coderabbitai bot commented Jun 6, 2025

Summary by CodeRabbit

  • New Features

    • Added support for Faroe Islands holidays, including both public and half-day holidays, from 1948 onwards.
    • Introduced aliases and country codes for Faroe Islands (FO, FRO).
    • Added localizations for Faroe Islands holidays in Faroese, Danish, English (US), Icelandic, Norwegian, and Swedish.
  • Documentation

    • Updated the README to include Faroe Islands in the list of supported countries.
  • Tests

    • Added comprehensive tests for Faroe Islands holiday calculations and localizations.
  • Chores

    • Updated ignore patterns to exclude all __pycache__ directories.

Summary by CodeRabbit

  • New Features

    • Added support for Faroe Islands holidays, including both public and half-day holidays, with coverage from 1948 onward.
    • Introduced aliases for Faroe Islands using FO and FRO country codes.
    • Faroe Islands holidays are now available in multiple languages: Faroese, Danish, English, Icelandic, Norwegian, and Swedish.
  • Documentation

    • Updated the documentation to include Faroe Islands in the list of supported countries and languages.
  • Tests

    • Added tests to verify correct holiday names, aliases, and localization for the Faroe Islands.
  • Chores

    • Updated configuration to ignore all __pycache__ directories recursively.

Walkthrough

The changes introduce support for Faroe Islands holidays by adding a new country module, updating the country imports and registry, adding multiple localization files, and providing comprehensive tests. The .gitignore file is also updated to exclude all __pycache__ directories recursively.

Changes

Files/Paths Change Summary
.gitignore Added pattern to ignore all __pycache__ directories recursively.
holidays/countries/__init__.py Imported Faroe Islands holiday module and its aliases.
holidays/countries/faroe_islands.py New module defining Faroe Islands holidays, aliases, and localization metadata.
holidays/registry.py Added Faroe Islands entry to the countries registry dictionary.
holidays/locale/{da,en_US,fo,is,no,sv}/LC_MESSAGES/FO.po Added localization files with translations of Faroe Islands holiday names in multiple languages.
tests/countries/test_faroe_islands.py New tests for Faroe Islands holidays, aliases, and localization.
README.md Updated supported countries count and added Faroe Islands entry with supported languages info.

Assessment against linked issues

Objective Addressed Explanation
Add Faroe Islands holidays and aliases (2511)
Define public and Christian holidays correctly
Provide localized holiday names
Include tests verifying holidays and localization

Assessment against linked issues: Out-of-scope changes

No out-of-scope changes detected.

Possibly related PRs

Suggested reviewers

  • KJhellico
  • PPsyrius
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate Unit Tests
  • Create PR with Unit Tests
  • Post Copyable Unit Tests in Comment

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • 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 explain this code block.
    • @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 explain its main purpose.
    • @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.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

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 for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai auto-generate unit tests to generate unit tests for 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 for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot added the test label Jun 6, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7618b69 and e1f21fc.

📒 Files selected for processing (4)
  • .gitignore (1 hunks)
  • holidays/countries/__init__.py (1 hunks)
  • holidays/countries/faroe_islands.py (1 hunks)
  • tests/countries/test_faroe_islands.py (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
tests/countries/test_faroe_islands.py (2)
Learnt from: PPsyrius
PR: vacanza/holidays#2416
File: tests/countries/test_turkmenistan.py:85-86
Timestamp: 2025-04-05T04:29:38.042Z
Learning: For testing holiday implementations in the vacanza/holidays repository, recommend using `from tests.common import CommonCountryTests` as the base class instead of directly using `unittest.TestCase` to maintain consistency with project conventions and leverage common test utilities.
Learnt from: PPsyrius
PR: vacanza/holidays#2416
File: tests/countries/test_turkmenistan.py:31-49
Timestamp: 2025-04-05T04:50:40.752Z
Learning: For Turkmenistan holiday tests, use this class structure: `class TestTurkmenistan(CommonCountryTests, TestCase)` with imports `from unittest import TestCase`, `from holidays.countries import Turkmenistan, TM, TKM`, and `from tests.common import CommonCountryTests`. Ensure to call `super().setUp()` in the setUp method.
🧬 Code Graph Analysis (1)
holidays/countries/__init__.py (1)
holidays/countries/faroe_islands.py (3)
  • FaroeIslands (9-83)
  • FO (86-87)
  • FRO (90-91)
🪛 Ruff (0.11.9)
tests/countries/test_faroe_islands.py

3-3: holidays.constants.PUBLIC imported but unused

Remove unused import: holidays.constants.PUBLIC

(F401)


43-43: No newline at end of file

Add trailing newline

(W292)

holidays/countries/faroe_islands.py

1-1: datetime.date imported but unused

Remove unused import: datetime.date

(F401)

🪛 Pylint (3.3.7)
tests/countries/test_faroe_islands.py

[convention] 43-43: Final newline missing

(C0304)


[convention] 1-1: Missing module docstring

(C0114)


[convention] 8-8: Missing class docstring

(C0115)


[warning] 10-10: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestFaroeIslands.setUpClass' method

(W0221)


[convention] 14-14: Missing function or method docstring

(C0116)


[convention] 18-18: Missing function or method docstring

(C0116)


[convention] 21-21: Missing function or method docstring

(C0116)


[convention] 24-24: Missing function or method docstring

(C0116)


[warning] 3-3: Unused PUBLIC imported from holidays.constants

(W0611)

holidays/countries/faroe_islands.py

[convention] 14-14: Line too long (112/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[convention] 86-86: Missing class docstring

(C0115)


[convention] 90-90: Missing class docstring

(C0115)


[warning] 1-1: Unused date imported from datetime

(W0611)

🔇 Additional comments (4)
.gitignore (1)

26-26: Good addition for Python cache exclusion.

The recursive **/__pycache__/ pattern properly excludes all Python bytecode cache directories at any depth in the project structure.

holidays/countries/__init__.py (1)

74-74: Properly integrated country import.

The import follows the established pattern and is correctly positioned alphabetically among other country imports.

holidays/countries/faroe_islands.py (2)

9-83: Comprehensive and well-structured holiday implementation.

The FaroeIslands class properly inherits from the required base classes and implements a complete set of public holidays. The holiday definitions are well-documented with clear comments, and the use of the translation function ensures proper localization support. The start year of 1948 correctly corresponds to the year of home rule.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 14-14: Line too long (112/100)

(C0301)


86-91: Simple and effective alias classes.

The FO and FRO alias classes provide the expected country code alternatives while maintaining the same functionality through inheritance.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 86-86: Missing class docstring

(C0115)


[convention] 90-90: Missing class docstring

(C0115)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
tests/countries/test_faroe_islands.py (1)

44-44: 🧹 Nitpick (assertive)

Add the missing trailing newline.

Despite previous attempts to fix this, the file still lacks a proper trailing newline.

Ensure the file ends with a single newline character after the closing parenthesis.

🧰 Tools
🪛 Ruff (0.11.9)

44-44: Blank line contains whitespace

Remove whitespace from blank line

(W293)


44-44: No newline at end of file

Add trailing newline

(W292)

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between dc24319 and 09b027a.

📒 Files selected for processing (2)
  • .gitignore (1 hunks)
  • tests/countries/test_faroe_islands.py (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
tests/countries/test_faroe_islands.py (2)
Learnt from: PPsyrius
PR: vacanza/holidays#2416
File: tests/countries/test_turkmenistan.py:85-86
Timestamp: 2025-04-05T04:29:38.042Z
Learning: For testing holiday implementations in the vacanza/holidays repository, recommend using `from tests.common import CommonCountryTests` as the base class instead of directly using `unittest.TestCase` to maintain consistency with project conventions and leverage common test utilities.
Learnt from: PPsyrius
PR: vacanza/holidays#2416
File: tests/countries/test_turkmenistan.py:31-49
Timestamp: 2025-04-05T04:50:40.752Z
Learning: For Turkmenistan holiday tests, use this class structure: `class TestTurkmenistan(CommonCountryTests, TestCase)` with imports `from unittest import TestCase`, `from holidays.countries import Turkmenistan, TM, TKM`, and `from tests.common import CommonCountryTests`. Ensure to call `super().setUp()` in the setUp method.
🪛 Ruff (0.11.9)
tests/countries/test_faroe_islands.py

42-42: Blank line contains whitespace

Remove whitespace from blank line

(W293)


44-44: Blank line contains whitespace

Remove whitespace from blank line

(W293)


44-44: No newline at end of file

Add trailing newline

(W292)

🪛 Pylint (3.3.7)
tests/countries/test_faroe_islands.py

[convention] 42-42: Trailing whitespace

(C0303)


[convention] 1-1: Missing module docstring

(C0114)


[convention] 7-7: Missing class docstring

(C0115)


[warning] 9-9: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestFaroeIslands.setUpClass' method

(W0221)


[convention] 13-13: Missing function or method docstring

(C0116)


[convention] 17-17: Missing function or method docstring

(C0116)


[convention] 20-20: Missing function or method docstring

(C0116)


[convention] 23-23: Missing function or method docstring

(C0116)

🔇 Additional comments (4)
.gitignore (1)

26-26: Good addition for Python cache management.

The recursive **/__pycache__/ pattern properly excludes Python bytecode cache directories at any depth, which is essential for clean version control.

tests/countries/test_faroe_islands.py (3)

1-11: Solid test structure following project conventions.

The class properly inherits from CommonCountryTests and TestCase as recommended by project learnings, and the setup correctly initializes the years range.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 1-1: Missing module docstring

(C0114)


[convention] 7-7: Missing class docstring

(C0115)


[warning] 9-9: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestFaroeIslands.setUpClass' method

(W0221)


13-14: Aliases test correctly implemented.

Good coverage of the FO alias verification.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 13-13: Missing function or method docstring

(C0116)


17-21: Holiday name tests provide good coverage.

Testing specific holidays like New Year's Day and National Day across the full year range ensures consistency.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 17-17: Missing function or method docstring

(C0116)


[convention] 20-20: Missing function or method docstring

(C0116)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 09b027a and 305507b.

📒 Files selected for processing (2)
  • holidays/countries/faroe_islands.py (1 hunks)
  • tests/countries/test_faroe_islands.py (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (2)
tests/countries/test_faroe_islands.py (2)
tests/common.py (4)
  • CommonCountryTests (356-374)
  • assertAliases (121-130)
  • assertHolidayName (195-199)
  • assertLocalizedHolidays (327-338)
holidays/countries/faroe_islands.py (2)
  • FaroeIslands (20-95)
  • FO (98-99)
holidays/countries/faroe_islands.py (3)
holidays/groups/christian.py (11)
  • ChristianHolidays (22-463)
  • _add_holy_thursday (328-337)
  • _add_good_friday (308-317)
  • _add_easter_sunday (270-279)
  • _add_easter_monday (259-268)
  • _add_ascension_thursday (119-127)
  • _add_whit_sunday (443-453)
  • _add_whit_monday (432-441)
  • _add_christmas_eve (237-245)
  • _add_christmas_day (208-216)
  • _add_christmas_day_two (218-226)
holidays/groups/international.py (3)
  • InternationalHolidays (18-220)
  • _add_new_years_day (126-134)
  • _add_new_years_eve (176-185)
holidays/holiday_base.py (1)
  • HolidayBase (57-1301)
🪛 Pylint (3.3.7)
tests/countries/test_faroe_islands.py

[convention] 1-1: Missing module docstring

(C0114)


[convention] 19-19: Missing class docstring

(C0115)


[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestFaroeIslands.setUpClass' method

(W0221)


[convention] 25-25: Missing function or method docstring

(C0116)


[convention] 28-28: Missing function or method docstring

(C0116)


[convention] 31-31: Missing function or method docstring

(C0116)


[convention] 34-34: Missing function or method docstring

(C0116)

holidays/countries/faroe_islands.py

[convention] 1-1: Missing module docstring

(C0114)


[convention] 98-98: Missing class docstring

(C0115)


[convention] 102-102: Missing class docstring

(C0115)

🔇 Additional comments (3)
holidays/countries/faroe_islands.py (1)

20-95: Solid implementation of Faroe Islands holidays.

The class structure is well-designed and follows the framework patterns correctly. The holiday implementation covers all major Faroese holidays with proper localization. The use of both Christian and International holiday groups is appropriate.

tests/countries/test_faroe_islands.py (2)

19-33: Comprehensive test coverage with proper structure.

The test class correctly inherits from both CommonCountryTests and TestCase, following the framework patterns. The alias test and holiday name tests provide good coverage across multiple years.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 19-19: Missing class docstring

(C0115)


[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestFaroeIslands.setUpClass' method

(W0221)


[convention] 25-25: Missing function or method docstring

(C0116)


[convention] 28-28: Missing function or method docstring

(C0116)


[convention] 31-31: Missing function or method docstring

(C0116)


34-53: Thorough localization test covering all major holidays.

The localization test comprehensively covers all the public holidays defined in the FaroeIslands class, ensuring the Faroese names are correctly mapped to their respective dates for 2023. This provides good validation of the holiday implementation.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 34-34: Missing function or method docstring

(C0116)

@KJhellico KJhellico changed the title Added the holidays and test for Faroe islands Add Faroe Islands holidays Jun 6, 2025
@KJhellico KJhellico marked this pull request as draft June 6, 2025 13:30
@KJhellico
Copy link
Collaborator

@Shrot101, it's good start, but it needs to be significantly improved. I advise you to look at latest merged PRs as example (#2583, #2582, #2571, #2562), to better understand requirements and standards established in this project.

@Shrot101
Copy link
Contributor Author

Shrot101 commented Jun 6, 2025

@Shrot101, it's good start, but it needs to be significantly improved. I advise you to look at latest merged PRs as example (#2583, #2582, #2571, #2562), to better understand requirements and standards established in this project.

Thank you for guiding me. Please tell me how to implement a translation file in the locale folder. Do I have to create it for all the languages "da", "en_US", "fo", "is", "no", "sv".

@github-actions github-actions bot added the l10n label Jun 6, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🔭 Outside diff range comments (4)
holidays/locale/sv/LC_MESSAGES/FO.po (1)

29-102: 🧹 Nitpick (assertive)

Verify Swedish translations.
All entries are populated, but please have a Swedish‐native double-check idiomatic accuracy for terms like “Bönedag”, “Grundlagsdag” and “Olofsmässafton”.

holidays/locale/no/LC_MESSAGES/FO.po (1)

29-102: 🧹 Nitpick (assertive)

Review Norwegian translations.
All msgstr fields are filled. Consider a quick native pass on entries like “Store bededag” and the observed-format string.

holidays/locale/is/LC_MESSAGES/FO.po (1)

29-102: 🧹 Nitpick (assertive)

Check Icelandic translations.
Entries look complete; recommend an Icelandic‐native review for terms like “Ólafsvöku aðfaranótt” and plural forms.

holidays/locale/da/LC_MESSAGES/FO.po (1)

29-102: 🧹 Nitpick (assertive)

Danish translations review.
Ensure consistency in capitalization (e.g., “Kristi Himmelfartsdag”) and that phrases like “Anden påskedag” follow Danish norms.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 305507b and c261e9c.

📒 Files selected for processing (8)
  • README.md (2 hunks)
  • holidays/locale/da/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/en_US/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/fo/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/is/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/no/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/sv/LC_MESSAGES/FO.po (1 hunks)
  • holidays/registry.py (1 hunks)
🔇 Additional comments (8)
holidays/locale/sv/LC_MESSAGES/FO.po (1)

15-28: PO header looks good.
Metadata and Language: sv align with project conventions. No changes required.

holidays/locale/no/LC_MESSAGES/FO.po (1)

15-28: Confirm language code usage.
The header uses Language: no—verify this matches the project’s locale naming (e.g., nb vs. nn).

holidays/locale/en_US/LC_MESSAGES/FO.po (2)

15-28: PO header is correct.
Version, timestamps and Language: en_US meet project standards.


29-102: English translations verified.
Translations accurately reflect official holiday names (e.g., “National Flag Day”, “St. Olaf’s Eve”).

holidays/locale/is/LC_MESSAGES/FO.po (1)

15-28: PO header is fine.
Language: is is correct for Icelandic, and metadata follows conventions.

holidays/locale/da/LC_MESSAGES/FO.po (1)

15-28: PO header consistency.
Metadata and Language: da match expectations.

holidays/registry.py (1)

83-83: Registration looks correct
Entry is properly named, in alphabetical order, and matches the class and code conventions.

README.md (1)

108-108:

✅ Verification successful

Validate country count header
The header says "184 country codes"; please ensure this matches the actual number of entries in COUNTRIES.


🏁 Script executed:

#!/bin/bash
# Verify that COUNTRY count equals 184
python3 - << 'EOF'
from holidays.registry import COUNTRIES
print(len(COUNTRIES))
EOF

Length of output: 15


✅ Country count verified
The README header “184 country codes” matches the actual count (len(COUNTRIES) == 184). No changes required.

Copy link

codecov bot commented Jun 6, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 100.00%. Comparing base (5176c05) to head (82a258c).
Report is 12 commits behind head on dev.

Additional details and impacted files
@@            Coverage Diff            @@
##               dev     #2606   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          253       254    +1     
  Lines        15201     15239   +38     
  Branches      2095      2095           
=========================================
+ Hits         15201     15239   +38     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@KJhellico
Copy link
Collaborator

Please tell me how to implement a translation file in the locale folder. Do I have to create it for all the languages "da", "en_US", "fo", "is", "no", "sv".

Usual way is run make l10n - it's create .po file for default language. Then use it as a base for other translations.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (2)
holidays/locale/fo/LC_MESSAGES/FO.po (2)

13-13: Clarify the localization comment.
Update the comment from
# Faroe Islands holidays fo localization.
to
# Faroe Islands holidays Faroese localization.


26-26: Remove unnecessary metadata.
Please delete the header line
"Generated-By: ChatGPT\n"
as it isn’t needed and may confuse future contributors.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c261e9c and 8b44021.

📒 Files selected for processing (2)
  • README.md (2 hunks)
  • holidays/locale/fo/LC_MESSAGES/FO.po (1 hunks)
🔇 Additional comments (1)
holidays/locale/fo/LC_MESSAGES/FO.po (1)

31-32: Faroese suffix translation is correct.
The msgstr uses %s (eygleitt), which properly localizes the “(observed)” suffix. No change needed.

@Shrot101 Shrot101 marked this pull request as ready for review June 6, 2025 17:02
Comment on lines 21 to 27
"""
Faroe Islands holidays.

References:
- https://visitfaroeislands.com/en/plan-your-stay/before-you-arrive-in-the-faroe-islands/\
public-holidays
- https://en.wikipedia.org/wiki/Public_holidays_in_the_Faroe_Islands
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"""
Faroe Islands holidays.
References:
- https://visitfaroeislands.com/en/plan-your-stay/before-you-arrive-in-the-faroe-islands/\
public-holidays
- https://en.wikipedia.org/wiki/Public_holidays_in_the_Faroe_Islands
"""Faroe Islands holidays.
References:
* <https://en.wikipedia.org/wiki/Public_holidays_in_the_Faroe_Islands>
* <https://visitfaroeislands.com/en/plan-your-stay/before-you-arrive-in-the-faroe-islands/public-holidays>

You also need to add localization sources.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please elaborate. What exactly do you mean by localization sources?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where do you get translations into other languages?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This question is still relevant. 👆

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Honestly speaking I used gemini + chatgpt

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't use such things. You can use Denmark holidays for checking the languages that are available there.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, can I add the the wiki links of each language translations and the these links as localization resources?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Conclusion: The translations provided are perfect and non-erronous.
Please verify it if needed @KJhellico

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@KJhellico Any suggestions?


country = "FO"
default_language = "fo"
supported_categories = (OPTIONAL, PUBLIC)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional holidays should be placed into _populate_optional_holidays(), if any.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have not found any. Just kept it for future uses

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In Denmark Workers' Day, Constitution Day, Christmas Eve and New Year's Eve are OPTIONAL holidays. Is it different in Faroe Islands?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I thoroughly checked, and all are either public holidays or half days.

"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: ChatGPT\n"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"Generated-By: ChatGPT\n"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What source should I use? Please provide steps too.

@Shrot101 Shrot101 requested a review from KJhellico June 7, 2025 16:25
@KJhellico
Copy link
Collaborator

First of all, you need to merge latest changes from dev and resolve conflicts.

Signed-off-by: Shrot101 <128983465+Shrot101@users.noreply.github.com>
@KJhellico
Copy link
Collaborator

[ ] I've followed the contributing guidelines
[ ] I've successfully run make check, all checks and tests are green

These statements are not just a formality here.

@Shrot101
Copy link
Contributor Author

Shrot101 commented Jun 7, 2025

First of all, you need to merge latest changes from dev and resolve conflicts.

Yes, just found that. I just started so learning it.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🔭 Outside diff range comments (2)
holidays/countries/__init__.py (1)

248-248: 🛠️ Refactor suggestion

Add missing Faroe Islands import to existing structure.

The Faroe Islands import is missing from the existing import structure. Add it in alphabetical order after Ethiopia.

 from holidays.countries.ethiopia import Ethiopia, ET, ETH
+from holidays.countries.faroe_islands import FaroeIslands, FO, FRO
 from holidays.countries.fiji import Fiji, FJ, FJI
tests/countries/test_faroe_islands.py (1)

61-62: 🧹 Nitpick (assertive)

Add missing trailing newline.

The file is missing a trailing newline, which violates formatting standards.

         self.assertLocalizedHolidays(*self.holidays_2023)
+
🧰 Tools
🪛 Pylint (3.3.7)

[convention] 61-61: Trailing newlines

(C0305)

♻️ Duplicate comments (2)
tests/countries/test_faroe_islands.py (2)

1-12: 🧹 Nitpick (assertive)

Add missing module docstring.

Following project documentation standards, the test module needs a docstring.

+"""Tests for Faroe Islands holidays."""
+
 #  holidays
🧰 Tools
🪛 Pylint (3.3.7)

[convention] 1-1: Missing module docstring

(C0114)


58-60: 🛠️ Refactor suggestion

Remove duplicate test logic.

The test_2023_and_localization method duplicates the exact same holiday verification as test_2023. Combine the localization testing into the existing test method.

-    def test_2023_and_localization(self):
-        self.assertHolidays(FaroeIslands(categories=(PUBLIC, HALF_DAY)), *self.holidays_2023)
-        self.assertLocalizedHolidays(*self.holidays_2023)

And update the test_2023 method:

     def test_2023(self):
         self.assertHolidays(FaroeIslands(categories=(PUBLIC, HALF_DAY)), *self.holidays_2023)
+        self.assertLocalizedHolidays(*self.holidays_2023)
🧰 Tools
🪛 Pylint (3.3.7)

[convention] 58-58: Missing function or method docstring

(C0116)

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 925ea35 and 5c55b42.

📒 Files selected for processing (4)
  • README.md (1 hunks)
  • holidays/countries/__init__.py (2 hunks)
  • holidays/registry.py (1 hunks)
  • tests/countries/test_faroe_islands.py (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
README.md (1)
Learnt from: KJhellico
PR: vacanza/holidays#2606
File: README.md:562-568
Timestamp: 2025-06-06T16:02:09.866Z
Learning: The README.md country table displays ISO 3166-1 alpha-2 codes only in the "Code" column. Alpha-3 codes or country aliases should not be included in this table format, maintaining consistency with all other country entries.
tests/countries/test_faroe_islands.py (1)
Learnt from: PPsyrius
PR: vacanza/holidays#2416
File: tests/countries/test_turkmenistan.py:52-64
Timestamp: 2025-04-05T04:47:27.213Z
Learning: For holiday tests in the vacanza/holidays project, structure tests by individual holidays rather than by years. Each test method should focus on a specific holiday and test it across multiple years (from start_year through 2050) using helper methods like `assertHolidayName`. For fixed holidays, use generators like `(f"{year}-01-01" for year in range(1991, 2051))`. For movable holidays, specify individual dates for specific years followed by a range check.
🧬 Code Graph Analysis (1)
holidays/countries/__init__.py (7)
holidays/countries/american_samoa.py (4)
  • AmericanSamoa (50-51)
  • AS (42-43)
  • ASM (46-47)
  • HolidaysAS (17-39)
holidays/countries/faroe_islands.py (3)
  • FaroeIslands (20-95)
  • FO (98-99)
  • FRO (102-103)
holidays/countries/french_southern_territories.py (4)
  • FrenchSouthernTerritories (40-41)
  • TF (44-45)
  • ATF (48-49)
  • HolidaysTF (16-37)
holidays/countries/guam.py (4)
  • Guam (50-51)
  • GU (42-43)
  • GUM (46-47)
  • HolidaysGU (17-39)
holidays/countries/northern_mariana_islands.py (4)
  • NorthernMarianaIslands (50-51)
  • MP (42-43)
  • MNP (46-47)
  • HolidaysMP (17-39)
holidays/countries/puerto_rico.py (4)
  • PuertoRico (50-51)
  • PR (42-43)
  • PRI (46-47)
  • HolidaysPR (17-39)
holidays/countries/united_states.py (3)
  • UnitedStates (34-1242)
  • US (1245-1246)
  • USA (1249-1250)
🪛 Pylint (3.3.7)
holidays/countries/__init__.py

[error] 189-189: Parsing failed: ''(' was never closed (holidays.countries.init, line 189)'

(E0001)

tests/countries/test_faroe_islands.py

[convention] 61-61: Trailing newlines

(C0305)


[convention] 1-1: Missing module docstring

(C0114)


[error] 16-16: No name 'countries' in module 'holidays'

(E0611)


[convention] 20-20: Missing class docstring

(C0115)


[warning] 22-22: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestFaroeIslands.setUpClass' method

(W0221)


[convention] 46-46: Missing function or method docstring

(C0116)


[convention] 49-49: Missing function or method docstring

(C0116)


[convention] 52-52: Missing function or method docstring

(C0116)


[convention] 55-55: Missing function or method docstring

(C0116)


[convention] 58-58: Missing function or method docstring

(C0116)

🔇 Additional comments (1)
holidays/registry.py (1)

83-83: Solid Faroe Islands entry!
Ensure the corresponding holidays.countries.faroe_islands module is imported in holidays/countries/__init__.py so the lazy loader can find it.

@Shrot101
Copy link
Contributor Author

Shrot101 commented Jun 8, 2025

@KJhellico, I updated the code. Please check it. I tried to resolve the issues. If there are any further issues, please guide me. Thank you for guiding me until now. I am learning a lot from this repo and you.

# Christmas Day.
self._add_christmas_day(tr("Jóladagur"))

# Boxing Day.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Boxing Day.
# Second Day of Christmas.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's also en_US translation.

Shrot101 and others added 2 commits June 15, 2025 20:22
Signed-off-by: Shrot101 <128983465+Shrot101@users.noreply.github.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7282a37 and dd4bdf5.

📒 Files selected for processing (7)
  • holidays/countries/faroe_islands.py (1 hunks)
  • holidays/locale/da/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/en_US/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/fo/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/is/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/no/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/sv/LC_MESSAGES/FO.po (1 hunks)
🧰 Additional context used
🧠 Learnings (3)
holidays/locale/da/LC_MESSAGES/FO.po (1)
Learnt from: PPsyrius
PR: vacanza/holidays#2608
File: holidays/locale/en_VC/LC_MESSAGES/VC.po:61-66
Timestamp: 2025-06-10T05:07:29.372Z
Learning: For missing translator comments in .po localization files in the holidays repository, direct authors to run `make l10n` or `make check` commands instead of suggesting manual fixes, as these commands automatically handle translator comment generation.
holidays/locale/fo/LC_MESSAGES/FO.po (2)
Learnt from: KJhellico
PR: vacanza/holidays#2259
File: holidays/locale/en_IN/LC_MESSAGES/IN.po:30-299
Timestamp: 2025-03-05T17:51:00.633Z
Learning: In the Holidays project, .po files for a country's default locale use empty msgstr fields as a standard convention.
Learnt from: PPsyrius
PR: vacanza/holidays#2438
File: holidays/locale/ar_IQ/LC_MESSAGES/IQ.po:35-81
Timestamp: 2025-04-17T17:08:48.082Z
Learning: In holiday PO files, when the file represents the default language of an entity (e.g., ar_IQ for Iraq), no translations in `msgstr` are required as the `msgid` values are already in the target language.
holidays/countries/faroe_islands.py (6)
Learnt from: KJhellico
PR: vacanza/holidays#2606
File: holidays/countries/faroe_islands.py:0-0
Timestamp: 2025-06-06T13:23:16.229Z
Learning: Never suggest breaking long URLs in code comments or documentation. If something passes the pre-commit check, then it's allowed and should not be flagged for line length violations.
Learnt from: KJhellico
PR: vacanza/holidays#2609
File: holidays/countries/nauru.py:149-154
Timestamp: 2025-06-09T19:50:56.039Z
Learning: In the holidays library project, never suggest adding docstrings for alias classes (like NR, NRU country code aliases that inherit from main country classes). The project deliberately omits docstrings for these simple alias classes.
Learnt from: KJhellico
PR: vacanza/holidays#2571
File: holidays/countries/bermuda.py:108-110
Timestamp: 2025-05-31T15:11:42.151Z
Learning: In the holidays library project, alias classes (like BM, BMU) do not have docstrings. This is a project-specific convention.
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: holidays/countries/saint_vincent_and_the_grenadines.py:1-12
Timestamp: 2025-06-08T13:36:16.999Z
Learning: For the holidays project/repository, module docstrings are not used and should never be suggested, even when pylint flags missing module docstring warnings (C0114).
Learnt from: KJhellico
PR: vacanza/holidays#2583
File: holidays/countries/niger.py:1-1
Timestamp: 2025-06-01T17:58:53.279Z
Learning: In the holidays project, module-level docstrings are not required or needed for country holiday files in the holidays/countries/ directory.
Learnt from: PPsyrius
PR: vacanza/holidays#2608
File: holidays/locale/en_VC/LC_MESSAGES/VC.po:61-66
Timestamp: 2025-06-10T05:07:29.372Z
Learning: For missing translator comments in .po localization files in the holidays repository, direct authors to run `make l10n` or `make check` commands instead of suggesting manual fixes, as these commands automatically handle translator comment generation.
🧬 Code Graph Analysis (1)
holidays/countries/faroe_islands.py (3)
holidays/groups/christian.py (10)
  • _add_holy_thursday (328-337)
  • _add_good_friday (308-317)
  • _add_easter_sunday (270-279)
  • _add_easter_monday (259-268)
  • _add_ascension_thursday (119-127)
  • _add_whit_sunday (443-453)
  • _add_whit_monday (432-441)
  • _add_christmas_eve (237-245)
  • _add_christmas_day (208-216)
  • _add_christmas_day_two (218-226)
holidays/groups/international.py (2)
  • _add_new_years_day (126-134)
  • _add_new_years_eve (176-185)
holidays/holiday_base.py (1)
  • HolidayBase (57-1301)
🪛 Pylint (3.3.7)
holidays/countries/faroe_islands.py

[convention] 1-1: Missing module docstring

(C0114)


[convention] 100-100: Missing class docstring

(C0115)


[convention] 104-104: Missing class docstring

(C0115)

🔇 Additional comments (3)
holidays/countries/faroe_islands.py (1)

38-38:

✅ Verification successful

Ensure all supported languages have .po files
The class lists "fo" and "no" among supported_languages, but I don’t see corresponding FO.po under those locale folders. Please confirm that .po files exist for fo and no.


🏁 Script executed:

#!/bin/bash
# Verify presence of FO.po for each supported locale
for lang in da en_US fo is no sv; do
  if [ ! -f "holidays/locale/$lang/LC_MESSAGES/FO.po" ]; then
    echo "Missing FO.po for locale: $lang"
    exit 1
  fi
done
echo "All supported FO.po files are present."

Length of output: 623


FO.po translation files verified for all supported languages
A quick script check confirms that holidays/locale/<lang>/LC_MESSAGES/FO.po exists for da, en_US, fo, is, no, and sv. No missing files detected—no further action needed.

holidays/locale/no/LC_MESSAGES/FO.po (1)

13-14: ⚠️ Potential issue

Header language tags are incorrect.

Language: fo claims the file is Faroese, but this is the Norwegian translation.
Update the header and the leading comment accordingly.

-# Faroe Islands holidays no localization.
+# Faroe Islands holidays Norwegian localization.
@@
-"Language: fo\n"
+"Language: no\n"

Also applies to: 21-23

⛔ Skipped due to learnings
Learnt from: PPsyrius
PR: vacanza/holidays#2437
File: holidays/locale/dz_BT/LC_MESSAGES/BT.po:0-0
Timestamp: 2025-04-06T14:52:35.679Z
Learning: When suggesting changes to .po files in the holidays project, follow the standardized header format:
- Default language format: "# [COUNTRY-NAME-NORMAL] holidays. #"
- Non-default language format: "# [COUNTRY-NAME-NORMAL] holidays [LANGUAGE-CODE] localization. #"
For example, for Bhutan in Dzongkha, use "# Bhutan holidays dz_BT localization. #"
Learnt from: PPsyrius
PR: vacanza/holidays#2437
File: holidays/locale/dz_BT/LC_MESSAGES/BT.po:12-12
Timestamp: 2025-04-06T14:44:59.785Z
Learning: Use standardized .po file headers for localization files in the holidays project:
- Default language format: "# [COUNTRY-NAME-NORMAL] holidays. #"
- Other languages format: "# [COUNTRY-NAME-NORMAL] holidays [LANGUAGE-CODE] localization. #"
holidays/locale/fo/LC_MESSAGES/FO.po (1)

29-96: Default-language PO looks good.

msgstr entries are correctly left blank, matching project conventions for default Faroese.
No further issues spotted.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🔭 Outside diff range comments (1)
README.md (1)

108-108: 💡 Verification agent

🧩 Analysis chain

Verify the “188 country codes” figure

Every time we add or remove a row the headline number drifts.
Please run the small script below – it simply counts <td>XX</td> occurrences – and bump the value if the count differs.


🏁 Script executed:

#!/bin/bash
# Count country-code cells (two-letter codes) in the table.
grep -oE '<td>[A-Z]{2}</td>' README.md | wc -l

Length of output: 52


Update country code count to 189

The script reports 189 <td>XX</td> entries, so the “188” figure is out of date.

• README.md (around line 108): update “188 country codes” → “189 country codes”

Suggested diff:

- We currently support 188 country codes. The standard way to refer to a country is by using its [ISO
+ We currently support 189 country codes. The standard way to refer to a country is by using its [ISO
♻️ Duplicate comments (1)
README.md (1)

562-568: 🧹 Nitpick (assertive)

Indentation is inconsistent with neighbouring rows

Other table rows keep <td> flush with the <tr> tag; this one is indented by two spaces, which stands out in diff-based docs.

Quick tidy-up:

-  <td>Faroe Islands</td>
-  <td>FO</td>
-  <td></td>
-  <td>da, en_US, <strong>fo</strong>, is, no, sv</td>
-  <td>HALF_DAY</td>
+<td>Faroe Islands</td>
+<td>FO</td>
+<td></td>
+<td>da, en_US, <strong>fo</strong>, is, no, sv</td>
+<td>HALF_DAY</td>
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between dd4bdf5 and 6beb579.

📒 Files selected for processing (4)
  • .gitignore (1 hunks)
  • README.md (1 hunks)
  • holidays/countries/__init__.py (1 hunks)
  • holidays/registry.py (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
README.md (1)
Learnt from: KJhellico
PR: vacanza/holidays#2606
File: README.md:562-568
Timestamp: 2025-06-06T16:02:09.910Z
Learning: The README.md country table displays ISO 3166-1 alpha-2 codes only in the "Code" column. Alpha-3 codes or country aliases should not be included in this table format, maintaining consistency with all other country entries.
🧬 Code Graph Analysis (1)
holidays/countries/__init__.py (1)
holidays/countries/faroe_islands.py (3)
  • FaroeIslands (20-97)
  • FO (100-101)
  • FRO (104-105)
🔇 Additional comments (1)
holidays/countries/__init__.py (1)

74-75: Faroe Islands import looks good

Import is alphabetically correct (between Ethiopia and Fiji) and mirrors the new registry entry. Nothing else to flag.

@@ -24,3 +24,4 @@ Pipfile
sbom.json
site/
venv/
**/__pycache__/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

__pycache__ rule is fine but partly redundant

*.pyc (line 13) already blocks the compiled byte-code; adding **/__pycache__/ hides the directory too, which some teams prefer.
If the repo already has __pycache__/ at project root (common pattern in Python‐centric .gitignore templates) this new glob is a duplicate. Up to you, but a single rule is usually enough.

🤖 Prompt for AI Agents
In the .gitignore file at line 27, the rule to ignore all __pycache__
directories is redundant because the existing *.pyc rule at line 13 already
ignores compiled Python bytecode files. To fix this, decide whether to keep only
the *.pyc rule or the __pycache__ directory rule for simplicity, and remove the
redundant one accordingly.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (2)
holidays/locale/no/LC_MESSAGES/FO.po (1)

26-26: Drop tool-specific metadata.
The Generated-By: Lingva 5.0.6 header is unnecessary noise; please remove it.

- "Generated-By: Lingva 5.0.6\n"
holidays/locale/fo/LC_MESSAGES/FO.po (1)

26-26: Drop tool-specific metadata.
The Generated-By: Lingva 5.0.6 header clutters the file; remove it to align with repo standards.

- "Generated-By: Lingva 5.0.6\n"
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6beb579 and 7394a8d.

📒 Files selected for processing (7)
  • README.md (2 hunks)
  • holidays/locale/da/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/en_US/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/fo/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/is/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/no/LC_MESSAGES/FO.po (1 hunks)
  • holidays/locale/sv/LC_MESSAGES/FO.po (1 hunks)
🧰 Additional context used
🧠 Learnings (3)
README.md (1)
Learnt from: KJhellico
PR: vacanza/holidays#2606
File: README.md:562-568
Timestamp: 2025-06-06T16:02:09.910Z
Learning: The README.md country table displays ISO 3166-1 alpha-2 codes only in the "Code" column. Alpha-3 codes or country aliases should not be included in this table format, maintaining consistency with all other country entries.
holidays/locale/da/LC_MESSAGES/FO.po (1)
Learnt from: PPsyrius
PR: vacanza/holidays#2608
File: holidays/locale/en_VC/LC_MESSAGES/VC.po:61-66
Timestamp: 2025-06-10T05:07:29.372Z
Learning: For missing translator comments in .po localization files in the holidays repository, direct authors to run `make l10n` or `make check` commands instead of suggesting manual fixes, as these commands automatically handle translator comment generation.
holidays/locale/fo/LC_MESSAGES/FO.po (2)
Learnt from: KJhellico
PR: vacanza/holidays#2259
File: holidays/locale/en_IN/LC_MESSAGES/IN.po:30-299
Timestamp: 2025-03-05T17:51:00.633Z
Learning: In the Holidays project, .po files for a country's default locale use empty msgstr fields as a standard convention.
Learnt from: PPsyrius
PR: vacanza/holidays#2438
File: holidays/locale/ar_IQ/LC_MESSAGES/IQ.po:35-81
Timestamp: 2025-04-17T17:08:48.082Z
Learning: In holiday PO files, when the file represents the default language of an entity (e.g., ar_IQ for Iraq), no translations in `msgstr` are required as the `msgid` values are already in the target language.
🔇 Additional comments (9)
holidays/locale/sv/LC_MESSAGES/FO.po (2)

1-28: PO file header and structure look solid.
The Language: sv header is correct and the comment blocks match other locale files.


29-96: Swedish translations are spot on.
All msgstr entries accurately reflect the Faroese holiday names.

holidays/locale/da/LC_MESSAGES/FO.po (2)

1-28: PO file header and structure look solid.
The Language: da header is correct; run make l10n if you need to refresh translator comments automatically.


29-96: Danish translations are accurate.
Each msgstr maps correctly to its msgid.

holidays/locale/is/LC_MESSAGES/FO.po (2)

1-28: PO file header and structure look solid.
The Language: is header matches the file’s locale.


29-96: Icelandic translations are accurate.
All msgstr values correctly correspond to the source msgid strings.

holidays/locale/en_US/LC_MESSAGES/FO.po (2)

1-28: PO file header and structure look solid.
The Language: en_US header is set correctly.


49-52: Great Prayer Day translation is now correct.
The msgstr reads “Great Prayer Day” as intended.

holidays/locale/no/LC_MESSAGES/FO.po (1)

13-13: 🧹 Nitpick (assertive)

Clarify header comment.
The comment # Faroe Islands holidays no localization. could be confusing—replace no with Norwegian for clarity.

- # Faroe Islands holidays no localization.
+ # Faroe Islands holidays Norwegian localization.
⛔ Skipped due to learnings
Learnt from: ankushhKapoor
PR: vacanza/holidays#2601
File: holidays/locale/en_MN/LC_MESSAGES/MN.po:13-14
Timestamp: 2025-06-11T18:32:25.595Z
Learning: For non-default locale `.po` files, the header comment format is:
`# <Country> holidays <locale> localization.` (no trailing hash).
Learnt from: PPsyrius
PR: vacanza/holidays#2437
File: holidays/locale/dz_BT/LC_MESSAGES/BT.po:0-0
Timestamp: 2025-04-06T14:52:35.679Z
Learning: When suggesting changes to .po files in the holidays project, follow the standardized header format:
- Default language format: "# [COUNTRY-NAME-NORMAL] holidays. #"
- Non-default language format: "# [COUNTRY-NAME-NORMAL] holidays [LANGUAGE-CODE] localization. #"
For example, for Bhutan in Dzongkha, use "# Bhutan holidays dz_BT localization. #"

Comment on lines +562 to +568
<tr>
<td>Faroe Islands</td>
<td>FO</td>
<td></td>
<td>da, en_US, <strong>fo</strong>, is, no, sv</td>
<td>HALF_DAY</td>
</tr>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Align indentation for the new row.
Remove the two-space prefix before each <td> in the Faroe Islands row so it lines up with other entries.

🤖 Prompt for AI Agents
In README.md around lines 562 to 568, the new table row for Faroe Islands has
two-space indentation before each <td> tag, which is inconsistent with other
rows. Remove the two-space prefix before each <td> tag in this row so that the
indentation aligns with the rest of the table entries.

@Shrot101 Shrot101 requested a review from KJhellico June 15, 2025 16:45
Copy link
Collaborator

@KJhellico KJhellico left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

l10n suggestions are based on available translations from other countries and Norden info. Please feel free to make any comments.

Comment on lines +21 to +32
"""
Faroe Islands holidays.

References:
- https://visitfaroeislands.com/en/plan-your-stay/before-you-arrive-in-the-faroe-islands/\
public-holidays
- https://guidetofaroeislands.fo/travel-information/faroe-islands-holiday/
- https://www.timeanddate.com/holidays/faroe-islands/2025
- https://www.framtak.com/info/holidays.html
- https://en.wikipedia.org/wiki/Public_holidays_in_Iceland
- https://dictionary.cambridge.org/translate/
- https://en.wikipedia.org/wiki/Public_holidays_in_the_Faroe_Islands
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"""
Faroe Islands holidays.
References:
- https://visitfaroeislands.com/en/plan-your-stay/before-you-arrive-in-the-faroe-islands/\
public-holidays
- https://guidetofaroeislands.fo/travel-information/faroe-islands-holiday/
- https://www.timeanddate.com/holidays/faroe-islands/2025
- https://www.framtak.com/info/holidays.html
- https://en.wikipedia.org/wiki/Public_holidays_in_Iceland
- https://dictionary.cambridge.org/translate/
- https://en.wikipedia.org/wiki/Public_holidays_in_the_Faroe_Islands
"""Faroe Islands holidays.
References:
* <https://en.wikipedia.org/wiki/Public_holidays_in_the_Faroe_Islands>
* [Decree no. 52 of 23 April 2003](https://web.archive.org/web/20241204233745/https://logir.fo/Kunngerd/52-fra-23-04-2003-um-flagging-fra-landsins-bygningum)
* [2007(https://web.archive.org/web/20250125193236/https://www.framtak.com/info/holidays.html))
* [2024](https://web.archive.org/web/20250615193008/https://visitfaroeislands.com/en/plan-your-stay/get-ready-for-your-trip/general-facts/public-holidays)
* [2025](https://web.archive.org/web/20250615193215/https://guidetofaroeislands.fo/travel-information/faroe-islands-holiday/)

default_language = "fo"
supported_categories = (HALF_DAY, PUBLIC)
supported_languages = ("da", "en_US", "fo", "is", "no", "sv")
start_year = 1948 # Year of home rule
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
start_year = 1948 # Year of home rule
# Denmark granted home rule to the Faroe Islands on 30 March 1948.
start_year = 1949

Comment on lines +96 to +97
# National Flag Day.
self._add_holiday_apr_25(tr("Flaggdagur"))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

National Flag Day should be placed before Constitution Day (in chronological order). And in all sources except Wikipedia, it's a full holiday, not half-day.


#. Christmas Eve.
msgid "Jólaaftan"
msgstr "Juleaften"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
msgstr "Juleaften"
msgstr "Juleaftensdag"


#. Ascension Day.
msgid "Kristi himmalsferðardagur"
msgstr "Kristi Himmelfartsdag"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
msgstr "Kristi Himmelfartsdag"
msgstr "Kristi himmelfartsdag"


#. Good Friday.
msgid "Langifríggjadagur"
msgstr "Långfredag"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
msgstr "Långfredag"
msgstr "Långfredagen"


#. Great Prayer Day.
msgid "Dýri biðidagur"
msgstr "Bönedag"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
msgstr "Bönedag"
msgstr "Stora bönedagen"


#. Saint Olaf's Day.
msgid "Ólavsøkudagur"
msgstr "Olofsmässodagen"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
msgstr "Olofsmässodagen"
msgstr "Olafsdagen"


#. Saint Olaf's Eve.
msgid "Ólavsøkuaftan"
msgstr "Olofsmässafton"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
msgstr "Olofsmässafton"
msgstr "Olafsafton"


#. National Flag Day.
msgid "Flaggdagur"
msgstr "Flaggdag"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
msgstr "Flaggdag"
msgstr "Flaggdagen"

Copy link

@arkid15r
Copy link
Collaborator

Hi @Shrot101
It's been 2 weeks since last update -- any progress/plans on addressing the comments?

@Shrot101
Copy link
Contributor Author

Shrot101 commented Jul 1, 2025

Hi @Shrot101 It's been 2 weeks since last update -- any progress/plans on addressing the comments?

I was outside due to some reasons. I will do it till tomorrow.

@arkid15r
Copy link
Collaborator

arkid15r commented Jul 7, 2025

Not completed by expected date.

@arkid15r arkid15r closed this Jul 7, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add Faroe Islands holidays
3 participants
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载