---
title: "Review and status"
description: "Learn which statuses a translation can have and how they decide what readers see."
canonical_url: "https://diglot.sh/guide/concepts/review-and-status"
---
# Review and status

> Learn which statuses a translation can have and how they decide what readers see.

diglot treats review as a first-class part of the data. A record says who produced its text and what a person has done with it, and diglot derives from that one status for every segment. The status decides how coverage is reported and whether readers see the translation or the source text.

## The review field

<table>
<thead>
  <tr>
    <th>
      Value
    </th>
    
    <th>
      Meaning
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        none
      </code>
    </td>
    
    <td>
      Nobody has looked at the text. This is how machine translations start.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        edited
      </code>
    </td>
    
    <td>
      A person changed the text.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        verified
      </code>
    </td>
    
    <td>
      A person confirmed that the text is correct. The record names them in <code>
        verifiedBy
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        rejected
      </code>
    </td>
    
    <td>
      A person decided the translation is wrong. The record names them in <code>
        rejectedBy
      </code>
      
      .
    </td>
  </tr>
</tbody>
</table>

## Statuses

The status of a segment combines its record with a check of the text against the current source:

<table>
<thead>
  <tr>
    <th>
      Status
    </th>
    
    <th>
      When
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        untranslated
      </code>
    </td>
    
    <td>
      There is no record.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        rejected
      </code>
    </td>
    
    <td>
      The record's <code>
        review
      </code>
      
       is <code>
        rejected
      </code>
      
      , or its text fails <a href="https://diglot.sh/core/validation">
        validation
      </a>
      
       against the segment.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        verified
      </code>
    </td>
    
    <td>
      <code>
        review
      </code>
      
       is <code>
        verified
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        edited
      </code>
    </td>
    
    <td>
      <code>
        review
      </code>
      
       is <code>
        edited
      </code>
      
      , or the record is fresh and its <code>
        origin
      </code>
      
       is <code>
        human
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        pending-review
      </code>
    </td>
    
    <td>
      The record was carried or updated from a predecessor and nobody has edited or verified it since.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        machine
      </code>
    </td>
    
    <td>
      A fresh machine translation that nobody has reviewed.
    </td>
  </tr>
</tbody>
</table>

The checks run in that order, so a text that fails validation is rejected whatever its `review` says.

## What readers see

Only translations that pass those checks reach the page. A segment that is `untranslated` or `rejected` keeps its source text, so a reader sees English where no good translation exists and never sees a broken sentence. Bundles still include rejected records, so a site can show their status.

Machine translation leaves a rejected record alone. It also leaves an edited one alone, because an edit is a record with a hash that already exists. The next machine run only touches hashes that have no record. If the source changes, the new hash starts its own record, and if a reviewer's earlier work is a usable predecessor, the model updates it and changes as little as possible.

## Replacing a rejection

A rejection stays in force until a person replaces it. Setting `review: edited` without `rejectedBy`, or changing the source so that the segment has a new hash, supersedes it. [Review translations](https://diglot.sh/guide/how-to/review-translations) shows the edit.

## Coverage

`diglot status` counts words, not segments, because a single long paragraph weighs more than a short heading. The share it prints as *reviewed* is the share of words whose status is `edited` or `verified`. Machine translations and pending updates don't count towards it, which keeps the number honest about how much a person has looked at.

## Machine translation per locale

Whether the Action drafts translations for a locale is a switch in `<locale>/locale.yml`:

```yaml [fr/locale.yml]
mt:
  enabled: true
```

A locale with `enabled: false`, or no `locale.yml`, gets no new records from the Action, but its existing records stay in the bundle. The file can also carry `governance` metrics (`activeReviewers`, `approvalRate`, `reviewLatencyDays` and `updatedAt`) that a job of your own maintains to decide when to switch machine translation on or off. diglot reads and validates them but never acts on them.

## Next steps

- [Translation records](https://diglot.sh/guide/concepts/translation-records) lists every field behind these statuses.
- [`diglot status`](https://diglot.sh/workflow/cli/status) prints the coverage report.


## Sitemap

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