Your French users are reading English. Your CDN did it.
transcript
Your French users open your store. The product names are in English. Nothing is broken. Your CDN is doing exactly what you told it.
How does a CDN decide two responses are the same? By the URL. Plus the query string. Sort by price and sort by name get separate entries.
Now your names are localised. But it's the same URL for every language. So whichever language was cached first wins. Maybe English. French users get it. Spanish users get it. Everyone does, until it expires.
The fix: the Vary header. Vary on Accept-Language. Now there's a copy per language. But here's the catch. So vary on cookies too, for logged-in pages? Every user has different cookies. So every user gets their own entry. Nobody ever shares a copy. No caching benefit at all.
For a logged-in profile, send Cache-Control private, max-age 60. Only that user's browser caches it. One user's profile is never served to another.
Vary on every header that changes the content. Nothing more. Language, yes. Cookies, never.
Full breakdown in the lecture.