Onboarding non-engineers to the translation workflow
Translation repositories maintained only by engineers ship copy that reflects engineering priorities: keys that are technically correct but phrased by someone who last wrote product copy in a ticket comment. Product managers who want to improve the onboarding flow have to file an issue, wait for engineering capacity, and review a pull request they did not write. Translators who work in the same language every day have no direct path to fix a mistranslation they can see in the catalog.
Messagevisor's file format and tooling are designed to make non-engineer contributions as low-friction as possible, while keeping the review and validation gates that protect production quality.
What makes YAML approachable for translation edits#
The most common contribution a non-engineer makes to a translation repository is changing the value of a translation string. In Messagevisor, that looks like this:
description: Sign in button labeltranslations: en: Sign in nl: Aanmelden de: AnmeldenThe file is human-readable. The translations map is a straightforward key-value structure. Changing "Sign in" to "Log in" requires editing one value. The surrounding structure - description, translations, the indentation - stays intact. A product manager who has edited a YAML file once can do this confidently.
The description field is especially important for non-engineers: it explains what the message is for and where it appears, without requiring the contributor to search the application codebase.
What non-engineers should know about the workflow#
The workflow for a non-engineer contributor is the same as for an engineer:
- Open the Messagevisor repository in GitHub (or GitLab, or Bitbucket).
- Find the message file to edit. The catalog can help locate the right key.
- Click the pencil icon to edit the file directly in the browser.
- Make the change.
- Submit the change as a pull request with a description of why the copy changed.
- CI runs lint and tests automatically.
- The relevant reviewer approves (via CODEOWNERS).
- The pull request is merged and CI publishes the updated datafiles.
Steps 1–5 require no local tooling, no Git client, no development environment. GitHub's web editor handles it.
The catalog as a non-engineer interface#
The catalog provides a browsable, read-only view of the full translation project. It is the entry point for non-engineers who want to understand what copy exists without editing files.
$ npx messagevisor catalogOr serve a pre-exported catalog:
$ npx messagevisor catalog export$ npx messagevisor catalog serveWhat non-engineers can do in the catalog:
- Browse messages by namespace to find the right key
- Read the
descriptionfield to understand what a message is for and where it appears - View all translations for a message across every locale in one row
- See overrides and conditions expanded in plain language
- View examples with evaluated output for specific locales and contexts
- Use deep links to share a specific message with a colleague ("here's the copy that needs to change")
The catalog does not require repository access to view. It can be published as a static site accessible to the whole team.
Writing descriptions that help non-engineers#
The quality of non-engineer contributions depends on the quality of description fields. Engineers authoring new messages should write descriptions that answer the questions a non-engineer would have:
description: "Banner shown at the top of the billing page for users on the free plan. Appears below the page header. Should be 60 characters or fewer to avoid wrapping on mobile."summary: Billing upgrade prompt bannertranslations: en: Upgrade to unlock unlimited projects nl: Upgrade voor onbeperkte projectenThe description field is for humans. It is shown in the catalog and in the CSV export. A description that includes placement context, character limits, and target audience helps a translator or product manager make a better decision.
Using summary for compact views#
The summary field is a shorter one-line description that appears in CSV exports and in catalog views where the full description would take too much space. Use it for the elevator pitch of what the message is:
description: "First step of the onboarding checklist. Shown after account creation. The copy should be encouraging and action-oriented."summary: Onboarding step 1 - first action prompttranslations: en: Connect your first integration nl: Verbind je eerste integratieProviding examples for non-engineer review#
Examples show non-engineers exactly what a message will look like when rendered, including interpolated values and formatted numbers. They appear in the generated Catalog, and engineers can inspect the same output on demand with npx messagevisor examples.
description: Total amount shown in the billing summarytranslations: en-US: "Total: {amount, number, money}" nl-NL: "Totaal: {amount, number, money}"examples: - description: Standard total in USD locale: en-US values: amount: 49.99 - description: Standard total in Dutch locale: nl-NL values: amount: 49.99A translator reviewing {amount, number, money} in the raw translation string may not know what that produces. The example shows them Total: $49.99 - no ambiguity.
Making CI feedback readable to non-engineers#
When a non-engineer submits a pull request and CI fails, the error message is their only feedback. Messagevisor's lint output is designed to be human-readable:
ERROR messages/onboarding/step1.yml Missing translation for locale 'de' - add a 'de' key under translationsPoint non-engineers at the lint output in the CI check logs. For teams where this is a frequent onboarding friction point, add a short guide to the repository README that explains what the common lint errors mean and how to fix them.
CSV export for translators#
Translators working in bulk may prefer a spreadsheet workflow over editing YAML files one at a time. Messagevisor supports CSV export:
$ npx messagevisor export --csv --output=translations.csvThe CSV contains one row per message (and per override, with the messageKey:overrideKey format) and one column per locale. Translators can fill in missing values and return the file. An engineer then applies the translations back to the YAML files.
This round-trip workflow lets translators use familiar tools while keeping YAML files as the authoritative source.
Setting up a CODEOWNERS file for team collaboration#
For teams where product managers or translators should be notified about specific content areas, add them to CODEOWNERS:
# Marketing team is notified for all marketing copy changesmessages/landing/ @marketing-team# Product team reviews onboarding copymessages/onboarding/ @product-team# Translation lead reviews all new locale translationslocales/ @i18n-leadThis means non-engineers are in the review loop when their content area changes - without them having to monitor the repository manually.
Adding non-engineers as reviewers without blocking engineers#
CODEOWNERS can be used to notify without blocking. If a team uses GitHub's "allow merge without required review from code owner" option, then non-engineers are notified about changes in their area and can choose to review, but the PR is not blocked waiting for them. This is useful when you want visibility without creating a bottleneck.
For content areas where the non-engineer's approval is genuinely required - legal copy, compliance text - keep the stricter setup with branch protection enforcing CODEOWNERS review.
A practical onboarding checklist#
When onboarding a non-engineer contributor:
Give them catalog access. Deploy or share the catalog URL so they can browse messages without needing repository access.
Show them how to edit in the GitHub web UI. Most translation changes are simple value edits. The GitHub web editor is sufficient for this.
Explain the description field. Show them a well-described message as a model. Explain that description is what the catalog shows and that it helps translators do their job.
Walk through the CI check. Show them where to find lint output when CI fails. Explain the most common errors: missing locale translations and syntax issues.
Introduce examples. Show them how examples help them verify that interpolated content looks right before approving a change. Engineers can inspect the same examples with
npx messagevisor examples, while non-engineers can browse them in the generated Catalog.Set expectations for review. Explain that CODEOWNERS means certain changes will automatically request review from the right people, and that merging requires approval.

