Frequently Asked Questions


How to create an automated workflow?

Weblate can handle all the translation things semi-automatically for you. If you give it push access to your repository, the translations can happen without interaction unless some merge conflict occurs.

  1. Set up your git repository to tell Weblate whenever there is any change, see Notification hooks for information how to do it.
  2. Set push URL at your Component configuration in Weblate, this will allow Weblate to push changes to your repository.
  3. Enable push on commit on your Project configuration in Weblate, this will make Weblate push changes to your repository whenever they are committed at Weblate.
  4. Optionally set up a cron job for commit_pending.

How to access repositories over SSH?

Please see Accessing repositories for information about setting up SSH keys.

How to fix merge conflicts in translations?

The merge conflicts happen from time to time when the translation file is changed in both Weblate and the upstream repository. You can usually avoid this by merging Weblate translations prior to doing some changes in the translation files (e.g. before executing msgmerge). Just tell Weblate to commit all pending tranlslations (you can do it in the Repository maintenance in the Tools menu) and merge the repository (if automatic push is not enabled).

If you’ve already ran into the merge conflict, the easiest way is to solve all conflicts locally at your workstation - simply add Weblate as a remote repository, merge it into upstream and fix any conflicts. Once you push changes back, Weblate will be able to use the merged version without any other special actions.

# Add weblate as remote
git remote add weblate
# You might need to include credentials in some cases:
git remote add weblate

# Update weblate remote
git remote update weblate

# Merge Weblate changes
git merge weblate/master

# Resolve conflicts
edit ....
git add ...
git commit

# Push changes to upstream respository, Weblate will fetch merge from there
git push

If you’re using multiple branches in Weblate, you can work similarly on all branches:

# Add and update remotes
git remote add weblate-4.7
git remote add weblate
git remote update weblate-4.7 weblate

# Merge QA_4_7 branch
git checkout QA_4_7
git merge weblate-4.7/QA_4_7
... # Resolve conflicts
git commit

# Merge master branch
git checkout master
git merge weblate/master
... # Resolve conflicts
git commit

git push

How do I translate several branches at once?

Weblate supports pushing translation changes within one Project configuration. For every Component configuration which has it enabled (the default behavior), the change made is automatically propagated to others. This way the translations are kept synchronized even if the branches themselves have already diverged quite a lot and it is not possible to simply merge translation changes between them.


git merge -s ours origin/maintenance

How to export the Git repository that Weblate uses?


For anonymous access you might want to run a git server and let it serve the repository to the outside world.

Alternatively you can use Git exporter inside Weblate to automate this.

What are the options for pushing changes back upstream?

This heavily depends on your setup, Weblate is quite flexible in this area. Here are examples of workflows used with Weblate:

  • Somebody rewrites history produced by Weblate (eg. by eliminating merge commits), merges changes and tells Weblate to reset the content on the upstream repository.


How can I limit Weblates access to translations only without exposing source code to it?


  1. Create a repository with your translation files.

  2. Add this as a submodule to your code:

    git submodule add path/to/translations
  3. Link Weblate to this repository, it no longer needs access to the repository with your source code.


    git submodule update --remote path/to/translations

Please consult git submodule documentation for more details.

How can I check if my Weblate is configured properly?

Weblate includes a set of configuration checks which you can see in the admin interface, just follow the Performance report link in the admin interface or open the /admin/performance/ URL directly.

Why are all commits committed by Weblate <>?

This is the default committer name, configured when you create a translation component. You can also change it in the administration at any time.

The author of every commit (if the underlaying VCS supports it) is still recorded correctly as the user who has made the translation.

Why do I get a warning about not reflected changes on database migration?

When running ./ migrate, you can get the following warning:

Run ' makemigrations' to make new migrations, and then re-run ' migrate' to apply them.

This is expected as Weblate generates choices for some fields and Django migrations can not reflect this. You can safely ignore this warning.


How do I review others translations?

  • You can subscribe to any changes made in Subscriptions and then check others contributions in email.

How do I provide feedback on a source string?

