One source file. Every language in sync.
Fills missing keys, re-translates edited ones and keeps ICU plurals intact.
% curl -sSL langsync.nevil.dev | bash
nevil@macbook ~ % langsync --features
Features
- Only what changed
- A snapshot of every source string tells new keys from edited ones. Translations you did not touch stay as they are.
- ICU plurals stay valid
- Only the words inside plural and select branches go to the translator. Each rebuilt message is parsed before it is written.
- Repairs broken strings
- A target with broken ICU, often left by an older tool, is re-translated in place on the next run.
- Batched and parallel
- Keys go out in batches and locales run side by side. When the API pushes back, it slows down and retries.
- Placeholders untouched
{name},<b>tags and the brand names you whitelist come back exactly as they went in.- Errors with the fix
- Every error and warning ends with the command that fixes it, ready to paste.
nevil@macbook ~ % open screenshots/
Screenshots
nevil@macbook ~ % langsync --install
Install
Install
# macOS and Linux, via pipx
curl -sSL langsync.nevil.dev | bash# or by hand, anywhere Python 3 runs
pipx install git+https://github.com/dracu-lah/langsync-cli.gitPoint it at your source
# langsync.json, in your project root
{ "source": "messages/en.json", "dir": "messages" }Run it
langsync # sync every locale in dir
langsync --dry-run # show what would change
langsync -l fr,de # only these locales
langsync --prune # drop keys the source removed
langsync --check # exit 1 on drift, for CIAdd an empty {} file per language, like messages/fr.json, and LangSync fills it. The README covers every flag and config key.
nevil@macbook ~ % langsync --support
Free, MIT licensed, made by one person.
If it saves you an afternoon of copy and paste, a sponsor or a coffee keeps it going.
nevil@macbook ~ %



