Translation workflows

Using Weblate raises quality, reduces manual work, and brings everyone involved in the localization process closer to each other. It is up to you to decide how many of Weblate features you want to make use of.

The following is not a complete list of ways to configure Weblate. You can base other workflows on the examples listed here.

Personalizzazione flusso di lavoro

In addition to configuration at Project configuration and Component configuration (as Abilita revisioni, Abilita suggerimenti, Votazione suggerimenti, and Accetta automaticamente i suggerimenti), the translation workflow can be customized per language.

Site-wide workflow customization can be done while Changing language definitions.

Per-project customization can be done on each language page of the project.

Review and suggestion settings can be overridden, the only limitation is that Abilita revisioni needs to be turned on and can only be disabled in the per-language customization.

The first existing setting applies:

  1. Personalizzazione della lingua del progetto

  2. Personalizzazione della lingua

  3. Le impostazioni del progetto/componente

Nota

Please be careful when using site-wide override as that applies to all projects (unless they have own overrides for a given language).

Custom source language

Select Source language in a project’s language workflow settings to translate from another language in the same project. For example, you can translate a regional language variant from its parent language. Leave the selection empty to use the component’s source language.

The selected language’s translation is displayed as the source in the editor and used for translation checks, automatic translation, and translation memory. The original source strings and file identifiers remain unchanged.

Changing a parent translation marks its translated children as needing editing. Children are read-only while their parent is untranslated or needs editing, including when reviews are disabled. A parent that is translated (waiting for review) or approved permits editing. This restriction also applies through multiple levels of parent languages. Languages cannot depend on themselves or form a cycle.

If a component lacks the selected language or a matching string, its children are read-only until that source becomes available. Weblate preserves their translations and the configured source language; it does not fall back to the component source. Clearing the setting or selecting the component source language restores the canonical source. Moving a component applies the destination project’s workflow settings. Changing workflow settings updates affected strings before returning; on large projects, this can delay translation edits.

Languages selected as custom sources cannot be deleted until these workflow settings are cleared or changed to another language.

This setting can only be configured per project and language. Existing intermediate language configuration continues to control the component source.

Workflow changes affect new translation-memory updates. Previously stored source and target pairs remain subject to the existing translation-memory retention and cleanup settings. A missing source does not create an active memory entry.

Limiting translation languages

Several settings can limit translation languages. They address different stages of the translation lifecycle and can be combined:

Control requests for languages that do not exist yet

Configure Aggiungi nuova traduzione at workspace, project, category, or component level. Categories and components can inherit this setting; see Settings inheritance. You can let users contact maintainers, point them to translation instructions, create the language file automatically, or disable adding new translations.

Project admins can still add a translation when Weblate can create its file. For components that do not inherit the project setting, change Aggiungi nuova traduzione individually or automate the changes using PATCH /api/components/(string:project)/(string:component)/.

To allow existing project languages while requesting approval for new ones, select Create existing project languages; contact maintainers for new languages. A language qualifies when any non-glossary component in the project has a target translation for it, even with no translated strings. Source-only languages and glossary translations do not qualify. This applies across categories, including shared components and components the contributor cannot access.

Maintainers approve a language by creating its first target translation. Removing the last qualifying translation removes eligibility. Component overrides that allow unrestricted language creation can also introduce an eligible language. Project and category submissions use the languages present at the start of the operation, so component processing order does not affect the result.

Project and category submissions modify only components owned by that project or category. To add a language to a shared component, use its own language creation page; the owning project’s eligibility and permissions apply there.

The REST translation creation endpoint returns HTTP 403 for languages requiring approval; submit these requests through the web interface. The permission to add several languages does not bypass this policy. Maintainers and trusted add-ons retain their existing creation permissions, and repository file discovery is unaffected.

Disabling new translations controls user requests. It does not stop discovery of translation files added to the repository or automatic glossary language synchronization.

Limit which translation files Weblate discovers or creates

Configure Filtro lingua on each component. For example, ^(de|en|fr)$ limits the component to translation files whose language code is de, en, or fr. The filter applies while scanning the component file mask and when creating a new translation file; it does not change permissions for translations that are already present.

