One booking app, two messages, then currencies
A travel booking app sends each customer a confirmation and a payment reminder, and both show a price and a travel date in the customer’s locale. Like the lesson’s page and stylesheet, the price format and the date format must come from one family. The team keeps one setting, the default locale, for customers whose own locale has no formats yet. Each level starts from the previous level’s finished code, so you can begin at any of them.
The app launches in France, and locales now arrive from the browser as region tags: de-AT, fr-CH, en-IE. French writes prices like German (12,50 EUR) and dates with slashes (17/10/2026). A region tag should get its language’s family. The messages must not change.
French customers, and every customer whose locale carries a region, fall back to the default locale’s formats: an Austrian customer is billed in English formats.
Reproduce confirmationLine for a French (fr) booking should read “B-40 confirmed: 89,00 EUR, travelling 03/11/2026”; today it comes out with English formats. A de-AT booking gets English formats too.
Acceptance criteria A French family creates the “12,50 EUR” price format and a “17/10/2026” date format; English and German are unchanged. A region tag (de-AT, fr-CH, en-IE) gets its language’s family. A language with no family (nl, nl-BE) still gets the default locale’s family, and fr can now be the default. Neither message changes. Notes Cases print the message. French and German write prices the same way. A family may create a product another family also creates. Keep the two messages’ names and signatures; the checker calls them.