# `translation.wording_missing`

A language file of a supported locale leaves out one of the messages, or failures, that its folder has to word.

Area 10, [Configuration](/docs/configuration.md); not declinable; the next step is usually the agent's.

## Why Jadpo refuses it

Every supported locale words every message of each folder, and every
failure a route can answer with. A call in French of a message the French
file leaves out would have no words to show. Jadpo won't quietly show
English instead, because a supported locale is meant to be complete.

A locale that isn't finished yet says so in `in_progress:`, and only such
a locale falls back to the default where its wording is missing.

## What it looks like





The app supports English and French, and the shipping domain has two
messages, `order_shipped` and `parcels`. The French file words only the
first.

domains/shipping/translations/fr_fr.jadpo:

```jadpo
translations {
    order_shipped: "La commande de {name} a été expédiée."
}
```

```text
error: `parcels` has no wording in `domains/shipping/translations/fr_fr.jadpo`
 --> domains/shipping/translations/fr_fr.jadpo:1:1
  |
1 | translations {
  | ^^^^^^^^^^^^ no `parcels`
  reason: A message is worded in every supported locale that isn't in progress, so a call with `locale: Locale.fr_fr` has words to show.
  next: Add `parcels`, with a wording for each plural form (`one`, `many` and `other`) to `domains/shipping/translations/fr_fr.jadpo`, which may write `{count}` (agent)
  rule: translation.wording_missing
  help: https://jadpo.dev/docs/errors/translation.wording_missing

check failed: 1 error, 5 files
```

`(agent)` at the end of the `next:` line means your coding agent can make
the fix itself.

A failure a route can answer with is worded the same way, keyed by its
code, so a client app showing French has text for it. Here the booking
domain's French file words nothing, and `POST /openings` can answer with
`slot_taken`.












domains/booking/translations/fr_fr.jadpo:

```jadpo
translations {}
```

```text
error: `slot_taken` has no wording in `domains/booking/translations/fr_fr.jadpo`
 --> domains/booking/translations/fr_fr.jadpo:1:1
  |
1 | translations {}
  | ^^^^^^^^^^^^ no `slot_taken`
  reason: A failure a route can answer with is worded in every supported locale that isn't in progress, so a client app showing `Locale.fr_fr` has text for its code.
  next: Add `slot_taken: "..."` to `domains/booking/translations/fr_fr.jadpo` (agent)
  rule: translation.wording_missing
  help: https://jadpo.dev/docs/errors/translation.wording_missing

check failed: 1 error, 11 files
```

## How to fix it

**If the wording is ready**, add the missing member to the language
file, with a wording for each plural form French has. In
`domains/shipping/translations/fr_fr.jadpo`:

```jadpo
    parcels: {
        one: "{count} colis"
        many: "{count} colis"
        other: "{count} colis"
    }
```






A French call of `parcels` now writes the French wording for its count.

**If a failure has no wording**, add it under its code. In
`domains/booking/translations/fr_fr.jadpo`:

```jadpo
    slot_taken: "Ce créneau vient d'être pris."
```














A client app showing French now has French text for the `slot_taken`
failure.

**If French is still being translated**, list it in `in_progress:` in
`app.jadpo`:

```jadpo
    in_progress: [Locale.fr_fr]
```






A French call of `parcels` falls back to the English wording until the
French file words it. Removing French from `in_progress:` makes the gap an
error again.

## Related

- [Missing wording](/docs/what-the-compiler-checks-of-translations.md#missing-wording)
- [Languages](/docs/translations-as-messages.md#languages)
- [Failures for client apps](/docs/failures-for-client-apps.md)
- [Locales still being translated: `in_progress:`](/docs/locales.md#locales-still-being-translated-in_progress)
