Skip to content

User Workflow Guide ​

This guide covers the day-to-day translation workflow for all roles, from creating keys to approving and exporting translations.

Roles at a Glance ​

RoleWhat they can do
READERView translations and history
TRANSLATOREdit translations and submit for review; work on assigned locales
MAINTAINEREverything a Translator can do + approve/reject submissions, manage keys
ADMINFull project management: members, locales, namespaces, keys, approvals

Translation Lifecycle ​

Every translation for a key + locale pair goes through a defined pipeline:

TODO → IN_PROGRESS → SUBMITTED → APPROVED
                  ↑               ↓
                  └───────────────┘  (MAINTAINER rejects → back to IN_PROGRESS)
                                     (MAINTAINER reopens APPROVED → IN_PROGRESS)
StatusMeaning
TODONot yet translated (default state for new keys)
IN_PROGRESSA translator is actively working on it
SUBMITTEDReady for review, awaiting approval
APPROVEDReviewed and accepted, eligible for export

Automatic transitions: Saving a translation when its status is TODO automatically advances it to IN_PROGRESS. You do not need to manually change the status first.


Creating Keys ​

Keys represent individual pieces of translatable text.

  1. Go to Translation Keys in the left sidebar.
  2. Click New Key.
  3. Enter a flat key name and select a namespace:
    common.save_button
    auth.login_title
    errors.not_found
  4. Optionally add a description or context note to help translators understand the string.

Keys are stored as flat strings internally. The dot-notation is a convention for organisation, not a hierarchical structure.

Namespaces ​

Namespaces group related keys. Create namespaces in Settings → Namespaces. Common examples:

NamespaceUsage
commonShared UI strings (buttons, labels, tooltips)
authLogin, registration, password reset
dashboardDashboard-specific strings
errorsError messages
emailsEmail templates

Assigning Keys to Translators ​

Translation tasks (also called tickets) can be assigned to specific users per locale.

  1. Open a key from the key list.
  2. In the key detail view, find the locale you want to assign.
  3. Use the Assignee dropdown to select a team member.

Assigned translators will see their tasks on the Board in their own swim lane and in the My Active Tasks section of their dashboard.

Locale assignments: A user's locale assignment (set in project settings) determines which locales they see in the "My Languages" tab. The "Other Languages" tab shows all remaining locales.


Using the Translation Editor ​

Click any key in the key list to open the full editor view.

Layout Options ​

Toggle between side-by-side (locales shown in columns) and stacked (locales shown vertically) using the layout button in the top-right of the editor.

Entering Translations ​

  1. Select the locale tab (or use My Languages to filter to your assignments).
  2. Type or paste your translation in the editor.
  3. Auto-save kicks in after ~1.5 seconds of inactivity. No save button needed.
  4. Starting to type on a TODO translation automatically moves it to IN_PROGRESS.
  5. Click Submit for Review when you are satisfied. Status moves to SUBMITTED.

Placeholders {var} ​

The editor highlights {variable} placeholders in a distinct colour. These represent dynamic values injected at runtime (e.g. {name}, {count}).

Hello, {name}! You have {count} unread messages.

Use the Variable Test Values panel (bottom of the editor) to enter test values and preview the rendered output without affecting the exported translation.

Key References @:key ​

Verba supports vue-i18n-style key references, strings that reuse another key's value:

@:common.app_name Settings

The editor highlights @:key.name syntax and provides autocomplete. Start typing @: and a dropdown lists all keys in the project.

The Preview panel shows the resolved output with a status indicator:

IconMeaning
✓Reference resolved successfully
⚠️Referenced key exists but the translation is empty
❌Referenced key does not exist

Plural Forms ​

For strings with plural variations (vue-i18n | pipe syntax), enable the Plural Preview toggle to see each form rendered separately:

No items | One item | {count} items

The preview renders each variant so you can verify all plural forms look correct.


Using the Board ​

The Board gives a visual overview of all translation tasks in the project.

Board Layout ​

  • Columns (horizontal): Translation statuses (TODO, IN_PROGRESS, SUBMITTED, APPROVED)
  • Rows (swim lanes, vertical): One lane per assignee + a Backlog lane for unassigned tasks

Drag and Drop ​

  • Drag a card horizontally to change its status.
  • Drag a card vertically (to a different swim lane) to reassign it to another user.

Filtering ​

  • User filter avatars (top bar): click a user's avatar to show only their cards.
  • Namespace dropdown: filter cards to a specific namespace.

Card Actions ​

  • Single click a card → opens the Inspector panel on the right side (quick details without leaving the board).
  • Double click a card → opens the full key detail modal with the complete editor.
  • Selected cards are highlighted on the board.

Reviewing and Approving Translations ​

Required role: MAINTAINER or ADMIN

Review Queue ​

Navigate to Review Queue from the project sidebar. It shows all translations in SUBMITTED status, including who submitted them.

Approving ​

Click ✓ Approve to accept the translation. Status moves to APPROVED.
Optionally click 💬 Add note to leave a comment (visible in the key's Comments tab) before approving.

Rejecting (Sending Back) ​

Click ↩ Send back to return the translation to IN_PROGRESS.
Click 💬 Add note first to explain what needs to change. The translator will receive a notification and see your comment in the key detail view.

Reviewing from the Board ​

You can also review from the Board:

  1. Look at the SUBMITTED column.
  2. Click a card to open the Inspector panel, or double-click for the full modal.
  3. Use the Approve/Send back buttons directly in the inspector/modal.

Reopening an Approved Translation ​

Open the key detail and click Reopen. It moves back to IN_PROGRESS.


Comments and History ​

Comments ​

Every key has a Comments tab. Comments are threaded (unlimited nesting), so you can reply directly to a specific comment.

Use comments to:

  • Clarify the meaning or context of a string for translators.
  • Flag issues with a translation before rejecting it.
  • Discuss alternatives.

Comments update in real time via WebSocket. All team members viewing the same key see new comments immediately.

History ​

Every key has a History tab showing a full timeline of all changes:

  • Key created
  • Translation text edited (with before/after)
  • Status transitions (who changed it, when)
  • Assignments added or changed
  • Comments posted

The history is append-only and cannot be modified.


Dashboard ​

The personal Dashboard shows:

  • My Active Tasks: translation tasks assigned to you, grouped by project.
  • Quick links to jump directly to a specific position on the Board.

This gives translators a clear view of what needs their attention without having to navigate through projects manually.


Exporting for Production ​

Once translations are approved, export them from the project:

  1. Go to Export in the project sidebar.
  2. Choose the format: JSON, CSV, or XLSX.
  3. Optionally enable Resolve @:key references to inline referenced values.
  4. Download the file(s).

See Import & Export for full details on formats and CI integration.


Profile & Password ​

Click your email address in the top navigation to open your profile page. From there you can:

  • Change your email address.
  • Set a new password (requires your current password).

OTP / Passwordless Login ​

If you prefer not to use a password:

  1. On the login page click Magic link.
  2. Enter your email and click Send code.
  3. Enter the 6-digit code from your email (valid for 15 minutes).

Development mode: When SMTP is not configured, the OTP code is printed to the API server's stdout log.

Community Edition released under the AGPL-3.0 License.