# General Translation Changelog: gtx-cli 2.4.0: Save translation edits from the CLI
URL: https://generaltranslation.com/en-US/blog/local-edits.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 
Authors: Fernando Aviles
Published: 2025-10-21

## Overview

In **gtx-cli 2.4.0**, we've added a new way to save your local translation edits directly from the CLI.
This means you can now make translation changes locally, persist them, and keep everything in sync with your project without touching the dashboard.

_Version note: This post describes the 2.4.0 behavior. In `gt` and `gtx-cli` 2.16.1 and later, [`translate`](/docs/cli/reference/commands/translate) runs the save step by default; pass `--no-save-local` to skip it._

---

## The `save-local` Command

Historically, the only way to make translation edits was through the dashboard editor. That worked, but it often broke flow, especially if you were mid-development and just wanted to tweak a translation inline.

The new [`save-local`](/docs/cli/reference/commands/save-local) command lets you commit local translation edits back to your General Translation project. You stay in your workspace, and your changes stay in sync.

```bash
npx gtx-cli save-local
```

Running this command uploads any modified translation files, merges your local changes into the project, and ensures that the next [`translate`](/docs/cli/reference/commands/translate) run reflects your edits.

---

## Translate (Now With Local Awareness)

Until now, [`translate`](/docs/cli/reference/commands/translate) would always assume the remote version of a translation was the source of truth.

If you made local changes and ran [`translate`](/docs/cli/reference/commands/translate) again, those edits would be overwritten. That's no longer the case.

Now, when you run:

```bash
npx gtx-cli translate
```

the CLI automatically checks for local edits and saves them in the background — the same way [`save-local`](/docs/cli/reference/commands/save-local) does — before re-downloading translations. This guarantees that your local versions are preserved and that re-translations always persist your edits.

You'll see something like:

```bash
Starting translation...

Files to translate:
  - src/i18n/en/common.json
  - ...

◒  Updating translations...
◇  Updated translations
```

---

## What Happens When Sources Change

You might wonder: _what if I edit the source file after making local translation edits?_
In earlier versions, that would have triggered a full retranslation that wiped your custom changes.

In 2.4.0, the CLI is smarter. Even when a source update causes a retranslation, your previous local edits persist. They're incorporated into the new translation automatically.

For example, imagine you have a source string:

```txt
"I am with my mother"
```

which was translated as:

```txt
"Estoy con mi madre"
```

You then make a local edit to prefer _mamá_ instead of _madre_:

```txt
"Estoy con mi mamá"
```

If you later change the source:

```txt
"I am NOT with my mother"
```

the retranslation will still respect your wording choice:

```txt
"NO estoy con mi mamá"
```

Your local phrasing is preserved as long as the context remains relevant.

If the meaning of the source changes entirely (for example, changing _mother_ to _father_), the CLI will trigger a fresh translation for that new content.

For teams managing translations directly in code, this closes a frustrating gap between local editing and project synchronization. You no longer have to choose between working locally or trusting the dashboard copy since both stay consistent.

---

## TL;DR

- [`save-local`](/docs/cli/reference/commands/save-local) lets you push local translation edits from your CLI.
- [`translate`](/docs/cli/reference/commands/translate) now automatically preserves and merges local edits.
- Smart retranslation logic keeps your local changes unless the source meaningfully changes.

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
