Translation Workflow
PerfLocale’s optional Workflow layer turns translations into trackable assignments with owners, priorities, deadlines, email notifications, and an approval gate. It’s off by default - single-admin sites don’t need it. Turn it on at Settings → Addons → Workflow once you have more than one person writing or reviewing translations.
Workflow statuses
When Workflow is enabled, every translation picks up a workflow status alongside its WordPress post_status:
- Unassigned - no translator picked yet. Default for newly-created translations.
- Assigned - a translator has been picked but hasn’t started yet.
- In Progress - the assigned translator is actively working.
- In Review - translator marked it done; awaiting an editor / manager’s sign-off.
- Approved - reviewer accepted. Ready to publish.
- Published - live on the site. Terminal state.
To send an assignment back to the translator, the reviewer flips it from In Review back to In Progress with a note in the Workflow panel - there is no dedicated "Rejected" state.
Assignments admin page
PerfLocale → Assignments is the team’s shared queue. Every assignment row shows: Content, Language, Status, Priority (Urgent / High / Normal / Low), Assignee, and Deadline. Filter the queue by status + assignee; sort by Status, Priority, or Deadline; search by title; paginate.
Translators only see assignments they’re on; managers see everything. Each translator also gets a personal queue via the admin bar shortcut.
Assigning work
From any translation’s edit screen, the PerfLocale sidebar has a Workflow panel. Fields:
- Assignee - a WP user with the
perflocale_translatecapability (granted by default to the custom Translator role; see Permissions & Roles). - Priority - Normal by default; raise for time-sensitive content.
- Deadline - date-only; surfaces in the sorted queue.
- Notes - optional free-text for the translator.
Email notifications
When an assignment is created, re-assigned, or its status changes, PerfLocale can send an email to the affected user(s). Toggle at Settings → Addons → Workflow → Email notifications. Both Subject and Body are templated with the placeholders below. Falls back to wp_mail() by default; route through SMTP via any standard SMTP plugin.
The Settings UI exposes a button row for each token — click any chip to insert it at the cursor in the matching Subject or Body field.
Available placeholders
| Token | Description | Example |
|---|---|---|
{post_title} | Title of the post being translated | Best bread recipes |
{assignee_name} | Translator’s display name | Alex Mason |
{language} | Target language name | German |
{status} | Current workflow status (label form) | In Review |
{priority} | Capitalised priority value | High |
{deadline} | Raw ISO date | 2026-05-03 |
{deadline_relative} | Human-readable relative deadline. Renders today, tomorrow, yesterday, in 3 days, or 5 days ago using WordPress core’s human_time_diff(). Returns an empty string when no deadline is set. | in 3 days |
{edit_url} | Direct edit link to the translation post | https://…/wp-admin/post.php?post=42&action=edit |
{site_name} | Site title from get_bloginfo('name') | Acme Bakery |
Empty values render as empty strings — for example, an assignment without a deadline produces {deadline_relative} = "", so a sentence like "deadline {deadline_relative}" renders as "deadline " (trailing space). Wrap deadline mentions in conditional copy if you want clean output for both states.
Example template
Hi {assignee_name},
The translation for "{post_title}" ({language}) needs your attention —
priority {priority}, deadline {deadline_relative}.
Edit: {edit_url}Renders as:
Hi Alex,
The translation for "Best bread recipes" (German) needs your attention —
priority High, deadline in 3 days.
Edit: https://acmebakery.com/wp-admin/post.php?post=42&action=editThe full outgoing email is filterable via perflocale/workflow/email — useful for plugins that route admin mail through a transactional provider, rewrite recipients, or append localised footers.
Publish gate
Optional: require status = Approved before a translation can be Published. Enable Settings → Addons → Workflow → Publish Gate. When on, saving a translation as Published is blocked with an admin notice if Workflow status isn’t yet Approved. Useful for regulated industries.
Related
- Permissions & Roles - the Translator role + capability map.
- Content Translation - the underlying translation model.
- Hooks Reference - workflow events you can extend (
perflocale/workflow/status_changed, etc.).