Management commands

Note

Running management commands under a different user than is running your webserver can cause wrong permissions on some files, please check Filesystem permissions for more details.

Django comes with a management script (available as ./manage.py in sources or installed as weblate when Weblate is installed). It provides various management commands and Weblate extends it with several additional commands.

Invoking management commands

As mentioned before, invocation depends on how you have installed Weblate.

If you are using source code directly (either tarball or Git checkout), the management script is ./manage.py in Weblate sources. Execution can be done as:

python ./manage.py list_versions

If you’ve installed Weblate using PIP installer or by ./setup.py script, the weblate is installed to your path and you can use it to control Weblate:

weblate list_versions

For Docker image, the script is installed same as above, you can execute it using docker exec:

docker exec <container> weblate list_versions

With docker-compose this is quite similar, you just have to use docker-compose exec:

docker-compose exec weblate weblate list_versions

In case you need to pass some file, you can temporary add a volume:

docker-compose exec /tmp:/tmp weblate weblate importusers /tmp/users.json

add_suggestions

manage.py add_suggesstions <project> <component> <language> <file>

New in version 2.5.

Imports translation from the file as a suggestion to given translation. It skips translations which are the same as existing ones, only different ones are added.

--author USER@EXAMPLE.COM

Email of author for the suggestions. This user has to exist prior importing (you can create one in the admin interface if needed).

Example:

./manage.py --author [email protected] add_suggestions weblate master cs /tmp/suggestions-cs.po

auto_translate

manage.py auto_translate <project> <component> <language>

New in version 2.5.

Performs automatic translation based on other component translations.

--source PROJECT/COMPONENT

Specifies component to use as source for translation. If not specified all components in the project are used.

--user USERNAME

Specify username who will be author of the translations. Anonymous user is used if not specified.

--overwrite

Whether to overwrite existing translations.

--inconsistent

Whether to overwrite existing translations which are inconsistent (see Inconsistent).

--add

Automatically add language if given translation does not exist.

--mt MT

Use machine translation instead of other components.

--threshold THRESHOLD

Similarity threshold for machine translation, defaults to 80.

Example:

./manage.py --user nijel --inconsistent --source phpmyadmin/master phpmyadmin 4-5 cs

changesite

manage.py changesite

New in version 2.4.

You can use this to change or display site name from command line without using admin interface.

--set-name NAME

Sets name for the site.

--get-name

Prints currently configured site name.

checkgit

manage.py checkgit <project|project/component>

Prints current state of the backend git repository.

You can either define which project or component to update (eg. weblate/master) or use --all to update all existing components.

commitgit

manage.py commitgit <project|project/component>

Commits any possible pending changes to backend git repository.

You can either define which project or component to update (eg. weblate/master) or use --all to update all existing components.

commit_pending

manage.py commit_pending <project|project/component>

Commits pending changes older than given age.

You can either define which project or component to update (eg. weblate/master) or use --all to update all existing components.

--age HOURS

Age in hours for committing. If not specified value configured in Component configuration is used.

This is most useful if executed periodically from cron or similar tool:

./manage.py commit_pending --all

cleanup_avatar_cache

New in version 3.1.

manage.py cleanup_avatar_cache

Removes invalid items in avatar cache. This can be useful when switching between Python 2 and 3 as the cache files might be not compatible.

cleanuptrans

manage.py cleanuptrans

Cleanups orphaned checks and translation suggestions. This is normally not needed to execute manually, the cleanups happen automatically in the background.

createadmin

manage.py createadmin

Creates admin account with random password unless it is specified.

--password PASSWORD

Provide password on the command line and skip generating random one.

--no-password

Do not set password, this can be useful with –update.

--username USERNAME

Use given name instead of admin.

--email USER@EXAMPLE.COM

Specify admin email.

--name

Specify admin name (visible).

--update

Update existing user (you can use this to change password).

Changed in version 2.9: Added parameters --username, --email, --name and --update.

delete_memory

manage.py delete_memory

New in version 2.20.

Deletes entries in the Weblate Translation Memory.

--origin ORIGIN

Origin to delete, for imported files the origin is filename without path.

--all

Delete complete memory content and recreate the database.

dump_memory

manage.py dump_memory

New in version 2.20.

Export a JSON file with the Weblate Translation Memory content.

dumpuserdata

manage.py dumpuserdata <file.json>

Dumps userdata to file for later use by importuserdata