Language filters are configured per component, with no project-wide language allowlist. To apply a filter across many components, automate the changes using PATCH /api/components/(string:project)/(string:component)/.

Grant translation access only for selected languages

Use language-scoped teams when different users should be able to translate different languages. A team can only grant permissions, so remove any broader translation permission that would otherwise apply to the same users.

Restrict direct editing of an existing language

Open the language settings in the project, enable Customize translation workflow for this language in this project, and turn on Restrict direct editing.

Users with the Edit string when suggestions are enforced permission can continue editing directly. Other users can add suggestions when Turn on suggestions is enabled. Turn off suggestions as well to make the language editable only by privileged users.

The restriction can also be configured site-wide while Changing language definitions. A project-language customization takes precedence over the site-wide language setting.

Use suggestion voting

Turn on Suggestion voting to let users vote on suggestions. Voting alone does not restrict direct editing. A positive Automatically accept suggestions threshold also requires users without the Edit string when suggestions are enforced permission to submit suggestions. Use Restrict direct editing when this restriction should not depend on automatic acceptance.

Translation access

The access control is not discussed in detail as a whole in the workflows, as most of its options can be applied to any workflow. Please consult the respective documentation on how to manage access to translations.

In the following chapters, any user means a user who has access to the translation. It can be any authenticated user if the project is public, or a user with Translate permission to the project.

Translation states

Each translated string can be in one of the following states:

Non tradotte

Translation is empty, it might or not be stored in the file, depending on the file format.

Richiede modifica

Translation needs editing, this is usually the result of fuzzy matching or translator action. Depending on the file format it might be marked as needing edit (for example as it gets a fuzzy flag in the gettext file).

Richiede riscrittura

Translation needs to be rewritten because of a source string change.

Richiede controllo

State used for source/template strings that need developer review. It is typically set for new source strings imported from the VCS when the Source edit addon is enabled, or when a source string is reported for checking.

Tradotto / In attesa di revisione

Translation is made. The translated state is shown as «Waiting for review» if reviews are enabled.

Approvato

Translation has been approved in the review. It can no longer be changed by translators, but only by reviewers. Translators can only add suggestions to it.

This state is only available when reviews are enabled.

Sola lettura

String is read-only as a result of having read-only flag, being a non-editable source string, or marked such in the translation file.

Suggerimenti

Suggestions are stored in Weblate only and not in the translation file.

Gli stati sono rappresentati nei file di traduzione quando possibile.

Suggerimento

If the file format you use does not support storing states, you might want to use the Contrassegna le traduzioni invariate come «Da riscrivere» add-on to flag unchanged strings as needing rewriting.

Nota

Il Filtro qualità traduzione determina quali stati di traduzione sono archiviati nel file.

Direct translation

The most common setup for smaller teams, where anybody can translate directly. This is also the default setup in Weblate.

  • Any user can edit translations.

  • Suggestions are optional ways to suggest changes, when translators are not sure about the change.

Setting

Value

Nota

Abilita revisioni

OFF

Configured at project level.

Abilita suggerimenti

ON

Useful for users to be able to suggest when they are not sure.

Votazione suggerimenti

OFF

Accetta automaticamente i suggerimenti

0

Translators group

Utenti

Oppure Translate con controllo dell’accesso per progetto.

Reviewers group

N/D

Not used.

Peer review

With this workflow, anybody can add a suggestion, which needs approval from additional members before it is accepted as a translation.

  • Any user can add suggestions.

  • Any user can vote for suggestions.

  • Suggestions become translations when given a predetermined number of votes.

Setting

Value

Nota

Abilita revisioni

OFF

Configured at project level.

Abilita suggerimenti

ON

Votazione suggerimenti

ON

Accetta automaticamente i suggerimenti

2

You can set higher value to require more peer reviews.

Translators group

Utenti

Oppure Translate con controllo dell’accesso per progetto.

Reviewers group

N/D

Not used, all translators review.

