Android localization
Android · strings.xml · 46 languages · Free

Translate res/values/strings.xml without breaking a single %1$s

Upload res/values/strings.xml, pick locales, and get back values-de/strings.xml, values-ja/strings.xml… — %1$s/%2$d positional specifiers and inline <b>/<i> markup both survive exactly as written.

Translate your strings.xml → $ pip install kaeris
%1$s / %2$d positional-safe Inline <b>/<i> markup preserved values-<lang>/ output, ready to copy in Real strings.xml, not a JSON wrapper No account needed
Localize your Android app in 3 steps
1

Upload strings.xml

Drop res/values/strings.xml in, or run kaeris translate res/values/strings.xml --langs de,ja,uk from the CLI.

2

Pick target locales

46 languages, named to match your values-XX/ qualifier folders directly (de, ja, zh-rCN…).

3

Ship

Each file downloads pre-named values-de/strings.xml — drop it into res/ and rebuild.

Real Android XML, escaping and all

Before → after

res/values/strings.xml
<resources>
  <string name="welcome">Welcome back, %1$s!</string>
  <string name="items_left">%2$d items left in stock</string>
  <string name="tap_continue">Tap <b>here</b> to continue</string>
</resources>
res/values-de/strings.xml
<!-- Generated by KAERIS i18n Tool — de -->
<resources>
  <string name="welcome">Willkommen zurück, %1$s!</string>
  <string name="items_left">Noch %2$d Artikel auf Lager</string>
  <string name="tap_continue">Tippe <b>hier</b>, um fortzufahren</string>
</resources>

KAERIS translates <string> resources — the bulk of an app's UI text — and re-escapes &/</' for valid XML on the way out. <plurals> quantity blocks and <string-array> lists are a separate resource type this pass doesn't rewrite yet — keep those as-is or flatten their <item> values into plain strings for now.

Built for Android

Positional specifiers preserved

%1$s, %2$d and friends are never dropped, reordered or mistranslated — critical since Android indexes them by position.

Inline markup-safe

<b>/<i> tags inside a <string> value pass through as literal text, exactly like Android's own resource compiler expects.

values-<lang>/ output

Every download is pre-named values-de/strings.xml, values-ja/strings.xml — no renaming before it lands in res/.

One CLI command

kaeris translate res/values/strings.xml --langs de,ja,uk --out res — no config file required to get started.

Why KAERIS
Placeholder-safe%1$s/%2$d is never dropped, reordered or mistranslated.
Format-native — real Android XML out, escaped correctly, not a flattened JSON dump.
Verify-meaning QA — every string is back-translated to catch meaning drift before you ship.
No account needed — drag & drop free up to 10,000 characters, or use the CLI/API.

Ship your Android app in every market

46 languages, positional-specifier-safe, values-<lang>/ ready. Free to start, no account required.

$ pip install kaeris
$ kaeris translate res/values/strings.xml --langs de,ja,uk
Translate your strings.xml now →