This is useful when migrating or merging Weblate instances.

import_json

manage.py import_json <json-file>

New in version 2.7.

Batch import of components based on JSON data.

The imported JSON file structure pretty much corresponds to the component object (see GET /api/components/(string:project)/(string:component)/). You always have to include fields name and filemask.

--project PROJECT

Specifies where the components will be imported.

--main-component COMPONENT

Use VCS repository from this component for all.

--ignore

Skip already imported components.

--update

Update already imported components.

Changed in version 2.9: Added parameters --ignore and --update to deal with already imported components.

Example of JSON file:

[
    {
        "slug": "po",
        "name": "Gettext PO",
        "file_format": "po",
        "filemask": "po/*.po"
    },
    {
        "name": "Android",
        "filemask": "android/values-*/strings.xml",
        "template": "android/values/strings.xml",
        "repo": "weblate://test/test"
    }
]

See also

import_project

import_memory

manage.py import_memory <file>

New in version 2.20.

Imports a TMX or JSON file into the Weblate Translation Memory.

--language-map LANGMAP

Allows to map languages in the TMX to Weblate one. The language codes are mapped after normalization usually done by Weblate.

For example --language-map en_US:en will import all en_US strings as en ones.

This can be useful in case your TMX file locales does not match what you use in Weblate.

import_project

manage.py import_project <project> <gitrepo> <branch> <filemask>

Changed in version 3.0: The import_project command is now based on the Component discovery addon and that has lead to some changes in behavior and accepted parameters.

Batch imports components into project based on file mask.

<project> names an existing project, into which the components should be imported.

The <gitrepo> defines URL of Git repository to use, and <branch> the git branch. To import additional translation components, from an existing Weblate component, use a weblate://<project>/<component> URL for the <gitrepo>.

The <filemask> defines files discovery in the repository. It can be either simple using wildcards or it can use full power of regular expressions.

The simple matching uses ** for component name and * for language, for example: **/*.po

The regullar expression has to contain named groups component and language. For example: (?P<language>[^/]*)/(?P<component>[^-/]*)\.po

The import matches existing components based on files and adds the ones which do not exist. It does no changes to the already existing ones.

--name-template TEMPLATE

Customize the component’s name, using Django template syntax.

For example: Documentation: {{ component }}

--base-file-template TEMPLATE

Customize base file for monolingual translations.

For example: {{ component }}/res/values/string.xml

--file-format FORMAT

You can also specify file format to use (see Supported formats), the default is autodetection.

--language-regex REGEX

You can specify language filtering (see Component configuration) by this parameter. It has to be valid regular expression.

--main-component

You can specify which component will be chosen as main - the one actually containing VCS repository.

--license NAME

Specify translation license.

--license-url URL

Specify translation license URL.

--vcs NAME

In case you need to specify version control system to use, you can do it here. The default version control is Git.

To give you some examples, let’s try importing two projects.

As first we import The Debian Handbook translations, where each language has separate folder with translations of each chapter:

./manage.py import_project \
    debian-handbook \
    git://anonscm.debian.org/debian-handbook/debian-handbook.git \
    squeeze/master \
    '*/**.po'

Another example can be Tanaguru tool, where we need to specify file format, base file template and has all components and translations located in single folder:

./manage.py import_project \
    --file-format=properties \
    --base-file-template=web-app/tgol-web-app/src/main/resources/i18n/%s-I18N.properties \
    tanaguru \
    https://github.com/Tanaguru/Tanaguru \
    master \
    web-app/tgol-web-app/src/main/resources/i18n/**-I18N_*.properties

Example of more complex parsing of filenames to get correct component and language out of file name like src/security/Numerous_security_holes_in_0.10.1.de.po:

./manage.py import_project \
    tails \
    git://git.tails.boum.org/tails master \
    'wiki/src/security/(?P<component>.*)\.(?P<language>[^.]*)\.po$'

Filtering only translations in chosen language:

./manage import_project \
    --language-regex '^(cs|sk)$' \
    weblate \
    https://github.com/WeblateOrg/weblate.git \
    'weblate/locale/*/LC_MESSAGES/**.po'

See also

More detailed examples can be found in the Starting with internationalization chapter, alternatively you might want to use import_json.

importuserdata

manage.py importuserdata <file.json>

Imports userdata from file created by dumpuserdata

importusers

manage.py importusers --check <file.json>

Imports users from JSON dump of Django auth_users database.

--check

With this option it will just check whether given file can be imported and report possible conflicts on usernames or emails.

You can dump users from existing Django installation using:

./manage.py dumpdata auth.User > users.json

install_addon

New in version 3.2.

manage.py install_addon --addon ADDON <project|project/component>

Installs addon to set of components.

--addon ADDON

Name of addon to install. For example weblate.gettext.customize.

--configuration CONFIG

JSON encoded configuration of an addon.

--update

Update existing addon configuration.

You can either define on which project or component to install addon (eg. weblate/master) or use --all to include all existing components.

For example installing Customize gettext output to all components:

./manage.py install_addon --addon weblate.gettext.customize --config '{"width": -1}' --update --all

See also

Addons

list_ignored_checks

manage.py list_ignored_checks

Lists most frequently ignored checks. This can be useful for tuning your setup, if users have to ignore too many of consistency checks.

list_languages

manage.py list_languages <locale>

Lists supported language in MediaWiki markup - language codes, English names and localized names.

This is used to generate <https://wiki.l10n.cz/Jazyky>.

list_memory

manage.py list_memory

New in version 2.20.

Lists contents of the Weblate Translation Memory.

--type {origin}

Type of information to list, defaults to listing used origins.

list_translators

manage.py list_translators <project|project/component>

Renders the list of translators by language for the given project:

[French]
Jean Dupont <jean.dupont@example.com>
[English]
John Doe <jd@exemple.com>
--language-code

Use language code instead of language name in output.

You can either define which project or component to use (eg. weblate/master) or use --all to list translators from all existing components.

list_versions

manage.py list_versions

Lists versions of Weblate dependencies.

loadpo

manage.py loadpo <project|project/component>

Reloads translations from disk (eg. in case you did some updates in VCS repository).

--force

Force update even if the files should be up to date.

--lang LANGUAGE

Limit processing to single languaguage.

You can either define which project or component to update (eg. weblate/master) or use --all to update all existing components.

Note

You seldom need to invoke this, Weblate will automatically load changed files on VCS update. This is needed in case you manually change underlying Weblate VCS repository or in some special cases after upgrade.

lock_translation

manage.py lock_translation <project|project/component>

Locks given component for translating. This is useful in case you want to do some maintenance on underlaying repository.

You can either define which project or component to update (eg. weblate/master) or use --all to update all existing components.

optimize_memory

manage.py optimize_memory

New in version 3.2.

Optimizes translation memory storage.

--rebuild

The index will be completely rebuilt by dumping all content and creating it again. It is recommended to backup it prior to this operation.

pushgit

manage.py pushgit <project|project/component>

Pushes committed changes to upstream VCS repository.

--force-commit

Force committing any pending changes prior to push.

You can either define which project or component to update (eg. weblate/master) or use --all to update all existing components.

Note

Weblate does push changes automatically if Push on commit in Component configuration is enabled, what is default.

rebuild_index

manage.py rebuild_index <project|project/component>

Rebuilds index for fulltext search. This might be lengthy operation if you have a huge set of translation units.

--clean

Removes all words from database prior updating, this is implicit when called with --all.

--optimize

The index will not be processed again, only its content will be optimized (removing stale entries and merging possibly split index files).

See also

Fulltext search

unlock_translation

manage.py unlock_translation <project|project/component>

Unlocks a given component for translating. This is useful in case you want to do some maintenance on the underlaying repository.

You can either define which project or component to update (eg. weblate/master) or use --all to update all existing components.

See also

lock_translation

setupgroups

manage.py setupgroups

Configures default groups and optionally assigns all users to default group.

--no-privs-update

Disables update of existing groups (only adds new ones).

--no-projects-update

Prevents updates of groups for existing projects. This allows to add newly added groups to existing projects, see Per project access control.

See also

Access control

setuplang

manage.py setuplang

Setups list of languages (it has own list and all defined in translate-toolkit).

--no-update

Disables update of existing languages (only adds new ones).

updatechecks

manage.py updatechecks <project|project/component>

Updates all check for all units. This could be useful only on upgrades which do major changes to checks.

You can either define which project or component to update (eg. weblate/master) or use --all to update all existing components.

updategit

manage.py updategit <project|project/component>

Fetches remote VCS repositories and updates internal cache.

You can either define which project or component to update (eg. weblate/master) or use --all to update all existing components.

Note

Usually it is better to configure hooks in the repository to trigger Notification hooks instead of regular polling by updategit.