Web based localization tool with tight version control integration.

Overview
Weblate

Weblate is a copylefted libre software web-based continuous localization system, used by over 1150 libre projects and companies in more than 115 countries.

Install it, or use the Hosted Weblate service at weblate.org.

Website Translation status CII Best Practices https://readthedocs.org/projects/weblate/badge/ License

Support

Weblate is a libre software with optional professional support and cloud hosting offerings. Check out https://weblate.org/hosting/ for more information.

Documentation

To be found in the docs directory of the source code, or viewed online on https://docs.weblate.org/

Installation

Setup instructions:

https://docs.weblate.org/en/latest/admin/install.html

Bugs

Please report feature requests and problems to:

https://github.com/WeblateOrg/weblate/issues

License

Copyright © 2012–2021 Michal Čihař [email protected]

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Issues
  • ValueError: The field accounts.VerifiedEmail.social was declared with a lazy reference to 'social_django.usersocialauth', but app 'social_django' isn't installed.

    ValueError: The field accounts.VerifiedEmail.social was declared with a lazy reference to 'social_django.usersocialauth', but app 'social_django' isn't installed.

    Steps to reproduce

    1. Upgrade from Weblate 2.10 to 2.11
    2. Adapt configuration changes from settings_example.py
    3. Run migration

    Actual behaviour

    python ./manage.py migrate
    Operations to perform:
      Apply all migrations: accounts, admin, auth, authtoken, contenttypes, lang, sessions, sites, social_django, trans
    Traceback (most recent call last):
      File "../manage.py", line 31, in <module>
        execute_from_command_line(sys.argv)
      File "/var/www/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
        utility.execute()
      File "/var/www/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 359, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/var/www/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 294, in run_from_argv
        self.execute(*args, **cmd_options)
      File "/var/www/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 345, in execute
        output = self.handle(*args, **options)
      File "/var/www/venv/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 164, in handle
        pre_migrate_apps = pre_migrate_state.apps
      File "/var/www/venv/local/lib/python2.7/site-packages/django/utils/functional.py", line 35, in __get__
        res = instance.__dict__[self.name] = self.func(instance)
      File "/var/www/venv/local/lib/python2.7/site-packages/django/db/migrations/state.py", line 176, in apps
        return StateApps(self.real_apps, self.models)
      File "/var/www/venv/local/lib/python2.7/site-packages/django/db/migrations/state.py", line 249, in __init__
        raise ValueError("\n".join(error.msg for error in errors))
    ValueError: The field accounts.VerifiedEmail.social was declared with a lazy reference to 'social_django.usersocialauth', but app 'social_django' isn't installed.
    

    Server configuration

     * Weblate 2.11
     * Python 2.7.9
     * Django 1.10.5
     * six 1.10.0
     * social-auth-core 1.1.0
     * social-auth-app-django 1.0.1
     * Translate Toolkit 2.0.0b5
     * Whoosh 2.7.4
     * defusedxml 0.4.1
     * Git 2.1.4
     * Pillow (PIL) 1.1.7
     * dateutil 2.5.3
     * lxml 3.6.0
     * django-crispy-forms 1.6.0
     * compressor 1.6
     * djangorestframework 3.4.6
     * Database backends: django.db.backends.postgresql_psycopg2
    
    question documentation 
    opened by nblock 44
  • support Google Play upload tools: Fastlane and Triple-T Gradle Play Publisher

    support Google Play upload tools: Fastlane and Triple-T Gradle Play Publisher

    There are two major tools for managing the localized files for Google Play: Fastlane Supply and Triple-T Gradle Play Publisher. F-Droid also supports the same file/dir structure. If Weblate would directly support those files, then there would be a clean, simple, automated way to translate Android apps using Weblate. Here's the ideal workflow:

    1. Weblate pulls source from git
    2. translators work in Weblate
    3. translations get pulled into app's source directly where Fastlane or Triple-T expect them
    4. F-Droid automatically uses those translations from git
    5. those translations are directly published to Google Play via the respective tool (Fastlane Supply or Gradle)

    Both Fastlane and Triple-T use plain text for the source and translation file format. title and short_description would be easy to support directly as plain text, changelog and full_description much less so:

    • title: 30 char limit, one line, plain text
    • short_description: 80 char limit, one line, plain text
    • full_description: 4000 char limit, multiple lines, can contain basic HTML
    • changelog: 500 char limit, multiple lines, plain text

    But perhaps this setup is just too different from standard translation workflows that assume strings are in a single source file. I've also opened issues on those tools to get feedback there:

    • https://github.com/Triple-T/gradle-play-publisher/issues/227
    • https://github.com/fastlane/fastlane/issues/9520

    I really want to find a way to get this workflow working really smoothly. Translations are really important, and something that really should be as automated as possible.

    enhancement translate-toolkit 
    opened by eighthave 44
  • Translation-time context management

    Translation-time context management

    Edit: see comment for clarification.

    Hi. Is it possible to add a option for translators to manage msgctxts, including adding new ones?

    I'm not sure if that's something needed or even viable, so let me describe the situation first:

    • There's a translation going from a gender unspecific language (English) to a gender specific one (Spanish). Most strings are common, but some, maybe 10-15% will differ.
    • The translation will result in 2 separate packages, male and female
    • I could create a common project and two separate components. But I'll have to disable translation propagation, because otherwise they'll mess up each other strings.
    • And without propagation, looks like the only way to share the effort is to copy the strings manually. (Or maybe "copy and save" from machine translation tab, will it appear there? Still, that would be a lot of clicking and manual coordination between components)
    • The key problem is that in the source, it's not known beforehand whether the string is gender specific or not. That is decided by the translator at the time of translation, on a case by case basis. (and may vary for different languages, too)

    So... that looks like a long shot, but I was thinking of a feature that would allow the translator to "split" the source string into several contexted ones and translate them individually? That will require adding newly created entries into po and pot, though.

    Or maybe I'm missing an obvious way to handle such a situation? Please advise.

    enhancement undecided 
    opened by burner1024 42
  • After updating the GIT repository, the following steps in Weblate are not performed

    After updating the GIT repository, the following steps in Weblate are not performed

    Describe the bug I run my own Weblate instance linked to repositories managed by Gitea. In Gitea, a webhook is set to update components in Weblate when commit to Gitea. The add-on gettext.msgmerge is used in Weblate to update PO files after commit with update of POT files. Usually everything works perfectly smoothly and excellently.

    Sometimes, however, after commit to Gitea, a rebase repository is executed in Weblate, but then no other steps are taken at all – no component updates, no msgmerge for updated POT files, therefore no updates to PO files, no error message in the logs.

    To Reproduce What I saw as common in such situations, here were translations waiting for commit in some of components linked to the same git repository.

    Expected behavior I expect the repository update to be performed whenever an update is invoked in Weblate and new commits are fetched from git.

    Server configuration and status

     * Weblate 3.6.1
     * Python 3.5.3
     * Django 1.11.20
     * Celery 4.2.2
     * celery-batches 0.2
     * six 1.10.0
     * social-auth-core 3.1.0
     * social-auth-app-django 3.1.0
     * django-appconf 1.0.1
     * translate-toolkit 2.3.1
     * translation-finder 1.1
     * Whoosh 2.7.0
     * defusedxml 0.5.0
     * Git 2.11.0
     * Pillow 4.0.0
     * python-dateutil 2.5.3
     * lxml 4.2.5
     * django-crispy-forms 1.6.1
     * django_compressor 2.2
     * djangorestframework 3.9.2
     * user-agents 1.1.0
     * jellyfish 0.7.1
     * diff-match-patch 20121119
     * pytz 2016.7
     * pyuca 1.1.2
     * PyYAML 3.12
     * Database backends: django.db.backends.mysql
     * Cache backends: default:RedisCache, avatar:FileBasedCache
     * Celery: redis://localhost:6379, redis://localhost:6379, regular
     * Platform: Linux 3.16.6-042stab134.46 (x86_64)
    
    System check identified some issues:
    
    INFOS:
    ?: (weblate.I021) Error collection is not configured, it is highly recommended for production use
            HINT: https://docs.weblate.org/en/weblate-3.6.1/admin/install.html#collecting-errors
    
    System check identified 1 issue (0 silenced).
    

    Additional context In the log "committing pending changes" is mentioned, but nothing else follows:

    [2019-06-12 21:11:46,537: INFO/ForkPoolWorker-5] Lock 140331270848920 acquired on /var/lib/weblate/data/vcs/tde/tde-i18n.lock
    [2019-06-12 21:11:46,538: INFO/ForkPoolWorker-5] Lock 140331270848920 acquired on /var/lib/weblate/data/vcs/tde/tde-i18n.lock
    [2019-06-12 21:11:46,762: INFO/ForkPoolWorker-5] tde/tde-i18n: updating repository
    [2019-06-12 21:11:46,762: INFO/ForkPoolWorker-5] Lock 140331270848920 acquired on /var/lib/weblate/data/vcs/tde/tde-i18n.lock
    [2019-06-12 21:11:49,898: INFO/ForkPoolWorker-5] tde/tde-i18n: update took 3.14 seconds
    [2019-06-12 21:11:51,097: INFO/ForkPoolWorker-5] Lock 140331270848920 acquired on /var/lib/weblate/data/vcs/tde/tde-i18n.lock
    [2019-06-12 21:11:55,217: INFO/ForkPoolWorker-5] Lock 140331270848920 acquired on /var/lib/weblate/data/vcs/tde/tde-i18n.lock
    [2019-06-12 21:11:56,419: INFO/ForkPoolWorker-5] tde/tde-i18n: rebase remote into repo
    [2019-06-12 21:12:02,472: INFO/ForkPoolWorker-5] tdeutils/ktimer/tr: committing pending changes (addon)
    [2019-06-12 21:14:02,526: INFO/ForkPoolWorker-5] Lock 140331270848920 released on /var/lib/weblate/data/vcs/tde/tde-i18n.lock
    
    bug 
    opened by SlavekB 42
  • Add support for OpenShift 3

    Add support for OpenShift 3

    Steps to reproduce

    1. Set up new python 2.7 project in OpenShift following docs
    2. Allocate 1 GB in OpenShift
    3. Build from source https://github.com/WeblateOrg/weblate.git

    Actual behaviour

    Build 'lxml.etree' extension failed. See https://gist.github.com/maxruby/6ce93a1a1a4b94927102d9ecbc66a684

    Expected behaviour

    Build should not fail.

    Server configuration

    Please paste the output of command ./manage.py list_versions over here

    enhancement good first issue 
    opened by maxruby 42
  • reviewing translations: ability to lock a single string [$200 awarded]

    reviewing translations: ability to lock a single string [$200 awarded]

    There currently is no convenient review workflow in weblate allowing reviewers to verify the quality of translated strings. There are suggested workflow that mostly rely on discipline on behalf of the reviewer and the translator. They are error prone and inconvenient.

    A reviewer proposed that the ability for a reviewer to lock a translated string (not the whole set of strings, just one) would be an easy way for a reviewer to express the fact that the translation is good and final. If the translated string is locked, the Save button is disabled and translators can no longer change the translation. The checkbox allowing the reviewer to lock/unlock a string could be next to the Need review checkbox. The search box could be extended to look for all strings that are not in the Locked state so the reviewer can focus on them.

    Was this idea discussed before ? Does it sound like a convenient review workflow ?

    enhancement bounty 
    opened by ghost 39
  • Cannot commit pending changes

    Cannot commit pending changes

    Describe the issue

    We're running a weblate instance on https://l10n.xwiki.org on which we have a project with 87 linked components. Recently a new language has been added to the root component which is also the biggest in term of number of keys (3609 keys). Since then is seems that we cannot commit the pending changes on this project: at first we had "only" 2Gb of RAM on the server, and we kept getting the process killed by OOM, so we started to increase the memory, we now have 5Gb of RAM and 5Gb of swap on the server. Now the process is not killed anymore apparently, but whenever I try to commit the pending changes nothing happens and/or I obtain the following error:

    Timeout at /js/git/xwiki-platform/
    The file lock '/var/weblate/data/vcs/xwiki-platform/xwiki-core-resources.lock' could not be acquired.
    

    I already tried

    As explained I already tried to put more memory on the server, without much success. I also try to disable celery to only trigger the commit changes synchronously, but without much success. I did not find any errors in the logs, except the one concerning the lock. Note that I checked the repository manually I rebased it already without any issue, and nothing is committed besides what's in https://github.com/xwiki/xwiki-platform/pull/1621 which I cannot really merge right now. Anyway I don't think that's an issue here. Also I noticed that the repository contained uncommitted files such as: ApplicationResources_id.propertiesfor1d8o6, where my filemask is ApplicationResources_*.properties and the new language is indeed indonesian. I tried several times to delete those files (which are empty), but apparently it doesn't change anything.

    So far the only move I can think of, would be to add more memory, but I don't know how much memory I'd need and usually we manage to run our Weblate server with only 2Gb so that's a bit worrying to need that much memory for adding a new language.

    • [x] I've read and searched the docs and did not find the answer there. If you didn’t try already, try to search there what you wrote above.

    Exception traceback

    Here's the full trace I obtain in case of lock error:

    Internal Server Error: /js/git/xwiki-platform/
    
    Timeout at /js/git/xwiki-platform/
    The file lock '/var/weblate/data/vcs/xwiki-platform/xwiki-core-resources.lock' could not be acquired.
    
    Request Method: GET
    Request URL: https://l10n.xwiki.org/js/git/xwiki-platform/
    Django Version: 3.1.5
    Python Executable: /usr/bin/uwsgi-core
    Python Version: 3.7.3
    Python Path: ['/home/weblate/weblate-env/lib/python3.7/site-packages/git/ext/gitdb', '/', '.', '', '/home/weblate/weblate-env/lib/python37.zip', '/home/weblate/weblate-env/lib/python3.7', '/home/weblate/weblate-env/lib/python3.7/lib-dynload', '/usr/lib/python3.7', '/home/weblate/weblate-env/lib/python3.7/site-packages', '/home/weblate/weblate-env/lib/python3.7/site-packages/gitdb/ext/smmap']
    Server time: Wed, 19 May 2021 08:09:11 +0000
    Installed Applications:
    ['weblate.addons',
     'weblate.auth',
     'weblate.checks',
     'weblate.configuration',
     'weblate.formats',
     'weblate.glossary',
     'weblate.machinery',
     'weblate.trans',
     'weblate.lang',
     'weblate_language_data',
     'weblate.memory',
     'weblate.screenshots',
     'weblate.fonts',
     'weblate.accounts',
     'weblate.utils',
     'weblate.vcs',
     'weblate.wladmin',
     'weblate',
     'weblate.gitexport',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'django.contrib.admin.apps.SimpleAdminConfig',
     'django.contrib.admindocs',
     'django.contrib.sitemaps',
     'django.contrib.humanize',
     'social_django',
     'crispy_forms',
     'compressor',
     'rest_framework',
     'rest_framework.authtoken',
     'django_filters']
    Installed Middleware:
    ['weblate.middleware.RedirectMiddleware',
     'weblate.middleware.ProxyMiddleware',
     'django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'weblate.accounts.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
     'social_django.middleware.SocialAuthExceptionMiddleware',
     'weblate.accounts.middleware.RequireLoginMiddleware',
     'weblate.api.middleware.ThrottlingMiddleware',
     'weblate.middleware.SecurityMiddleware']
    
    
    Traceback (most recent call last):
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/core/handlers/exception.py", line 47, in inner
        response = get_response(request)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/core/handlers/base.py", line 181, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
        return view_func(request, *args, **kwargs)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/weblate/trans/views/js.py", line 177, in git_status_project
        return git_status_shared(request, obj, obj.all_repo_components)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/weblate/trans/views/js.py", line 168, in git_status_shared
        "missing_commits": sum(repo.count_repo_missing for repo in repositories),
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/shortcuts.py", line 19, in render
        content = loader.render_to_string(template_name, context, request, using=using)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/loader.py", line 62, in render_to_string
        return template.render(context, request)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/backends/django.py", line 61, in render
        return self.template.render(context)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 170, in render
        return self._render(context)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 162, in _render
        return self.nodelist.render(context)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 938, in render
        bit = node.render_annotated(context)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
        return self.render(context)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/defaulttags.py", line 516, in render
        return self.nodelist.render(context)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 938, in render
        bit = node.render_annotated(context)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
        return self.render(context)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/defaulttags.py", line 211, in render
        nodelist.append(node.render_annotated(context))
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
        return self.render(context)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 988, in render
        output = self.filter_expression.resolve(context)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 671, in resolve
        obj = self.var.resolve(context)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 796, in resolve
        value = self._resolve_lookup(context)
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 858, in _resolve_lookup
        current = current()
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/weblate/vcs/base.py", line 276, in status
        with self.lock:
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/filelock.py", line 323, in __enter__
        self.acquire()
      File "/home/weblate/weblate-env/lib/python3.7/site-packages/filelock.py", line 278, in acquire
        raise Timeout(self._lock_file)
    
    Exception Type: Timeout at /js/git/xwiki-platform/
    Exception Value: The file lock '/var/weblate/data/vcs/xwiki-platform/xwiki-core-resources.lock' could not be acquired.
    Request information:
    USER: Simon Urli
    
    GET: No GET data
    
    POST: No POST data
    
    FILES: No FILES data
    
    COOKIES:[COOKIE INFO]
    
    META:
    CONTENT_LENGTH = ''
    CONTENT_TYPE = ''
    CSRF_COOKIE = 'DCP9uKKJxpmzjz9k0etf8EyinNQ61b0vsxxMM7U7cJzo2WHu6HaoCK9bI2ws7KBa'
    CSRF_COOKIE_USED = True
    DOCUMENT_ROOT = '/var/www/html'
    HTTPS = 'on'
    HTTP_ACCEPT = 'text/html, */*; q=0.01'
    HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
    HTTP_ACCEPT_LANGUAGE = 'fr,en-US;q=0.7,en;q=0.3'
    HTTP_CONNECTION = 'keep-alive'
    HTTP_COOKIE = '[COOKIE INFO]'
    HTTP_DNT = '1'
    HTTP_HOST = 'l10n.xwiki.org'
    HTTP_REFERER = 'https://l10n.xwiki.org/'
    HTTP_USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0'
    HTTP_X_REQUESTED_WITH = 'XMLHttpRequest'
    PATH_INFO = '/js/git/xwiki-platform/'
    QUERY_STRING = ''
    REMOTE_ADDR = '212.198.27.104'
    REMOTE_PORT = '51150'
    REQUEST_METHOD = 'GET'
    REQUEST_SCHEME = 'https'
    REQUEST_URI = '/js/git/xwiki-platform/'
    SCRIPT_NAME = ''
    SERVER_NAME = 'l10n.xwiki.org'
    SERVER_PORT = '443'
    SERVER_PROTOCOL = 'HTTP/1.1'
    WEBLATE_LANGUAGE = ''
    WEBLATE_USER = "'surli'"
    WEBLATE_VERSION:Cython = '0.29.21'
    WEBLATE_VERSION:Django = '3.1.5'
    WEBLATE_VERSION:Git = '2.20.1'
    WEBLATE_VERSION:GitPython = '3.1.8'
    WEBLATE_VERSION:Pillow = '7.1.2'
    WEBLATE_VERSION:PostgreSQL server = '11.11'
    WEBLATE_VERSION:Python = '3.7.3'
    WEBLATE_VERSION:Redis server = '5.0.3'
    WEBLATE_VERSION:Weblate = '4.4.2'
    WEBLATE_VERSION:Whoosh = '2.7.4'
    WEBLATE_VERSION:bleach = '3.1.5'
    WEBLATE_VERSION:borgbackup = '1.1.13'
    WEBLATE_VERSION:celery = '4.4.7'
    WEBLATE_VERSION:chardet = '3.0.4'
    WEBLATE_VERSION:diff-match-patch = '20200713'
    WEBLATE_VERSION:django-appconf = '1.0.4'
    WEBLATE_VERSION:django-compressor = '2.4'
    WEBLATE_VERSION:django-crispy-forms = '1.9.2'
    WEBLATE_VERSION:django-filter = '2.4.0'
    WEBLATE_VERSION:django-redis = '4.12.1'
    WEBLATE_VERSION:djangorestframework = '3.11.1'
    WEBLATE_VERSION:filelock = '3.0.12'
    WEBLATE_VERSION:hiredis = '1.0.1'
    WEBLATE_VERSION:html2text = '2020.1.16'
    WEBLATE_VERSION:jellyfish = '0.8.2'
    WEBLATE_VERSION:kombu = '4.6.11'
    WEBLATE_VERSION:lxml = '4.5.2'
    WEBLATE_VERSION:misaka = '2.1.1'
    WEBLATE_VERSION:oauthlib = '3.1.0'
    WEBLATE_VERSION:openpyxl = '3.0.5'
    WEBLATE_VERSION:psycopg2-binary = '2.8.6'
    WEBLATE_VERSION:pycairo = '1.19.1'
    WEBLATE_VERSION:pygobject = '3.38.0'
    WEBLATE_VERSION:pyparsing = '2.4.7'
    WEBLATE_VERSION:python-dateutil = '2.8.1'
    WEBLATE_VERSION:requests = '2.24.0'
    WEBLATE_VERSION:ruamel.yaml = '0.16.12'
    WEBLATE_VERSION:sentry_sdk = '0.15.1'
    WEBLATE_VERSION:setuptools = '50.3.0'
    WEBLATE_VERSION:siphashc = '1.3'
    WEBLATE_VERSION:social-auth-app-django = '4.0.0'
    WEBLATE_VERSION:social-auth-core = '4.0.3'
    WEBLATE_VERSION:translate-toolkit = '3.3.0'
    WEBLATE_VERSION:translation-finder = '2.7'
    WEBLATE_VERSION:user-agents = '2.1'
    WEBLATE_VERSION:weblate-language-data = '2020.13'
    uwsgi.node = b'l10n-prod'
    uwsgi.version = b'2.0.18-debian'
    wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
    wsgi.file_wrapper = <built-in function uwsgi_sendfile>
    wsgi.input = <uwsgi._Input object at 0x7fa2ac98ffd8>
    wsgi.multiprocess = True
    wsgi.multithread = False
    wsgi.run_once = False
    wsgi.url_scheme = 'https'
    wsgi.version = '(1, 0)'
    
    Settings:
    Using settings module weblate.settings
    ABSOLUTE_URL_OVERRIDES = {}
    ADMINS = "(('XWiki.org Infra', '[email protected]'),)"
    ADMINS_BILLING = []
    ADMINS_CONTACT = []
    ADMINS_HOSTING = []
    AKISMET_API_KEY = '********************'
    ALLOWED_HOSTS = ['l10n.xwiki.org', 'l10n-new.xwiki.org', '[IP]', '*']
    ANONYMOUS_USER_NAME = 'anonymous'
    APPEND_SLASH = True
    AUDITLOG_EXPIRY = 180
    AUTHENTICATION_BACKENDS = "('social_core.backends.email.EmailAuth', 'social_core.backends.github.GithubOAuth2', 'social_core.backends.suse.OpenSUSEOpenId', 'social_core.backends.ubuntu.UbuntuOpenId', 'social_core.backends.fedora.FedoraOpenId', 'weblate.accounts.auth.WeblateUserBackend', 'weblate.auth.xwiki.XWikiOAuth2')"
    AUTH_LOCK_ATTEMPTS = 10
    AUTH_PASSWORD_DAYS = '********************'
    AUTH_PASSWORD_VALIDATORS = '********************'
    AUTH_RESTRICT_ADMINS = {}
    AUTH_TOKEN_VALID = '********************'
    AUTH_USER_MODEL = 'weblate_auth.User'
    AUTH_VALIDATE_PERMS = False
    AUTOFIX_LIST = "('weblate.trans.autofixes.whitespace.SameBookendingWhitespace', 'weblate.trans.autofixes.chars.ReplaceTrailingDotsWithEllipsis', 'weblate.trans.autofixes.chars.RemoveZeroSpace', 'weblate.trans.autofixes.chars.RemoveControlChars', 'weblate.trans.autofixes.html.BleachHTML')"
    AUTO_UPDATE = True
    AVATAR_DEFAULT_IMAGE = 'identicon'
    AVATAR_URL_PREFIX = 'https://www.gravatar.com/'
    BASE_DIR = '/home/weblate/weblate-env/lib/python3.7/site-packages'
    BASIC_LANGUAGES = None
    CACHES = {'default': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379/1', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'PARSER_CLASS': 'redis.connection.HiredisParser', 'PASSWORD': '********************', 'CONNECTION_POOL_KWARGS': {}}, 'KEY_PREFIX': '********************'}, 'avatar': {'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/weblate/data/avatar-cache', 'TIMEOUT': 86400, 'OPTIONS': {'MAX_ENTRIES': 1000}}}
    CACHE_MIDDLEWARE_ALIAS = 'default'
    CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
    CACHE_MIDDLEWARE_SECONDS = 600
    CELERY_BEAT_SCHEDULE_FILENAME = '/var/weblate/data/celery/beat-schedule'
    CELERY_BROKER_URL = 'redis://localhost:6379'
    CELERY_RESULT_BACKEND = 'redis://localhost:6379'
    CELERY_TASK_ALWAYS_EAGER = False
    CELERY_TASK_ROUTES = {'weblate.trans.tasks.auto_translate': {'queue': 'translate'}, 'weblate.accounts.tasks.notify_*': {'queue': 'notify'}, 'weblate.accounts.tasks.send_mails': {'queue': 'notify'}, 'weblate.utils.tasks.settings_backup': {'queue': 'backup'}, 'weblate.utils.tasks.database_backup': {'queue': 'backup'}, 'weblate.wladmin.tasks.backup': {'queue': 'backup'}, 'weblate.wladmin.tasks.backup_service': {'queue': 'backup'}, 'weblate.memory.tasks.*': {'queue': 'memory'}}
    CELERY_WORKER_MAX_MEMORY_PER_CHILD = 200000
    CHECK_LIST = "('weblate.checks.same.SameCheck', 'weblate.checks.chars.BeginNewlineCheck', 'weblate.checks.chars.EndNewlineCheck', 'weblate.checks.chars.BeginSpaceCheck', 'weblate.checks.chars.EndSpaceCheck', 'weblate.checks.chars.DoubleSpaceCheck', 'weblate.checks.chars.EndStopCheck', 'weblate.checks.chars.EndColonCheck', 'weblate.checks.chars.EndQuestionCheck', 'weblate.checks.chars.EndExclamationCheck', 'weblate.checks.chars.EndEllipsisCheck', 'weblate.checks.chars.EndSemicolonCheck', 'weblate.checks.chars.MaxLengthCheck', 'weblate.checks.chars.KashidaCheck', 'weblate.checks.chars.PunctuationSpacingCheck', 'weblate.checks.format.PythonFormatCheck', 'weblate.checks.format.PythonBraceFormatCheck', 'weblate.checks.format.PHPFormatCheck', 'weblate.checks.format.CFormatCheck', 'weblate.checks.format.PerlFormatCheck', 'weblate.checks.format.JavaScriptFormatCheck', 'weblate.checks.format.CSharpFormatCheck', 'weblate.checks.format.JavaFormatCheck', 'weblate.checks.format.JavaMessageFormatCheck', 'weblate.checks.format.PercentPlaceholdersCheck', 'weblate.checks.format.VueFormattingCheck', 'weblate.checks.format.I18NextInterpolationCheck', 'weblate.checks.format.ESTemplateLiteralsCheck', 'weblate.checks.angularjs.AngularJSInterpolationCheck', 'weblate.checks.qt.QtFormatCheck', 'weblate.checks.qt.QtPluralCheck', 'weblate.checks.ruby.RubyFormatCheck', 'weblate.checks.consistency.PluralsCheck', 'weblate.checks.consistency.SamePluralsCheck', 'weblate.checks.consistency.ConsistencyCheck', 'weblate.checks.consistency.TranslatedCheck', 'weblate.checks.chars.EscapedNewlineCountingCheck', 'weblate.checks.chars.NewLineCountCheck', 'weblate.checks.markup.BBCodeCheck', 'weblate.checks.chars.ZeroWidthSpaceCheck', 'weblate.checks.render.MaxSizeCheck', 'weblate.checks.markup.XMLValidityCheck', 'weblate.checks.markup.XMLTagsCheck', 'weblate.checks.markup.MarkdownRefLinkCheck', 'weblate.checks.markup.MarkdownLinkCheck', 'weblate.checks.markup.MarkdownSyntaxCheck', 'weblate.checks.markup.URLCheck', 'weblate.checks.markup.SafeHTMLCheck', 'weblate.checks.placeholders.PlaceholderCheck', 'weblate.checks.placeholders.RegexCheck', 'weblate.checks.duplicate.DuplicateCheck', 'weblate.checks.source.OptionalPluralCheck', 'weblate.checks.source.EllipsisCheck', 'weblate.checks.source.MultipleFailingCheck', 'weblate.checks.source.LongUntranslatedCheck', 'weblate.checks.format.MultipleUnnamedFormatsCheck')"
    COMMENT_CLEANUP_DAYS = None
    COMMIT_PENDING_HOURS = 1
    COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
    COMPRESS_CACHEABLE_PRECOMPILERS = '()'
    COMPRESS_CACHE_BACKEND = 'default'
    COMPRESS_CACHE_KEY_FUNCTION = '********************'
    COMPRESS_CLEAN_CSS_ARGUMENTS = ''
    COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
    COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
    COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
    COMPRESS_CSS_HASHING_METHOD = 'mtime'
    COMPRESS_DATA_URI_MAX_SIZE = 1024
    COMPRESS_DEBUG_TOGGLE = None
    COMPRESS_ENABLED = True
    COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter'], 'js': ['compressor.filters.jsmin.JSMinFilter']}
    COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7fa2aef0f9d8>
    COMPRESS_MINT_DELAY = 30
    COMPRESS_MTIME_DELAY = 10
    COMPRESS_OFFLINE = True
    COMPRESS_OFFLINE_CONTEXT = [{'fonts_cdn_url': None, 'STATIC_URL': '/static/', 'LANGUAGE_BIDI': True}, {'fonts_cdn_url': None, 'STATIC_URL': '/static/', 'LANGUAGE_BIDI': False}]
    COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
    COMPRESS_OFFLINE_TIMEOUT = 31536000
    COMPRESS_OUTPUT_DIR = 'CACHE'
    COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
    COMPRESS_PRECOMPILERS = '()'
    COMPRESS_REBUILD_TIMEOUT = 2592000
    COMPRESS_ROOT = '/var/weblate/data/static'
    COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
    COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
    COMPRESS_URL = '/static/'
    COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
    COMPRESS_VERBOSE = False
    COMPRESS_YUGLIFY_BINARY = 'yuglify'
    COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
    COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
    COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
    COMPRESS_YUI_CSS_ARGUMENTS = ''
    COMPRESS_YUI_JS_ARGUMENTS = ''
    CRISPY_TEMPLATE_PACK = 'bootstrap3'
    CSP_CONNECT_SRC = []
    CSP_FONT_SRC = []
    CSP_IMG_SRC = []
    CSP_SCRIPT_SRC = []
    CSP_STYLE_SRC = []
    CSRF_COOKIE_AGE = 31449600
    CSRF_COOKIE_DOMAIN = None
    CSRF_COOKIE_HTTPONLY = True
    CSRF_COOKIE_NAME = 'csrftoken'
    CSRF_COOKIE_PATH = '/'
    CSRF_COOKIE_SAMESITE = 'Lax'
    CSRF_COOKIE_SECURE = True
    CSRF_FAILURE_VIEW = 'weblate.trans.views.error.csrf_failure'
    CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
    CSRF_TRUSTED_ORIGINS = []
    CSRF_USE_SESSIONS = True
    DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql', 'NAME': 'weblate', 'USER': 'weblate', 'PASSWORD': '********************', 'HOST': '127.0.0.1', 'PORT': '', 'OPTIONS': {}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
    DATABASE_BACKUP = 'plain'
    DATABASE_ROUTERS = []
    DATA_DIR = '/var/weblate/data'
    DATA_UPLOAD_MAX_MEMORY_SIZE = 50000000
    DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
    DATETIME_FORMAT = 'N j, Y, P'
    DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
    DATE_FORMAT = 'N j, Y'
    DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
    DEBUG = False
    DEBUG_PROPAGATE_EXCEPTIONS = False
    DECIMAL_SEPARATOR = '.'
    DEFAULT_ACCESS_CONTROL = 0
    DEFAULT_ADDONS = {}
    DEFAULT_ADDON_MESSAGE = 'Update translation files\n\nUpdated by "{{ addon_name }}" hook in Weblate.\n\nTranslation: {{ project_name }}/{{ component_name }}\nTranslate-URL: {{ url }}'
    DEFAULT_ADD_MESSAGE = 'Added translation using Weblate ({{ language_name }})\n\n'
    DEFAULT_AUTO_LOCK_ERROR = True
    DEFAULT_CHARSET = 'utf-8'
    DEFAULT_COMMITER_EMAIL = '[email protected]'
    DEFAULT_COMMITER_NAME = 'Weblate'
    DEFAULT_COMMIT_MESSAGE = 'Translated using Weblate ({{ language_name }})\n\nCurrently translated at {{ stats.translated_percent }}% ({{ stats.translated }} of {{ stats.all }} strings)\n\nTranslation: {{ project_name }}/{{ component_name }}\nTranslate-URL: {{ url }}'
    DEFAULT_DELETE_MESSAGE = 'Deleted translation using Weblate ({{ language_name }})\n\n'
    DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
    DEFAULT_EXCEPTION_REPORTER_FILTER = 'weblate.trans.debug.WeblateExceptionReporterFilter'
    DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
    DEFAULT_FROM_EMAIL = '[email protected]'
    DEFAULT_HASHING_ALGORITHM = 'sha256'
    DEFAULT_INDEX_TABLESPACE = ''
    DEFAULT_LANGUAGE = 'en'
    DEFAULT_LOG = 'syslog'
    DEFAULT_LOGLEVEL = 'INFO'
    DEFAULT_MERGE_MESSAGE = "Merge branch '{{ component_remote_branch }}' into Weblate.\n\n"
    DEFAULT_MERGE_STYLE = 'rebase'
    DEFAULT_PULL_MESSAGE = 'Translations update from Weblate\n\nTranslations update from [Weblate]({{url}}) for {{ project_name }}/{{ component_name }}.\n\n{% if component.linked_childs %}\nIt also includes following components:\n{% for linked in component.linked_child %}\n{{ component.project.name }}/{{ component.name }}\n{% endfor %}\n{% endif %}\n\nCurrent translation status:\n\n![Weblate translation status]({{widget_url}})\n\nIf a new locale is introduced by this pull request make sure to follow https://dev.xwiki.org/xwiki/bin/view/Community/L10N/SupportedLocales/#HNewlocalechecklist before applying it.\n'
    DEFAULT_PUSH_ON_COMMIT = True
    DEFAULT_RESTRICTED_COMPONENT = False
    DEFAULT_SHARED_TM = True
    DEFAULT_TABLESPACE = ''
    DEFAULT_TRANSLATION_PROPAGATION = True
    DEFAULT_VCS = 'git'
    DISALLOWED_USER_AGENTS = []
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST = 'localhost'
    EMAIL_HOST_PASSWORD = '********************'
    EMAIL_HOST_USER = ''
    EMAIL_PORT = 25
    EMAIL_SEND_HTML = True
    EMAIL_SSL_CERTFILE = None
    EMAIL_SSL_KEYFILE = '********************'
    EMAIL_SUBJECT_PREFIX = '[Weblate XWiki.org] '
    EMAIL_TIMEOUT = None
    EMAIL_USE_LOCALTIME = False
    EMAIL_USE_SSL = False
    EMAIL_USE_TLS = False
    ENABLE_AVATARS = True
    ENABLE_HOOKS = True
    ENABLE_HTTPS = True
    ENABLE_SHARING = True
    FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
    FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
    FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
    FILE_UPLOAD_PERMISSIONS = 420
    FILE_UPLOAD_TEMP_DIR = None
    FIRST_DAY_OF_WEEK = 0
    FIXTURE_DIRS = []
    FONTS_CDN_URL = None
    FORCE_SCRIPT_NAME = None
    FORMAT_MODULE_PATH = None
    FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
    GITHUB_CREDENTIALS = {}
    GITHUB_TOKEN = '********************'
    GITHUB_USERNAME = 'xwikiorgci'
    GITLAB_CREDENTIALS = {}
    GITLAB_TOKEN = '********************'
    GITLAB_USERNAME = None
    GOOGLE_ANALYTICS_ID = None
    HAVE_SYSLOG = True
    HIDE_REPO_CREDENTIALS = True
    HIDE_VERSION = False
    IGNORABLE_404_URLS = []
    INSTALLED_APPS = ['weblate.addons', 'weblate.auth', 'weblate.checks', 'weblate.configuration', 'weblate.formats', 'weblate.glossary', 'weblate.machinery', 'weblate.trans', 'weblate.lang', 'weblate_language_data', 'weblate.memory', 'weblate.screenshots', 'weblate.fonts', 'weblate.accounts', 'weblate.utils', 'weblate.vcs', 'weblate.wladmin', 'weblate', 'weblate.gitexport', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin.apps.SimpleAdminConfig', 'django.contrib.admindocs', 'django.contrib.sitemaps', 'django.contrib.humanize', 'social_django', 'crispy_forms', 'compressor', 'rest_framework', 'rest_framework.authtoken', 'django_filters']
    INTERNAL_IPS = []
    INVOICE_PATH = ''
    IP_BEHIND_REVERSE_PROXY = False
    IP_PROXY_HEADER = 'HTTP_X_FORWARDED_FOR'
    IP_PROXY_OFFSET = 0
    LANGUAGES = "(('ar', 'العربية'), ('az', 'Azərbaycan'), ('be', 'Беларуская'), ('[email protected]', 'Biełaruskaja'), ('bg', 'Български'), ('br', 'Brezhoneg'), ('ca', 'Català'), ('cs', 'Čeština'), ('da', 'Dansk'), ('de', 'Deutsch'), ('en', 'English'), ('el', 'Ελληνικά'), ('en-gb', 'English (United Kingdom)'), ('es', 'Español'), ('fi', 'Suomi'), ('fr', 'Français'), ('gl', 'Galego'), ('he', 'עברית'), ('hu', 'Magyar'), ('hr', 'Hrvatski'), ('id', 'Indonesia'), ('is', 'Íslenska'), ('it', 'Italiano'), ('ja', '日本語'), ('kab', 'Taqbaylit'), ('kk', 'Қазақ тілі'), ('ko', '한국어'), ('nb', 'Norsk bokmål'), ('nl', 'Nederlands'), ('pl', 'Polski'), ('pt', 'Português'), ('pt-br', 'Português brasileiro'), ('ru', 'Русский'), ('sk', 'Slovenčina'), ('sl', 'Slovenščina'), ('sq', 'Shqip'), ('sr', 'Српски'), ('sv', 'Svenska'), ('tr', 'Türkçe'), ('uk', 'Українська'), ('zh-hans', '简体字'), ('zh-hant', '正體字'))"
    LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'fa', 'ur']
    LANGUAGE_CODE = 'en-us'
    LANGUAGE_COOKIE_AGE = 12096000
    LANGUAGE_COOKIE_DOMAIN = None
    LANGUAGE_COOKIE_HTTPONLY = True
    LANGUAGE_COOKIE_NAME = 'django_language'
    LANGUAGE_COOKIE_PATH = '/'
    LANGUAGE_COOKIE_SAMESITE = None
    LANGUAGE_COOKIE_SECURE = True
    LEGAL_URL = None
    LICENSE_EXTRA = []
    LICENSE_FILTER = None
    LICENSE_REQUIRED = False
    LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH = True
    LOCALE_PATHS = []
    LOCALIZE_CDN_PATH = None
    LOCALIZE_CDN_URL = None
    LOGGING = {'version': 1, 'disable_existing_loggers': True, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'formatters': {'syslog': {'format': 'weblate[%(process)d]: %(levelname)s %(message)s'}, 'simple': {'format': '[%(asctime)s: %(levelname)s/%(process)s] %(message)s'}, 'logfile': {'format': '%(asctime)s %(levelname)s %(message)s'}, 'django.server': {'()': 'django.utils.log.ServerFormatter', 'format': '[%(server_time)s] %(message)s'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler', 'include_html': True}, 'console': {'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'simple'}, 'django.server': {'level': 'INFO', 'class': 'logging.StreamHandler', 'formatter': 'django.server'}, 'syslog': {'level': 'DEBUG', 'class': 'logging.handlers.SysLogHandler', 'formatter': 'syslog', 'address': '/dev/log', 'facility': 18}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'syslog'], 'level': 'ERROR', 'propagate': True}, 'django.server': {'handlers': ['django.server'], 'level': 'INFO', 'propagate': False}, 'weblate': {'handlers': ['syslog'], 'level': 'INFO'}, 'weblate.vcs': {'handlers': ['syslog'], 'level': 'INFO'}, 'social': {'handlers': ['syslog'], 'level': 'INFO'}, 'django_auth_ldap': {'handlers': ['syslog'], 'level': 'INFO'}, 'djangosaml2idp': {'handlers': ['syslog'], 'level': 'INFO'}}}
    LOGGING_CONFIG = 'logging.config.dictConfig'
    LOGIN_REDIRECT_URL = '/'
    LOGIN_REQUIRED_URLS = []
    LOGIN_REQUIRED_URLS_EXCEPTIONS = "('{URL_PREFIX}/accounts/(.*)$', '{URL_PREFIX}/admin/login/(.*)$', '{URL_PREFIX}/static/(.*)$', '{URL_PREFIX}/widgets/(.*)$', '{URL_PREFIX}/data/(.*)$', '{URL_PREFIX}/hooks/(.*)$', '{URL_PREFIX}/healthz/$', '{URL_PREFIX}/api/(.*)$', '{URL_PREFIX}/js/i18n/$', '{URL_PREFIX}/contact/$', '{URL_PREFIX}/legal/(.*)$')"
    LOGIN_URL = '/accounts/login/'
    LOGOUT_REDIRECT_URL = None
    LOGOUT_URL = '/accounts/logout/'
    MANAGERS = "(('XWiki.org Infra', '[email protected]'),)"
    MATOMO_SITE_ID = None
    MATOMO_URL = None
    MEDIA_ROOT = '/var/weblate/data/media'
    MEDIA_URL = '/media/'
    MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
    MIDDLEWARE = ['weblate.middleware.RedirectMiddleware', 'weblate.middleware.ProxyMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'weblate.accounts.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'social_django.middleware.SocialAuthExceptionMiddleware', 'weblate.accounts.middleware.RequireLoginMiddleware', 'weblate.api.middleware.ThrottlingMiddleware', 'weblate.middleware.SecurityMiddleware']
    MIGRATION_MODULES = {}
    MONTH_DAY_FORMAT = 'F j'
    MT_APERTIUM_APY = None
    MT_AWS_ACCESS_KEY_ID = '********************'
    MT_AWS_REGION = None
    MT_AWS_SECRET_ACCESS_KEY = '********************'
    MT_BAIDU_ID = None
    MT_BAIDU_SECRET = '********************'
    MT_DEEPL_API_VERSION = '********************'
    MT_DEEPL_KEY = '********************'
    MT_GOOGLE_CREDENTIALS = None
    MT_GOOGLE_KEY = '********************'
    MT_GOOGLE_LOCATION = 'global'
    MT_GOOGLE_PROJECT = None
    MT_MICROSOFT_BASE_URL = 'api.cognitive.microsofttranslator.com'
    MT_MICROSOFT_COGNITIVE_KEY = '********************'
    MT_MICROSOFT_ENDPOINT_URL = 'api.cognitive.microsoft.com'
    MT_MICROSOFT_REGION = None
    MT_MODERNMT_KEY = '********************'
    MT_MODERNMT_URL = 'https://api.modernmt.com/'
    MT_MYMEMORY_EMAIL = None
    MT_MYMEMORY_KEY = '********************'
    MT_MYMEMORY_USER = None
    MT_NETEASE_KEY = '********************'
    MT_NETEASE_SECRET = '********************'
    MT_SAP_BASE_URL = None
    MT_SAP_PASSWORD = '********************'
    MT_SAP_SANDBOX_APIKEY = '********************'
    MT_SAP_USERNAME = None
    MT_SAP_USE_MT = True
    MT_SERVICES = "('weblate.machinery.weblatetm.WeblateTranslation', 'weblate.memory.machine.WeblateMemory')"
    MT_TMSERVER = None
    MT_YANDEX_KEY = '********************'
    MT_YOUDAO_ID = None
    MT_YOUDAO_SECRET = '********************'
    NEARBY_MESSAGES = 15
    NUMBER_GROUPING = 0
    OFFER_HOSTING = False
    PAGURE_CREDENTIALS = {}
    PAGURE_TOKEN = '********************'
    PAGURE_USERNAME = None
    PASSWORD_HASHERS = '********************'
    PASSWORD_RESET_TIMEOUT = '********************'
    PASSWORD_RESET_TIMEOUT_DAYS = '********************'
    PREPEND_WWW = False
    RATELIMIT_ATTEMPTS = 5
    RATELIMIT_COMMENT_ATTEMPTS = 30
    RATELIMIT_COMMENT_WINDOW = 60
    RATELIMIT_GLOSSARY_ATTEMPTS = 30
    RATELIMIT_GLOSSARY_WINDOW = 60
    RATELIMIT_LOCKOUT = 600
    RATELIMIT_SEARCH_ATTEMPTS = 30
    RATELIMIT_SEARCH_LOCKOUT = 60
    RATELIMIT_SEARCH_WINDOW = 60
    RATELIMIT_TRANSLATE_ATTEMPTS = 30
    RATELIMIT_TRANSLATE_WINDOW = 60
    RATELIMIT_WINDOW = 300
    REGISTRATION_ALLOW_BACKENDS = []
    REGISTRATION_CAPTCHA = True
    REGISTRATION_EMAIL_MATCH = '.*'
    REGISTRATION_OPEN = True
    REPOSITORY_ALERT_THRESHOLD = 25
    REQUIRE_LOGIN = False
    REST_FRAMEWORK = {'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticatedOrReadOnly'], 'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.TokenAuthentication', 'weblate.api.authentication.BearerAuthentication', 'rest_framework.authentication.SessionAuthentication'), 'DEFAULT_THROTTLE_CLASSES': ('weblate.api.throttling.UserRateThrottle', 'weblate.api.throttling.AnonRateThrottle'), 'DEFAULT_THROTTLE_RATES': {'anon': '100/day', 'user': '5000/hour'}, 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 20, 'VIEW_DESCRIPTION_FUNCTION': 'weblate.api.views.get_view_description', 'UNAUTHENTICATED_USER': 'weblate.auth.models.get_anonymous'}
    ROOT_URLCONF = 'weblate.urls'
    SECRET_KEY = '********************'
    SECURE_BROWSER_XSS_FILTER = True
    SECURE_CONTENT_TYPE_NOSNIFF = True
    SECURE_HSTS_INCLUDE_SUBDOMAINS = True
    SECURE_HSTS_PRELOAD = True
    SECURE_HSTS_SECONDS = 31536000
    SECURE_PROXY_SSL_HEADER = None
    SECURE_REDIRECT_EXEMPT = "('healthz/$',)"
    SECURE_REFERRER_POLICY = 'same-origin'
    SECURE_SSL_HOST = None
    SECURE_SSL_REDIRECT = True
    SENTRY_DSN = None
    SENTRY_ENVIRONMENT = 'devel'
    SENTRY_EXTRA_ARGS = {}
    SENTRY_ORGANIZATION = 'weblate'
    SENTRY_PROJECTS = ['weblate']
    SENTRY_SECURITY = None
    SENTRY_TOKEN = '********************'
    SERVER_EMAIL = '[email protected]'
    SESSION_CACHE_ALIAS = 'default'
    SESSION_COOKIE_AGE = 1000
    SESSION_COOKIE_AGE_AUTHENTICATED = 1209600
    SESSION_COOKIE_DOMAIN = None
    SESSION_COOKIE_HTTPONLY = True
    SESSION_COOKIE_NAME = 'sessionid'
    SESSION_COOKIE_PATH = '/'
    SESSION_COOKIE_SAMESITE = 'Lax'
    SESSION_COOKIE_SECURE = True
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False
    SESSION_FILE_PATH = None
    SESSION_SAVE_EVERY_REQUEST = False
    SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
    SETTINGS_MODULE = 'weblate.settings'
    SHORT_DATETIME_FORMAT = 'm/d/Y P'
    SHORT_DATE_FORMAT = 'm/d/Y'
    SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
    SILENCED_SYSTEM_CHECKS = ['admin.E408']
    SIMILAR_MESSAGES = 5
    SIMPLIFY_LANGUAGES = True
    SINGLE_PROJECT = False
    SITE_DOMAIN = 'l10n.xwiki.org'
    SITE_ID = 1
    SITE_TITLE = 'Weblate XWiki.org'
    SOCIAL_AUTH_AUTH0_IMAGE = 'auth0.svg'
    SOCIAL_AUTH_AUTH0_TITLE = 'Auth0'
    SOCIAL_AUTH_BITBUCKET_KEY = '********************'
    SOCIAL_AUTH_BITBUCKET_SECRET = '********************'
    SOCIAL_AUTH_BITBUCKET_VERIFIED_EMAILS_ONLY = True
    SOCIAL_AUTH_DISCONNECT_PIPELINE = "('social_core.pipeline.disconnect.allowed_to_disconnect', 'social_core.pipeline.disconnect.get_entries', 'social_core.pipeline.disconnect.revoke_tokens', 'weblate.accounts.pipeline.cycle_session', 'weblate.accounts.pipeline.adjust_primary_mail', 'weblate.accounts.pipeline.notify_disconnect', 'social_core.pipeline.disconnect.disconnect', 'weblate.accounts.pipeline.cleanup_next')"
    SOCIAL_AUTH_EMAIL_FORM_URL = '/accounts/email/'
    SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = 'weblate.accounts.pipeline.send_validation'
    SOCIAL_AUTH_EMAIL_VALIDATION_URL = '/accounts/email-sent/'
    SOCIAL_AUTH_FACEBOOK_KEY = '********************'
    SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {'fields': 'id,name,email'}
    SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'public_profile']
    SOCIAL_AUTH_FACEBOOK_SECRET = '********************'
    SOCIAL_AUTH_GITHUB_KEY = '********************'
    SOCIAL_AUTH_GITHUB_SCOPE = ['user:email']
    SOCIAL_AUTH_GITHUB_SECRET = '********************'
    SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '********************'
    SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '********************'
    SOCIAL_AUTH_LOGIN_ERROR_URL = '/accounts/login/'
    SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = '/accounts/profile/#account'
    SOCIAL_AUTH_PIPELINE = "('social_core.pipeline.social_auth.social_details', 'social_core.pipeline.social_auth.social_uid', 'social_core.pipeline.social_auth.auth_allowed', 'social_core.pipeline.social_auth.social_user', 'weblate.accounts.pipeline.store_params', 'weblate.accounts.pipeline.verify_open', 'social_core.pipeline.user.get_username', 'weblate.accounts.pipeline.require_email', 'social_core.pipeline.mail.mail_validation', 'weblate.accounts.pipeline.revoke_mail_code', 'weblate.accounts.pipeline.ensure_valid', 'weblate.accounts.pipeline.remove_account', 'social_core.pipeline.social_auth.associate_by_email', 'weblate.accounts.pipeline.reauthenticate', 'weblate.accounts.pipeline.verify_username', 'social_core.pipeline.user.create_user', 'social_core.pipeline.social_auth.associate_user', 'social_core.pipeline.social_auth.load_extra_data', 'weblate.accounts.pipeline.cleanup_next', 'weblate.accounts.pipeline.user_full_name', 'weblate.accounts.pipeline.store_email', 'weblate.accounts.pipeline.notify_connect', 'weblate.accounts.pipeline.password_reset')"
    SOCIAL_AUTH_PROTECTED_USER_FIELDS = "('email',)"
    SOCIAL_AUTH_RAISE_EXCEPTIONS = True
    SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
    SOCIAL_AUTH_SAML_IMAGE = 'saml.svg'
    SOCIAL_AUTH_SAML_TITLE = 'SAML'
    SOCIAL_AUTH_SLUGIFY_FUNCTION = 'weblate.accounts.pipeline.slugify_username'
    SOCIAL_AUTH_SLUGIFY_USERNAMES = True
    SOCIAL_AUTH_STRATEGY = 'weblate.accounts.strategy.WeblateStrategy'
    SOCIAL_AUTH_XWIKI_KEY = '********************'
    SPECIAL_CHARS = "('\\t', '\\n', '\\xa0', '…')"
    STATICFILES_DIRS = '()'
    STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
    STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
    STATIC_ROOT = '/var/weblate/data/static'
    STATIC_URL = '/static/'
    STATUS_URL = None
    SUGGESTION_CLEANUP_DAYS = None
    SUPPORT_API_URL = '********************'
    TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'OPTIONS': {'context_processors': ['django.contrib.auth.context_processors.auth', 'django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.request', 'django.template.context_processors.csrf', 'django.contrib.messages.context_processors.messages', 'weblate.trans.context_processors.weblate_context'], 'loaders': [('django.template.loaders.cached.Loader', ['django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader'])]}}]
    TEST_NON_SERIALIZED_APPS = []
    TEST_RUNNER = 'django.test.runner.DiscoverRunner'
    THOUSAND_SEPARATOR = ','
    TIME_FORMAT = 'P'
    TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
    TIME_ZONE = 'UTC'
    UPDATE_LANGUAGES = True
    URL_PREFIX = ''
    USE_I18N = True
    USE_L10N = True
    USE_THOUSAND_SEPARATOR = False
    USE_TZ = True
    USE_X_FORWARDED_HOST = False
    USE_X_FORWARDED_PORT = False
    VAT_RATE = 1.21
    VCS_BACKENDS = "('weblate.vcs.git.GitRepository', 'weblate.vcs.git.GitWithGerritRepository', 'weblate.vcs.git.SubversionRepository', 'weblate.vcs.git.GithubRepository', 'weblate.vcs.git.GitLabRepository', 'weblate.vcs.git.PagureRepository', 'weblate.vcs.git.LocalRepository', 'weblate.vcs.git.GitForcePushRepository', 'weblate.vcs.mercurial.HgRepository')"
    VCS_CLONE_DEPTH = 1
    WEBLATE_ADDONS = "('weblate.addons.gettext.GenerateMoAddon', 'weblate.addons.gettext.UpdateLinguasAddon', 'weblate.addons.gettext.UpdateConfigureAddon', 'weblate.addons.gettext.MsgmergeAddon', 'weblate.addons.gettext.GettextCustomizeAddon', 'weblate.addons.gettext.GettextAuthorComments', 'weblate.addons.cleanup.CleanupAddon', 'weblate.addons.cleanup.RemoveBlankAddon', 'weblate.addons.consistency.LangaugeConsistencyAddon', 'weblate.addons.discovery.DiscoveryAddon', 'weblate.addons.autotranslate.AutoTranslateAddon', 'weblate.addons.flags.SourceEditAddon', 'weblate.addons.flags.TargetEditAddon', 'weblate.addons.flags.SameEditAddon', 'weblate.addons.flags.BulkEditAddon', 'weblate.addons.generate.GenerateFileAddon', 'weblate.addons.json.JSONCustomizeAddon', 'weblate.addons.properties.PropertiesSortAddon', 'weblate.addons.git.GitSquashAddon', 'weblate.addons.removal.RemoveComments', 'weblate.addons.removal.RemoveSuggestions', 'weblate.addons.resx.ResxUpdateAddon', 'weblate.addons.yaml.YAMLCustomizeAddon', 'weblate.addons.cdn.CDNJSAddon')"
    WEBLATE_EXPORTERS = "('weblate.formats.exporters.PoExporter', 'weblate.formats.exporters.PoXliffExporter', 'weblate.formats.exporters.XliffExporter', 'weblate.formats.exporters.TBXExporter', 'weblate.formats.exporters.TMXExporter', 'weblate.formats.exporters.MoExporter', 'weblate.formats.exporters.CSVExporter', 'weblate.formats.exporters.XlsxExporter', 'weblate.formats.exporters.JSONExporter', 'weblate.formats.exporters.AndroidResourceExporter', 'weblate.formats.exporters.StringsExporter')"
    WEBLATE_FORMATS = "('weblate.formats.ttkit.PoFormat', 'weblate.formats.ttkit.PoMonoFormat', 'weblate.formats.ttkit.TSFormat', 'weblate.formats.ttkit.XliffFormat', 'weblate.formats.ttkit.PoXliffFormat', 'weblate.formats.ttkit.StringsFormat', 'weblate.formats.ttkit.StringsUtf8Format', 'weblate.formats.ttkit.PropertiesUtf8Format', 'weblate.formats.ttkit.PropertiesUtf16Format', 'weblate.formats.ttkit.PropertiesFormat', 'weblate.formats.ttkit.JoomlaFormat', 'weblate.formats.ttkit.GWTFormat', 'weblate.formats.ttkit.PhpFormat', 'weblate.formats.ttkit.LaravelPhpFormat', 'weblate.formats.ttkit.RESXFormat', 'weblate.formats.ttkit.AndroidFormat', 'weblate.formats.ttkit.JSONFormat', 'weblate.formats.ttkit.JSONNestedFormat', 'weblate.formats.ttkit.WebExtensionJSONFormat', 'weblate.formats.ttkit.I18NextFormat', 'weblate.formats.ttkit.GoI18JSONFormat', 'weblate.formats.ttkit.ARBFormat', 'weblate.formats.ttkit.CSVFormat', 'weblate.formats.ttkit.CSVSimpleFormat', 'weblate.formats.ttkit.CSVSimpleFormatISO', 'weblate.formats.ttkit.YAMLFormat', 'weblate.formats.ttkit.RubyYAMLFormat', 'weblate.formats.ttkit.SubRipFormat', 'weblate.formats.ttkit.MicroDVDFormat', 'weblate.formats.ttkit.AdvSubStationAlphaFormat', 'weblate.formats.ttkit.SubStationAlphaFormat', 'weblate.formats.ttkit.DTDFormat', 'weblate.formats.ttkit.FlatXMLFormat', 'weblate.formats.ttkit.INIFormat', 'weblate.formats.ttkit.InnoSetupINIFormat', 'weblate.formats.external.XlsxFormat', 'weblate.formats.txt.AppStoreFormat', 'weblate.formats.convert.HTMLFormat', 'weblate.formats.convert.IDMLFormat', 'weblate.formats.convert.OpenDocumentFormat', 'weblate.formats.convert.WindowsRCFormat', 'weblate.formats.ttkit.XWikiPropertiesFormat', 'weblate.formats.ttkit.XWikiPagePropertiesFormat', 'weblate.formats.ttkit.XWikiFullPageFormat')"
    WEBLATE_GPG_ALGO = 'default'
    WEBLATE_GPG_IDENTITY = None
    WSGI_APPLICATION = None
    X_FRAME_OPTIONS = 'DENY'
    YEAR_MONTH_FORMAT = 'F Y'
    _TEMPLATE_LOADERS = [('django.template.loaders.cached.Loader', ['django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader'])]
    

    Server configuration and status

    Weblate installation: PyPI

     * Weblate: 4.4.2
     * Django: 3.1.5
     * siphashc: 1.3
     * Whoosh: 2.7.4
     * translate-toolkit: 3.3.0
     * lxml: 4.5.2
     * Pillow: 7.1.2
     * bleach: 3.1.5
     * python-dateutil: 2.8.1
     * social-auth-core: 4.0.3
     * social-auth-app-django: 4.0.0
     * django-crispy-forms: 1.9.2
     * oauthlib: 3.1.0
     * django-compressor: 2.4
     * djangorestframework: 3.11.1
     * django-filter: 2.4.0
     * django-appconf: 1.0.4
     * user-agents: 2.1
     * filelock: 3.0.12
     * setuptools: 50.3.0
     * jellyfish: 0.8.2
     * openpyxl: 3.0.5
     * celery: 4.4.7
     * kombu: 4.6.11
     * translation-finder: 2.7
     * weblate-language-data: 2020.13
     * html2text: 2020.1.16
     * pycairo: 1.19.1
     * pygobject: 3.38.0
     * diff-match-patch: 20200713
     * requests: 2.24.0
     * django-redis: 4.12.1
     * hiredis: 1.0.1
     * sentry_sdk: 0.15.1
     * Cython: 0.29.21
     * misaka: 2.1.1
     * GitPython: 3.1.8
     * borgbackup: 1.1.13
     * pyparsing: 2.4.7
     * Python: 3.7.3
     * Git: 2.20.1
     * psycopg2-binary: 2.8.6
     * chardet: 3.0.4
     * ruamel.yaml: 0.16.12
     * Redis server: 5.0.3
     * PostgreSQL server: 11.11
     * Database backends: django.db.backends.postgresql
     * Cache backends: default:RedisCache, avatar:FileBasedCache
     * Email setup: django.core.mail.backends.smtp.EmailBackend: localhost
     * OS encoding: filesystem=utf-8, default=utf-8
     * Celery: redis://localhost:6379, redis://localhost:6379, regular
     * Platform: Linux 4.19.0-16-amd64 (x86_64)
    

    Additional context

    [email protected]:~$ free -m
                  total        used        free      shared  buff/cache   available
    Mem:           5951        5688         103           5         159          55
    Swap:          6047        4418        1629
    (weblate-env) [email protected]:~$ lscpu
    Architecture:        x86_64
    CPU op-mode(s):      32-bit, 64-bit
    Byte Order:          Little Endian
    Address sizes:       40 bits physical, 48 bits virtual
    CPU(s):              4
    On-line CPU(s) list: 0-3
    Thread(s) per core:  1
    Core(s) per socket:  1
    Socket(s):           4
    NUMA node(s):        1
    Vendor ID:           AuthenticAMD
    CPU family:          21
    Model:               16
    Model name:          AMD Opteron(tm) Processor 6386 SE
    Stepping:            0
    CPU MHz:             2800.000
    
    enhancement 
    opened by surli 37
  • Importing large translation files

    Importing large translation files

    Describe the bug I have a large collection of translations, currently 22 files (each file representing one language) in .PO format. Each language has around 9000 - 64000 keys, where only one language (set as master language) has all translated keys. When I start the import, it will fail with 504 Gateway Time-out error page after a long time (more then half an hour).

    To Reproduce Steps to reproduce the behavior:

    1. Create project and component
    2. Set source code repository & repository push url to accessible git repo
    3. Set File mask to "locale/*.po"
    4. Set Monolingual base language file to "locale/en.po"
    5. Set Base file for new translations to "locale/en.po"
    6. Leave all other setting as default.
    7. Wait a long time for error to happen :)

    Expected behavior A clear and concise description of what you expected to happen.

    Screenshots If applicable, add screenshots to help explain your problem.

    Server configuration and status

    * Weblate 3.2.2
     * Python 3.5.3
     * Django 2.1.2
     * Celery 4.2.1
     * celery-batches 0.2
     * six 1.10.0
     * social-auth-core 1.7.0
     * social-auth-app-django 2.1.0
     * django-appconf 1.0.2
     * translate-toolkit 2.3.1
     * Whoosh 2.7.4
     * defusedxml 0.5.0
     * Git 2.11.0
     * Pillow 4.0.0
     * python-dateutil 2.5.3
     * lxml 3.7.1
     * django-crispy-forms 1.7.2
     * django_compressor 2.2
     * djangorestframework 3.9.0
     * user-agents 1.1.0
     * jellyfish 0.6.1
     * pytz 2018.5
     * pyuca 1.2
     * PyYAML 3.12
     * tesserocr 2.3.1
     * Mercurial 4.0
     * git-svn 2.11.0
     * Database backends: django.db.backends.postgresql
     * Cache backends: avatar:FileBasedCache, default:RedisCache
     * Platform: Linux 4.15.0-36-generic (x86_64)
    
    SystemCheckError: System check identified some issues:
    
    CRITICALS:
    ?: (weblate.E003) Can not send email ([Errno -2] Name or service not known), please check EMAIL_* settings.
    	HINT: https://docs.weblate.org/en/weblate-3.2.2/admin/install.html#out-mail
    
    WARNINGS:
    ?: (security.W004) You have not set a value for the SECURE_HSTS_SECONDS setting. If your entire site is served only over SSL, you may want to consider setting a value and enabling HTTP Strict Transport Security. Be sure to read the documentation first; enabling HSTS carelessly can cause serious, irreversible problems.
    ?: (security.W008) Your SECURE_SSL_REDIRECT setting is not set to True. Unless your site should be available over both SSL and non-SSL connections, you may want to either set this setting True or configure a load balancer or reverse-proxy server to redirect all connections to HTTPS.
    ?: (security.W012) SESSION_COOKIE_SECURE is not set to True. Using a secure-only session cookie makes it more difficult for network traffic sniffers to hijack user sessions.
    ?: (security.W018) You should not have DEBUG set to True in deployment.
    
    System check identified 5 issues (0 silenced).
    

    Additional context Running from docker container.

    enhancement 
    opened by alesrosina 35
  • ZIP export for projects, component lists and language selection in project. [WIP]

    ZIP export for projects, component lists and language selection in project. [WIP]

    https://github.com/WeblateOrg/weblate/pull/2165#issuecomment-415305958:

    Finalizing:

    • [x] I don't see reason for weblate/templates/translation-download-link.html as all it does is calls function, it can be done directly
    • [x] The download URL no longer works for a translation
    • [x] I think that there is no need to construct the zip files on disk, it can be directly written to the HttpRequest
    • [x] messed up html markup in weblate/templates/language-project.html
    • [x] The link_text function doesn't localize "Original" string
    • [x] Another level of templates used in translation_download_link just to get download_translation_url which can be used directly [1]
    • [x] There is no reason to use templates in download_translation_url, when all you need to do there is reverse URL lookup [1]
    • [x] link_text method in downloads tag definition file can be done without the usage of Template
    • [x] I don't think that introduced Project.component_format_names is a good idea, it will really look horrible on projects with more components (eg. https://hosted.weblate.org/projects/debian-handbook/) Agreed to not show format name information at all when there could more than one.
    • [ ] Extract zipping of folder to class zipper.py
    • [ ] Extract collecting files for selected subject (component, project, etc.) to TranslationFileCollector
    • [ ] Tests - the new feature should be covered by tests and those should pass
      • [x] templatetags/downloads.py
      • [ ] zipper.py
      • [ ] TranslationFileCollector
    • [x] codacy issues
    • [x] changed unrelated files (.gitignore, docker-compose.dev.yml, requirements.txt, rundev.sh, weblate/accounts/notifications.py)
      • .gitignore [x]
      • docker-compose.dev.yml [ ]
      • requirements.txt [ ]
      • rundev.sh [ ]

    General PR checklist:

    • [ ] Every commit has message which describes it
    • [ ] Every commit is needed on it's own, if you have just minor fixes to previous commits, you can squash them
    • [ ] Any code changes come with testcase
    • [ ] Any new functionality is covered by user documentation

    ~

    1. By doing the reverse URL lookup without the template-hack, both issues are resolved. Before submitting pull request, please ensure that:
    opened by ghost 33
  • Add rebase and squash merge style

    Add rebase and squash merge style

    Currently there are merge and rebase merge styles in Weblate. It might be useful to have additional one which would rebase commit and squash them. It would squash commits from same author and same file, using commit message from last one. This would be useful for projects who want to minimize amount of translation commits.

    It might be either supported natively in Weblate VCS layer or as an addon. Having it as addon seems more reasonable to me as this is probably going to be supported only for Git.

    enhancement 
    opened by nijel 32
  • does linking improve performance and what affects does a change have on the component

    does linking improve performance and what affects does a change have on the component

    Describe the issue

    syncing with remote repo seems slow. i have a project with 70 components, all those components / files are actually in the same folder, belong logically together. during setup i did not use the link feature but defined all the components separately.

    i had to solve a merge issue a way back and there i saw that due to that separate definition i end up with lot of copies of this one folder. so my question: if i define only one component and link all the others to that, will that speed up ?

    secondly if i do that, will that break the history, comments etc of the existing components, their translations etc. ?

    thanks a lot

    I already tried

    i did read the docu about linking

    To Reproduce the issue n.a.

    question 
    opened by PawelSpoon 1
  • The display of a context with line breaks is incorrect.

    The display of a context with line breaks is incorrect.

    Describe the issue The display of a context with line breaks is incorrect.

    To Reproduce the issue

    Steps to reproduce the behavior:

    1. Open TDF translation site e.g. https://translations.documentfoundation.org/translate/libo_ui-master/officecfgregistrydataorgopenofficeofficeui/ja/?checksum=6d37427798b988eb

    Expected behavior context is displayed

    Screenshots Screenshot a context with line breaks

    Additional context TDF(libreoffice)/Weblate 4.8.1

    I haven't found any context with line breaks on hosted.weblate.org(Weblate 4.9-dev).

    opened by baffclan 0
  • Support i18next v4

    Support i18next v4

    i18next has officially upgraded to v4, with some differences in how plurals are done. I found this in lemmy, and have to downgrade my version of i18next until plurals are upgraded to use the new format in weblate.

    https://www.i18next.com/misc/json-format

    opened by dessalines 0
  • Gettext customization option to not wrap output doesn't work

    Gettext customization option to not wrap output doesn't work

    Describe the issue

    Weblate really likes to disagree with the command line gettext tools regarding how to wrap text. I've finally had enough and I changed the option in the Weblate gettext output customization plugin to be "just wrap on newline" as that seems to be according to the documentation https://docs.weblate.org/en/weblate-4.8.1/admin/addons.html#addon-weblate-gettext-customize what the gettext command line tools do when wrapping is disabled in them. However, that seems to have made things worse as I just got a PR from Weblate that seems to have the default wrapping option enabled: https://github.com/Revolutionary-Games/Thrive/pull/2662/files (also I just noticed that for some reason Weblate wants to resurrect outdated comments in that PR, I'll open a separate issue about that, which I've seen before but as I recently reset the repository on Weblate, I hoped it would be gone...)

    I already tried

    Describe the steps you tried to solve the problem yourself.

    • [x] I've read and searched the docs and did not find the answer there. If you didn’t try already, try to search there what you wrote above. I linked the docs above
    • [x] found this issue where basically the column 77 wrapping is different between weblate and the gettext tools (this is the underlying problem I have): https://github.com/WeblateOrg/weblate/issues/6350 and it was said it is not fixable, so I decided to use this no-wrapping mode

    To Reproduce the issue This is what I did after trying to use the column 77 wrap option (and updating Weblate a month or so ago) for many months, and consistently getting PRs with changes to how text is wrapped as we very regularly run the gettext tools to add new text strings.

    So this is how I tried to move to the new mode:

    • committed and sent latest updates from weblate
    • locked editing on weblate
    • merged the PR from weblate
    • changed the plugin option on weblate
    • and unlocked editing after weblate updated from the main repository
    • and now after a few days weblate has made a PR of the pending changes and I see what mess the PR is.

    I did not try to set the plugin to no wrap at all mode, as that wouldn't also match what gettext does, right?

    Expected behavior

    I expect that weblate when configured to not wrap things, wouldn't wrap things.

    Screenshots

    Kuvakaappaus - 2021-10-17 21-58-15

    Server configuration and status

    Weblate installation: PyPI

     * Weblate: 4.8.1
     * Django: 3.2.6
     * siphashc: 2.1
     * translate-toolkit: 3.3.6
     * lxml: 4.6.3
     * Pillow: 8.1.2
     * bleach: 3.3.0
     * python-dateutil: 2.8.1
     * social-auth-core: 4.1.0
     * social-auth-app-django: 5.0.0
     * django-crispy-forms: 1.11.2
     * oauthlib: 3.1.0
     * django-compressor: 2.4
     * djangorestframework: 3.12.4
     * django-filter: 2.4.0
     * django-appconf: 1.0.4
     * user-agents: 2.2.0
     * filelock: 3.0.12
     * setuptools: 49.1.3
     * jellyfish: 0.8.2
     * openpyxl: 3.0.7
     * celery: 5.0.5
     * kombu: 5.0.2
     * translation-finder: 2.9
     * weblate-language-data: 2021.5
     * html2text: 2020.1.16
     * pycairo: 1.20.0
     * pygobject: 3.40.1
     * diff-match-patch: 20200713
     * requests: 2.25.1
     * django-redis: 4.12.1
     * hiredis: 2.0.0
     * sentry_sdk: 1.0.0
     * Cython: 0.29.22
     * misaka: 2.1.1
     * GitPython: 3.1.14
     * borgbackup: 1.1.16
     * pyparsing: 2.4.7
     * pyahocorasick: 1.4.2
     * python-redis-lock: 3.7.0
     * Python: 3.9.2
     * Git: 2.31.1
     * psycopg2-binary: 2.8.6
     * chardet: 4.0.0
     * ruamel.yaml: 0.17.2
     * boto3: 1.17.44
     * zeep: 4.0.0
     * aeidon: 1.9
     * Redis server: 6.2.6
     * PostgreSQL server: 13.4
     * Database backends: django.db.backends.postgresql
     * Cache backends: default:RedisCache, avatar:FileBasedCache
     * Email setup: django.core.mail.backends.smtp.EmailBackend: mail.revolutionarygamesstudio.com
     * OS encoding: filesystem=utf-8, default=utf-8
     * Celery: redis://localhost:6379, redis://localhost:6379, regular
     * Platform: Linux 5.14.9-200.fc34.x86_64 (x86_64)
    
    

    Weblate deploy checks

    System check identified some issues:
    
    WARNINGS:
    ?: (weblate.W025.fluent) Failure in loading handler for fluent file format: No module named 'translate.storage.fluent'
            HINT: https://docs.weblate.org/en/weblate-4.8.1/admin/install.html#optional-deps
    ?: (weblate.W025.ini) Failure in loading handler for ini file format: Missing iniparse library.
            HINT: https://docs.weblate.org/en/weblate-4.8.1/admin/install.html#optional-deps
    ?: (weblate.W025.islu) Failure in loading handler for islu file format: Missing iniparse library.
            HINT: https://docs.weblate.org/en/weblate-4.8.1/admin/install.html#optional-deps
    ?: (weblate.W025.laravel) Failure in loading handler for laravel file format: No module named 'phply'
            HINT: https://docs.weblate.org/en/weblate-4.8.1/admin/install.html#optional-deps
    ?: (weblate.W025.php) Failure in loading handler for php file format: No module named 'phply'
            HINT: https://docs.weblate.org/en/weblate-4.8.1/admin/install.html#optional-deps
    ?: (weblate.W025.stringsdict) Failure in loading handler for stringsdict file format: No module named 'translate.storage.stringsdict'
            HINT: https://docs.weblate.org/en/weblate-4.8.1/admin/install.html#optional-deps
    ?: (weblate.W033.Gerrit) Failure in loading VCS module for Gerrit: git: 'review' is not a git command. See 'git --help'.
     (1)
            HINT: https://docs.weblate.org/en/weblate-4.8.1/vcs.html
    ?: (weblate.W033.Mercurial) Failure in loading VCS module for Mercurial: [Errno 2] No such file or directory: 'hg'
            HINT: https://docs.weblate.org/en/weblate-4.8.1/vcs.html
    ?: (weblate.W033.Subversion) Failure in loading VCS module for Subversion: git: 'svn' is not a git command. See 'git --help'.
    
    The most similar commands are
            fsck
            mv
            show
     (1)
            HINT: https://docs.weblate.org/en/weblate-4.8.1/vcs.html
    
    INFOS:
    ?: (weblate.I021) Error collection is not set up, it is highly recommended for production use
            HINT: https://docs.weblate.org/en/weblate-4.8.1/admin/install.html#collecting-errors
    
    System check identified 10 issues (1 silenced).
    
    

    Additional context

    opened by hhyyrylainen 0
  • Bug: XLIFF changes source after changed translation

    Bug: XLIFF changes source after changed translation

    Describe the issue

    A short while ago I started to get translated <source> tags in my project, which is definitely a bug, as this tag is the main identifier to load the translation when using XLIFF. It happened multiple times by now, so I assume this is more than just "an accident".

    See this screenshot: Bildschirmfoto 2021-10-17 um 19 27 45

    And this PR: https://github.com/kevinpapst/kimai2/pull/2850/files

    The original source ID error.too_many_entries should NOT be touched under any circumstance.

    This change seems to be copied into all languages, which have a translation for the string, eg: Bildschirmfoto 2021-10-17 um 19 30 32

    The first commit that introduced the problem: https://github.com/kevinpapst/kimai2/pull/2850/commits/1f9f02e7303cabac440ff09fcf06e8fa9ff00f8f

    I think it was introduced by this Weblate change: https://hosted.weblate.org/translate/kimai/messages/en/?checksum=9d55afaba34c4891

    Bildschirmfoto 2021-10-17 um 19 36 01

    I already tried

    Waiting for a fix, but it still exists, so I thought I'd share it.

    I recognized it the first time a couple of weeks, so I assume it happened the first time between 4-8 weeks ago. But I cannot exactly pin point it, as I do not check the webpage PRs after every push.

    To Reproduce the issue

    I don't know how to reproduce it, sorry. Probably it is enough to change the translation in the main language of the project?

    Expected behavior

    Do NOT touch the <source> in XLIFF projects ever.

    opened by kevinpapst 0
  • Placeholder copied into earlier string in Zen

    Placeholder copied into earlier string in Zen

    Clicking Ctrl+1 copies the first placeholder in a string. Clicking Tab moves to subsequent strings If clicking Ctrl+1 in one of those, its first placeholder should be copied

    Instead the first placeholder of the original string is copied into it at the end.

    Tested on Hosted Weblate 4.9-dev. Will try it on others. Would be nice if someone could confirm :)

    opened by comradekingu 0
  • Borg backup SSH host key verification failed, but key is trusted

    Borg backup SSH host key verification failed, but key is trusted

    Describe the issue

    Backups (/manage/backup/) are failing with the following error:

    Remote: No ECDSA host key is known for mydomain and you have requested strict checking.
    Remote: Host key verification failed.
    Connection closed by remote host. Is borg working on the server?
    

    I've tried [email protected]:myport:/data (should be the correct format) and [email protected]:myport/data. The borg CLI would use ssh://[email protected]:myport/data.

    The SSH Keys page (/manage/ssh/) shows the correct keys (ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519) for this host ([mydomain]:myport).

    To Reproduce the issue

    Steps to reproduce the behavior:

    1. Add new backup remote
    2. Add key for backup remote in 'SSH Keys'
    3. Start backup
    4. See error

    Server configuration and status

    Weblate installation: weblate.org service / Docker / PyPI / other

     * Weblate: 4.8.1
     * Django: 3.2.7
     * siphashc: 2.1
     * translate-toolkit: 3.4.1
     * lxml: 4.6.3
     * Pillow: 8.3.2
     * bleach: 4.1.0
     * python-dateutil: 2.8.2
     * social-auth-core: 4.1.0
     * social-auth-app-django: 5.0.0
     * django-crispy-forms: 1.12.0
     * oauthlib: 3.1.1
     * django-compressor: 2.4.1
     * djangorestframework: 3.12.4
     * django-filter: 2.4.0
     * django-appconf: 1.0.5
     * user-agents: 2.2.0
     * filelock: 3.0.12
     * setuptools: 58.2.0
     * jellyfish: 0.8.2
     * openpyxl: 3.0.9
     * celery: 5.1.2
     * kombu: 5.1.0
     * translation-finder: 2.10
     * weblate-language-data: 2021.5
     * html2text: 2020.1.16
     * pycairo: 1.16.2
     * pygobject: 3.38.0
     * diff-match-patch: 20200713
     * requests: 2.26.0
     * django-redis: 5.0.0
     * hiredis: 2.0.0
     * sentry_sdk: 1.3.1
     * Cython: 0.29.24
     * misaka: 2.1.1
     * GitPython: 3.1.24
     * borgbackup: 1.1.17
     * pyparsing: 2.4.7
     * pyahocorasick: 1.4.2
     * python-redis-lock: 3.7.0
     * Python: 3.9.2
     * Git: 2.30.2
     * psycopg2: 2.9.1
     * psycopg2-binary: 2.9.1
     * phply: 1.2.5
     * chardet: 4.0.0
     * ruamel.yaml: 0.17.16
     * tesserocr: 2.5.2
     * akismet: 1.1
     * boto3: 1.18.54
     * zeep: 4.1.0
     * aeidon: 1.9
     * iniparse: 0.5
     * mysqlclient: 2.0.3
     * Mercurial: 5.9.1
     * git-svn: 2.30.2
     * git-review: 2.1.0
     * Redis server: 6.2.6
     * PostgreSQL server: 13.4
     * Database backends: django.db.backends.postgresql
     * Cache backends: default:RedisCache, avatar:FileBasedCache
     * Email setup: django.core.mail.backends.smtp.EmailBackend: [removed]
     * OS encoding: filesystem=utf-8, default=utf-8
     * Celery: redis://cache:6379/1, redis://cache:6379/1, regular
     * Platform: Linux 5.4.0-86-generic (x86_64)
    

    Weblate deploy checks

    Only a warning about backups not being set up, obviously.

    question 
    opened by Derkades 3
  • Detect changed source string in bilingual XLIFF

    Detect changed source string in bilingual XLIFF

    With xliff it's a bit different - the strings are identified by IDs, so people tend to expect Weblate to do this kind of thing, but it behaves same as with other formats. The easy fix for this is to configure the translation as monolingual, it will then work as expected.

    Originally posted by @nijel in https://github.com/WeblateOrg/weblate/issues/3330#issuecomment-568038543

    enhancement backlog 
    opened by nijel 2
  • no matching key exchange method found

    no matching key exchange method found

    Describe the issue

    we are currently facing the problem that we are not able to configre SSH git repositories. The error message is: Could not fetch the repository: Unable to negotiate with 10.11.12.13 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1 fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. (128)

    Describe the steps you tried to solve the problem yourself.

    • [ ] i have edited the ssh_config (located at /etc/ssh/ssh_config) with following content:
    Include /etc/ssh/ssh_config.d/*.conf
    Host *
    Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    KexAlgorithms diffie-hellman-group1-sha1
    
    • [ ] I have tried to manually add the ssh key to the weblate container and was able to clone the git repository successfully

    To Reproduce the issue

    Steps to reproduce the behavior:

    1. add a Version Control System to a project

    Expected behavior

    Screenshots

    image

    Exception traceback

    uwsgi stderr | [2021-10-14 11:42:22,233: INFO/375] test/starterkit: updating repository
    2021-10-14 11:42:22,314 INFO reaped unknown pid 426 (exit status 255)
    uwsgi stderr | [2021-10-14 11:42:22,313: DEBUG/375] git: failure Unable to negotiate with 10.11.12.13 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
    uwsgi stderr | fatal: Could not read from remote repository.
    uwsgi stderr |
    uwsgi stderr | Please make sure you have the correct access rights
    uwsgi stderr | and the repository exists.
    uwsgi stderr |  (128)
    uwsgi stderr | [2021-10-14 11:42:22,313: DEBUG/375] git: failure Unable to negotiate with 10.11.12.13 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
    uwsgi stderr | fatal: Could not read from remote repository.
    uwsgi stderr |
    uwsgi stderr | Please make sure you have the correct access rights
    uwsgi stderr | and the repository exists.
    uwsgi stderr |  (128)
    

    Server configuration and status

    Weblate installation: Docker

    weblate list_versions
     * Weblate: 4.8.1
     * Django: 3.2.7
     * siphashc: 2.1
     * translate-toolkit: 3.4.1
     * lxml: 4.6.3
     * Pillow: 8.3.2
     * bleach: 4.1.0
     * python-dateutil: 2.8.2
     * social-auth-core: 4.1.0
     * social-auth-app-django: 5.0.0
     * django-crispy-forms: 1.12.0
     * oauthlib: 3.1.1
     * django-compressor: 2.4.1
     * djangorestframework: 3.12.4
     * django-filter: 2.4.0
     * django-appconf: 1.0.5
     * user-agents: 2.2.0
     * filelock: 3.0.12
     * setuptools: 58.2.0
     * jellyfish: 0.8.2
     * openpyxl: 3.0.9
     * celery: 5.1.2
     * kombu: 5.1.0
     * translation-finder: 2.10
     * weblate-language-data: 2021.5
     * html2text: 2020.1.16
     * pycairo: 1.16.2
     * pygobject: 3.38.0
     * diff-match-patch: 20200713
     * requests: 2.26.0
     * django-redis: 5.0.0
     * hiredis: 2.0.0
     * sentry_sdk: 1.3.1
     * Cython: 0.29.24
     * misaka: 2.1.1
     * GitPython: 3.1.24
     * borgbackup: 1.1.17
     * pyparsing: 2.4.7
     * pyahocorasick: 1.4.2
     * python-redis-lock: 3.7.0
     * Python: 3.9.2
     * Git: 2.30.2
     * psycopg2: 2.9.1
     * psycopg2-binary: 2.9.1
     * phply: 1.2.5
     * chardet: 4.0.0
     * ruamel.yaml: 0.17.16
     * tesserocr: 2.5.2
     * akismet: 1.1
     * boto3: 1.18.54
     * zeep: 4.1.0
     * aeidon: 1.9
     * iniparse: 0.5
     * mysqlclient: 2.0.3
     * Mercurial: 5.9.1
     * git-svn: 2.30.2
     * git-review: 2.1.0
     * Redis server: 5.0.13
     * PostgreSQL server: 9.6.23
     * Database backends: django.db.backends.postgresql
     * Cache backends: default:RedisCache, avatar:FileBasedCache
     * Email setup: django.core.mail.backends.smtp.EmailBackend: mail.avl.com
     * OS encoding: filesystem=utf-8, default=utf-8
     * Celery: redis://cache:6379/1, redis://cache:6379/1, regular
     * Platform: Linux 4.15.0-147-generic (x86_64)
    

    Weblate deploy checks

    weblate check --deploy
    System check identified some issues:
    
    WARNINGS:
    ?: (security.W004) You have not set a value for the SECURE_HSTS_SECONDS setting. If your entire site is served only over SSL, you may want to consider setting a value and enabling HTTP Strict Transport Security. Be sure to read the documentation first; enabling HSTS carelessly can cause serious, irreversible problems.
    ?: (security.W008) Your SECURE_SSL_REDIRECT setting is not set to True. Unless your site should be available over both SSL and non-SSL connections, you may want to either set this setting True or configure a load balancer or reverse-proxy server to redirect all connections to HTTPS.
    ?: (security.W012) SESSION_COOKIE_SECURE is not set to True. Using a secure-only session cookie makes it more difficult for network traffic sniffers to hijack user sessions.
    ?: (security.W018) You should not have DEBUG set to True in deployment.
    
    INFOS:
    ?: (weblate.I021) Error collection is not set up, it is highly recommended for production use
            HINT: https://docs.weblate.org/en/weblate-4.8.1/admin/install.html#collecting-errors
    ?: (weblate.I028) Backups are not configured, it is highly recommended for production use
            HINT: https://docs.weblate.org/en/weblate-4.8.1/admin/backup.html
    
    System check identified 6 issues (1 silenced).
    

    Additional context

    question 
    opened by AndreasDeCrinis 5
  • Deleting issue comment does not lift source string review lock

    Deleting issue comment does not lift source string review lock

    Nearing the completion of https://hosted.weblate.org/translate/kimai/messages/nb_NO/?checksum=197654d1b2334646 I reported that string because I wanted to know whether it was "to show" or "screen". That locked the string, so that it couldn't be translated. Deleting the comment still has the string locked.

    That string (and another I reported) are now in "Read only strings" (which should be "Read-only strings" https://hosted.weblate.org/projects/kimai/messages/nb_NO/

    question 
    opened by comradekingu 2
Releases(weblate-4.8.1)
  • weblate-4.8.1(Sep 10, 2021)

    Released on September 10th 2021.

    • Fixed user removal in Django admin interface.
    • Document add-on parameters in more detail.
    • Fixed JavaScript error on glossary.
    • Add limit to number of matches in consistency check.
    • Improve placeholders handling in machine translations.
    • Fixed creating add-ons using API.
    • Added :setting:PRIVACY_URL setting to add privacy policy link to the footer.
    • Hide member e-mail addresses from project admins.
    • Improved gettext PO merging in case of conflicts.
    • Improved glossary highlighting.
    • Improved safe-html flag behavior with XML checks.
    • Fixed commit messages on linked components.

    All changes in detail <https://github.com/WeblateOrg/weblate/milestone/70?closed=1>__.

    Source code(tar.gz)
    Source code(zip)
    Weblate-4.8.1.tar.gz(23.88 MB)
    Weblate-4.8.1.tar.gz.asc(833 bytes)
    Weblate-4.8.1.tar.xz(13.46 MB)
    Weblate-4.8.1.tar.xz.asc(833 bytes)
  • weblate-4.8(Aug 21, 2021)

    Released on August 21th 2021.

    • Added support for Apple stringsdict format.
    • The exact search operator is now case-sensitive on PostgreSQL.
    • Fixed saving glossary explanations in some cases.
    • Documentation improvements.
    • Performance improvements.
    • Improved squash add-on compatibility with Gerrit.
    • Fixed adding strings to a monolingual glossary components.
    • Improved performance in hadling variants.
    • Fixed squash add-on sometimes skipping parsing upstream changes.
    • Preserve file extension on download.
    • Added support for the Fluent format.
    • Add support for using tabs to indent JSON formats.

    All changes in detail <https://github.com/WeblateOrg/weblate/milestone/67?closed=1>__.

    Source code(tar.gz)
    Source code(zip)
    Weblate-4.8.tar.gz(23.02 MB)
    Weblate-4.8.tar.gz.asc(833 bytes)
    Weblate-4.8.tar.xz(12.78 MB)
    Weblate-4.8.tar.xz.asc(833 bytes)
  • weblate-4.7.2(Jul 15, 2021)

    Released on July 15th 2021.

    • Support more language aliases to be configured on a project.
    • Fixed search string validation in API.
    • Fixed Git exporter URLs after a domain change.
    • Fixed cleanup addon for Windows RC files.
    • Fixed possible crash on Xliff updating.

    All changes in detail <https://github.com/WeblateOrg/weblate/milestone/69?closed=1>__.

    Source code(tar.gz)
    Source code(zip)
    Weblate-4.7.2.tar.gz(23.95 MB)
    Weblate-4.7.2.tar.gz.asc(833 bytes)
    Weblate-4.7.2.tar.xz(13.15 MB)
    Weblate-4.7.2.tar.xz.asc(833 bytes)
  • weblate-4.7.1(Jun 30, 2021)

  • weblate-4.7(Jun 17, 2021)

    Released on June 17th 2021.

    • Improved configuration health check.
    • Added support for object-pascal-format used in gettext PO, see :ref:check-object-pascal-format.
    • Renamed :guilabel:Nearby keys to :guilabel:Similar keys to better describe the purpose.
    • Added support for :ref:mi18n-lang.
    • Improved SAML authentication integration.
    • Fixed :ref:vcs-gerrit integration to better handle corner cases.
    • Weblate now requires Django 3.2.
    • Fixed inviting users when e-mail authentication is disabled.
    • Improved language definitions.
    • Added support for blocking users from contributing to a project.
    • Fixed automatic creation of glossary languages.
    • Extended documentation about add-ons.
    • Performance improvements for components with linked repositories.
    • Added support for free DeepL API.
    • The user management no longer needs Django admin interface.

    All changes in detail <https://github.com/WeblateOrg/weblate/milestone/64?closed=1>__.

    Source code(tar.gz)
    Source code(zip)
    Weblate-4.7.tar.gz(23.87 MB)
    Weblate-4.7.tar.gz.asc(833 bytes)
    Weblate-4.7.tar.xz(13.20 MB)
    Weblate-4.7.tar.xz.asc(833 bytes)
  • weblate-4.6.2(May 8, 2021)

    Released on May 8th 2021.

    • Fixed crash after moving shared component between projects.
    • Fixed adding new strings to empty properties files.
    • Fixed copy icon alignment in RTL languages.
    • Extended string statistics on the Info tab.
    • Fixed handling of translation files ignored in Git.
    • Improved metrics performance.
    • Fixed possible bug in saving glossaries.
    • Fixed consistency check behavior on languages with different plural rules.

    All changes in detail <https://github.com/WeblateOrg/weblate/milestone/66?closed=1>__.

    Source code(tar.gz)
    Source code(zip)
    Weblate-4.6.2.tar.gz(25.59 MB)
    Weblate-4.6.2.tar.gz.asc(833 bytes)
    Weblate-4.6.2.tar.xz(15.10 MB)
    Weblate-4.6.2.tar.xz.asc(833 bytes)
  • weblate-4.6.1(May 2, 2021)

    Released on May 2nd 2021.

    • Remove obsolete spam protection code.
    • Improve source plural check accuracy.
    • Update list of user interface languages in Docker.
    • Improved error messages when creating pull requests.
    • Fixed creating pull requests on Pagure.
    • Fixed triggering automatically installed add-ons.
    • Fixed possible caching issues on upgrade.
    • Fixed adding new units to monolingual translations using upload.

    All changes in detail <https://github.com/WeblateOrg/weblate/milestone/65?closed=1>__.

    Source code(tar.gz)
    Source code(zip)
    Weblate-4.6.1.tar.gz(25.60 MB)
    Weblate-4.6.1.tar.gz.asc(833 bytes)
    Weblate-4.6.1.tar.xz(15.10 MB)
    Weblate-4.6.1.tar.xz.asc(833 bytes)
  • weblate-4.6(Apr 19, 2021)

    Released on April 19th 2021.

    • The auto_translate management command has now a parameter for specifying translation mode.
    • Added support for TXT files.
    • Added trends and metrics for all objects.
    • Added support for direct copying text from secondary languages.
    • Added date filtering when browsing changes.
    • Improved activity charts.
    • Sender for contact form e-mails can now be configured.
    • Improved parameters validation in component creation API.
    • The rate limiting no longer applies to superusers.
    • Improved automatic translation addon performance and reliability.
    • The rate limiting now can be customized in the Docker container.
    • API for creating components now automatically uses Weblate internal URLs.
    • Simplified state indication while listing strings.
    • Password hashing now uses Argon2 by default.
    • Simplified progress bars indicating translation status.
    • Renamed Add missing languages addon to clarify the purpose.
    • Fixed saving string state to XLIFF.
    • Added language-wide search.
    • Initial support for scaling horizontall the Docker deployment.

    All changes in detail

    Source code(tar.gz)
    Source code(zip)
    Weblate-4.6.tar.gz(25.59 MB)
    Weblate-4.6.tar.gz.asc(833 bytes)
    Weblate-4.6.tar.xz(15.10 MB)
    Weblate-4.6.tar.xz.asc(833 bytes)
  • weblate-4.5.3(Apr 1, 2021)

  • weblate-4.5.2(Mar 26, 2021)

    Released on March 26th 2021.

    • Configurable schedule for automatic translation.
    • Added Lua format check.
    • Ignore format strings in the :ref:check-duplicate check.
    • Allow uploading screenshot from a translate page.
    • Added forced file synchronization to the repository maintenance.
    • Fixed automatic suggestions for languages with a longer code.
    • Improved performance when adding new strings.
    • Several bug fixes in quality checks.
    • Several performance improvements.
    • Added integration with :ref:discover-weblate.
    • Fixed checks behavior with read-only strings.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.5.2.tar.gz(25.78 MB)
    Weblate-4.5.2.tar.gz.asc(833 bytes)
    Weblate-4.5.2.tar.xz(15.32 MB)
    Weblate-4.5.2.tar.xz.asc(833 bytes)
  • weblate-4.5.1(Mar 5, 2021)

    Released on March 05th 2021.

    • Fixed editing of glossary flags in some corner cases.
    • Extend metrics usage to improve performance of several pages.
    • Store correct source language in TMX files.
    • Better handling for uploads of monolingual PO using API.
    • Improved alerts behavior glossaries.
    • Improved Markdown link checks.
    • Indicate glossary and source language in breadcrumbs.
    • Paginated component listing of huge projects.
    • Improved performance of translation, component or project removal.
    • Improved bulk edit performance.
    • Fixed preserving "Needs editing" and "Approved" states for ODF files.
    • Improved interface for customizing translation-file downloads
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.5.1.tar.gz(25.51 MB)
    Weblate-4.5.1.tar.gz.asc(833 bytes)
    Weblate-4.5.1.tar.xz(15.23 MB)
    Weblate-4.5.1.tar.xz.asc(833 bytes)
  • weblate-4.5(Feb 19, 2021)

    Released on February 19th 2021.

    • Added support for lua-format used in gettext PO.
    • Added support for sharing a component between projects.
    • Fixed multiple unnamed variables check behavior with multiple format flags.
    • Dropped mailing list field on the project in favor of generic instructions for translators.
    • Added pseudolocale generation addon.
    • Added support for TermBase eXchange files.
    • Added support for manually defining string variants using a flag.
    • Improved performance of consistency checks.
    • Improved performance of translation memory for long strings.
    • Added support for searching in explanations.
    • Strings can now be added and removed in bilingual formats as well.
    • Extend list of supported languages in Amazon Translate machine translation.
    • Automatically enable Java MessageFormat checks for Java Properties.
    • Added a new upload method to add new strings to a translation.
    • Added a simple interface to browse translation.
    • Glossaries are now stored as regular components.
    • Dropped specific API for glossaries as component API is used now.
    • Added simplified interface to toggle some of the flags.
    • Added support for non-translatable or forbidden terms in the glossary.
    • Added support for defining terminology in a glossary.
    • Moved text direction toggle to get more space for the visual keyboard.
    • Added option to automatically watch projects user-contributed to.
    • Added check whether translation matches the glossary.
    • Added support for customizing navigation text color.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.5.tar.gz(25.44 MB)
    Weblate-4.5.tar.gz.asc(833 bytes)
    Weblate-4.5.tar.xz(15.16 MB)
    Weblate-4.5.tar.xz.asc(833 bytes)
  • weblate-4.4.2(Jan 14, 2021)

  • weblate-4.4.1(Jan 13, 2021)

    Released on January 13th 2021.

    • Fixed reverting plural changes.
    • Fixed displaying help for project settings.
    • Improved administration of users.
    • Improved handling of context in monolingual PO files.
    • Fixed cleanup addon behavior with HTML, ODF, IDML and Windows RC formats.
    • Fixed parsing of location from CSV files.
    • Use content compression for file downloads.
    • Improved user experience on importing from ZIP file.
    • Improved detection of file format for uploads.
    • Avoid duplicate pull requests on Pagure.
    • Improved performance when displaying ghost translations.
    • Reimplemented translation editor to use native browser textarea.
    • Fixed cleanup addon breaking adding new strings.
    • Added API for addons.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.4.1.tar.gz(25.19 MB)
    Weblate-4.4.1.tar.gz.asc(833 bytes)
    Weblate-4.4.1.tar.xz(14.94 MB)
    Weblate-4.4.1.tar.xz.asc(833 bytes)
  • weblate-4.4(Dec 15, 2020)

    Released on December 15th 2020.

    • Improved validation when creating component.
    • Weblate now requires Django 3.1.
    • Added support for appearance customization in the management interface.
    • Fixed read only state handling in bulk edit.
    • Improved CodeMirror integration.
    • Added addon to remove blank strings from translation files.
    • The CodeMirror editor is now used for translations.
    • Syntax highlighting in translation editor for XML, HTML, Markdown and reStructuredText.
    • Highlight placeables in translation editor.
    • Improved support for non standard language codes.
    • Added alert on using ambiguous language codes.
    • User is now presented filtered list of languages when adding new translation.
    • Extended search capabilities for changes history.
    • Improved billing detail pages and libre hosting workflow.
    • Extended translation statistics API.
    • Improved other translations tab while translating.
    • Added tasks API.
    • Improved file upload performance.
    • Improved display of user defined special characters.
    • Improved auto translate performance.
    • Several minor user interface improvements.
    • Improved naming of ZIP downloads.
    • Added option for getting notifications on unwatched projects.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.4.tar.gz(25.16 MB)
    Weblate-4.4.tar.gz.asc(833 bytes)
    Weblate-4.4.tar.xz(15.02 MB)
    Weblate-4.4.tar.xz.asc(833 bytes)
  • weblate-4.3.2(Nov 5, 2020)

    Released on November 4th 2020.

    • Fixed crash on certain component filemasks.
    • Improved accurancy of the consecutive duplicated words check.
    • Added support for Pagure pull requests.
    • Improved error messages on failed registraiton.
    • Reverted rendering developer comments as markdown.
    • Simplified setup of Git repositories with different default branch than master.
    • Newly created internal repositories now use main as default branch.
    • Reduced false positives rate of unchanged translation while translating reStructuredText.
    • Fixed CodeMirror display issues in some situations.
    • Renamed Template group to Sources to clarify its meaning.
    • Fixed GitLab pull requests on repos with longer path.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.3.2.tar.gz(24.95 MB)
    Weblate-4.3.2.tar.gz.asc(833 bytes)
    Weblate-4.3.2.tar.xz(14.94 MB)
    Weblate-4.3.2.tar.xz.asc(833 bytes)
  • weblate-4.3.1(Oct 21, 2020)

    Released on October 21st 2020.

    • Improved automatic translation performance.
    • Fixed session expiry for authenticated users.
    • Add support for hiding version information.
    • Improve hooks compatibility with Bitbucket Server.
    • Improved translation memory updates performance.
    • Reduced memory usage.
    • Improved performance of matrix view.
    • Added confirmation before removing user from a project.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.3.1.tar.gz(24.84 MB)
    Weblate-4.3.1.tar.gz.asc(833 bytes)
    Weblate-4.3.1.tar.xz(14.92 MB)
    Weblate-4.3.1.tar.xz.asc(833 bytes)
  • weblate-4.3(Oct 15, 2020)

    Released on October 15th 2020.

    • Include user stats in the API.
    • Fixed component ordering on paginated pages.
    • Define source language for a glossary.
    • Rewritten support for GitHub and GitLab pull requests.
    • Fixed stats counts after removing suggestion.
    • Extended public user profile.
    • Fixed configuration of enforced checks.
    • Improve documentation about built-in backups.
    • Moved source language attribute from project to a component.
    • Add Vue I18n formatting check.
    • Generic placeholders check now supports regular expressions.
    • Improved look of matrix mode.
    • Machinery is now called automatic suggestions.
    • Added support for interacting with multiple GitLab or GitHub instances.
    • Extended API to cover project updates, unit updates and removals and glossaries.
    • Unit API now properly handles plural strings.
    • Component creation can now handle ZIP file or document upload.
    • Consolidated API response status codes.
    • Support markdown in contributor agreement.
    • Improved source strings tracking.
    • Improved JSON, YAML and CSV formats compatibility.
    • Added support for removing strings.
    • Improved performance of file downloads.
    • Improved repository management view.
    • Automatically enable java-format for Android.
    • Added support for localized screenshots.
    • Added support for Python 3.9.
    • Fixed translating HTML files under certain conditions.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.3.tar.gz(24.82 MB)
    Weblate-4.3.tar.gz.asc(833 bytes)
    Weblate-4.3.tar.xz(14.91 MB)
    Weblate-4.3.tar.xz.asc(833 bytes)
  • weblate-4.2.2(Sep 2, 2020)

    Released on September 2nd 2020.

    • Fixed matching of source strings for JSON formats.
    • Fixed login redirect for some authentication configurations.
    • Fixed LDAP authentication with group sync.
    • Fixed crash in reporting automatic translation progress.
    • Fixed Git commit squashing with trailers enabled.
    • Fixed creating local VCS components using API.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.2.2.tar.gz(25.65 MB)
    Weblate-4.2.2.tar.gz.asc(833 bytes)
    Weblate-4.2.2.tar.xz(15.13 MB)
    Weblate-4.2.2.tar.xz.asc(833 bytes)
  • weblate-4.2.1(Aug 21, 2020)

  • weblate-4.2(Aug 18, 2020)

    Released on August 18th 2020.

    • Improved user pages and added listing of users.
    • Dropped support for migrating from 3.x releases, migrate through 4.1 or 4.0.
    • Added exports into several monolingual formats.
    • Improved activity charts.
    • Number of displayed nearby strings can be configured.
    • Added support for locking components experiencing repository errors.
    • Simplified main navigation (replaced buttons with icons).
    • Improved language code handling in Google Translate integration.
    • The Git squash addon can generate Co-authored-by: trailers.
    • Improved query search parser.
    • Improved user feedback from format strings checks.
    • Improved performance of bulk state changes.
    • Added compatibility redirects after project or component renaming.
    • Added notifications for strings approval, component locking and license change.
    • Added support for ModernMT.
    • Allow to avoid overwriting approved translations on file upload.
    • Dropped support for some compatibility URL redirects.
    • Added check for ECMAScript template literals.
    • Added option to watch a component.
    • Removed leading dot from JSON unit keys.
    • Removed separate Celery queue for translation memory.
    • Allow translating all components a language at once.
    • Allow to configure Content-Security-Policy HTTP headers.
    • Added support for aliasing languages at project level.
    • New addon to help with HTML or JavaScript localization, see :ref:addon-weblate.cdn.cdnjs.
    • The Weblate domain is now configured in the settings, see :setting:SITE_DOMAIN.
    • Add support for searching by component and project.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.2.tar.gz(25.65 MB)
    Weblate-4.2.tar.gz.asc(833 bytes)
    Weblate-4.2.tar.xz(15.12 MB)
    Weblate-4.2.tar.xz.asc(833 bytes)
  • weblate-4.1.1(Jun 19, 2020)

    Released on June 19th 2020.

    • Fixed changing autofix or addons configuration in Docker.
    • Fixed possible crash in about page.
    • Improved installation of byte-compiled locale files.
    • Fixed adding words to glossary.
    • Fixed keyboard shortcuts for machinery.
    • Removed debugging output causing discarding of log events in some setups.
    • Fixed lock indication on project listing.
    • Fixed listing GPG keys is some setups.
    • Added option to configure DeepL API version to use.
    • Added support for acting as SAML Service Provider, see :ref:saml-auth.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.1.1.tar.gz(24.55 MB)
    Weblate-4.1.1.tar.gz.asc(833 bytes)
    Weblate-4.1.1.tar.xz(14.91 MB)
    Weblate-4.1.1.tar.xz.asc(833 bytes)
  • weblate-4.1(Jun 15, 2020)

    Released on June 15th 2020.

    • Added support for creating new translations with included country code.
    • Added support for seaching source strings with screenshot.
    • Extended information available in the stats insights.
    • Improved search editing on translate pages.
    • Improve handling of concurrent repository updates.
    • Include source language in project creation form.
    • Include changes count in credits.
    • Fixed UI language selection in some cases.
    • Allow to whitelist registration methods with registrations closed.
    • Improved lookup of related terms in glossary.
    • Improved translation memory matches.
    • Group same machinery results.
    • Add direct link to edit screenshot from translate page.
    • Improved removal confirmation dialog.
    • Include templates in ZIP download.
    • Add support for Markdown and notification configuration in announcements.
    • Extended details in check listings.
    • Added support for new file formats: :ref:laravel-php, :ref:html, :ref:odf, :ref:idml, :ref:winrc, :ref:ini, :ref:islu, :ref:gwt, :ref:go-i18n-json, :ref:arb.
    • Consistently use dismissed as state of dismissed checks.
    • Add support for configuring default addons to enable.
    • Fixed editor keyboard shortcut to dismiss checks.
    • Improved machine translation of strings with placeholders.
    • Show ghost translation for user languages to ease starting them.
    • Improved language code parsing.
    • Show translations in user language first in the list.
    • Renamed shapings to more generic name variants.
    • Added new quality checks: :ref:check-unnamed-format, :ref:check-long-untranslated, :ref:check-duplicate.
    • Reintroduced support for wiping translation memory.
    • Fixed option to ignore source checks.
    • Added support for configuring different branch for pushing changes.
    • API now reports rate limiting status in the HTTP headers.
    • Added support for Google Translate V3 API (Advanced).
    • Added ability to restrict access on component level.
    • Added support for whitespace and other special chars in translation flags, see :ref:custom-checks.
    • Always show rendered text check if enabled.
    • API now supports filtering of changes.
    • Added support for sharing glossaries between projects.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.1.tar.gz(24.54 MB)
    Weblate-4.1.tar.gz.asc(833 bytes)
    Weblate-4.1.tar.xz(14.92 MB)
    Weblate-4.1.tar.xz.asc(833 bytes)
  • weblate-4.0.4(May 7, 2020)

    Released on May 07th 2020.

    • Fixed testsuite execution on some Python 3.8 environments.
    • Typo fixes in the documentation.
    • Fixed creating components using API in some cases.
    • Fixed JavaScript errors breaking mobile navigation.
    • Fixed crash on displaying some checks.
    • Fixed screenshots listing.
    • Fixed monthly digest notifications.
    • Fixed intermediate translation behavior with units non existing in translation.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.0.4.tar.gz(23.67 MB)
    Weblate-4.0.4.tar.gz.asc(833 bytes)
    Weblate-4.0.4.tar.xz(14.43 MB)
    Weblate-4.0.4.tar.xz.asc(833 bytes)
  • weblate-4.0.3(May 2, 2020)

  • weblate-4.0.2(Apr 27, 2020)

    Released on April 27th 2020.

    • Improved performance of translation stats.
    • Improved performance of changing labels.
    • Improved bulk edit performance.
    • Improved translation memory performance.
    • Fixed possible crash on component deletion.
    • Fixed displaying of translation changes in some corner cases.
    • Improved warning about too long celery queue.
    • Fixed possible false positives in the consistency check.
    • Fixed deadlock when changing linked component repository.
    • Included edit distance in changes listing and CSV and reports.
    • Avoid false positives of punctuation spacing check for Canadian French.
    • Fixed XLIFF export with placeholders.
    • Fixed false positive with zero width check.
    • Improved reporting of configuration errors.
    • Fixed bilingual source upload.
    • Automatically detect supported languages for DeepL machine translation.
    • Fixed progress bar display in some corner cases.
    • Fixed some checks triggering on non translated strings.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.0.2.tar.gz(23.66 MB)
    Weblate-4.0.2.tar.gz.asc(833 bytes)
    Weblate-4.0.2.tar.xz(14.42 MB)
    Weblate-4.0.2.tar.xz.asc(833 bytes)
  • weblate-4.0(Apr 16, 2020)

    Released on April 16th 2020.

    • Weblate now requires Python 3.6 or newer.
    • Added management overview of component alerts.
    • Added component alert for broken repository browser URLs.
    • Improved sign in and registration pages.
    • Project access control and workflow configuration integrated to project settings.
    • Added check and highlighter for i18next interpolation and nesting.
    • Added check and highlighter for percent placeholders.
    • Display failing checks for suggestions.
    • Record source string changes in history.
    • Upgraded Microsoft Translator to version 3 API.
    • Reimplemented translation memory backend.
    • Added support for several is: lookups in :doc:user/search.
    • Allow to make :ref:check-same avoid internal blacklist.
    • Improved comments extraction from monolingual po files.
    • Renamed whiteboard messages to announcements.
    • Fixed occasional problems with registration mails.
    • Improved LINGUAS update addon to handle more syntax variants.
    • Fixed editing monolingual XLIFF source file.
    • Added support for exact matching in :doc:user/search.
    • Extended API to cover screenshots, users, groups, componentlists and extended creating projects.
    • Add support for source upload on bilingual translations.
    • Added support for intermediate language from developers.
    • Added support for source strings review.
    • Extended download options for platform wide translation memory.
    Source code(tar.gz)
    Source code(zip)
    Weblate-4.0.tar.gz(23.51 MB)
    Weblate-4.0.tar.gz.asc(833 bytes)
    Weblate-4.0.tar.xz(14.38 MB)
    Weblate-4.0.tar.xz.asc(833 bytes)
  • weblate-3.11.3(Mar 11, 2020)

    Released on March 11th 2020.

    • Fixed searching for fields with certain priority.
    • Fixed predefined query for recently added strings.
    • Fixed searching returning duplicate matches.
    • Fixed notifications rendering in Gmail.
    • Fixed reverting changes from the history.
    • Added links to events in digest notifications.
    • Fixed email for account removal confirmation.
    • Added support for Slack authentication in Docker container.
    • Avoid sending notifications for not subscribed languages.
    • Include Celery queues in performance overview.
    • Fixed documentation links for addons.
    • Reduced false negatives for unchanged translation check.
    • Raised bleach dependency to address CVE-2020-6802.
    • Fixed listing project level changes in history.
    • Fixed stats invalidation in some corner cases.
    • Fixed searching for certain string states.
    • Improved format string checks behavior on missing percent.
    • Fixed authentication using some third party providers.
    Source code(tar.gz)
    Source code(zip)
    Weblate-3.11.3.tar.gz(23.18 MB)
    Weblate-3.11.3.tar.gz.asc(833 bytes)
    Weblate-3.11.3.tar.xz(14.17 MB)
    Weblate-3.11.3.tar.xz.asc(833 bytes)
  • weblate-3.11.2(Feb 22, 2020)

Owner
Weblate
Weblate, the web-based continuous localization system.
Weblate
Indico - A feature-rich event management system, made @ CERN, the place where the Web was born.

Indico Indico is: ?? a general-purpose event management tool; ?? fully web-based; ?? feature-rich but also extensible through the use of plugins; ⚖️ O

Indico 1.3k Oct 26, 2021
Online translation tool

Pootle Docs | Changes | Issues | Community Support | Contributing | Development Channel Pootle is an online translation and localization tool. It work

Translate 1.4k Oct 18, 2021
Generate links that users can use to submit messages encrypted with your public key.

Hawkpost Hawkpost lets you create unique links that you can share with the person that desires to send you important information but doesn't know how

Whitesmith 860 Oct 16, 2021
Easy-to-use and powerful offline translation tool

Introduction Virtaal is a graphical program for doing translation. It is meant to be easy to use and powerful at the same time. Although the initial f

Translate 255 Sep 4, 2021
GlobaLeaks is free, open source software enabling anyone to easily set up and maintain a secure whistleblowing platform.

GlobaLeaks is free, open souce software enabling anyone to easily set up and maintain a secure whistleblowing platform. Continous Integration and Test

GlobaLeaks 882 Oct 21, 2021
A wiki system with complex functionality for simple integration and a superb interface. Store your knowledge with style: Use django models.

django-wiki Django support The below table explains which Django versions are supported. Release Django Upgrade from 0.7.x 2.2, 3.0, 3.1 0.5 or 0.6 0.

django-wiki 1.5k Oct 25, 2021
A free & open modern, fast email client with user-friendly encryption and privacy features

Welcome to Mailpile! Introduction Mailpile (https://www.mailpile.is/) is a modern, fast web-mail client with user-friendly encryption and privacy feat

mailpile 8.5k Oct 24, 2021
Conference planning tool: CfP, scheduling, speaker management

pretalx is a conference planning tool focused on providing the best experience for organisers, speakers, reviewers, and attendees alike. It handles th

null 401 Oct 16, 2021
Abilian Social Business Engine - an enterprise social networking / collaboration platform.

About Abilian SBE (Social Business Engine) is a platform for social business applications, and more specifically collaborative / enterprise 2.0 busine

Abilian open source projects 52 Aug 9, 2021
MoinMoin Wiki Development (2.0+), unstable, for production please use 1.9.x.

MoinMoin - a wiki engine in Python MoinMoin is an easy to use, full-featured and extensible wiki software package written in Python. It can fulfill a

MoinMoin Wiki Engine 202 Oct 14, 2021
Easy HTML form without PHP or JavaScript

This repository is no longer active. If you're looking for a simple and powerful hosted form API, please check out https://formspree.io. If you are in

Formspree 2.7k Oct 14, 2021
ProPublica's collaborative tip-gathering framework. Import and manage CSV, Google Sheets and Screendoor data with ease.

Collaborate This is a web application for managing and building stories based on tips solicited from the public. This project is meant to be easy to s

ProPublica 80 Sep 17, 2021
Mail hosting made simple

Modoboa Modoboa is a mail hosting and management platform including a modern and simplified Web User Interface. It provides useful components such as

Modoboa 2k Oct 23, 2021
get things from one computer to another, safely

Magic Wormhole Get things from one computer to another, safely. This package provides a library and a command-line tool named wormhole, which makes it

null 13.8k Oct 26, 2021
Securely and anonymously share files, host websites, and chat with friends using the Tor network

OnionShare OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor ne

Micah Lee 4.7k Oct 25, 2021
Insular email distribution - mail server as Docker images

Mailu is a simple yet full-featured mail server as a set of Docker images. It is free software (both as in free beer and as in free speech), open to s

Mailu 3k Oct 24, 2021
Read/sync your IMAP mailboxes (python2)

Upstream status (master branch): Upstream status (next branch): Financial contributors: Links: Official github code repository: offlineimap Website: w

OfflineIMAP 1.6k Oct 11, 2021
GitHub repository for the SecureDrop whistleblower platform. Do not submit tips here!

SecureDrop is an open-source whistleblower submission system that media organizations can use to securely accept documents from, and communicate with

Freedom of the Press Foundation 3.1k Oct 16, 2021
Askbot is a Django/Python Q&A forum. **Contributors README**: https://github.com/ASKBOT/askbot-devel#how-to-contribute. Commercial hosting of Askbot and support are available at https://askbot.com

ATTENTION: master branch is experimental, please read below Askbot - a Django Q&A forum platform This is Askbot project - open source Q&A system, like

ASKBOT 1.5k Oct 21, 2021