About¶
In these COVID-19 times, there is an urgent need to disseminate credible COVID related information in local languages.
To address this issue, we have built a crowd-sourced translation platform, Anuvad, using weblate. Here, people can translate resources to their own (or preferred) language. The platform is equipped with features such as Version Control system, Glossary, Translation Memory among others to ensure simple, manageable, and consistent translations.
Documentation¶
Installation¶
Check INSTALL.md
Anuvad basics¶
Project structure¶
In Anuvad, translations are organized into COVID-19 topics and COVID-19 resources. Each topic can contain a number of resources and those in turn contain translations into individual languages.
Registration and user profile¶
Registration¶
Everybody can browse projects, view translations or suggest translations by default. Only registered users are allowed to actually save changes, and are credited for every translation made.
You can register by following a few simple steps:
- Fill out the registration form with your credentials.
- Activate registration by following the link in the e-mail you receive.
- Optionally adjust your profile to choose which languages you know.
Dashboard¶
When you log in, you will see an overview of COVID19 topics and COVID19 resources, as well as their respective translation progression.
Resources you are watching are shown by default, and cross-referenced with your preferred languages.
Hint
You can switch to different views using the navigation tabs.

The menu has these options:
- Projects > Browse all projects in the main menu (or in the menu Tools → All projects in the Dashboard) showing translation status for each COVID19 topic on the Anuvad instance.
- Selecting a language in the main menu Languages will show translation status of all projects, filtered by one of your primary languages.
- Watched translations in the Dashboard will show translation status of only those COVID19 topics you are watching, filtered by your primary languages.
User profile¶
The user profile is accessible by clicking your user icon in the top-right of the top menu, then the Settings menu.
The user profile contains your preferences. Name and e-mail address is used in VCS commits, so keep this info accurate.
Note
All language selections only offer currently translated languages.
Hint
Request or add other languages you want to translate by clicking the button to make them available too.
Translated languages¶
Choose which languages you prefer to translate, and they will be offered on the main page of watched projects, so that you have easier access to these all translations in each of those languages.

Secondary languages¶
You can define which secondary languages are shown to you as a guide while translating. An example can be seen in the following image, where the Hebrew language is shown as secondarily:

Editor link¶
A source code link is shown in the web-browser configured in the Component configuration by default.
Hint
By setting the Editor link, you use your local editor to open the VCS source code file of translated strings. You can use Template markup.
Usually something like editor://open/?file={{filename}}&line={{line}}
is a good option.
See also
You can find more info on registering custom URL protocols for the editor in the Nette documentation.
Notifications¶
Subscribe to various notifications from the Subscriptions tab. Notifications for selected events on watched or administered projects will be sent to you per e-mail.
Some of the notifications are sent only for events in your languages (for example about new strings to translate), while some trigger at component level (for example merge errors). These two groups of notifications are visually separated in the settings.
You can toggle notifications for watched COVID19 topics and administered COVID19 topics and it can be further tweaked (or muted) per project and component. Visit the component page and select appropriate choice from the Watching menu.
Note
You will not receive notifications for your own actions.

Account¶
The Account tab lets you set up basic account details, connect various services you can use to login into Weblate, completely remove your account, or download your user data.
Note
The list of services depends on your Weblate configuration, but can be made to include popular sites such as GitLab, GitHub, Google, Facebook, or Bitbucket or other OAuth 2.0 providers.

Translating using Anuvad¶
Thank you for interest in translating using Anuvad. COVID19 topics can either be set up for direct translation, or by way of accepting suggestions made by users without accounts.
Overall, there are two modes of translation:
- The COVID19 topic accepts direct translations
- The COVID19 topic accepts only suggestions, which are automatically validated once a defined number of votes is reached
Please see Translation workflows for more information on translation workflow.
Options for translation project visibility:
- Publicly visible and anybody can contribute
- Visible only to a certain group of translators
See also
Translation links¶
Having navigated to a resource, a set of links lead to actual translation. The translation is further divided into individual checks, like Untranslated or Needing review. If the whole project is translated, without error, All translations is still available. Alternatively you can use the search field to find a specific string or term.

