Localization
Your app in every language, without waiting for a store release.
Import the strings files you already have. AI writes the first translation, your team verifies it, and verified strings reach your users over the air. When a store review complains about the wording, you see which string it means.
- AI drafts, people verify
- Linked to your store reviews
The demo runs a real catalog on a sample app. No account needed. Included in the Team plan, nothing extra to buy. See pricing.
How it works
Import. Draft. Verify. Ship.
Your strings files go in as they are. From then on the catalog lives here: your build pulls from it, your app fetches updates between releases, and a source string that changes sends its verified translations back for review. Each language gets exactly the plural forms it uses - Arabic six, Japanese one.
Import what you have
An
.lprojfolder, an.xcstrings, astrings.xml, JSON or CSV. Every language in the file lands at once, and a key's comment becomes its description.AI writes the first draft
The model gets the source text, the key's description, its length limit and the conventions of the target market. Glossary terms you mark do-not-translate are masked before it sees them, and a source string already translated in the project is reused rather than generated again.
Your team verifies
A draft stays a proposal until a person reads it in the row and marks it verified. Writing a value from the CLI never does that.
Ship without a store release
Publish, and your app fetches one JSON bundle the next time it asks. Only verified strings are in it; a key still in review keeps the wording of the last publish.
Quality
Mistakes are caught on the row, not in production.
Five checks run on every translation as it is saved, and each finding is attached to the string it concerns, so fixing it means reading one row.
Placeholders
A
%@,%1$sor{count}that is missing, added or altered in the translation is flagged. Numbered arguments may change order; unnumbered ones may not.Length
A translation over the key's character budget is flagged with the count:
62 / 24 characters.Terminology
A do-not-translate term that does not appear verbatim in the target, or a term whose preferred translation is missing from it.
Consistency
The same source text translated two different ways under two keys.
Missing translations
An empty target is flagged as missing, and nothing else is reported on it until it has text.
Nothing unverified ships
The over-the-air bundle is built from verified strings only. A draft, an AI proposal or a string still in review is left out, and devices keep the last published wording for that key.
Store reviews
When a review complains about the wording, you know which string it means.
If you connect your app, we read its App Store and Google Play reviews. A review about a wrong or confusing translation is attached to the string it is about, and after you publish a fix you see whether the complaints stopped. It works the other way too: your glossary teaches the reply AI your product's own names and terms in every language.
The German translation may not be landing - compare it with the English source.
Complaints land on the string
A badge on the row shows how many reviews mention it.
A fix drafted from the complaint
The suggestion answers what the reviewer wrote. You decide whether it goes in.
Before and after
Fourteen days either side of the publish: complaints about the string, and your rating.
For developers
Fits into how your team already builds.
Almost everything you can do in the editor, your build system or a coding assistant can do too, through the countrymanager command line tool or a plain web request: fetch the latest translations before a release, send new text up when a feature is merged, add and fill in texts. Access is granted per project in three levels, read, push and manage, so a build that only reads can never delete anything.
# your strings, in your build
$ countrymanager loc sync \
--project wetterpro --platform ios \
--out-dir Sources/ResourcesSynced ar.lproj
Synced de.lproj
Synced fr.lproj
Synced ja.lproj
Synced 4 locales into Sources/Resources - no line breaks foundTranslations arrive before the build
Your build pulls the latest text in the file format each platform expects, Xcode, Android or web, before it compiles. Nobody copies files by hand.
New text goes up with every merge
One step in your CI sends a feature's new strings over the moment it is merged. Only additions arrive, so a broken or half-written file can never delete what is already there.
Every common file format
Xcode string catalogs (
.xcstrings), the older iOS files (.strings,.stringsdict), Android resources (strings.xml), JSON, next-intl and CSV spreadsheets. A placeholder for a name or a count is recognised however the platform writes it, so translators see the same thing everywhere.A coding assistant can do the whole job
Adding a text, describing it, setting a length limit and filling in every language are plain commands, so an AI coding assistant can localize most new text end to end. Nothing it writes ships until a person has verified it.
Updates reach the app without a release
The app checks for new translations when it starts, skips the download when nothing changed, and only ever receives text a person has verified. A fixed typo reaches users the same day.
Have a look inside.
The whole product, running on a sample app.
The demo needs no account, no credentials, nothing to install. Plans from €49/month.