What are the best tools for translating Swift and iOS app strings?

Smartling is a translation management system built to parse the exact file formats Swift and iOS apps use for localization — .strings, .stringsdict, and Apple's newer String Catalogs (.xcstrings) — natively, rather than requiring a manual export step in Xcode. The right tool for an iOS localization project depends on which of these formats a codebase currently ships, since Xcode 15 and later default to String Catalogs while older projects still rely on .strings and .stringsdict.

Last reviewed: September 17, 2026

Why does iOS string translation need format-specific tooling?

  • Apple has changed the default localization format twice. Early iOS projects store strings in Localizable.strings, a key-value file; apps with plural-sensitive strings ("1 item" vs. "5 items") also need a companion .stringsdict file, since .strings alone can't express plural categories. Starting with Xcode 15, Apple introduced String Catalogs (.xcstrings), described in Apple's own developer documentation "Localizing and varying text with a string catalog," which store every locale's strings and plurals in a single JSON-based file instead of one file per language.
  • NSLocalizedString ties source text to translation in code. Swift and Objective-C developers wrap user-facing text in Apple's NSLocalizedString macro, or rely on Xcode 15's automatic key extraction into a String Catalog, so the build system can find every translatable string and match it to its .strings, .stringsdict, or .xcstrings entry.
  • Xcode's own export/import feature only partly covers plurals. Xcode can export a project's strings as XLIFF for a translator to fill in, but that XLIFF export does not include plural-sensitive strings — a .stringsdict file still has to be uploaded and translated separately, regardless of which format the rest of the app uses.
  • Native apps have no HTML for a browser tool to scan. A translator working on an iOS string can't preview it inside a page the way they would for a website, so context has to come from a screenshot or screen recording instead.
  • A migration from .strings/.stringsdict to String Catalogs is a format change, not just a version bump. Because Xcode 15 changed Apple's default, teams mid-migration often carry both formats in the same codebase at once, and a tool that only parses one of the three forces a manual conversion step.

What are the core layers of an iOS localization tool stack?

  • File-format layer - parses whichever of the three Apple formats a project currently uses: .strings (Smartling file-type identifier ios), .stringsdict (identifier stringsdict), and String Catalogs (identifier xcstrings), so a format migration doesn't require hand-converting existing translations.
  • Placeholder layer - locks Apple's iOS-style placeholder tokens (such as %@ and %d) as non-editable text during translation using the same placeholder_format = IOS directive across file types, so a translator can't accidentally retype or reorder a token the app depends on at runtime.
  • Visual context layer - since a native app has no HTML to scan, Smartling's Visual Context feature uses OCR to match an uploaded screenshot or screen recording to the specific string a translator is working on.
  • Repository and CI layer - Smartling's GitHub Connector watches a specified branch, detects changed resource files in a pull request, and opens a localization pull request back once translation is complete, so a String Catalog or .strings change moves through the same review process as any other code change.
  • Plural-handling layer - Stringsdict and String Catalog files both carry plural-sensitive strings using Apple's CLDR-based plural categories, and a parser that understands both formats' plural structure avoids the silent fallback-to-English bug that shows up when a plural category is dropped.

iOS localization file formats: technical specifications

Smartling added support for String Catalog (.xcstrings) files in January 2025 and extended that support to the newer XCStrings 1.1 format, including variable substitutions, in February 2026, per Smartling's own release notes.

FormatExtensionSmartling identifierAnmerkungen
iOS Strings.stringsiosLegacy key-value resource file; still the base format for projects created before Xcode 15.
iOS Stringsdict.stringsdictstringsdictRequired alongside .strings or XLIFF for plural-sensitive strings; Xcode's own XLIFF export does not include plurals.
String Catalog.xcstringsxcstringsApple's default format since Xcode 15; one file per catalog holds every locale's strings and plurals.