Suggestions¶
Note
Actual permissions might vary depending on your Anuvad configuration.
Anonymous users can only (if permitted) forward suggestions. Doing so is still available to signed in users, in cases where uncertainty about the translation arises, which will prompt another translator to review it.
The suggestions are scanned on a daily basis to remove duplicate ones or suggestions that match the current translation.
Comments¶
The comments can be posted in two scopes - source sentence or translation. Choose the one which matches the topic you want to discuss. The source sentence comments are good for prividing feedback on the original string, for example that it should be rephrased or it is confusing.
You can use Markdown syntax in the comments and mention other users using
@mention
.
Shapings¶
Shapings are used to group variants of the string in different lengths. The frontend can use different strings depending on the screen or window size.
See also
Labels¶
Labels are used to categorize strings within a topic. These can be used to further customize the localization workflow, for example to define categories of strings.
See also
Translating¶
On the translation page, the source string and an edit area for translating are shown. Should the translation be plural, multiple source strings and edit areas are shown, each described and labeled in plural form.
All special whitespace characters are underlined in red and indicated with grey symbols. More than one subsequent space is also underlined in red to alert the translator to a potential formatting issue.
Various bits of extra information can be shown on this page, most of which coming from the project source code (like context, comments or where the message is being used). When you choose secondary languages in your preferences, translation to these languages will be shown (see Secondary languages) above the source string.
Below the translation, any suggestion made by others will be shown, which you can in turn accept, accept with changes, or delete.
Keyboard shortcuts¶
The following keyboard shortcuts can be utilized during translation:
- Alt+Home
- Navigates to first translation in current search.
- Alt+End
- Navigates to last translation in current search.
- Alt+PageUp
- Navigates to previous translation in current search.
- Alt+PageDown
- Navigates to next translation in current search.
- Ctrl+Enter or Option+Enter
- Saves current translation.
- Ctrl+Shift+Enter or Option+Shift+Enter
- Unmarks translation as fuzzy and submits it.
- Ctrl+E or Option+E
- Focus translation editor.
- Ctrl+U or Option+U
- Focus comment editor.
- Ctrl+M or Option+M
- Shows machine translation tab.
- Ctrl+<NUMBER> or Option+<NUMBER>
- Copies placeable of given number from source string.
- Ctrl+M <NUMBER> or Option+M <NUMBER>
- Copy machine translation of given number to current translation.
- Ctrl+I <NUMBER> or Option+I <NUMBER>
- Ignore failing check of given number.
- Ctrl+J or Option+J
- Shows nearby strings tab.
- Ctrl+S or Option+S
- Shows search tab.
- Ctrl+O or Option+O
- Copies source string.
- Ctrl+T or Option+T
- Toggles “Needs editing” flag.
Translation context¶
This contextual description provides related information about the current string.
- String attributes
- Things like message ID, context (
msgctxt
) or location in source code. - Screenshots
- Screenshots can be uploaded to Weblate to better inform translators of where and how the string is used, see Visual context for strings.
- Nearby strings
- Displays neighbouring messages from the translation file. These are usually also used in a similar context and prove useful in keeping the translation consistent.
- Other occurences
- In case a message appears in multiple places (e.g. multiple resources), this tab shows all of them if they are found to be inconsistent (see check-inconsistent). You can choose which one to use.
- Translation memory
- Look at similar strings translated in past, see Memory Management.
- Glossary
- Displays terms from the project glossary used in the current message.
- Recent edits
- List of people whom have changed this message recently using Weblate.
- Topic
- Topic information like instructions for translators, or information about its version control system repository.
If the translation format supports it, you can also follow supplied links to respective source code containing each source string.
Translation history¶
Every change is by default (unless turned off in resource settings) saved in the database, and can be reverted. Optionally one can still also revert anything in the underlying version control system.
Translated string length¶
Anuvad can limit length of translation in several ways to ensure the translated string is not too long:
- The default limitation for translation is ten times longer than source
string. This can be turned of by
LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH
. In case you are hitting this, it might be also caused by monolingual translation being configured as bilingual, making Weblate see translation key as source string instead of the actual source string. See Bilingual and monolingual formats for more info. - Maximal length in characters defined by translation file or flag, see Maximum length.
- Maximal rendered size in pixels defined by flags, see check-max-size.
Glossary¶
Each project can have an assigned glossary for any language as a shorthand for storing terminology. Consistency is more easily maintained this way. Terms from the currently translated string can be displayed in the bottom tabs.
Managing glossaries¶
On the Glossaries tab of each project page, you can edit existing glossaries. An empty glossary for a given project is automatically created when a language is added to a component (to do this, select a component, its Translation tab and click Add new language for translation). Once a glossary exists, it will also show up in this list.

