diff --git a/src/lib/services/catalog-repair.ts b/src/lib/services/catalog-repair.ts index 63666dca..436156eb 100644 --- a/src/lib/services/catalog-repair.ts +++ b/src/lib/services/catalog-repair.ts @@ -31,27 +31,72 @@ function escSqlLiteral(value: string): string { } /** - * Derive a human-readable Dutch page caption from a furniture classname that + * Derive a human-readable English page caption from a furniture classname that * follows an event+year pattern (e.g. `xmas2025`, `hween2024`, `val_2025`). - * Falls back to `fallback` when no pattern matches. + * Covers the full range of seasonal/holiday prefixes that have appeared in + * Habbo's history. Falls back to `fallback` when no pattern matches. */ function derivePageCaption(classname: string, fallback: string): string { const m = classname.match( - /^(xmas|hween|easter|val_|valentine|hw_|newyear|summer|carnival)(\d{4})/i, + /^(xmas|hween|halloween|easter|val_|valentine|hw_|newyear|nye|summer|sum_|carnival|carnival_|christmas|xmas_|easter_|valentines|anniversary|anniv_|anniv|hb_|_hb|hb|habbohome|hh_|easter_bunny|easterbunny|easter_b|spring|summer_|summer2|summersale|fall|autumn|autumn_|fall_|winter|winter_|xmas2|christmas2|xmas20|holiday|holidays|holiday_|halloween2|hween2|hween_)(_?)(\d{4})/i, ); if (!m) return fallback; const event = m[1].toLowerCase(); - const year = m[2]; + const year = m[3]; const eventNames: Record = { - xmas: "Kerst", + xmas: "Christmas", + xmas_: "Christmas", + xmas2: "Christmas", + xmas20: "Christmas", + christmas: "Christmas", + christmas_: "Christmas", + christmas2: "Christmas", hween: "Halloween", - easter: "Pasen", - val_: "Valentijn", - valentine: "Valentijn", + hween_: "Halloween", + hween2: "Halloween", + halloween: "Halloween", + halloween_: "Halloween", + halloween2: "Halloween", hw_: "Halloween", - newyear: "Nieuwjaar", - summer: "Zomer", - carnival: "Carnaval", + easter: "Easter", + easter_: "Easter", + easter_bunny: "Easter", + easterbunny: "Easter", + easter_b: "Easter", + val_: "Valentine's Day", + valentine: "Valentine's Day", + valentine_: "Valentine's Day", + valentines: "Valentine's Day", + valentines_: "Valentine's Day", + newyear: "New Year", + nye: "New Year", + newyear_: "New Year", + summer: "Summer", + summer_: "Summer", + summer2: "Summer", + summersale: "Summer Sale", + fall: "Fall", + fall_: "Fall", + autumn: "Autumn", + autumn_: "Autumn", + winter: "Winter", + winter_: "Winter", + carnival: "Carnival", + carnival_: "Carnival", + anniversary: "Anniversary", + anniv: "Anniversary", + anniv_: "Anniversary", + anniversary_: "Anniversary", + hb: "Habbo Birthday", + _hb: "Habbo Birthday", + hb_: "Habbo Birthday", + habbohome: "HabboHome", + hh_: "Habbo Birthday", + spring: "Spring", + holiday: "Holiday", + holiday_: "Holiday", + holidays: "Holiday", + holidays_: "Holiday", }; return `${eventNames[event] ?? event} ${year}`; } @@ -64,7 +109,7 @@ function derivePageCaption(classname: string, fallback: string): string { * * When `organizeSql` is true, the output also contains `catalog_pages` INSERT * statements that organise items into sub-pages under "Imported Furniture", - * using derived Dutch captions by event+year (e.g. "Kerst 2025"). + * using derived English captions by event+year (e.g. "Christmas 2025"). */ export async function generateCatalogSql( entries: MissingCatalogEntry[],