Dedicated reviewers

With dedicated reviewers you have two groups of users, one able to submit translations, and one able to review them to ensure translations are consistent and that the quality is good.

  • Any user can edit unapproved translations.

  • I Revisori possono approvare / respingere le stringhe.

  • Reviewer can edit all translations (including approved ones).

  • Suggestions can also be used to suggest changes for approved strings.

Setting

Value

Nota

Abilita revisioni

ON

Configured at project level.

Abilita suggerimenti

ON

Useful for users to be able to suggest when they are not sure.

Votazione suggerimenti

OFF

Accetta automaticamente i suggerimenti

0

Translators group

Utenti

Oppure Translate con controllo dell’accesso per progetto.

Reviewers group

Reviewers

Or Review with per-project access control.

Turning on reviews

Reviews can be turned on in the project configuration, from the Workflow subpage of project settings (to be found in the Operations → Settings menu):

_images/project-workflow.webp

Per-language reviews

To require review only for selected languages, first turn on Abilita revisioni for the whole project. Then open each project language page that should use different behavior, enable Customize translation workflow for this language in this project, and turn Enable reviews off for languages that should not require review.

Reviewers also need review access for the same language. Add them to a team whose roles include Review strings, and limit that team or the user membership to the language they should review. See Gestione controllo accessi per progetto and Controllo accessi a livello di sito for language-scoped access setup.

If approval buttons are not visible, check both parts of the setup: reviews have to be enabled for that translation, and the signed-in user has to have review permission for that language.

Machine translation and LLM workflows

Machine translation services, including large language model (LLM) services, can assist human translators or generate translations for them to edit or approve. Choose a workflow based on when humans should check the generated text and when it should reach the repository.

First, configure the services under Automatic suggestions in the project settings or site administration; see Suggerimenti automatici. For LLM services, see LLM translation context for the context and instructions used to guide translation.

To process strings in bulk, run Traduzione automatica, select Machine translation as the source, and choose the services to use. For ongoing automation, configure the Traduzione automatica add-on on the component with the same source and desired mode. Use the query state:empty to fill empty translations without replacing existing human work; see Alla ricerca di stringhe.

Human translation assisted by services

Use this workflow when translators should choose when to use machine translation for each string.

Translators consult the Suggerimenti automatici tab in the editor, choose a service result, edit it as needed, and save the translation. These service results are distinct from stored suggestions awaiting acceptance: a human decides what to save. This workflow does not require the Automatic translation add-on and can be combined with Dedicated reviewers.

Service translation with human editing

Use this workflow to fill translations automatically and let humans improve them directly.

  • Select Add as translation as the automatic translation mode.

  • Turn off Abilita revisioni and allow translators to edit directly, as in the direct translation workflow.

  • Set Filtro qualità traduzione to Commit all translations regardless of quality.

The service output becomes a translation that humans can edit in the usual editor. It can be committed to the repository without human approval.

For machine drafts that should remain visibly unfinished, choose Add as «Needing edit» instead. Humans edit these drafts and clear the Needs editing state when finished. To keep unfinished drafts out of repository commits, set Filtro qualità traduzione to Skip translations marked as needing editing.

Service suggestions with human acceptance

Use this workflow when humans should check service output before it becomes a translation.

Humans check the stored suggestions and accept suitable ones, or edit the proposed text before saving a translation. Suggestions are stored only in Weblate and do not enter translation files until accepted as translations. Accepting a suggestion is separate from approving a translation in the dedicated review workflow.

Service translation with review and a quality gateway

Use this workflow when humans should edit machine translations in Weblate, but only reviewer-approved translations should reach the repository.

Generated translations appear as Waiting for review. Translators can edit them, and reviewers check and approve the finished translations. Only after approval are these translations eligible for repository commits. Translators can suggest further changes to approved strings, while reviewers can edit them directly.

Enabling reviews alone does not keep unapproved translations out of commits. The translation quality filter provides that gateway. Keep reviews enabled for every language that should follow this workflow; check any workflow customization overrides.

AI-assisted quality evaluation

