Skip to content

The translation workflow

Every translatable string in Ownlate is a segment, and a segment carries one translation per target language. This page is about how that translation moves.

untranslated → draft → needs_review → reviewed → approved
↑ ↑ ↓
└── in_progress ←──── rejected
ActionResulting statusPermission required
Savedrafttranslation:write
Submitneeds_reviewtranslation:write
Mark reviewedreviewedtranslation:approve
Approveapprovedtranslation:approve
Rejectin_progresstranslation:approve

By default owner and admin hold translation:approve; translator holds translation:write only. The mapping is editable — see Members and access.

A few rules the server enforces regardless of which client you use:

  • Nothing is skipped by accident. Any of the three review actions can be applied to a submitted translation, but approving something that is already approved is refused rather than repeated.
  • Rejection reopens, it does not erase. A rejected translation goes to in_progress and keeps its text, so the translator reworks rather than retypes.
  • A source change invalidates the lot. Editing a segment’s source text marks every non-empty translation of it outdated. Untranslated languages stay untranslated.

Approving is the moment work becomes shippable, and three things happen at once:

  1. The translation is stamped approved and becomes eligible for export and releases.
  2. The pair (source text → target text) is written to the workspace translation memory.
  3. The words are counted against your plan’s word allowance.

If the workspace has no room left in its plan, approving is refused before anything is written. See Plans and billing.

From the editor toolbar you can act on a whole language at once:

  • Approve all takes every segment of that language that has text and is neither untranslated nor already approved, and approves it. Blank translations are left alone, and the whole batch is checked against your word allowance before anything is written.
  • Reject all sends every needs_review, reviewed and approved translation of that language back to in_progress.

Both are available over the API as approveAllTranslations and rejectAllTranslations, and both return the number of segments they touched.

A task assigns a slice of the work to somebody. It has a type — translate or review — one or more languages, an optional assignee and an optional due date.

StatusCan move to
openin_progress, completed, closed
in_progressopen, completed, closed
completedopen, closed
closedopen

Assigning a task notifies the assignee, and so does every status change. Tasks live on the project’s Tasks tab.

An open project accepts translations from people who are not members of the workspace. Anyone signed in can leave a suggestion on a segment; a suggestion is stored separately and changes nothing on its own.

A reviewer with translation:approve then decides:

  • Accept — the suggested text is written to the segment as a submitted translation (needs_review), credited to the person who suggested it, and still has to pass the ordinary review.
  • Decline — the suggestion is closed and nothing is written.

To keep the queue usable, one person may have at most 20 pending suggestions at a time across the platform. Declined and accepted ones do not count.

Every segment has a comment thread. Comments are for the question that has to be settled before the string can be translated — a missing context, an ambiguous source. A thread can be marked resolved when the question is answered, and the editor shows how many threads are still open on each segment, so a reviewer can find them without opening every string.

Mentioning a colleague in a comment notifies them.

Separately, every change to a translation is recorded: the text, what was done to it (translate, draft, approve, reject, review) and who did it. The history panel in the editor shows it per language, and it survives rejection, rework and re-approval.

The editor keeps a live presence channel. When several people work on the same project you see who else is in it and which segment each of them has open, and a translation somebody else saves appears without a reload.