Logo for tanaschita.com

Migrating to String Catalogs in iOS

Learn about migration strategies from Localizable.strings to .xcstrings.

23 Mar 2026 · 3 min read

Many existing iOS projects still rely on Localizable.strings and Localizable.stringsdict files for localization. String Catalogs provide a more integrated workflow by allowing Xcode to manage localization keys automatically.

In this quick tip, we'll look at how to migrate an existing project to String Catalogs.

Sponsorship logo
Architecture & Design Patterns for iOS
This book is a practical guide to essential architectural principles and design patterns for iOS development. It covers strategies for building maintainable apps with Swift and SwiftUI, including dependency injection, navigation, common patterns, and modularization.
LEARN MORE

Why migrate to String Catalogs?

Before migrating, it's worth understanding what actually improves.

With traditional .strings files:

  • keys are added manually
  • unused keys can accumulate over time

String Catalogs improve this by:

  • automatically detecting localization keys in code
  • providing a visual editor in Xcode
  • tracking states such as new, stale, and needs_review

For many projects, this reduces maintenance effort.

If a project uses third-party localization tools or services, it's worth verifying that they support String Catalogs before migrating.

Backward compatibility

When considering a migration, backward compatibility is often a concern.

String Catalogs are fully backward compatible. During the build process, Xcode converts the catalog back into .strings and .stringsdict files. This means existing APIs and runtime behavior remain unchanged.

Xcode's automatic migration

Xcode provides built-in support for migrating existing localization files. To migrate, simply right-click on the Localizable.strings file and select Migrate to String Catalog.

Xcode will:

  • move existing keys into a .xcstrings file
  • preserve translations for all languages
  • convert pluralization rules automatically

Migrating over time

Migrating incrementally is possible and can work well when introducing clear boundaries.

Instead of converting the default Localizable.strings setup all at once, a practical approach is to create additional String Catalogs for new features. For example, we might create a catalog such as Checkout.xcstrings (instead of Localizable.xcstrings) and explicitly use it in code.

Text("checkout.title", tableName: "Checkout")

This way:

The important detail is that keys are only added to a specific String Catalog when that table is explicitly used in code. This makes it possible to migrate feature by feature over time.

Sponsorship logo
Preparing for a technical iOS job interview
Preparing for a technical iOS Job Interview with over 300 questions & answers. Covering Swift & Objective-C, SwiftUI & UIKit, Combine, HTTP Networking, iOS File System, Core Data, Concurrency with async/await, Security, Automated Testing, Dependency Management, AI & Machine Learning and more.
LEARN MORE
Sponsorship logo
Architecture & Design Patterns for iOS
This book is a practical guide to essential architectural principles and design patterns for iOS development. It covers strategies for building maintainable apps with Swift and SwiftUI, including dependency injection, navigation, common patterns, and modularization.
LEARN MORE
Sponsorship logo
Become a sponsor of tanaschita.com
By publishing an article on different iOS topics every week, tanaschita.com is constantly growing in the developer community and may provide a great audience for you as a sponsor.
CLICK TO LEARN MORE

Newsletter

Image of a reading marmot
Subscribe

Like to support my work?

Say hi

Related tags

Articles with related topics

localization

swift

ios

Working with String Catalogs in iOS projects

Practical tips, limitations, and best practices for localization with .xcstrings files.

16 Mar 2026 · 6 min read

Latest articles and tips

© 2026 tanaschita.com

Privacy policy

Impressum