Use the AI quality evaluation add-on to check existing human or machine translations for accuracy, fluency, terminology, style, and formatting. It records quality checks without editing translations or approving them.

Configure an LLM service under Automatic suggestions, then install AI quality evaluation and select the Evaluation service. Choose a query to limit the translations evaluated. Run the add-on manually, choose an Evaluation frequency, or enable evaluation after translation changes or repository updates. Installation does not run evaluation. See the add-on documentation for provider costs and the data sent to the service.

Translators and reviewers can inspect the findings in the editor or search for checks such as check:ai_accuracy. Correct the translation or ignore a finding when appropriate. Combine this with Dedicated reviewers when human approval is required; AI evaluation does not replace approval or change the translation quality filter used for repository commits.

The component’s Diagnostics recommends the add-on when an LLM service is configured. If the selected service becomes unavailable, an error diagnostic links maintainers to the installed add-on’s configuration.

Reusing existing translations

Use existing translations to bootstrap a new language or component, then have humans adapt matches and fill the remaining gaps.

Run Traduzione automatica with Other translation components as the source, or select the Memoria traduzione service under Machine translation. Choose whether matches become translations, drafts needing editing, or suggestions using the modes described above. Use state:empty to preserve existing translations. The Traduzione automatica add-on can apply this reuse automatically as strings arrive.

For ongoing consistency, Translation propagation can copy edits to matching strings across components in the same project. Propagation happens while translating; it does not copy translations merely loaded from the repository. See Keeping translations same across components for its requirements and for checks that help humans resolve differences.

Quality gateway for the source strings

The original source language strings usually come from developers, since they write the code and provide the initial strings. However, developers are often not native speakers of the source language and do not provide the desired quality of the source strings. The intermediate translation can help you address this - there is an additional quality gateway for the strings between developers and translators.

By setting the File di lingua intermedio, this file is used for translating strings to the source language by translators/editors while it is owned by the developers (often using arbitrary languages such as en_devel). Once this stage is done, strings are available for translations to target languages, based on what is now a polished source language stored in the File di lingua a base monolingue.

digraph translations { graph [fontname = "sans-serif", fontsize=10]; node [fontname = "sans-serif", fontsize=10, margin=0.1, height=0, style=filled, fillcolor=white, shape=note]; edge [fontname = "sans-serif", fontsize=10]; subgraph cluster_dev { style=filled; color=lightgrey; label = "Development process"; "Developers" [shape=box, fillcolor="#144d3f", fontcolor=white]; "Developers" -> "Intermediate file"; } subgraph cluster_l10n { style=filled; color=lightgrey; label = "Localization process"; "Translators" [shape=box, fillcolor="#144d3f", fontcolor=white]; "Editors" [shape=box, fillcolor="#144d3f", fontcolor=white]; "Editors" -> "Monolingual base language file"; "Translators" -> "Translation language file"; } "Intermediate file" -> "Monolingual base language file" [constraint=false]; "Monolingual base language file" -> "Translation language file" [constraint=false]; }

Consolidamento delle stringhe utilizzando la lingua secondaria

When File di lingua intermedio cannot be used to consolidate the strings, you can choose one of the translations to act as a secondary language. The language can be configured in a project (Lingua secondaria) or in a component (Lingua secondaria). It is then shown to the translators while translating (see Lingue secondarie) and can be optionally used as a source for machine translations (see Stringhe di origine per la traduzione automatica).

This setup can be useful with mixed language source strings and consolidating them into a single translation, which is then used as a baseline for other work.

Source strings reviews

With Abilita revisioni sorgente enabled, the review process can be applied for source strings. Once enabled, users can report issues with source strings. The actual process depends on whether bilingual or monolingual formats are in use.

For monolingual formats, source string review functions similarly to Dedicated reviewers — once an issue with a source string is reported, the source string is marked as Needs editing.

Bilingual formats do not allow direct editing of source strings (these are typically extracted directly from the source code). In this case, a Source needs review label is attached to strings reported by translators. You should review such strings and either edit them in the source code, or remove the label.