Localizable.strings to .xcstrings converter

Drop your Localizable.strings files (one per language): the tool merges them into a single .xcstrings String Catalog you can download. The conversion runs in your browser, for free, without signup or upload.

Convert your .strings files

Or paste the content of a file

Converted in your browser: no file is uploaded.

Edit the catalog without going back to Xcode

LocalePilot is a desktop app that opens your .xcstrings files, checks placeholders (%@, %1$@, %d), translates with local AI if you want, then writes the file back in Xcode's style: an unchanged catalog comes out byte-identical. It is being finalized for macOS: leave your email to hear about the launch.

What the converter does

  • Reads your .strings files (UTF-8 or UTF-16, /* … */ and // comments, \n, \" and \U00e9 escapes).
  • Merges every language of a table into a single catalog (Localizable.xcstrings, InfoPlist.xcstrings…): one entry per key, with each language's translation in the translated state. Tables are never mixed.
  • Uses the comment above a key as the entry's comment.
  • Flags keys missing from a language, keys defined twice and unreadable lines.

The file is written in Xcode's style (2-space indentation, a space before each colon) so your Git diff stays readable.

How to convert Localizable.strings to xcstrings

  1. Gather the Localizable.strings file from each xx.lproj folder.
  2. Drop the project folder or the files one by one, then check each file's language.
  3. Pick the source language, download Localizable.xcstrings and add it to your Xcode project.
  4. Build, then review the diff: keys marked Stale, new keys extracted from code and format specifiers are covered in the guide to migrating to a String Catalog.

What the converter does not do

It does not read .stringsdict files: plurals and device variations are left for Xcode or a catalog editor. It does not scan your code, so it does not add the strings Xcode would extract from SwiftUI literals. For a whole project, Xcode's Migrate to String Catalog command remains the reference; this tool is for standalone files, a translator's export or a quick test.

Frequently asked questions

Are my .strings files uploaded to a server?

No. Your files are read locally and the catalog is built in the page: the download comes from your browser, with no round trip to a server.

How does the tool know each file's language?

It reads it from the xx.lproj folder name when you drop a folder, or from the file name (Localizable_fr.strings). Otherwise you enter it yourself before generating the catalog.

Why not use Xcode's migration?

For a whole project, use it: it also handles .stringsdict and knows your code. This converter is for standalone files, without opening the project, such as a translator's export or a test.

Are .stringsdict plurals converted?

No, only .strings files are read. Plurals are redone in Xcode as plural variations in the catalog.

My .strings file is UTF-16, is that a problem?

No, the UTF-16 encoding of files generated by Xcode is detected automatically, like UTF-8.

Is the generated catalog valid?

It is JSON in the String Catalog format (version 1.0). It compiles with Xcode's xcstringstool, but open it in Xcode and review the diff before committing.

How is this different from LocalePilot?

This tool converts files once. LocalePilot is a desktop app, being finalized for macOS, that edits .xcstrings, checks placeholders, translates with AI and exports with a backup.

Get notified at launch

LocalePilot is being finalized. Leave your email to hear when it launches.

  • macOS 12 or later · Ollama or LM Studio optional
  • App interface in English, French, Spanish, Italian and Portuguese.