Use Localazy, a software localization suite & translation management system, to take care of your Xcode String Catalogs localization.
Choose from multiple developer-friendly options to start with Localazy. Integrate your Xcode String Catalogs project the way that suits your workflow.
The best option for developers that want to make localization an automated part of their workflow.
Upload your texts and existing translations in any format directly to start quickly.
Add source keys via the web interface online and sync them into your project later.
Use the API to export translations and import content from/to Localazy programmatically.
A String Catalog in Xcode is a centralized file for managing localized strings in your iOS or macOS app. Instead of juggling multiple .strings
files, a String Catalog stores all translations in one place, making it easier to add languages, keep translations consistent, and update your app’s user interface text.
How to create a String Catalog in Xcode:
Localizable.xcstrings
) and click Create.How to configure a String Catalog:
.xcstrings
file in the Project Navigator.When you run the app, Xcode automatically picks the correct string based on the user’s device language settings.
Using Localazy with String Catalogs:
Instead of managing translations manually inside Xcode, you can connect your .xcstrings
file to Localazy.
localazy upload
This command uploads your latest .xcstrings
file to Localazy automatically, so you don’t need to manually handle files every time.
Once your source is in Localazy, you can choose how to translate your project:
When all translations are complete, download ready-to-use .xcstrings
files for all supported languages.
localazy download
This way, Localazy keeps your String Catalog in sync across all languages, reduces manual editing, and ensures faster, consistent localization.
The key benefits include:
.strings
files.Xcode’s String Catalog is a replacement for traditional .strings
files, designed to make localization more organized and efficient by consolidating all translations into a single, user-friendly interface.
For example, rather than maintaining separate files for source and target languages, a String Catalog groups them together. You can instantly see all language variants of a string side by side, making it faster to spot gaps or errors. This also helps developers and translators easily manage keys, track missing translations, and avoid inconsistencies.
With the Xcode String Catalog integration into Localazy, the process becomes even smoother:
This integration eliminates tedious file handling and makes scaling to multiple languages faster, more reliable, and less error-prone.
Pluralization and text variations are essential for natural-sounding translations. Different languages use different rules — for example, English typically distinguishes between singular and plural (“1 file” vs. “2 files”), while other languages, like Polish or Arabic, have three or more plural forms.
With Xcode’s String Catalog, you can define plural and variant strings directly within the catalog instead of creating multiple separate keys. For example, you might create a single entry for FileCount
that includes:
"%d file"
, other = "%d files"
"%d plik"
, few = "%d pliki"
, many = "%d plików"
, other = "%d pliku"
The catalog ensures these rules are applied consistently across all supported languages.
Variations can also be defined for context, such as different messages depending on gender or device type. This keeps everything structured in one place and avoids the confusion of multiple scattered .strings
entries.
With Localazy’s integration, pluralization and variations become even easier to manage:
This combination makes plural handling smooth, efficient, and reliable — especially when scaling your app to multiple languages.
When working with multiple languages in Xcode’s String Catalog, good organization and consistency are key. Here are some best practices to follow:
Always start with a complete and well-structured source language. This makes it easier to track missing translations and maintain consistency.
Instead of generic names like label1
, use meaningful keys such as LoginButtonTitle
. This helps translators and developers understand the context.
Define plural forms and variations (e.g., gender, device type) directly in the catalog to avoid hardcoding conditions in your app logic. For example:
"%d comment"
, other = "%d comments"
"%d komentář"
, few = "%d komentáře"
, other = "%d komentářů"
Use the catalog’s description fields or developer comments to provide translators with context. This reduces ambiguity and improves translation quality.
Keep all language versions up to date and validate them during development. Missing or outdated translations can break the user experience.
Localazy makes handling multiple languages smoother and error-free:
With these practices and Localazy’s automation, your String Catalogs stay consistent, well-structured, and ready for global audiences.
Over time, your project’s .xcstrings
files may accumulate unused or outdated keys that can clutter the localization process and confuse translators. Cleaning them up keeps your String Catalog organized and efficient.
Best practices for removing unused strings:
Check references in your code Before deleting any string, verify that it’s no longer used in your source code. Xcode’s “Find in Project” is a quick way to search for references.
Use Xcode’s String Catalog editor
.xcstrings
file in Xcode.Delete carefully across all languages When you remove a key from the source language, make sure to also remove it from all other language entries in the catalog to avoid mismatches.
Keep version control in mind
Always commit your .xcstrings
changes in Git (or another Version Control System - VCS) so you can easily revert if something breaks after cleanup.
With the xcstring integration in Localazy:
.xcstrings
ensures it’s also cleaned up across all target languages in Localazy. If the removed string — referred to as a deprecated key in Localazy terminology — later reappears in your source file during an upload, it is restored to the active state with all associated data (context, translations, contributors, etc.).This way, your localization workflow stays clean, consistent, and free from unnecessary clutter.