بنقرة واحدة
add-a-new-holiday-calendar
Create XML holiday calendar configuration files for a new country or region
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Create XML holiday calendar configuration files for a new country or region
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Write country-specific holiday tests using CalendarCheckerApi
Add subdivision holiday configurations based on ISO 3166-2 codes
Add country description properties for localization
Add holiday description properties for localization
Register a new holiday calendar in the HolidayCalendar enum
| name | Add a new Holiday Calendar |
| description | Create XML holiday calendar configuration files for a new country or region |
This guide explains how to create XML holiday calendar files for countries in Jollyday.
Create a new file at: jollyday-core/src/main/resources/holidays/Holidays_[country_code].xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration hierarchy="[country_code]" description="[Country Name]"
xmlns="https://focus_shift.de/jollyday/schema/holiday"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://focus_shift.de/jollyday/schema/holiday https://focus_shift.de/jollyday/schema/holiday/holiday.xsd">
<Holidays>
<!-- Add your holidays here -->
</Holidays>
<Sources>
<Source>https://en.wikipedia.org/wiki/Public_holidays_in_[Country_Name]</Source>
<Source of="ISO 3166">https://www.iso.org/obp/ui/#iso:code:3166:[COUNTRY_CODE]</Source>
<Source of="ISO 3166-2">https://en.wikipedia.org/wiki/ISO_3166-2:[COUNTRY_CODE]</Source>
</Sources>
</Configuration>
IMPORTANT:
- The country code in ISO 3166 URLs (
[COUNTRY_CODE]) must always be UPPERCASE (e.g.,DE,FR,US), even though thehierarchyattribute uses lowercase. The ISO 3166-2 Wikipedia reference also requires uppercase.- The Wikipedia URL for public holidays must use underscores (
_) instead of spaces for whitespace (e.g.,Public_holidays_in_GermanynotPublic holidays in Germany).
| Attribute | Description |
|---|---|
hierarchy | ISO 3166-1 alpha-2 country code (e.g., "de", "us", "fr") |
description | Full country name in English |
For holidays on a fixed calendar date:
<Fixed month="JANUARY" day="1" descriptionPropertiesKey="NEW_YEAR"/>
With validity period:
<Fixed month="OCTOBER" day="31" validFrom="2017" descriptionPropertiesKey="REFORMATION_DAY"/>
<Fixed month="JUNE" day="19" validFrom="2021" descriptionPropertiesKey="JUNETEENTH"/>
For holidays on a specific weekday occurrence in a month:
<FixedWeekday which="FIRST" weekday="MONDAY" month="SEPTEMBER" descriptionPropertiesKey="LABOUR_DAY"/>
<FixedWeekday which="THIRD" weekday="MONDAY" month="JANUARY" descriptionPropertiesKey="MARTIN_LUTHER_KING"/>
<FixedWeekday which="FOURTH" weekday="THURSDAY" month="NOVEMBER" descriptionPropertiesKey="THANKSGIVING"/>
<FixedWeekday which="LAST" weekday="MONDAY" month="MAY" descriptionPropertiesKey="MEMORIAL_DAY"/>
which values: FIRST, SECOND, THIRD, FOURTH, LAST
For Christian holidays that depend on Easter:
<ChristianHoliday type="GOOD_FRIDAY"/>
<ChristianHoliday type="EASTER_MONDAY"/>
<ChristianHoliday type="ASCENSION_DAY"/>
<ChristianHoliday type="WHIT_MONDAY"/>
<ChristianHoliday type="CORPUS_CHRISTI"/>
<ChristianHoliday type="PENTECOST"/>
With optional localizedType:
<ChristianHoliday type="GOOD_FRIDAY" localizedType="OBSERVANCE"/>
For Islamic calendar-based holidays:
<IslamicHoliday type="ID_AL_FITR"/>
<IslamicHoliday type="ID_AL_FITR_2"/>
<IslamicHoliday type="ID_AL_FITR_3"/>
<IslamicHoliday type="ID_UL_ADHA"/>
<IslamicHoliday type="ARAFAAT"/>
<IslamicHoliday type="NEWYEAR"/>
<IslamicHoliday type="MAWLID_AN_NABI"/>
For holidays calculated relative to a fixed date:
<RelativeToFixed validFrom="1990" descriptionPropertiesKey="REPENTANCE_PRAYER">
<Weekday>WEDNESDAY</Weekday>
<When>BEFORE</When>
<Date month="NOVEMBER" day="23"/>
</RelativeToFixed>
When values: BEFORE, AFTER
For holidays that shift to weekdays when falling on weekends:
<Fixed month="JANUARY" day="1" descriptionPropertiesKey="NEW_YEAR">
<MovingCondition substitute="SATURDAY" with="PREVIOUS" weekday="FRIDAY"/>
<MovingCondition substitute="SUNDAY" with="NEXT" weekday="MONDAY"/>
</Fixed>
For countries with subdivision holidays (states, provinces):
<SubConfigurations hierarchy="[subdivision_code]" description="[Subdivision Name]">
<Holidays>
<Fixed month="MARCH" day="8" descriptionPropertiesKey="INTERNATIONAL_WOMAN"/>
</Holidays>
</SubConfigurations>
| Attribute | Description |
|---|---|
hierarchy | ISO 3166-2 code (e.g., "by", "bw") |
description | Full subdivision name in English |
Example with nested subdivisions:
<SubConfigurations hierarchy="by" description="Bavaria">
<Holidays>
<Fixed month="JANUARY" day="6" descriptionPropertiesKey="EPIPHANY"/>
</Holidays>
<SubConfigurations hierarchy="mu" description="Munich">
<Holidays>
<Fixed day="15" month="AUGUST" descriptionPropertiesKey="ASSUMPTION_DAY"/>
</Holidays>
</SubConfigurations>
</SubConfigurations>
| Attribute | Description | Example |
|---|---|---|
month | Month (English, uppercase) | JANUARY, DECEMBER |
day | Day of month | 1, 25 |
weekday | Day of week | MONDAY, FRIDAY |
which | Which occurrence | FIRST, LAST, THIRD |
validFrom | Start year | 1990, 2021 |
validTo | End year | 1990, 2020 |
descriptionPropertiesKey | Key for description | NEW_YEAR |
localizedType | Holiday type variant | OBSERVANCE |
JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
GOOD_FRIDAY, EASTER, EASTER_MONDAY, EASTER_SATURDAY, EASTER_TUESDAYASCENSION_DAY, WHIT_MONDAY, PENTECOST, PENTECOST_MONDAYCORPUS_CHRISTI, CARNIVAL, MARDI_GRAS, PALM_SUNDAY, MAUNDY_THURSDAY, ASH_WEDNESDAYNEWYEAR, MAWLID_AN_NABI, LAILAT_AL_BARAT, LAILAT_AL_MIRAJ, LAILAT_AL_QADRASCHURA, RAMADAN, RAMADAN_ENDID_AL_FITR, ID_AL_FITR_2, ID_AL_FITR_3ARAFAAT, ID_UL_ADHA, ID_UL_ADHA_2, ID_UL_ADHA_3<?xml version="1.0" encoding="UTF-8"?>
<Configuration hierarchy="de" description="Germany"
xmlns="https://focus_shift.de/jollyday/schema/holiday"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://focus_shift.de/jollyday/schema/holiday https://focus_shift.de/jollyday/schema/holiday/holiday.xsd">
<Holidays>
<Fixed month="JANUARY" day="1" descriptionPropertiesKey="NEW_YEAR"/>
<Fixed month="MAY" day="1" descriptionPropertiesKey="LABOUR_DAY"/>
<Fixed month="DECEMBER" day="25" descriptionPropertiesKey="FIRST_CHRISTMAS_DAY"/>
<Fixed month="DECEMBER" day="26" descriptionPropertiesKey="SECOND_CHRISTMAS_DAY"/>
<ChristianHoliday type="GOOD_FRIDAY"/>
<ChristianHoliday type="EASTER_MONDAY"/>
<ChristianHoliday type="ASCENSION_DAY"/>
<ChristianHoliday type="WHIT_MONDAY"/>
</Holidays>
<Sources>
<Source>https://en.wikipedia.org/wiki/Public_holidays_in_Germany</Source>
<Source of="ISO 3166">https://www.iso.org/obp/ui/#iso:code:3166:DE</Source>
<Source of="ISO 3166-2">https://en.wikipedia.org/wiki/ISO_3166-2:DE</Source>
</Sources>
</Configuration>
jollyday-core/src/main/resources/focus_shift.de/jollyday/schema/holiday/holiday.xsdhttps://focus_shift.de/jollyday/schema/holiday/holiday.xsdHolidays_*.xml files in jollyday-core/src/main/resources/holidays/