Editing
The editor
Three views over the same keys, filters that narrow all three, and a URL that carries what you are looking at — so "the French strings that are still missing" is a link, not a description.
New to the project as a translator? The tutorial Get Started as a Translator goes from the invitation link to your first translation, with a screenshot of every step.
Three views
Reviewing four hundred strings and writing one careful sentence are not the same job, so the same keys are offered three ways. The toggle sits in the toolbar; the source language stays on screen in all three.
Panel
The key tree on the left, one key at a time on the right: source, translation, the context note, the placeholder verdict, the review actions and the discussion on that key.
For depth — the one string somebody sent back, or a key you have to think about.
Inline
Every key of the language under the next, the source beside the field, editable in place. Grouped by file and by key path, with the group heading pinned as you scroll — and below the phone boundary the two stack, source over field.
For context — writing a screen in one pass, where the string before matters.
Table
Every language side by side, one row per key, editable in the cell. The key column and the header stay put while you scroll in either direction.
For bulk — comparing locales, spotting the gaps, filling in a column.
Beside the toggle, one more way to look at a single key: All languages in the panel opens that key in every locale of the project at once, which is the fastest way to see whether a term was translated consistently.
Protected terms
A project can list the words that stay in the original in every language — a product name, a brand, a slogan. Where the source text uses one, the editor marks it, and the term's note is its tooltip: you see that a word is meant to stay before you translate it, not after somebody reviews it. An owner keeps the list under Settings → Protected terms, where a term and its note can be corrected in place; everybody else on the project reads it.
If your translation does not carry a word the source protected, the cell says so beside the field — a note in the panel and the inline view, a warning in the table. It is a remark, not a gate: nothing stops you saving, because a word that reads better translated in one string is your call to make and Mergua is not in a position to overrule it.
What the AI round does with them
The list goes to the model with every AI translation, together with each term's note. Afterwards Mergua checks the answer against it, and a translation that dropped a protected term is written as a draft rather than thrown away — so it lands in the Draft filter for somebody to look at, with the value in the cell to work from. A draft here is not an error; it is the round saying it is not confident this one is finished.
The list only protects. An entry says a word stays as it is and nothing else — there is no place to record what a term should become in French, because that is a different thing from keeping it out of the translator's way.
QA checks
Every translation is compared with its original, and a cell that differs in a way that is usually a slip says so beside the field — a badge in the panel, a line under the field in the inline view and in All languages, an icon with a tooltip in the table. The checks report; none of them stops you saving.
| Check | Speaks up when |
|---|---|
| Placeholders | A placeholder of the original is missing, renamed or added — braces, printf, i18next references and ICU arguments. |
| Character limit | The translation is longer than the limit set on the key. |
| Protected term | A protected term the original uses is not in the translation. One finding per term. |
| Leading or trailing whitespace | The translation starts or ends with whitespace where the original does not, or the other way round — a trailing line break included. |
| Double space | Two spaces in a row that the original does not have. |
| Empty but marked translated | Nothing but whitespace, while the status says translated or approved. |
| Final punctuation | The original ends in a full stop, question mark, exclamation mark, colon or ellipsis and the translation ends differently. It knows the full stops and question marks of other scripts, leaves Thai, Lao, Khmer and Burmese alone, and lets Japanese and Chinese drop a final full stop. |
| ICU syntax | Braces that do not close, or a plural or select that lost the other case the original has. |
Ignore, for exactly this text
Sometimes the translation is right and the check is not — a language that ends the sentence differently, a space the layout needs. Every finding in the panel, the inline view and All languages carries an Ignore, and the finding is gone from the cell, the filter and the counts. The ignore belongs to the text as it is: change the translation or its original and the check looks again, so an ignore can never hide a mistake made after it. The table offers no Ignore; open the key in the panel. Viewers see the findings and no Ignore.
Working through them
The Has issues filter narrows the editor to the cells with a finding, on main and on a branch alike. Each language card on the project's translations tab shows how many of its values on main have one, and the count opens the editor with that filter already set. The tutorial Find Problems Before a Release follows one count down to zero, with a screenshot of every step.
The same checks run on every upload and on what the CLI pushes, where they are listed in the response — see Import & export. In an AI round, broken ICU syntax makes the value a draft; the other findings are reported and the value stays translated.
Filters and search
One filter narrows whatever view you are in — the key tree, the inline list and the table all read the same selection. The toolbar shows the active one by name, so a view that is hiding keys always says so.
| Filter | Shows |
|---|---|
| All | Every key in the language. The default, and not in the URL. |
| Missing | Keys with no value at all in this language — the list you are working through. |
| Translated | Keys that have a value: both the ones waiting for review and the ones already approved. |
| Review | The narrower half of the row above — a value is there and nobody has approved it yet. |
| Rejected | Values a reviewer sent back, which are drafts carrying a reason. Where to start. |
| Has issues | Values with at least one QA finding nobody has ignored — see QA checks above. |
Needs attention
A seventh filter with no entry in the menu: it is the counter in the branch banner, and clicking it filters the view down to the branch's own unreviewed work — added, changed and deleted keys, and pending renames. Clicking it again clears the filter. It exists on a branch only, because on main there is no operation to review.
Search, and the file filter
Search matches the key name and the source text, so a string you remember but cannot name is still findable. In a project that keeps several files per language, a second control filters by file. All three narrow together: a search inside Missing inside checkout is three conditions, not the last one you touched.
Two things worth knowing
- A filter that no longer includes the key you had open closes it, rather than leaving a key on screen that the list beside it says is not there.
- Switching language keeps the filter and the view. Fixing the missing strings in one locale and then the next is the same two clicks each time.
- The bulk actions follow the filter. While a status, a file or a search narrows the list, AI translate, Approve and Reset to draft act on the keys it shows and ask first with the count; with no filter they cover the whole locale you are in.
- So do the downloads in the ⋮ menu. Under a filter each one exports only the keys it shows and names how many its file will hold — JSON and ARB leave out a key with no value, so filtering Missing and picking XLIFF is how the untranslated keys go to an agency on their own.
- In a project with several files the downloads cover the files the filter shows. On All, JSON and ARB arrive as a zip with one file per namespace, and XLIFF as one document holding every file.
- Under a filter the ⋮ menu also offers AI re-translate drafts. It translates the shown drafts that hold text again and names how many first; translated and approved values are never touched, and an answer that loses a placeholder or a protected term stays a draft.
- Under a filter the ⋮ menu also offers Delete shown keys, for cleaning up a file or a search result at once. It names how many keys it will delete and asks first; without a filter there is no way to delete everything. On a branch every key becomes its own deletion in the review queue and leaves main when the branch is merged. On main a key a branch is still working on is kept, and the message names the branch.
A filtered view is a link
The branch, the view, the filter, the file, the search and the open key are all in the URL, and they survive a reload and the back button. So the answer to "which strings are still missing in French?" is a link you paste into a ticket, not a sentence describing where to click.
/projects/<id>/translate/fr?filter=missing&view=tableAnything left at its default is left out of the URL, so a link is as short as what it actually says. The panel view and the All filter are the defaults.
Keyboard
Four keys, and no save key: a value is written by itself half a second after you stop typing, so moving on is what saving looks like.
| Key | Does |
|---|---|
↑ ↓ | Move to the previous or next key in the list as it is currently filtered. |
Enter | Jump from the list into the translation field for the open key. |
/ | Focus the search field. On a narrow window, the command palette instead. |
⌘K / Ctrl+K | The command palette: search keys, switch view, and reach the actions that are not in the toolbar. |
The arrows walk the filtered list, not the whole locale — which is what makes Missing plus the arrow keys a way to work through what is left.
On a phone
Below 768 pixels the inline view is the editor: source over translation, full width, with the key tree as a drawer. The toggle is absent rather than disabled, because the other two views need a width that is not there — and your choice is not thrown away. Widen the window and the view you picked comes back.
What the inline view carries, it carries there too: editing, the status dot per key, the context note, a sent-back value with its reason, search and the filters. Approving belongs to the panel, so it is a wider window's job — a phone is for finishing the last twenty strings, and that works.
The discussion on a key comes along. The key you have open carries a comment icon with the number of comments, and it opens the thread from the bottom of the screen — to read it, to answer, and to mention somebody. A mention in your Reviews list opens straight onto that thread, and it counts as read once the thread is open, not when the key is.