Glossaries are shared among all components of the same project.
On this list, you can choose which glossary to manage (all languages used in the current project are shown). Following one of the language links will lead you to a page which can be used to edit, import or export the selected glossary, or view the edit history:

Machine translation¶
Based on configuration and your translated language, Anuvad provides you suggestions from several machine translation tools. All machine translations are available in a single tab of each translation page.
See also
You can find the list of supported tools in Machine translation.
Automatic translation¶
You can use automatic translation to bootstrap translation based on external sources. This tool is called Automatic translation accessible in the Tools menu, once you have selected a component and a language:

Two modes of operation are possible:
- Using other Weblate components as a source for translations.
- Using selected machine translation services with translations above a certain quality threshold.
You can also choose which strings are to be auto-translated.
Warning
Be mindful that this will overwrite existing translations if employed with wide filters such as All strings.
Useful in several situations like consolidating translation between different components (for example website and application) or when bootstrapping translation for a new component using existing translations (translation memory).
Rate limiting¶
To avoid abuse of the interface, there is rate limiting applied to several operations like searching, sending contact form or translating. In case you are are hit by this, you are blocked for a certain period until you can perform the operation again.
The default limits are described in the administrative manual in Rate limiting, but can be tweaked by configuration.
Downloading and uploading translations¶
You can export files from a translation, make changes, and import them again. This allows working offline, and then merging changes back into the existing translation. This works even if it has been changed in the meantime.
Note
The available options might be limited by Access control.
Downloading translations¶
From the topic or resource dashboard, translatable files can be downloaded using the Download source file in the Files menu, producing a copy of the file as it is stored in the upstream Version Control System.
You can either download the original file as is or converted into one of widely used localization formats. The converted files will be enriched with data provided in Anuvad such as additional context, comments or flags.
Several file formats are available, including a compiled file
to use in your choice of application (for example .mo
files for GNU Gettext) using
the Files menu.
Uploading translations¶
When you have made your changes, use Upload translation in the Files menu.
Any file in a supported file format can be uploaded, but it is still recommended to use the same file format as the one used for translation, otherwise some features might not be translated properly.
See also
The uploaded file is merged to update the translation, overwriting existing entries by default (this can be turned off or on in the upload dialog).
Import methods¶
These are the choices presented when uploading translation files:
- Add as translation
- Imported translations are added as translations. This is the most common usecase, and the default behavior.
- Add as suggestion
- Imported translations are added as suggestions, do this when you want to have your uploaded strings reviewed.
- Add as translation needing edit
- Imported translations are added as translations needing edit. This can be useful when you want translations to be used, but also reviewed.
- Replace existing translation file
- Existing file is replaced with new content. This can lead to loss of existing translations, use with caution.
There is also an option for how to handle strings needing edit in the imported file. Such strings can be handle in one of the three following ways: “Do not import”, “Import as string needing edit”, or “Import as translated”.

Checks and fixups¶
The quality checks help catch common translator errors, ensuring the translation is in good shape. The checks are divided into three levels of severity, and can be ignored in case of false positives.
Once submitting a translation with a failing check, this is immediately shown to the user:

