Localizing an iOS app properly
Localization is more than translating strings. A well-localized app uses the right plural forms, formats numbers, dates and units the way each region expects, fits longer words into the same layout, and uses the vocabulary people in that field actually use. When it is done well, users simply feel the app was made for them.
It is worth it when:
- Your users or your market are outside English-speaking countries, which in the EU is almost always.
- App Store visibility matters, since localized listings and in-app language both affect how people find and judge an app.
- Your domain has its own vocabulary that generic translation gets wrong.
What goes wrong with localization at scale
Strings built in code
"\(count) disc" + (count == 1 ? "" : "s") works in English and nowhere else. Many languages have more plural categories, and word order changes around numbers. The fix is one localized string per message with plural variations in a String Catalog, using String(localized:) or SwiftUI’s LocalizedStringKey so the interpolated values carry their meaning.
Layouts that assume English
German and Finnish words run long, Japanese needs different line breaking, and right-to-left languages mirror the whole interface. Fixed widths, truncated labels and hard-coded left and right break first. I build with Dynamic Type, flexible stacks and leading/trailing alignment from the start, then check with Xcode’s pseudolanguages (double-length and right-to-left) before a single translation arrives.
Formatting outside the strings
Numbers, dates, distances and currencies should go through FormatStyle or Measurement formatting so they follow the user’s locale. Translating a number format by hand inside a sentence is a bug waiting for the next region.
Keeping 18 or 40 languages in sync
Every new feature adds strings to every language. Without a process, some languages fall behind, keys go stale, and a release ships with English fragments. String Catalogs track the state of each translation, which helps, but the real fix is a workflow: export, translate, review, import, and check in context before each release.
The words your users use
Specialized apps live or die on terminology. A translator who does not know the field will translate literally, and experts notice immediately.
How I localized My Disc Golf into 18 languages
My Disc Golf ships in 18 languages: English, Finnish, Swedish, Norwegian, Danish, Estonian, Icelandic, Latvian, Lithuanian, German, Czech, Slovak, Polish, Dutch, French, Spanish, Italian and Japanese. It follows the device language.
The priority was proper disc golf wording rather than machine translation. Disc golf has its own vocabulary: flight numbers, stability, plastic types and disc categories, explained in disc golf flight numbers. Those terms have to match what players in each country say on the course, or the app feels foreign to exactly the people it is for. The disc collection features described in the disc golf collection app guide carry a lot of short labels and counts, the classic place where plurals and layout break.
I have also shipped a commercial app with support for 40 languages, which is where the process side of localization really gets tested.
Localization help for your iOS or Mac app
- Prepare an existing app for localization: extract hard-coded strings, fix plurals and concatenation, and move to String Catalogs.
- Make layouts hold up for long languages, right-to-left scripts and large text sizes.
- Set up a translation workflow with your translators or agency, including in-context review.
- Localize App Store metadata and keep it current with each release. More on the release side in App Store release and maintenance.
- Add new languages to an app that already ships, without regressions in the existing ones.
Reach more users in their language
Tell me which languages you need and where your app stands today, at contact@hobbysoft.pro. I will reply with what needs to change in the code and the process.