What Locales We Translate To, and Why
Published 17 August 2026
Every app we publish ships in at least five languages. Most ship in around twenty. Here's the reasoning, because "localise everything" is not a strategy and neither is "English is fine."
The case against English-only
English-only isn't a neutral default. On the App Store, your metadata — name, subtitle, keywords — is indexed per storefront. An app with only English metadata is competing in the Japanese App Store using English keywords against apps using Japanese ones. You don't rank badly. You're largely invisible.
That's the part that surprises people. The cost of English-only isn't that Japanese users find your app and bounce off the language. It's that they never see it.
The four that are non-negotiable
Japanese, Korean, German, Simplified Chinese.
Not because they're the four largest markets in raw population terms, but because of what they have in common: high-spending App Store storefronts, strong preference for native-language software, and — critically — much less competition from indie developers who stopped at English.
Japanese is the standout. It's a market where paid apps and one-off purchases still perform well, users are unusually willing to pay for something small that does its job, and the review culture rewards polish. It's also a market where a half-translated app is noticed immediately and reflected in reviews. There's no cheap way in; you either localise properly or you don't bother.
German brings a large European storefront with high purchase intent. Korean is small in absolute terms but dense and app-literate. Simplified Chinese is enormous, complicated for other reasons, and worth having metadata for regardless.
The fifteen that are nearly free
Once an app is properly internationalised — every string in a catalogue, no hardcoded English, no layout that assumes short words — adding another language is a translation pass, not an engineering project. That changes the maths completely.
So we also ship, where it makes sense for the app: French, Spanish, Portuguese (Brazil), Italian, Traditional Chinese, Thai, Vietnamese, Indonesian, Turkish, Russian, Arabic, Hindi, Dutch, Polish, Swedish.
The reasoning is that the marginal cost is near zero and the marginal benefit is a storefront you were previously invisible in. Brazil, Turkey and Indonesia in particular have large, growing, under-served App Store audiences where an app with local-language metadata stands out disproportionately.
Arabic deserves a specific note: it requires right-to-left layout, which is a real engineering commitment rather than a translation pass. Test it properly or leave it out — a broken RTL layout is worse than an English one.
Where it doesn't make sense
Not every app should ship in twenty languages.
An app whose content is inherently tied to one country — UK passport photo specifications, a Japanese return-gift custom, a fishing calendar tuned to one region's regulations — has a natural audience that a Swedish translation does not expand. Translating the interface while the content remains irrelevant produces an app that is technically available and practically useless, and that earns one-star reviews from confused users.
Our test: does the app do something useful for someone in that country? If the answer is no, the translation is a cost with no return, and the honest move is to not appear in that storefront pretending otherwise.
Machine translation, and where it isn't enough
We use machine translation as the first pass, pooled across apps so the same phrases stay consistent everywhere — "Restore Purchases" should be identical in every app we ship, and a shared translation database is what makes that true rather than aspirational.
Where machine output isn't sufficient: anything with cultural weight, anything legal, and anything where a wrong word is unsafe rather than just awkward. Gift-giving etiquette, health-adjacent copy, and safety warnings get human review. A subtly wrong word in a settings toggle is a small embarrassment. A subtly wrong word in a warning is not.
The one that pays for itself
If you ship one language beyond English, make it Japanese. The gap between "English-only" and "properly localised" is wider in that storefront than anywhere else, the competition among small developers is thinner, and the users are more willing to pay.
It's also the one that punishes half-measures hardest — which is a decent argument for writing every string as a translated string from the start rather than deciding later.
Related posts
- AttributedString(markdown:) Throws Away Your Paragraphs With default options, AttributedString's markdown parser joins paragraphs with no separator and drops list bullets — turning model output into run-on text. The option that fixes it.
- xcodebuild Might Be Building Release Without Telling You Omit -configuration and xcodebuild uses whatever the scheme says, which is often Release. The tell is an empty Debug-iphonesimulator directory and a product you can't find.
- Your Seeded Simulation Isn't Reproducible If It Iterates a Dictionary Swift randomises Dictionary iteration order per process. Draw from a seeded RNG inside that loop and the same seed produces different results on every launch.