Xuelao dialect is disappearing, so I built this app

Xuelao is a Hoklo dialect around Shanwei, with no standard writing, no teaching resources, and young people no longer speaking it. I built a translation and learning app — harder than I expected.

Xuelao dialect is disappearing, so I built this app

First, let me clarify what “Xuelao” is, because most people hearing it for the first time think it’s a typo.

Xuelao is a Hoklo dialect around Shanwei’s Haifeng and Lufeng areas, belonging to the Southern Min language family. It’s closely related to Teochew, but quite different — Teochew has a relatively mature proper-character scheme and teaching resources, while Xuelao basically has nothing.

Why build this

A rather painful phenomenon: kids at home can understand Xuelao but aren’t very good at speaking it. They answer elders in Mandarin, and the elders answer them back in Xuelao, and the two generations just speak past each other.

This happens with many dialects. But Xuelao’s situation is a bit worse: it has no standard writing. You can’t type it out and send it to a friend, because it only has sound, no set of widely-accepted written forms. Someone who wants to learn opens the app store and finds Cantonese apps, Teochew apps — Xuelao is almost a blank.

More plainly, some things said in Mandarin just lose their flavor. Interjections, catchphrases, swear words, the words you use to coax a child — all of these deform when switched to Mandarin. They only exist in the dialect.

So I thought, at least build something usable first: something that can translate Mandarin into Xuelao, play the pronunciation, and look things up. Even if it’s just for my own family.

What it can do now

The app currently has three modules: translate, learn, settings.

Translate is the core. Mandarin on the left, Xuelao on the right, with a switch in the middle. Type in Mandarin text, get Xuelao out. The input box has paste and clear; the red microphone button in the middle is voice input — speak Mandarin to the phone, no typing. This interaction was deliberately built because a significant portion of the target users are elders who aren’t comfortable typing but have no problem speaking.

The translation result is paired with text-to-speech playback. This is covered later; it’s the hardest part of the whole project.

Learn is for sedimenting the translation results. Dialect learning has a trait: there’s no textbook, you can only learn in concrete scenarios. “Have you eaten?” is learned at the dinner table, not memorized from a book. So the learn module’s idea is to favorite translated sentences and listen to them repeatedly, rather than “Lesson 1: initials and finals.”

The real difficulties

The original intent of writing this was actually to lay out these difficulties clearly, because I underestimated them before building.

No proper characters. Translating Mandarin to Xuelao isn’t “word-for-word replacement.” Many Xuelao words have no accepted Chinese-character spelling; the same sound may be written differently in different villages. This means the LLM’s output itself has no single correct answer — you can’t use a standard answer to evaluate whether its translation is right; you can only have a local speaker listen.

This directly leads to a problem: how to evaluate. Ordinary machine translation has a BLEU score and standard test sets. Dialect translation has none. My current approach is manual spot-checking, relying on family and relatives to listen. This obviously can’t scale, but I haven’t thought of a better way.

TTS basically doesn’t support it. This is the most blocking point. Market TTS does Mandarin and English very well, Cantonese somewhat, Southern Min sparsely, and Xuelao almost zero.

So either force-fit an existing Southern Min TTS (the pronunciation will be off — Xuelao differs noticeably from the Quanzhang branch of Southern Min), or train/fine-tune a model myself — the latter needs lots of labeled dialect speech data, which I don’t have.

For now I can only go with the former: it works, but the pronunciation is clearly off. For a dialect app, inaccurate pronunciation is fatal — your target users are precisely the ones most able to tell the pronunciation is off. This contradiction isn’t solved yet; I’ll write a follow-up once there’s progress.

Where does the corpus come from. The LLM’s knowledge of Xuelao is very limited; told to translate directly, the output is often Teochew or simply Mandarin. To make it speak Xuelao, you must feed it a corpus first. And the corpus can only come from people — elders who can speak it, recorded segment by segment.

There’s no shortcut here. Unlike building a small tool where you hook up an API and it runs, a dialect project’s early stage is just grunt work.

Not launched yet, but already worth it

Neither product is launched. Sometimes I doubt whether this is worth doing — it probably won’t bring much income, and the user base is small and scattered across a few villages.

But last time I showed the demo to my mom, she flipped through the learn page, muttered a sentence, then said something to me in Xuelao. I didn’t understand; asked what it meant; she laughed for a long while.

For that alone, this thing has to be finished.

Dialect preservation — big companies won’t do it (no commercial value), academia does it slowly. In the end, probably only locals and half-baked programmers can. I count as half.


If you’re from Shanwei or a Southern Min area, have elders at home who speak Xuelao, and are willing to help record a few lines or proofread translations, add my WeChat (on the about page); I’ll put your name in the acknowledgments.

Qimiaogan This work is licensed under CC BY-NC-SA. Please credit the source and author when reposting.

Contents