On context tabs below translation, you can use the Source tab to provide feedback on a source string or discuss it with other translators.

How can I use existing translations while translating?

Weblate provides you with several ways to utilize existing translations while translating:

  • You can use the import functionality to load compendium as translations, suggestions or translations needing review. This is the best approach for a one time translation using compendium or similar translation database.
  • You can setup tmserver with all databases you have and let Weblate use it. This is good for cases when you want to use it for several times during translating.

Does Weblate update translation files besides translations?

Weblate tries to limit changes in translation files to a minimum. For some file formats it might unfortunately lead to reformatting the file. If you want to keep the file formattted in your way, please use a pre-commit hook for that.

For monolingual files (see Supported formats) Weblate might add new translation units which are present in the template and not in actual translations. It does not however perform any automatic cleanup of stale strings as that might have unexpected outcomes. If you want to do this, please install a pre-commit hook which will handle the cleanup according to your requirements.



The basic set of language definitions is included within Weblate and Translate-toolkit. This covers more than 150 languages and includes information about used plural forms or text direction.

You are free to define own languages in the administrative interface, you just need to provide information about it.

Can Weblate highlight changes in a fuzzy string?



msgmerge --previous -U po/cs.po po/phpmyadmin.pot






For example with Gettext PO files, you can update the translation files using the msgmerge tool:

msgmerge -U locale/cs/LC_MESSAGES/ locale/django.pot

In case you want to do the update automatically, you can add a custom script to handle this to POST_UPDATE_SCRIPTS and enable it in the Component configuration.


Requests sometimes fail with too many open files error


The easiest way to do this is to run:

# Go to DATA_DIR directory
cd data/vcs
# Compress all Git repositories
for d in */* ; do
    pushd $d
    git gc

See also


Fulltext search is too slow

Depending on various conditions (frequency of updates, server restarts and other), the fulltext index might become too fragmented over time. It is recommended to optimize it from time to time:

./ rebuild_index --optimize

In case it does not help (or if you have removed a lot of strings) it might be better to rebuild it from scratch:

./ rebuild_index --clean

See also


I get “Lock Error” quite often while translating

This is usually caused by concurrent updates to the fulltext index. In case you are running a multi-threaded server (e.g. mod_wsgi), this happens quite often. For such a setup it is recommended to enable OFFLOAD_INDEXING.

See also

Fulltext search

Rebuilding index has failed with “No space left on device”

Whoosh uses a temporary directory to build indices. In case you have a small /tmp (eg. using ramdisk), this might fail. Change the temporary directory by passing it as TEMP variable:

TEMP=/path/to/big/temp ./ rebuild_index --clean

See also


Database operations fail with “too many SQL variables”

This can happen when using theSQLite database as it is not powerful enough for some relations used within Weblate. The only way to fix this is to use some more capable database, see Use powerful database engine for more information.

When accessing the site I get Bad Request (400) error

This is most likely caused by an improperly configured ALLOWED_HOSTS. It needs to contain all hostnames you want to access your Weblate. For example:

ALLOWED_HOSTS = ['', 'weblate', 'localhost']


Does Weblate support other VCS than Git and Mercurial?

Weblate currently does not have native support for anything other than Git (with extended support for GitHub and Subversion) and ref:vcs-mercurial, but it is possible to write backends for other VCSes.



For native support of other VCS, Weblate requires distributed VCS and could be probably adjusted to work with anything other than Git and Mercurial, but somebody has to implement this support.

How does Weblate credit translators?

Every change made in Weblate is committed into VCS under the translators name. This way every single change has proper authorship and you can track it down using standard VCS tools you use for code.

Additionally, when the translation file format supports it, the file headers are updated to include the translator name.

See also


Why does Weblate force to show all po files in a single tree?



In case there will be big demand for this feature, it might be implemented in future versions, but it’s definitely not a priority for now.

Why does Weblate use language codes such sr_Latn or zh_Hant?


Weblate will still understand legacy language codes and will map them to current one - for example sr@latin will be handled as sr_Latn or zh@CN as sr_Hans.