Skip to the documentation
Knowledge base

Send in theirs

Write in your own language and have it arrive in the recipient’s.

Details

  • Nothing is translated until you ask, and nothing is sent before you have read it. Arming a language in the composer spends nothing. The model is called when you open the preview, which puts what you wrote above what the recipient will get, and a send costs three calls: the body, the subject, and one to work out what you wrote in.
  • The translation is yours to edit before it goes. It sits in a rich-text box rather than a plain one, so a link, a list or a bold line survives being corrected, and the translated subject is editable beside it. What you approved is word for word what leaves: touch the message after approving and the approval is thrown away rather than sent stale, and pressing send on an armed message you have not previewed opens the preview instead of guessing.
  • The language is proposed rather than chosen for you. One suggestion comes from the message you are answering, whose language is detected when the reply opens, though only once you have named a translate language in Settings → General, and before that the guess is from the script alone, which separates Cyrillic from Latin and not French from German. The other comes from whatever this recipient was last written to. Both are suggestions at the top of the picker rather than a decision. Who you last wrote to in Danish is remembered by your browser, so it does not follow you to a second machine.
  • What you wrote goes below the translation, behind a rule and captioned in the recipient’s language as “Ursprüngliche Nachricht (English)”, so the person reading can check a sentence that lands strangely. Without it they are being asked to trust a model neither of you can see the output of. It is a toggle, on by default.
  • Every language, not the dozen most likely: two hundred rows, the same table the reader translates with, searched by code, by English name or by the language’s own name. Each carries a flag and the flag is a scanning aid rather than the identifier, because a flag is a country and a country is not a language, so the native name is what the row means and the flag is only what makes it findable at a glance.
  • A right-to-left language is composed right to left: the translation is wrapped in a right-to-left block and the original underneath keeps its own direction, because an Arabic body laid out left to right is unreadable in most clients. The direction travels with the message: dir is one of the handful of attributes the outgoing sanitiser keeps, on the grounds that dropping it is a correctness bug rather than a cosmetic one. An Arabic body laid out left to right is unreadable, not merely unstyled.
  • Only what you wrote is translated. The quoted history under a reply stays in the language it arrived in, because it is somebody else’s message and translating it would quote them back in words they never used, and your signature goes on afterwards in the language you wrote it in.
  • Nothing is cached between messages. Each send is translated on its own, so the same paragraph sent to twenty people as twenty separate messages is twenty translations and twenty times the cost. One message to twenty recipients is one. There is no phrase memory and nothing is reused from the message you sent yesterday.
  • A thread you sent translated is remembered, so the answer to it opens already translated into your language instead of waiting for you to notice it is not in one you read. It fires on the newest message in the thread, from somebody other than you, and Settings → General turns it off. The gap is a conversation you started: a brand-new translated message is not recorded against the thread it creates, so the first reply to one of those is a translation you have to ask for.
  • The same option is there for mail sent from a program, and optional everywhere: translate: { to, from?, subject?, includeOriginal? } on POST /emails and on up to ten items of a batch of a hundred (translation costs several model calls per message, so the batch is capped below its own size), emails.translate() and languages.list() on the SDK, translateTo on the MCP server’s sendEmail with previewTranslation beside it. A send from code has no preview, which is what the preview call is for, and a translation that cannot be produced refuses the send rather than posting it in the language you wrote it in.