Don't Translate Your Product. Transcreate It.
I shipped Spanish and German on rifts.to, my live-polling side project, by doing the obvious thing. I dumped the strings file into a model, asked for both languages, pasted the output back. Fifteen minutes, two new markets, shipped.
A friend who actually speaks German read it and told me it looked like a robot wrote it.
He was right, and working out why is what changed how I localize anything now. AI is a mediocre translator and a very good transcreator. Most teams reach for the first job. The product that doesn’t read like a robot wrote it comes from the second.
Translation works on words. Products aren’t made of words.
A strings file is the worst possible input for a translator, human or machine. It’s a flat list of fragments with no context.
Take a single key: share. In English it’s one word doing double duty. On a button it’s a verb. In a label like “Sharing” it drifts toward a noun. In “shares” on a finance screen it’s something else again. The model sees five characters and guesses. German makes you pay for the guess immediately, because the verb (teilen) and the noun (Freigabe, Anteil) aren’t the same word and aren’t close.
Multiply that by every fragment in the file. “Post.” “Like.” “Match.” “Order.” “Run.” English is full of short words that flip between verb and noun depending on where they sit, and the strings file strips out exactly the information you’d need to tell them apart. You handed the translator a spreadsheet and expected a product back.
The grammar your source language never made you think about
English has two plural forms. One item, or some number of other items. You write “1 file” and “5 files” and you’re done thinking about it.
Polish has three or four, depending how you count. Arabic has six. Russian changes the noun ending based on whether the count ends in 1, in 2 through 4, or in 5 through 0, with the teens carved out as exceptions. If your translation is a flat string, none of that survives. You get “5 plik” where a Polish speaker expects “5 plików,” and the app reads as broken software.
The i18n libraries already solved the mechanics. ICU MessageFormat, the plural handling in i18next and FormatJS, the CLDR categories (zero, one, two, few, many, other) exist precisely so a string can branch on count. A model translating a flat file doesn’t know to reach for any of it. It turns your two-form English sentence into a two-form sentence in a language that needs four. Transcreation means handing the model the message and the rule set and asking it to produce the branched version, not a literal copy of your grammatically simpler original.
Formality is the same story. German splits “you” into du and Sie. French has tu and vous. Japanese has registers that go well past a pronoun choice. A translator working blind picks one, usually the wrong one for your product. A banking app that addresses German users as du sounds like it’s trying to sell them a scooter. You decide the register on purpose and tell the model every time, because it will not infer your brand from a list of button labels.
A pun is not a translatable unit
This is where literal translation stops being merely wooden and turns actively bad.
Marketing copy carries its weight in idiom, rhythm, and reference. Translate “spill the tea” into most languages word for word and you get a sentence about a beverage accident. The wink, the cultural shorthand, the entire reason the line exists, gone. A good transcreation throws the original words away and rebuilds the effect with native material. The German version of your clever headline is a different clever headline.
Examples break the same way. I’ve read onboarding copy that explained a feature with a baseball metaphor, then got faithfully rendered into a language spoken where nobody has watched a baseball game. The grammar was flawless. The point landed nowhere. Transcreation swaps the metaphor for one the reader actually holds.
This is the job the word was invented for. It comes out of advertising, where agencies worked out decades ago that you don’t translate a slogan, you recreate its intent for the market. The tooling changed. The principle didn’t.
How to actually do it
The shift is mostly about what you put in front of the model.
Give it a role, not a task. “Translate this to German” gets you a dictionary. “You’re a German copywriter localizing a live-polling tool for a startup audience, casual register, here’s the product and the tone” gets you something a German user accepts as native. Same model, different job. When I reran rifts.to that way with Claude Opus, the German and Spanish came back reading like people wrote them, not robots.
Feed it context per string, not just the string. Where does it appear. Is it a button, a header, an error toast. What action does it trigger. What sits around it. The localization platforms (Lokalise, Crowdin, Phrase) let you attach screenshots and developer notes to keys for exactly this reason, because human translators needed the same context the model needs. Use that metadata if you have it. Generate it if you don’t.
Hand over the grammar machinery. If your stack runs ICU MessageFormat, tell the model to emit ICU output with the right plural branches, not a flat sentence. It does this well when you ask and never when you don’t.
Make the cultural calls yourself. Formality, brand voice, what gets swapped versus kept, which examples and units change. The model executes those decisions. It shouldn’t be making them, because left alone it picks blandly and consistently.
Keep a native speaker on the last mile. Transcreation gets you most of the way at a fraction of the old cost and time. The final stretch, the call on whether a joke lands or a register fits, still wants someone who lives in the language. The win isn’t cutting them out. It’s handing them something good enough that they’re editing instead of starting from a blank file.
The cheap path is the expensive one
Teams default to flat translation because it looks free. One API call, the whole file comes back, ship it. The cost shows up later and somewhere else: the user who bounces because the app reads like a scam, the support ticket in a language nobody on the team can answer, the market that quietly never converts and never tells you why.
Transcreation costs more up front. More context to assemble, more thought per string, a human on the end. It’s still a sliver of what full human localization used to run, and it produces a product that works in the target market instead of one that merely contains its words.
You didn’t translate your product into existence in the first language. You wrote it. Write it in the second one too.