Upgrading Weblate

Docker image upgrades

The official Docker image (see Installing using Docker) has all Weblate upgrade steps integrated. There are typically no manual steps needed besides pulling latest version.

Generic upgrade instructions

Before upgrading, please check the current Software-Anforderungen as they might have changed. Once all requirements are installed or updated, please adjust your settings.py to match changes in the configuration (consult settings_example.py for correct values).

Always check Version specific instructions before upgrade. In case you are skipping some versions, please follow instructions for all versions you are skipping in the upgrade. Sometimes it’s better to upgrade to some intermediate version to ensure a smooth migration. Upgrading across multiple releases should work, but is not as well tested as single version upgrades.

Bemerkung

Es wird empfohlen, vor dem Upgrade eine vollständige Datenbanksicherung durchzuführen, damit Sie die Datenbank zurücksetzen können, falls das Upgrade fehlschlägt, siehe Sichern und Verschieben von Weblate.

  1. Stop wsgi and Celery processes. The upgrade can perform incompatible changes in the database, so it is always safer to avoid old processes running while upgrading.

  2. Upgrade Weblate code.

    For pip installs it can be achieved by:

    pip install -U "Weblate[all]==version"
    

    Or, if you just want to get the latest released version:

    pip install -U "Weblate[all]"
    

    If you don’t want to install all of the optional dependencies do:

    pip install -U Weblate
    

    With Git checkout you need to fetch new source code and update your installation:

    cd weblate-src
    git pull
    # Update Weblate inside your virtualenv
    . ~/weblate-env/bin/pip install -e .
    # Install dependencies directly when not using virtualenv
    pip install --upgrade -r requirements.txt
    # Install optional dependencies directly when not using virtualenv
    pip install --upgrade -r requirements-optional.txt
    
  3. New Weblate release might have new Optional dependencies, please check if they cover features you want.

  4. Upgrade configuration file, refer to settings_example.py or Version specific instructions for needed steps.

  5. Upgrade database structure:

    weblate migrate --noinput
    
  6. Collect updated static files (see Running server and Serving static files):

    weblate collectstatic --noinput --clear
    
  7. Compress JavaScript and CSS files (optional, see Compressing client assets):

    weblate compress
    
  8. If you are running version from Git, you should also regenerate locale files every time you are upgrading. You can do this by invoking:

    weblate compilemessages
    
  9. Verify that your setup is sane (see also Production setup):

    weblate check --deploy
    
  10. Celery-Worker neu starten (siehe Background tasks using Celery).

Version specific instructions

Upgrade von 2.x

Wenn Sie von der Version 2.x upgraden, sollten Sie immer zuerst auf 3.0.1 upgraden und dann mit der 3.x-Serie fortfahren. Upgrades, die diesen Schritt überspringen, werden nicht unterstützt und führen zu Fehlern.

Upgrade von 3.x

Wenn Sie von der Version 3.x aktualisieren, führen Sie immer zuerst ein Upgrade auf 4.0.4 oder 4.1.1 durch und setzen Sie dann das Upgrade in der 4.x-Serie fort. Upgrades, die diesen Schritt überspringen, werden nicht unterstützt und führen zu Fehlern.

Siehe auch

Upgrade von 3.11 auf 4.0 in der Weblate-4.0-Dokumentation <https://docs.weblate.org/en/weblate-4.0.4/admin/upgrade.html#upgrade-from-3-11-to-4-0>`_

Upgrade von 4.0 auf 4.1

Please follow Generic upgrade instructions in order to perform update.

Notable configuration or dependencies changes:

  • There are several changes in settings_example.py, most notable middleware changes, please adjust your settings accordingly.

  • There are new file formats, you might want to include them in case you modified the WEBLATE_FORMATS.

  • There are new quality checks, you might want to include them in case you modified the CHECK_LIST.

  • There is change in DEFAULT_THROTTLE_CLASSES setting to allow reporting of rate limiting in the API.

  • Es gibt einige neue und aktualisierte Anforderungen.

  • There is a change in INSTALLED_APPS.

  • The MT_DEEPL_API_VERSION setting has been removed in Version 4.7. The DeepL machine translation now uses the new MT_DEEPL_API_URL instead. You might need to adjust MT_DEEPL_API_URL to match your subscription.

Upgrade von 4.1 auf 4.2

Please follow Generic upgrade instructions in order to perform update.

Notable configuration or dependencies changes:

  • Upgrades von 3.x Versionen werden nicht mehr unterstützt, bitte aktualisieren Sie zuerst auf 4.0 oder 4.1.

  • Es gibt einige neue und aktualisierte Anforderungen.

  • There are several changes in settings_example.py, most notable new middleware and changed application ordering.

  • The keys for JSON based formats no longer include leading dot. The strings are adjusted during the database migration, but external components might need adjustment in case you rely on keys in exports or API.

  • The Celery configuration was changed to no longer use memory queue. Please adjust your startup scripts and CELERY_TASK_ROUTES setting.

  • The Weblate domain is now configured in the settings, see SITE_DOMAIN (or WEBLATE_SITE_DOMAIN). You will have to configure it before running Weblate.

  • The username and email fields on user database now should be case insensitive unique. It was mistakenly not enforced with PostgreSQL.

