Vietnamese, three dialects at once
A full reading course for each Vietnamese dialect, dictionary definitions in your own language, and Cantonese out of beta.
Most of this week went into Vietnamese. Not one Vietnamese, though: Northern, Central and Southern each got their own complete version.
Vietnamese
Vietnamese now has its own reading course, and there is a separate one for each dialect. Every course is translated into all 12 of our display languages, and each dialect has its own recordings — 144 clips in total, so you hear the accent you are actually learning. We also cut about half the audio we had made, because a page that plays a clip for every single example is exhausting rather than helpful.
The rest of Vietnamese caught up alongside it. News articles now come in daily, with reading levels scored for Vietnamese specifically. Grammar explanations know which dialect you picked, so a Southern learner gets a Southern note instead of a Northern one. There are 354 new stamps to collect. And onboarding asks whether you can already read Vietnamese out loud before it asks what level you are, because those are different questions.
Vietnamese also went up on both app stores this week, in 76 languages on Google Play and 36 on the App Store.
Reading Japanese Kana
The kana course got a pass focused on one thing: being able to hear it. Every clip the course refers to now actually plays, including the look-alike tiles that were silent before. ん is taught in a spot where you can hear the difference it makes. The dakuten groups are labelled with an arrow so it is clear what changed. Onboarding now asks Japanese learners about kana before asking about level.
Definitions In Your Own Language
If you looked up a Korean word before this week, the definition came back in English. That is fine if English is your first language, and it is two translations at once if it is not.
We pointed the app at 113 newly translated dictionary pairs. The harder part was knowing when to stop: the pipeline now refuses a definition where the model drifted out of the target script partway through a word, never writes over a definition a human already wrote, and throws out an entire batch that comes back thinner than 55% of what went in, because that is the shape a quietly failed run takes. After publishing, it re-reads what the server is actually serving and compares it to what it meant to publish.
Cantonese Left Beta
Cantonese is fully supported now.
The last piece was small and worth fixing: Level 1 lessons kept inventing prices nobody in Hong Kong would say, because the model was picking numbers that fit the grammar rather than a menu. Cantonese audio also got better this week — a few words were being read with the wrong pronunciation, and the pauses between parts are now consistent instead of drifting.
Indonesian, Malay And Filipino
All three now have daily news. All three have their own stamp collections. Word lookup is more accurate, because we fixed where the app thought one word ended and the next began. And you can now see where a word came from — the older word it grew out of, and the one before that.
Reading
The reading is now underneath the word rather than beside it, which is easier to follow while the audio plays. Japanese words show furigana over the word in the tooltip. Long word lists page instead of rendering all at once. Bubblegum Pros can have a lesson translated into their own language the moment it opens.
On the paywall: if you hit a limit, you can now browse the free library instead of stopping there. That is on for everyone.
What Broke
Three worth writing down.
A batched request to the model was matching answers back to questions by their position in the list. That works until one request in the batch fails, at which point every answer after it is attached to the wrong word.
A learner with a valid subscription could briefly show up as free if the app store did not answer when the app woke up. "We could not reach the store" and "you did not pay" are very different facts, and only one of them should change what you see.
And Japanese news quietly stopped arriving. The job that fetches it tracks how far it has already read, and that marker got stuck ahead of the articles it was looking for, so it found nothing and kept going.