Shipping an app in one language is straightforward. Shipping it in ten is where things break down: translation files drift out of sync, keys get renamed in one locale but not the others, and nobody knows which strings are actually ready for release.
The fix is not a bigger spreadsheet. It is treating translations like code, because that is what they are. They live in your repository, they change with every feature, and they deserve the same review workflow.
Why translations belong in your repository
When translation files live in Git, every change is traceable. You can see who renamed a key, when a locale was added, and which commit introduced a missing translation. Branches give you isolated workspaces, so a half-finished German update never blocks an urgent hotfix.
Compare that with the usual alternatives: emailed spreadsheets with no history, or a translation tool that holds your strings hostage in its own database with no clear path back into your repo.
The files you already have
Most stacks already store translations as plain text files:
- JSON for web apps, one file per locale like
en.jsonandes.json - .strings or .xcstrings for iOS and macOS
- strings.xml for Android
- .po files for gettext-based projects
A typical JSON locale file looks like this:
{
"checkout.title": "Checkout",
"checkout.pay": "Pay now",
"checkout.empty_cart": "Your cart is empty"
}These files diff cleanly, review well in pull requests, and work with every CI pipeline you already have.
A workflow that scales
The workflow that works for most teams looks like this: developers add keys in the source locale, the translation tool syncs with the repo, translators fill in the rest, and completed locales flow back as commits. No exports, no copy-pasting, no "final_v3_REVISED" files.
If a translation change cannot be reviewed in a pull request, it will eventually break something in production.
This is exactly the workflow MovaBase is built around. Connect your repository, and your JSON, .strings, and Android XML files stay in sync both ways: translators work in a proper editor while developers keep everything in Git. You can try it on your own repo at app.movabase.com.
Start small: move one locale file into your repo, wire up the sync, and let the pull request history speak for itself.