Au Jour Le Jour now carries one explicit language choice through the interface, Mamdou responses, annual receipts, and shareable year-review images.
What changed
English, French, German, and Portuguese are available across the web and local editions, with device detection and an explicit saved preference.
Display locale and currency remain separate from interface language, so formatting can change without silently changing the language of the ledger.
The annual review can be exported as a 1200 × 1500 PNG containing aggregate progress rather than private bill-level details.
Language and locale are separate settings
The application stores an interface-language preference independently in the browser and local editions. It can follow the device or use an explicit English, French, German, or Portuguese setting.
Regional formatting remains a separate choice. Dates, numbers, and currency can follow a selected locale without forcing the interface into the same language. That avoids coupling translation to accounting display rules.
Generated output follows the same state
Mamdou receives the active language with its request context, and the server applies the same language to annual PDF receipts. The generated output therefore follows the interface instead of falling back to an unrelated default.
Language controls appear in the header, mobile menu, and preferences, but all three update one normalized setting. The implementation tests the persisted choice rather than relying on a browser extension or translation overlay.
A share image without bill details
The year-review exporter renders a fixed-size PNG from aggregate progress: completed and open item counts, months reviewed, and month-level progress. Labels and month names use the active language and locale.
The image deliberately omits individual bill names and notes. It is an export of tracking progress, not a screenshot of the private ledger.
Engineering note
Localization is a state boundary, not a final string-replacement pass. Interface text, generated documents, advisor replies, formatting, and privacy rules need one explicit contract.
Provenance
This note is based on verified project source at commit e90b82b. It records a programming change, not a personal-status update.