Skip to main content

Convert iOS Localizable.strings to Android strings.xml — comments survive as XML notes

Free CLI to convert iOS .strings files into Android strings.xml resources. Preserves keys, dotted namespacing, developer comments, and empty values.

Free CLI — convert ios-strings files to android-xml:

npm install -g @i18n-agent/i18n-convert
Need to translate, not just convert? Try i18nagent.ai MCP →

The reverse of the most-Googled mobile localization conversion is just as common, and just as easy to break with a homemade script. iOS Localizable.strings is a flat key-value list with C-style /* */ comments and string literals delimited by double quotes; Android strings.xml is structured XML with <string name="…">…</string> elements, XML comments, and a different escaping regime. The two formats look superficially similar but disagree on every encoding detail that matters during a real round trip — quote escaping, empty-value handling, key syntax for dotted namespaces like settings.general.title, and where translator comments live in the syntax tree.

i18n-convert reads .strings honoring its "key" = "value"; grammar including C-style comments, then emits a well-formed strings.xml whose <string> elements carry the original key as the name attribute. Comments above an entry become XML comments above the corresponding <string> element, so translator notes survive the trip back to Android. Empty values are emitted as self-closing tags (<string name="empty_value" />) rather than dropped, which matters when a downstream build pipeline relies on a key being present for runtime fallback. Keys containing dots (a common iOS namespacing convention) are kept verbatim and not silently normalized to underscores.

Command

i18n-convert simple.strings --to android-xml -o strings.xml

Input

/* App title */
"app_title" = "My Application";

/* Greeting message */
"greeting" = "Hello, World!";

"no_comment" = "This has no comment";

/* Empty value */
"empty_value" = "";

/* Multi-word key */
"settings.general.title" = "General Settings";

Output

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- App title -->
    <string name="app_title">My Application</string>
    <!-- Greeting message -->
    <string name="greeting">Hello, World!</string>
    <string name="no_comment">This has no comment</string>
    <!-- Empty value -->
    <string name="empty_value" />
    <!-- Multi-word key -->
    <string name="settings.general.title">General Settings</string>
</resources>

Related conversions