Skip to main content
Upload translation files from your local project to Entri. By default, all language files matching your configured file patterns are discovered and pushed. Any non-source languages found are automatically enabled as target languages in the project. Existing translations are skipped unless --overwrite is specified.

Usage

nt3 push [options]
# alias: nt3 up

Examples

# Push all discovered language files (default)
nt3 push

# Push and replace existing translations
nt3 push --overwrite

# Push a specific language only
nt3 push -l fr

# JSON output for CI/CD
nt3 push --json

Options

FlagDescription
-o, --overwriteOverwrite existing translations (default: skip existing)
-l, --language <lang>Push a specific language only (e.g., -l fr)
--jsonOutput results as JSON

How push works

nt3 push reads your .nt3.yml to determine which files to upload. It scans the filesystem for all files matching your configured patterns (replacing {lang} with actual language codes found on disk), reads each file, and sends it to the Entri import API. Any discovered non-source languages are automatically added as target languages to the project. The import merges incoming keys with the existing project:
  • New keys are created
  • Existing keys are skipped (unless --overwrite is set)
  • Keys not in the file are left untouched

Overwrite behavior

Without --overwrite, pushing a file that contains keys already in Entri leaves those translations unchanged. This is safe for incremental pushes — only new strings are added. With --overwrite, incoming translations replace any existing values. Use this when you want Entri to reflect your local files exactly, for example after a bulk find-and-replace or when seeding from an external source. You can also set a per-project default in .nt3.yml using update_translations: true, which has the same effect as always passing --overwrite. The CLI flag takes precedence when both are set.
# .nt3.yml
update_translations: true   # overwrite existing on every push

JSON output

The --json flag suppresses all progress output and prints a structured result instead. This is useful for parsing results in scripts or CI pipelines:
{
  "success": true,
  "files": [
    {
      "path": "src/locales/en.json",
      "language": "en",
      "format": "json-nested",
      "created": 12,
      "updated": 0,
      "skipped": 45
    }
  ],
  "totals": {
    "created": 12,
    "updated": 0,
    "skipped": 45
  },
  "errors": []
}
The process exits with code 1 if any file fails to push, making it easy to fail CI builds on errors.

Multi-pattern projects

If your .nt3.yml defines multiple file patterns, all patterns are pushed for each target language. See the configuration reference for multi-pattern setup.