Upgrade von 4.2 auf 4.3

Please follow Generic upgrade instructions in order to perform update.

Notable configuration or dependencies changes:

  • There are some changes in quality checks, you might want to include them in case you modified the CHECK_LIST.

  • The source language attribute was moved from project to a component what is exposed in the API. You will need to update Weblate Client in case you are using it.

  • The database migration to 4.3 might take long depending on number of strings you are translating (expect around one hour of migration time per 100,000 source strings).

  • There is a change in INSTALLED_APPS.

  • There is a new setting SESSION_COOKIE_AGE_AUTHENTICATED which complements SESSION_COOKIE_AGE.

  • In case you were using hub or lab to integrate with GitHub or GitLab, you will need to reconfigure this, see GITHUB_CREDENTIALS and GITLAB_CREDENTIALS.

Geändert in Version 4.3.1:

  • The Celery configuration was changed to add memory queue. Please adjust your startup scripts and CELERY_TASK_ROUTES setting.

Geändert in Version 4.3.2:

  • The post_update method of add-ons now takes extra skip_push parameter.

Upgrade von 4.3 auf 4.4

Please follow Generic upgrade instructions in order to perform update.

Notable configuration or dependencies changes:

  • There is a change in INSTALLED_APPS, weblate.configuration has to be added there.

  • Django 3.1 ist jetzt erforderlich.

  • In case you are using MySQL or MariaDB, the minimal required versions have increased, see MySQL and MariaDB.

Geändert in Version 4.4.1:

  • Monolingual gettext now uses both msgid and msgctxt when present. This will change identification of translation strings in such files breaking links to Weblate extended data such as screenshots or review states. Please make sure you commit pending changes in such files prior upgrading and it is recommended to force loading of affected component using loadpo.

  • Increased minimal required version of translate-toolkit to address several file format issues.

Upgrade von 4.4 auf 4.5

Please follow Generic upgrade instructions in order to perform update.

Notable configuration or dependencies changes:

  • Bei umfangreichen Glossaren kann die Migration viel Zeit in Anspruch nehmen.

  • Glossare werden jetzt als reguläre Komponenten gespeichert.

  • Die Glossar-API wurde entfernt. Verwenden Sie die reguläre Übersetzungs-API für den Zugriff auf Glossare.

  • There is a change in INSTALLED_APPS - weblate.metrics should be added.

Geändert in Version 4.5.1:

  • Es gibt eine neue Abhängigkeit vom Modul pyahocorasick.

Upgrade von 4.5 auf 4.6

Please follow Generic upgrade instructions in order to perform update.

Notable configuration or dependencies changes:

Upgrade von 4.6 auf 4.7

Please follow Generic upgrade instructions in order to perform update.

Notable configuration or dependencies changes:

  • There are several changes in settings_example.py, most notable middleware changes (MIDDLEWARE), please adjust your settings accordingly.

  • The DeepL machine translation now has a generic MT_DEEPL_API_URL setting to adapt to different subscription models more flexibly. The MT_DEEPL_API_VERSION setting is no longer used.

  • Django 3.2 ist jetzt erforderlich.

Upgrade von 4.7 auf 4.8

Please follow Generic upgrade instructions in order to perform update.

In dieser Version sind keine zusätzlichen Upgrade-Schritte erforderlich.

Upgrade von 4.8 auf 4.9

Please follow Generic upgrade instructions in order to perform update.

  • There is a change in storing metrics, the upgrade can take long time on larger sites.

Upgrade von 4.0 auf 4.10

Please follow Generic upgrade instructions in order to perform update.

  • There is a change in per-project groups, the upgrade can take long time on sites with thousands of projects.

  • Django 4.0 has made some incompatible changes, see Backwards incompatible changes in 4.0. Weblate still supports Django 3.2 for now, in case any of these are problematic. Most notable changes which might affect Weblate:

    • Unterstützung für PostgreSQL 9.6 wurde eingestellt, Django 4.0 unterstützt PostgreSQL 10 und höher.

    • Format of CSRF_TRUSTED_ORIGINS was changed.

  • Der Docker-Container verwendet jetzt Django 4.0, siehe oben für Änderungen.

Upgrade von 4.10 auf 4.11

Please follow Generic upgrade instructions in order to perform update.

  • Weblate erfordert jetzt Python 3.7 oder neuer.

  • The implementation of Verwaltung der Zugriffssteuerung nach Projekt has changed, removing the project prefix from the group names. This affects API users.

  • Weblate verwendet jetzt das Modul charset-normalizer anstelle von chardet für die Zeichensatzerkennung.

  • Changed in 4.11.1: There is a change in REST_FRAMEWORK setting (removal of one of the backends in DEFAULT_AUTHENTICATION_CLASSES).

