hobbysoft.pro

Expertise

iOS app localization: shipping in many languages without breaking

I localize iPhone, iPad and Mac apps so they read naturally and still look right in every language. My own app, My Disc Golf, ships in 18 languages with proper disc golf wording, and I have shipped a commercial app with support for 40 languages.

By HobbySoft, iOS & Mac developer Updated

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.

FAQ

Questions and answers

What are String Catalogs in Xcode?

String Catalogs (.xcstrings) are Xcode's localization format since Xcode 15. One file holds every string, its translations, plural and device variations, and its translation state, and Xcode fills it automatically from your code when you build.

How do I handle plurals in an iOS app?

Define plural variations in the String Catalog instead of building sentences in code. Each language gets the plural categories it needs, which can be more than English's one and other.

Can I just use machine translation for my app?

It is a fine first draft, but domain terms, short button labels and tone often come out wrong. Have someone who knows both the language and the subject review it before release.

Should I localize my App Store listing too?

Yes. The name, subtitle, keywords, description and screenshots can be localized for each language you support, and they are what people see before they ever open the app.

Have an app in mind? Let’s ship it.

I take on a small number of projects at a time and stay with them to the finish: one accountable developer, an EU company with clear invoicing, and support long after launch.

Hire me