Automatic fixups¶
In addition to Quality checks, Weblate can also fix some common errors in translated strings automatically. Use it with caution to not have it add errors.
See also
Quality checks¶
Anuvad employs a wide range of quality checks on strings. The following section describes them all in further detail. There are also language specific checks. Please file a bug if anything is reported in error.
See also
Translation checks¶
Executed upon every translation change, helping translators maintain good quality translations.
Unchanged translation¶
Happens if the source and corresponding translation strings is identical, down to at least one of the plural forms. Some strings commonly found across all languages are ignored, and various markup is stripped. This reduces the number of false positives.
This check can help find strings mistakenly untranslated.
The default behavior of this check is to exclude words from the built-in
blacklist from the checking. These are words which are frequently not being
translated. This is useful to avoid false positives on short strings, which
consist only of single word which is same in several languages. This blacklist
can be disabled by adding strict-same
flag to string or component.
See also
Starting or trailing newline¶
Source and translation do not both start (or end) with a newline.
Newlines usually appear in source strings for good reason, omissions or additions can lead to formatting problems when the translated text is put to use.
Starting spaces¶
Source and translation do not both start with the same number of spaces.
A space in the beginning of a string is usually used for indentation in the interface and thus important to keep.
Trailing space¶
Checks that trailing spaces are replicated between both source and translation.
Trailing space is usually utilized to space out neighbouring elements, so removing it might break layout.
Double space¶
Checks that double space is present in translation to avoid false positives on other space-related checks.
Check is false when double space is found in source meaning double space is intentional.
Trailing stop¶
Checks that full stops are replicated between both source and translation. The presence of full stops is checked for various languages where they do not belong (Chinese, Japanese, Devanagari or Urdu).
See also
Trailing colon¶
Checks that colons are replicated between both source and translation. The presence of colons is also checked for various languages where they do not belong (Chinese or Japanese).
See also
Trailing question mark¶
Checks that question marks are replicated between both source and translation. The presence of question marks is also checked for various languages where they do not belong (Armenian, Arabic, Chinese, Korean, Japanese, Ethiopic, Vai or Coptic).
See also
Trailing exclamation¶
Checks that exclamations are replicated between both source and translation. The presence of exclamation marks is also checked for various languages where they do not belong (Chinese, Japanese, Korean, Armenian, Limbu, Myanmar or Nko).
See also
Punctuation spacing¶
New in version 3.9.
Checks that there is non breakable space before double punctuation sign (exclamation mark, question mark, semicolon and colon). This rule is used only in a few selected languages like French or Breton, where space before double punctuation sign is a typographic rule.
Trailing ellipsis¶
Checks that trailing ellipses are replicated between both source and translation.
This only checks for real ellipsis (…
) not for three dots (...
).
An ellipsis is usually rendered nicer than three dots in print, and sounds better with text-to-speech.
See also
Trailing semicolon¶
Checks that semicolons at the end of sentences are replicated between both source and translation. This can be useful to keep formatting of entries such as desktop files.
See also
Maximum length¶
Checks that translations are of acceptable length to fit available space. This only checks for the length of translation characters.
Unlike the other checks, the flag should be set as a key:value
pair like
max-length:100
.
Inconsistent¶
Anuvad checks translations of the same string across all translation within a project to help you keep consistent translations.
The check fails on differing translations of one string within a project. This can also lead to inconsistencies in displayed checks. You can find other translations of this string on the Other occurences tab.
Has been translated¶
Means a sentence has been translated already. This can happen when the translations have been reverted in VCS or lost otherwise.
Mismatched \n¶
Usually escaped newlines are important for formatting program output.
Check fails if the number of \\n
literals in translation do not match the source.
Mismatched n¶
Usually newlines are important for formatting program output.
Check fails if the number of \n
literals in translation do not match the source.
BBcode markup¶
BBCode represents simple markup, like for example highlighting important parts of a message in bold font, or italics.
This check ensures they are also found in translation.
Note
The method for detecting BBcode is currently quite simple so this check might produce false positives.
Zero-width space¶
Zero-width space (<U+200B>) characters are used to break messages within words (word wrapping).
As they are usually inserted by mistake, this check is triggered once they are present in translation. Some programs might have problems when this character is used.
See also
Maximum size of translation¶
New in version 3.7.
Translation rendered text should not exceed given size. It renders the text with line wrapping and checks if it fits into given boundaries.
This check needs one or two parameters - maximal width and maximal number of lines. In case the number of lines is not provided, one line text is considered.
You can also configure used font by font-*
directives (see
Customizing behavior), for example following translation flags say that the
text rendered with ubuntu font size 22 should fit into two lines and 500
pixels:
max-size:500:2, font-family:ubuntu, font-size:22
Hint
You might want to set font-*
directives in Component configuration to have the same
font configured for all strings within a component. You can override those
values per string in case you need to customize it per string.
See also
Source checks¶
Source checks can help contributors improve the quality of source sentences.
Multiple failing checks¶
Numerous translations of this string have failing quality checks. This is usually an indication that something could be done to improve the source string.
This check failing can quite often be caused by a missing full stop at the end of a sentence, or similar minor issues which translators tend to fix in translation, while it would be better to fix it in the source string.
Searching¶
Advanced queries using boolean operations, parentheses, or field specific lookup can be used to find the strings you want.
When not defining any field, the lookup happens on Source, Target and Context fields.

