TMS (translation management system)

The platform where your extracted strings meet translators: push keys up, assign languages, get finished catalogs back into the repo.

the place translators workthe translation dashboardtranslation management systemtranslation managment systemlocalization platformthe Crowdin/Lokalise/Phrase thingtool that syncs translation files with translatorswhere do I send the strings to get translated

See it

Live demo coming soon

What it is

A TMS is the middle layer between your repo and the humans who translate. Your build pushes source strings up (via CLI, GitHub app, or API), the platform splits them into segments, routes them to translators or vendors per language, tracks status, and pushes finished catalogs back down as a pull request. Crowdin, Lokalise, Phrase, Transifex, and the open-source Weblate are the names you will hear.

Reach for one the moment you pass roughly two languages or one outside vendor. Below that, files in git and a spreadsheet survive. Above it, you need the things a TMS bundles: translation memory so repeat sentences are never paid for twice, a termbase for locked brand words, screenshots for context, and QA checks that catch a missing {count} placeholder before it ships as a crash.

Gotcha: decide early which side owns the truth. If devs hand-edit es.json while the TMS also writes it, you get merge conflicts and silently reverted translations. The usual rule: source language is owned by code, every target language is owned by the TMS, and nobody touches the other's files. Also turn off auto-machine-translate-on-import unless you genuinely want unreviewed MT live in production.

Ask AI for it

Integrate this repository's existing TMS provider using that provider's official CLI. Configure the project ID, the source and target file mappings, the locale mapping between our tags and the provider's, and the upload and download commands, then wire them into CI: upload new and changed source keys on every merge to main, and run a scheduled download that opens a pull request per locale. Read credentials only from named CI secrets, never from committed files. Keep en.json as the only human-edited source catalog, preserve key descriptions and screenshot references as context metadata on upload, fail the build if a translated string is missing an ICU placeholder that exists in the source, and never overwrite target locale files by hand. If no provider is configured in this repo, scaffold the interface and stop, listing the exact provider, project ID, and credential inputs you still need rather than inventing them.

You might have meant

message catalogstring extractiontranslation contexttranslation memoryxliff

Go deeper