Upgrade from 4.11 to 4.12

Please follow Generic upgrade instructions in order to perform update.

  • There are no special steps required.

Upgrade from 4.12 to 4.13

Please follow Generic upgrade instructions in order to perform update.

  • The Language definitions are now automatically updated on upgrade, use UPDATE_LANGUAGES to disable that.

  • Handling of context and location has been changed for Windows RC files, HTML files, IDML Format, and Textdateien file formats. In most cases the context is now shown as location.

  • The machine translation services are now configured using the user interface, settings from the configuration file will be imported during the database migration.

Upgrade from 4.13 to 4.14

Please follow Generic upgrade instructions in order to perform update.

  • The Java formatting checks now match GNU gettext flags. The flags set in Weblate will be automatically migrated, but third-party scripts will need to use java-printf-format instead of java-format and java-format instead of java-messageformat.

  • The jellyfish dependency has been replaced by rapidfuzz.

Upgrade von Python 2 auf Python 3

Weblate no longer supports Python older than 3.6. In case you are still running on older version, please perform migration to Python 3 first on existing version and upgrade later. See Upgrading from Python 2 to Python 3 in the Weblate 3.11.1 documentation.

Migration von anderen Datenbanken zu PostgreSQL

Wenn Sie Weblate auf einer anderen Datenbank als PostgreSQL betreiben, sollten Sie eine Migration zu PostgreSQL in Betracht ziehen, da Weblate damit am besten funktioniert. Die folgenden Schritte werden Sie bei der Migration Ihrer Daten zwischen den Datenbanken anleiten. Bitte denken Sie daran, sowohl den Web- als auch den Celery-Server vor der Migration zu stoppen, da es sonst zu inkonsistenten Daten kommen kann.

Creating a database in PostgreSQL

It is usually a good idea to run Weblate in a separate database, and separate user account:

# If PostgreSQL was not installed before, set the main password
sudo -u postgres psql postgres -c "\password postgres"

# Create a database user called "weblate"
sudo -u postgres createuser -D -P weblate

# Create the database "weblate" owned by "weblate"
sudo -u postgres createdb -E UTF8 -O weblate weblate

Migration mit Django JSON-Dumps

The simplest approach for migration is to utilize Django JSON dumps. This works well for smaller installations. On bigger sites you might want to use pgloader instead, see Migrating to PostgreSQL using pgloader.

  1. Add PostgreSQL as additional database connection to the settings.py:

DATABASES = {
    "default": {
        # Database engine
        "ENGINE": "django.db.backends.mysql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Database password
        "PASSWORD": "password",
        # Set to empty string for localhost
        "HOST": "database.example.com",
        # Set to empty string for default
        "PORT": "",
        # Additional database options
        "OPTIONS": {
            # In case of using an older MySQL server, which has MyISAM as a default storage
            # 'init_command': 'SET storage_engine=INNODB',
            # Uncomment for MySQL older than 5.7:
            # 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            # If your server supports it, see the Unicode issues above
            "charset": "utf8mb4",
            # Change connection timeout in case you get MySQL gone away error:
            "connect_timeout": 28800,
        },
    },
    "postgresql": {
        # Database engine
        "ENGINE": "django.db.backends.postgresql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Database password
        "PASSWORD": "password",
        # Set to empty string for localhost
        "HOST": "database.example.com",
        # Set to empty string for default
        "PORT": "",
    },
}
  1. Run migrations and drop any data inserted into the tables:

weblate migrate --database=postgresql
weblate sqlflush --database=postgresql | weblate dbshell --database=postgresql
  1. Dump legacy database and import to PostgreSQL

weblate dumpdata --all --output weblate.json
weblate loaddata weblate.json --database=postgresql
  1. Adjust DATABASES to use just PostgreSQL database as default, remove legacy connection.

Weblate should be now ready to run from the PostgreSQL database.

Migrating to PostgreSQL using pgloader

The pgloader is a generic migration tool to migrate data to PostgreSQL. You can use it to migrate Weblate database.

  1. Adjust your settings.py to use PostgreSQL as a database.

  2. Migrate the schema in the PostgreSQL database:

    weblate migrate
    weblate sqlflush | weblate dbshell
    
  3. Run the pgloader to transfer the data. The following script can be used to migrate the database, but you might want to learn more about pgloader to understand what it does and tweak it to match your setup:

    LOAD DATABASE
         FROM      mysql://weblate:password@localhost/weblate
         INTO postgresql://weblate:password@localhost/weblate
    
    WITH include no drop, truncate, create no tables, create no indexes, no foreign keys, disable triggers, reset sequences, data only
    
    ALTER SCHEMA 'weblate' RENAME TO 'public'
    ;
    

Migrating from Pootle

As Weblate was originally written as replacement from Pootle, it is supported to migrate user accounts from Pootle. You can dump the users from Pootle and import them using importusers.