Simple search¶
Any phrase typed into the search box is split into words. Strings containing any of them are are shown. To look for an exact phrase, put “the searchphrase” into quotes (both single (‘) and double (“) quotes will work).
Fields¶
source:TEXT
- Source string case insensitive search.
target:TEXT
- Target string case insensitive search.
context:TEXT
- Context string case insensitive search.
note:TEXT
- Comment string case insensitive search.
location:TEXT
- Location string case insensitive search.
priority:NUMBER
- String priority.
added:DATETIME
- Timestamp when string was added to Anuvad.
state:TEXT
- State search (
approved
,translated
,needs-editing
,empty
,read-only
), supports Field operators. pending:BOOLEAN
- String pending for flushing to VCS.
has:TEXT
- Search for string having attributes (
plural
,suggestion
,comment
,check
,ignored-check
,translation
,shaping
). is:TEXT
- Search for string states (
pending
,translated
,untranslated
). language:TEXT
- String target language.
changed_by:TEXT
- String was changed by author with given username.
changed:DATETIME
- String was changed on date, supports Field operators.
check:TEXT
- String has failing check.
ignored_check:TEXT
- String has ignored check.
comment:TEXT
- Search in user comments.
comment_author:TEXT
- Filter by comment author.
suggestion:TEXT
- Search in suggestions.
suggestion_author:TEXT
- Filter by suggestion author.
Boolean operators¶
You can combine lookups using AND
, OR
, NOT
and parentheses to
form complex queries. For example: state:translated AND (source:hello OR source:bar)
Field operators¶
You can specify operators, ranges or partial lookups for date or numeric searches:
state:>=translated
- State is
translated
or better (approved
). changed:2019
- Changed in year 2019.
changed:[2019-03-01 to 2019-04-01]
- Changed between two given dates.
Regular expressions¶
Anywhere text is accepted you can also specify a regular expression as r"regexp"
. For instance, to search for all source strings which contain any digit between 2 and 5, use:
source:r"[2-5]"
Translation workflows¶
Several translation workflows are supported.
The following is not a complete list of ways to configure Weblate. You can base other workflows on the most usual examples listed here.
Translation access¶
The Access control is not much discussed in the workflows as each access control option can be applied to any workflow. Please consult that documentation for information 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 that has a Translate permission for the project.
Translation states¶
Each translated string can be in one of following states:
- Untranslated
- Translation is empty, it might or not be stored in the file, depending on the file format.
- Needs editing
- Translation needs editing, this is usually the result of a source string change. The translation is stored in the file, depending on the file format it might be marked as needing edit (for example as it gets a fuzzy flag).
- Waiting for review
- Translation is made, but not reviewed. It is stored in the file as a valid translation.
- Approved
- 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.
- Suggestions
- Suggestions are stored in Weblate only and not in the translation file.
Direct translation¶
This is most usual setup for smaller teams, anybody can directly translate. 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 | Note |
---|---|---|
Enable reviews | Off | Configured at project level. |
Enable suggestions | On | It is useful for users to be able to suggest when they are not sure. |
Suggestion voting | Off | |
Autoaccept suggestions | 0 | |
Translators group | Users | Or Translate with access control. |
Reviewers group | N/A | Not used. |
Peer review¶
With this workflow, anybody can add suggestions, and need approval from additional member(s) 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 | Note |
---|---|---|
Enable reviews | off | Configured at project level. |
Enable suggestions | on | |
Suggestion voting | on | |
Autoaccept suggestions | 1 | You can set higher value to require more peer reviews. |
Translators group | Users | Or Translate with access control. |
Reviewers group | N/A | Not used, all translators review. |
Dedicated reviewers¶
New in version 2.18: The proper review workflow is supported since Weblate 2.18.
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.
- Reviewer can approve / unapproved strings.
- Reviewer can edit all translations (including approved ones).
- Suggestions can also be used to suggest changes for approved strings.
Setting | Value | Note |
---|---|---|
Enable reviews | on | Configured at project level. |
Enable suggestions | off | It is useful for users to be able to suggest when they are not sure. |
Suggestion voting | off | |
Autoaccept suggestions | 0 | |
Translators group | Users | Or Translate with access control. |
Reviewers group | Reviewers | Or Review with 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 Manage → Settings menu):

Note
Depending on Weblate configuration, the setting might not be available to you. For example on Hosted Weblate this is not available for projects hosted for free.