# `@eloqnt/cli`

eloqnt/cli is a linter for your translation files. It catches errors before they ship, and optionally fills in missing translations.

[Documentation](https://cli.eloqnt.dev/docs) · [Configuration](https://cli.eloqnt.dev/docs/configuration)

---

Start by linting your project for common problems:

```console
$ eloqnt lint

messages/es.json
│
│  "kFvGpR": "Tienes mensajes nuevos"
│            ─┬──────────────────────
│             ╰─ Missing ICU argument: {count} (inconsistent-args)
│
│  "X0ha1a": "Save changes"
│            ─┬────────────
│             ╰─ Missing translation in es.json (missing-translation)

✗ 1 error
! 1 warning

→ Run `eloqnt translate` to fill in 1 missing translation
```

Linting runs static analysis on your source code and matches it against your messages, catching issues like unused messages, missing translations, broken ICU arguments, and more.

## Setup

### 1. Install the CLI

Add the CLI as a local project dependency:

```bash
npm install @eloqnt/cli --save-dev
```

If you're in a monorepo, install it within local packages as needed.

### 2. Add a config file

Create a config file at `.eloqnt/config.ts`:

```ts
import {defineConfig} from '@eloqnt/cli';

export default defineConfig({
  // The folder containing your source code
  // (optional, only if you use next-intl)
  srcPath: './src',

  // Where and how you store your messages
  messages: {
    path: './messages',
    locales: 'infer',
    sourceLocale: 'en',
    format: 'json'
  }
});
```

All paths are relative to your project root. For more sophisticated setups like monorepos or when not using `next-intl`, see the [configuration docs](https://cli.eloqnt.dev/docs/configuration).

### 3. Lint your source code and messages

```bash
npx eloqnt lint
```

See [`eloqnt lint`](https://cli.eloqnt.dev/docs/cli/lint) for details.

## Start translating

Once linting works, you can optionally use [`eloqnt translate`](https://cli.eloqnt.dev/docs/cli/translate) to fill in any missing translations:

```console
$ eloqnt translate

✔  Context enrichment complete
✔  Styleguides loaded (global, es)
✔  Translated de, es via eloqnt/engine (hosted)
✔  Post-translation checks done

messages/
  de.json  2 translated
  es.json  2 translated

✔ Project fully translated
```

Source strings are enriched with context from their call sites, [styleguides](https://cli.eloqnt.dev/docs/styleguides) steer tone and terminology, and post-translation checks retry anything that comes back wrong.

To get started with translating, [log into eloqnt/engine](https://engine.eloqnt.dev) first.
