Languages
Speak one language, write another.
Listen in Portuguese, write in English. Two controls, and one line of instruction that cannot say “translate this” and “never translate” at the same time.
A great many people think in one language and are read in another. They compose the sentence twice: once properly, in their head, and then again more slowly and worse, in the language their colleagues use. The second version is always a little flatter than the first.
Speechfy has two controls for that, and they are the whole feature: Listen in and Write in. Say it the way you would say it. It arrives written in the other one.
The controls are simple. What sits behind them is one line of instruction, and that line has exactly one job, which is to point in exactly one direction.
The ordinary case is a prohibition
Start with the case where nothing clever is wanted at all: you speak Russian and you want Russian. It would be reasonable to assume that needs no instruction, because nothing is being asked for.
It needs an instruction, and a firm one. Left to itself the model translates, unprompted, on its own initiative. Measured: a Russian dictation came back as English prose in three runs out of three, and да came back as Da — not even translated, just transliterated into a Latin alphabet nobody asked for. German fared no better than Cyrillic. Replacing the worked examples in the instructions with language-matched ones fixed nothing; it is the sentence that carries it.
So the default state of this feature is not silence. It is a ban:
- Write the output in Portuguese (Brazil), the language of the transcript.
Never translate it into another language.
Turning the feature on means deleting that line
Now set Write in to English. The instruction above is not amended, softened or joined by a second one. It is removed, and this takes its place:
- The transcript is in Portuguese (Brazil). Write the output in English:
translate it. Output only the English text - never the original, never
both, never a note about the translation.
Both cannot be present. Handed “never translate” and “translate this” in one list, a model obeys whichever it read last — and which one that is shifts with everything else in the request, so the failure is not even consistent enough to notice. You would get your translation most days and your own language on the day it mattered.
That is why this is a branch and not a toggle appended to a list. One line comes back or the other does. There is no state of the app in which both sentences exist.
Why “translate it” is not enough on its own
The second half of that instruction — never the original, never both, never a note about the translation — is not belt-and-braces. Each clause is a failure that happened.
A model asked to translate a transcript starts treating it as a message and answers it, so the framing that the transcript is data rather than conversation has to be restated inside the rule. And a model that is unsure hedges: it hands back the translation with the original in brackets after it, which is scrupulous, helpful, and not text that anybody can send to anybody.
Where the line sits changes whether it works
Here is the part that is genuinely surprising, and it is why this is a post rather than a bullet on a features page.
The language rule was originally written as its own paragraph, after the list of rules. Same words, same meaning, better looking. It fixed the translation problem and broke something else: the rule immediately above it, the one that resolves a self-correction.
move the meeting to monday no wait tuesday
…to Monday? No wait, Tuesday?
…to Tuesday instead of Monday.
The middle line is the transcript with punctuation on it — both days still there, and the reader left to work out which one is the meeting. Moved back to being the last bullet of the same list, the language rule fixes the translation and leaves the correction intact, also three out of three.
The explanation is unglamorous: a rule reads as a rule when it sits among rules, and a paragraph after the rules reads as a change of subject. The thing that reads as a change of subject wins, because it is the last thing read.
That is a real property of the pipeline and it is not something anybody should have to discover in their own outbox. It is the argument for a dictation app that has one decided pipeline behind it: somewhere, someone has already moved the sentence and run it three times. The self-correction rule has its own post, and it turns out to be the canary for every other change to this part of the app.
Translation is a different job, so it gets a different guard
Nothing goes into your document on the strength of an instruction alone. Every rewrite is compared against the transcript it came from before a single character is typed — plain string work, no second opinion — and anything that looks like invention is refused, with your own words used instead.
Under translation, half of those checks do not merely get noisy. They invert.
A correct translation shares almost no words with its source; that is what makes it a translation. So the check for content you never said, and the check for content that went missing, fire on every correct answer and pass exactly the failures that echoed the original back at you. The check that a prohibition survived goes the same way: the list of negation words it consults is English, so a faithful German translation contains none of them and reads as an instruction whose “not” was dropped.
Those three are switched off when the languages differ. What keeps running is what still means something — the checks that look only at the output and not at the pair.
- Still checked
- An empty result. Text that leaked the transcript markers. Text in an assistant’s voice, answering instead of translating. Text far longer than any rewrite could produce — which is what a hedge with the original in brackets looks like from the outside.
- Not checked
- Invented content, dropped content, and lost negation. All three compare the output’s vocabulary to the transcript’s, which is only a question worth asking when they are supposed to be the same vocabulary.
And those are, precisely, the failures a translating model actually has: answering the transcript instead of translating it, or hedging with the original. The guard was narrowed to the shape of the real problem rather than left wide and quietly firing on everything.
Two places it deliberately does not happen
Not into a note. A note is your own drafting, and handing your own draft back to you in another language is the app editing you without being asked. Translation is for words on their way to somebody else. Turning it on does not turn it on for your notebook.
Not when the register is Off. Off makes no request at all, so there is nothing to translate. Claiming otherwise would be worse than useless: the guard reads “this is a translation” to decide which checks to skip, so a dictation that claimed to be translating while making no request would quietly switch off the grounding checks over text nothing ever rewrote.
The switch is where you are, not where you configure
Write in shipped as a picker in the settings window, and the person who asked for it could not find it. That is the correct verdict on that placement, not a complaint about it.
Speaking one language and writing another is decided as you start talking — in front of the person you are about to write to — and not once a year in a preferences pane. So it lives in the same menu as the language itself, on the pill that appears next to your cursor, under its own heading. One click, from where you already are, answers both halves of the question.
The caveat is said there too, next to the switch rather than in a footnote: translation is a harder job than tidying. Read it before you send it.
And when you do not want to choose at all
Listen in can be set to Auto, which uses the language you last dictated into the app in front of you. The pill names the language before you speak, so a wrong guess costs a glance rather than a sentence.
Auto recalls rather than detects, and that is the deliberate part. Listening in every language at once was measured at about five times as long, it keeps your Mac working for as long as you hold the key, and it still picked the wrong language on a short clip. A method that fails on exactly the two-second utterances people dictate all day is not a method. Remembering where you were is worse in theory and right far more of the time — and when it is wrong, it is wrong predictably, which is the only kind of wrong you can correct.
What it feels like when it works
You hold the key, you say the sentence in the language you actually think in, you let go, and English appears in the box — in the app you were already in, with the ums gone and the commas in. The second, flatter version of the sentence never gets composed, because it never has to be.