---
title: "Review translations"
description: "Edit, verify or reject a translation record, and check that your change is valid."
canonical_url: "https://diglot.sh/guide/how-to/review-translations"
---
# Review translations

> Edit, verify or reject a translation record, and check that your change is valid.

Reviewing in diglot means editing a record file and committing it. That keeps review in the place your team already reviews: a pull request. You can also do it from a browser UI with the [x18n plugin](https://diglot.sh/review-ui/overview).

## Edit a translation

Open `<locale>/segments/<hh>/<hash>.json`. Change `text`, set `review` to `edited`, and set `updatedAt` to the time of your change. Add `by` with your GitHub login if you want the edit attributed.

```json
{
  "hash": "87ecf1244d975205",
  "source": "Nuxt is powered by {0}Nitro{/0}, and {1} is built in.",
  "text": "Nuxt repose sur {0}Nitro{/0}, et {1} est intégré.",
  "origin": "mt",
  "review": "edited",
  "derived": "fresh",
  "by": "your-login",
  "updatedAt": "2026-01-02T09:30:00.000Z"
}
```

Keep `text` a valid skeleton: every placeholder of `source` has to appear, and you may not add links, code or HTML. The next section shows how to check.

## Verify a translation

When you have checked that a translation is correct, set `review` to `verified` and add `verifiedBy` (shown here without the other fields):

```json
{
  "review": "verified",
  "verifiedBy": { "by": "your-login", "at": "2026-01-02T09:30:00.000Z" }
}
```

A record can't be `verified` without `verifiedBy`. Verifying a carried or updated record is also how it leaves the `pending-review` state.

## Reject a translation

If a translation is wrong and not worth fixing, set `review` to `rejected` and add `rejectedBy` with the same shape. The text stays in the record for reviewers and metrics, readers see the source text instead, and machine translation doesn't touch it. A record can only carry `rejectedBy` while it is rejected.

To replace a rejection, edit the text and set `review: edited`, without `rejectedBy`.

## Check your change

`diglot validate` reads every record and checks its shape, that its path and hash agree with its source skeleton, and that its text is valid for each place the hash is used:

```bash
pnpm dlx @diglot/cli validate
```

It exits with code 1 when any record has an error, so it fits in a CI job. Warnings, such as records that no source uses, don't change the exit code. [`diglot status`](https://diglot.sh/workflow/cli/status) then shows the effect on coverage.

## Review from code

If you build your own review tool, use `editRecord`, `verifyRecord` and `rejectRecord` from `@diglot/core`. They apply the rules on this page, refuse an edit that wouldn't be valid, and refuse to overwrite a record that changed since the reviewer loaded it. See [review](https://diglot.sh/core/review).

## Review in x18n

The [x18n plugin](https://diglot.sh/review-ui/overview) lets reviewers edit translations and approve them in x18n's editor and CLI. Approving a translation in x18n marks its record `verified`; see [reviews](https://diglot.sh/review-ui/reviews).


## Sitemap

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