Traditional Chinese Output in Mac Dictation, Not Simplified
You speak Mandarin, the Mac writes Simplified. Why an on-device recognizer does that, and how a Traditional script lock fixes it whenever cleanup runs.
You speak 國語 into a Mac voice typing app and the sentence lands in 简体. Every message to a colleague in Taipei or Hong Kong then goes through a 繁簡轉換 shortcut, or gets retyped.
It is not a setting you missed. The script is decided in a stage you cannot see, and the fix belongs in a different one. ListenIn’s Chinese script → Always Traditional setting re-renders every cleaned dictation in Traditional before it reaches your cursor. The rest of this post explains why, and what it does not fix.
The complaint: you speak Mandarin, the text comes out Simplified
Three things usually go together:
- You said 「這個 feature 下週上線」 and got 「这个 feature 下周上线」.
- The English words survived. Only the Chinese changed script.
- Nothing in the app calls itself “Simplified”. It just writes that way.
The last point is the clue. Nothing converted your text. The component that turned audio into characters wrote Simplified, and nothing after it changed that.
Why it happens: the recognizer decides the script
A Mac dictation app has two stages. Recognition turns audio into a string. A text pass then cleans it: punctuation, fillers, false starts, sound-alike repairs. Most visible settings belong to the second stage, which inherits whatever the first produced.
Script is decided in the first stage. Apple ships Mandarin as regional variants, and a variant writes one standard: Mandarin Chinese (China mainland) writes Simplified, Mandarin (Taiwan) writes Traditional. Which variant gets loaded is the app’s decision, not the region you set on your Mac.
ListenIn asks Apple for zh-CN, the China mainland model. In Settings › Dictation › Recognition, Recognition language offers Chinese (with mixed English) and English; there is no Taiwan or Hong Kong variant. So the raw transcript arrives in Simplified. The boundary is audio, not preference.
Apple’s variants and the on-device constraint
ListenIn forces on-device recognition on both Apple engines it can use: the newer engine on macOS 26 and the classic one on macOS 14 and 15. Audio never reaches ListenIn’s cleanup service, and the classic engine is not allowed to fall back to Apple’s speech service. The full boundary is on the security page.
On-device recognition needs Apple to ship an on-device model for that variant. Apple’s macOS feature-availability page (checked 2026-09-18; the page describes macOS Golden Gate) has a section headed “Dictation: On-Device and Modeless Dictation”. Its Chinese entries are Mandarin Chinese (China mainland), Cantonese (Hong Kong) and Cantonese (Simplified, China mainland). Mandarin (Taiwan) appears in the general Dictation list but not in the on-device one. Apple changes this list between releases; check it against your own macOS version.
If recognition has to stay on the Mac, the Mandarin model on that list writes Simplified.
On macOS 14 and 15 the requested language also has to be downloaded, or recognition fails instead of quietly using the cloud. Apple’s “Dictate messages and documents on Mac” page (checked 2026-09-18) puts the download under System Settings › Keyboard › Dictation: “click the Edit button next to Languages, then select a language and region”. Download Chinese (China mainland). If you see Dictation language unavailable, the fix by version is in Mac dictation shows nothing? Check the language download. We have not tested a Mac with only the Taiwan or Hong Kong variant downloaded; if that is yours, tell us on the feedback page.
So the recognizer is fixed. The script is not.
A script lock: choose Traditional once
Cleanup is a text pass, and text is where script belongs. ListenIn has a Chinese script setting under Settings › Cleanup › Strength & Language with three values: Auto (follow speech), Always Simplified, Always Traditional.
Auto (follow speech) is the default: cleanup never changes the script of the transcript. With a mainland recognizer that means Simplified in, Simplified out, which is the complaint. Switch to Always Traditional and every cleaned dictation is re-rendered in Traditional before it reaches your cursor.
How it is enforced matters, because asking a model nicely is not a guarantee:
- The cleanup model receives an instruction that all Chinese output must be Traditional, and that converting script is a re-rendering, not a translation.
- On ListenIn’s built-in cleanup service, the result then goes through a deterministic converter (OpenCC) before it is returned.
Scope:
- The lock changes the written script. It does not change what the recognizer hears or which model is loaded. A misheard word comes out as the wrong word, in Traditional. Mishearings are the dictionary’s job, below.
- Latin text is untouched. English words, product names and code identifiers pass through as they were.
- The converter is phrase-aware rather than a one-character table, so 头发 and 出发 do not both become 發. It carries no regional vocabulary table: it does not swap 軟體 for 軟件 or the other way around.
- It uses OpenCC’s standard Traditional table, not the Taiwan or Hong Kong regional standard. Text the model already wrote in Traditional passes through, with one exception: 台 becomes 臺, so 台灣 comes back as 臺灣. Characters the model left Simplified are filled in OpenCC’s way: 这里 → 這裏, 为 → 爲. If those matter to you, say so on the feedback page.
- The lock applies at every cleanup strength, including Verbatim (punctuation only), and Ask Anything results carry the same instruction.
- With your own API key or a local Ollama model, the instruction goes to your model; the deterministic converter runs on the built-in service only.
- When cleanup cannot run at all, offline or over quota, the raw transcript still lands and the HUD labels it, for example Cleanup failed — raw transcript inserted (check network or key). Raw means the recognizer’s own text, which is Simplified. The lock is part of cleanup and does not run on that path.
That is the cost: the lock cannot fix text that skipped the text pass.
Chinese and English in one sentence, no mode switch
The other half of the complaint is 中英夾雜. An app that makes you pick a language before each sentence is unusable for 「幫我看一下這個 PR 的 CI 為什麼 fail」.
ListenIn treats a mixed sentence as one sentence. Chinese (with mixed English) is one recognition setting; you do not switch to English for the English words in a Chinese sentence. The cleanup pass is written to keep code-switching as code-switching: English parts are not translated and the sentence is not forced into one language. Translating is a separate, explicit Translate mode.
Embedded technical terms get help from a built-in lexicon, tested against OAuth, regex, JSON, localhost, kubectl, SwiftUI and Vercel. With the script lock, 「這個 feature 下週上線,先 deploy 到 Vercel」 comes back exactly like that: Traditional Chinese, English identifiers intact. Details are on the bilingual dictation page.
A personal dictionary for local terms and your identifiers
The script lock fixes characters. It does nothing for a recognizer that has never heard 悠遊卡 or your company’s name. That is what the Personal Dictionary is for, reached from Settings › Cleanup › Manage Personal Dictionary… or the Dictionary tab.
The mechanism, plainly: your terms go to the text cleanup pass as known terms. When a transcript word is an obvious sound-alike of one, the pass repairs it to your spelling; when the sound does not match, it leaves the transcript alone. ListenIn does not retrain or bias Apple’s modern recognizer. Enter terms as you want them written; with the lock on the output ends in Traditional either way, and Latin identifiers stay as typed.
You rarely build the list by hand. Fix a word in the inserted text and the correction is saved and applied by the text pass next time; if the same word appears elsewhere in the document, a Replace All offer follows. One file backs up words and corrections: Export… on one Mac, Import… on the next, and import merges rather than erases. The walkthrough is Teach Mac dictation new words.
Setup in four steps, and what leaves the Mac
The setup in full:
- Install ListenIn on macOS 14 or later, Apple Silicon or Intel.
- Settings › Dictation › Recognition language → Chinese (with mixed English).
- Settings › Cleanup › Chinese script → Always Traditional.
- On macOS 14 or 15, download the China mainland Chinese language in System Settings if it is not there yet.
Audio stays on the Mac at every step. What leaves is text, to one of three places you choose: ListenIn’s built-in cleanup service, your own provider with your own key, or a local Ollama model, which makes the whole flow zero-cloud. That third setup is described in fully local dictation on a Mac with Ollama.
The free plan gives 8,000 cleaned words a week with no account and no card; Pro is on the pricing section. Everything else between fn and your cursor is on the Mac dictation page.
If it still comes out Simplified after step 3, report it with your macOS version.
Try it on your own Mac
Free tier, no account. Audio never leaves your Mac.