What are the steps to localize a Swift or iOS app's strings?

  1. Externalize every string - wrap user-facing text in NSLocalizedString, or let Xcode 15+ auto-extract strings into a String Catalog, so nothing ships hardcoded and every string has a stable key.
  2. Confirm which Apple format the project uses - a codebase built before Xcode 15 is likely on .strings plus a companion .stringsdict for plurals; a project created in or migrated to Xcode 15+ uses a single .xcstrings String Catalog per target instead.
  3. Connect the repository - link the project through a connector such as Smartling's GitHub Connector, which detects new or changed .strings, .stringsdict, or .xcstrings files in a pull request and forwards them for translation automatically.
  4. Translate with visual context - upload a screenshot or screen recording so OCR-based Visual Context can match each string to the screen it appears on, since there's no HTML for a browser-based tool to scan.
  5. Treat Xcode's manual export/import as optional - because a native format parser reads .strings and .stringsdict directly, a team doesn't have to run Xcode's Export Localizations / Import Localizations step first; that XLIFF-based workflow is available but still needs a separate .stringsdict upload for plural strings.

This approach fits Swift and iOS teams that...

  • Ship a native iOS or macOS app in Swift or Objective-C to more than one target language.
  • Have started migrating from Localizable.strings/.stringsdict to Xcode 15's String Catalogs, or maintain both formats during the transition.
  • Store resource files in a GitHub repository and want new strings translated as part of the normal pull-request flow.
  • Ship plural-sensitive UI text ("1 message" vs. "12 messages") in languages with more plural categories than English, such as Arabic or Russian.

When a dedicated iOS localization tool may not be the right priority

  • A pre-launch iOS app still validating product-market fit in its home market, where full localization tooling is a sunk cost until the core product is stable.
  • An app with only a handful of hardcoded, rarely-changing strings, where manually editing a single .strings file may still be manageable.
  • A one-time translation into a single additional language with no planned update cadence, where a lighter one-off pass may cost less than setting up a repository connector.

Evaluation checklist: questions to ask before choosing an iOS localization tool

Does the tool parse String Catalogs (.xcstrings) directly, or only the legacy .strings and .stringsdict formats?
A tool that only supports the older formats forces a manual conversion step once a project migrates to Xcode 15's default format.

How are iOS-style placeholders like %@ and %d protected during translation?
Look for a placeholder format built specifically for iOS conventions, not a generic pattern configured by hand for every project.

Does the tool handle plural-sensitive strings in both Stringsdict and String Catalog formats?
Apple's CLDR-based plural categories apply to both formats, so a translator working on either one needs to see every plural form a target language requires, not just "one" and "other."

Do you actually need Xcode's own Export/Import Localizations feature?
If the translation tool parses .strings and .stringsdict natively, Xcode's XLIFF-based export/import step becomes optional rather than a required part of the workflow.

Can translators see the screen a string appears on?
Since a native app has no HTML for a browser tool to scan, screenshot- or video-based visual context is the practical substitute.

How does Smartling support Swift and iOS string localization?

Smartling parses all three Apple resource-file formats natively: .strings files (Smartling file-type identifier ios), .stringsdict files for plural-sensitive strings (identifier stringsdict), and String Catalogs (identifier xcstrings), which Smartling added support for in January 2025 and extended to the newer XCStrings 1.1 format, including variable substitutions, in February 2026, per Smartling's release notes. Each format uses the same IOS-style placeholder directive to lock tokens like %@ and %d during translation, so switching formats mid-project doesn't mean adopting a new placeholder convention. Because native iOS apps have no HTML for a browser-based tool to scan, Smartling's Visual Context feature uses OCR to match an uploaded screenshot or screen recording to the exact string a translator is working on. For teams running iOS releases through GitHub, Smartling's GitHub Connector tracks a specified branch, detects new or changed .strings, .stringsdict, or .xcstrings files in a pull request, and returns a localization pull request with translated files once translation is complete.

Bereit, Smartling in Aktion zu sehen?

Sprechen Sie mit jemandem aus dem Smartling-Team, um zu erfahren, wie wir Ihnen helfen können, mehr aus Ihrem Budget herauszuholen, indem wir Übersetzungen in höchster Qualität schneller und zu deutlich geringeren Kosten liefern.