Day 10: the rest of French

A few days ago this blog said the French gap had closed everywhere it could be found. That turned out to be true for the app's chrome—buttons, menus, status messages—but not for the thing families actually spend most of their time looking at: the subjects, skills, and activities themselves. Switch to French, open Mathematics, and every skill name, every activity button, every "what your child will learn" list was still sitting there in English underneath a French menu. Today that's fixed, along with a smaller but sharper problem: the language flag and the actual page you landed on could quietly disagree with each other.

Content, not just chrome

The earlier French work translated everything the app says about itself—labels, buttons, instructions. What it missed was everything the app says about learning: the name of a mathematics skill like "Skip Counting," an activity button like "Concrete Addition & Subtraction," the "Passed" or "Not yet" badge next to a syllabus row, even the plain-English list of what a Grade 3 child is expected to know across subjects like Science, Geography, or Money. All of that content was generated once, in English, and reused as-is regardless of which flag was selected—so a French-speaking parent browsing the syllabus, or a French-speaking child staring at a grid of activity buttons, was reading English the entire time.

That's fixed now, comprehensively. Every mathematics skill and activity has a proper French name. Every one of the twenty subject areas in the "what your child will learn" reference—Language, Science, History, Money, Music, all of them—has its full grade-by-grade skill list translated, nearly a thousand individual sentences in total, each one written as a real French sentence rather than a word-for-word swap. The little "Passed" / "Not yet" / "Reference" badges on the syllabus now say "Réussi" / "Pas encore" / "Référence." Even the search-engine listing for a French page—the title and description that show up when a French page gets shared or searched for—now describes that page in French instead of quietly falling back to English.

When the flag lies

The second problem was smaller in size but more confusing in effect: the little flag showing "French" and the page actually being English could get out of sync. The clearest case was the very first visit to the site. Anyone opening a plain link with no language already in the address—which is most links, most of the time—always landed on the English version, no matter what they'd chosen on a previous visit. Pick French once, close the app, come back later through a bookmark or a fresh link, and you'd land back on English by default, with nothing about the page telling you why. It looked exactly like the flag "not working," because from the outside, that's exactly what it was doing.

The fix makes that first landing page actually remember what was picked last time, the same way a language preference is supposed to work. Open a link with no language specified, and it now checks what was chosen before and sends you straight there—French if that's what was last selected, English otherwise—rather than defaulting to English every single time regardless of history. Once you're on a page with a language already in its address, nothing about that behavior changes; the flag you see always matches the page you're on, and clicking the other flag switches both together, immediately, everywhere.

Why this one took longer to catch

Both of today's fixes trace back to the same root cause: a piece of the app quietly remembering something written down once, rather than asking "what language am I in?" every time it needed to say something. A skill's name, an activity's label, a subject's description—each of those had exactly one hardcoded version, and nothing along the way ever stopped to translate it before putting it on screen. The menu worked in French from day one because it was built to ask the translation question every time; the content underneath it was built earlier, before that habit was established everywhere else, and never got revisited—until a family actually using the app in French ran into it and said so.

That's also why it's a good sign this got caught at all: it came from someone actually trying the French experience end-to-end, subject by subject, rather than spot-checking a menu and calling it done. The fix isn't just today's set of translations—it's a small piece of plumbing that makes sure every future skill, activity, or subject added to the app has to go through the same translation step before it can render, so the next new thing added won't quietly slip back into English-only by accident.