Skip to content

Latest commit

 

History

History
146 lines (105 loc) · 4.6 KB

customize.rst

File metadata and controls

146 lines (105 loc) · 4.6 KB

Customizing Weblate

Extend and customize using Django and Python. Contribute your changes upstream so that everybody can benefit. This reduces your maintenance costs; code in Weblate is taken care of when changing internal interfaces or refactoring the code.

Warning

Neither internal interfaces nor templates are considered a stable API. Please review your own customizations for every upgrade, the interfaces or their semantics might change without notice.

contributing

Creating a Python module

If you are not familiar with Python, you might want to look into Python For Beginners, explaining the basics and pointing to further tutorials.

To write a file with custom Python code (called a module), a place to store it is needed, either in the system path (usually something like /usr/lib/python3.9/site-packages/) or in the Weblate directory, which is also added to the interpreter search path.

3.8-5

When using Docker <docker-deploy>, you can place Python modules in /app/data/python/ (see docker-volume), so they can be loaded by Weblate, for example from a settings override file <docker-settings-override>.

Better yet, turn your customization into a proper Python package:

  1. Create a folder for your package (we will use weblate_customization).
  2. Within it, create a setup.py file to describe the package:

    from setuptools import setup
    
    setup(
        name="weblate_customization",
        version="0.0.1",
        author="Your name",
        author_email="yourname@example.com",
        description="Sample Custom check for Weblate.",
        license="GPLv3+",
        keywords="Weblate check example",
        packages=["weblate_customization"],
    )
  3. Create a folder for the Python module (also called weblate_customization) for the customization code.
  4. Within it, create a __init__.py file to make sure Python can import the module.
  5. This package can now be installed using pip install -e. More info to be found in pip:editable-installs.
  6. Once installed, the module can be used in the Weblate configuration (for example weblate_customization.checks.FooCheck).

Your package structure should look like this:

weblate_customization
├── setup.py
└── weblate_customization
    ├── __init__.py
    ├── addons.py
    └── checks.py

You can find an example of customizing Weblate at <https://github.com/WeblateOrg/customize-example>, it covers all the topics described below.

  1. Create a simple Django app containing the static files you want to overwrite (see custom-module).

    Branding appears in the following files:

    icons/weblate.svg

    Logo shown in the navigation bar.

    logo-*.png

    Web icons depending on screen resolution and web-browser.

    favicon.ico

    Web icon used by legacy browsers.

    weblate-*.png

    Avatars for bots or anonymous users. Some web-browsers use these as shortcut icons.

    email-logo.png

    Used in notifications e-mails.

  2. Add it to django:INSTALLED_APPS:

    INSTALLED_APPS = (
        # Add your customization as first
        "weblate_customization",
        # Weblate apps are here…
    )
  3. Run weblate collectstatic --noinput, to collect static files served to clients.

django:howto/static-files/index, static-files

Custom quality checks, add-ons and auto-fixes

To install your code for custom-autofix, own-checks or own-addon in Weblate:

  1. Place the files into your Python module containing the Weblate customization (see custom-module).
  2. Add its fully-qualified path to the Python class in the dedicated settings (WEBLATE_ADDONS, CHECK_LIST or AUTOFIX_LIST):
# Checks
CHECK_LIST += ("weblate_customization.checks.FooCheck",)

# Autofixes
AUTOFIX_LIST += ("weblate_customization.autofix.FooFixer",)

# Add-ons
WEBLATE_ADDONS += ("weblate_customization.addons.ExamplePreAddon",)

custom-autofix, own-checks, own-addon, addon-script