---
title: Translations
---

Translations in authentik are handled in two places. Most of the text is defined in the frontend in `web/`, and a subset of messages is defined in the backend.

The frontend uses [@lit/localize](https://lit.dev/docs/localization/overview/), and the backend uses the built-in Django translation tools.

:::info
Please review the [Writing documentation](./docs/writing-documentation.md) guidelines as they apply to documentation too.
:::

## Online translation

To simplify translation you can use [Transifex](https://explore.transifex.com/authentik/authentik/), which has no local requirements.

## Local translation

### Prerequisites

- Node (any recent version should work, we use 16.x to build)
- Make (again, any recent version should work)
- Docker

### Frontend

Run `npm i` in the `/web` folder to install all dependencies.

Ensure the language code is in the `lit-localize.json` file in `web/`:

```json
    // [...]
    "targetLocales": [
        "en",
        "pseudo-LOCALE",
        "a-new-locale"
        // [...]
    ],
    // [...]
```

Afterwards, run `make web-i18n-extract` to generate a base .xlf file.

The .xlf files can be edited by any text editor, or using a tool such as [POEdit](https://poedit.net/).

To see the change, run `make web-watch` in the root directory of the repository.

### Backend

Backend translations are handled by `core-i18n-extract`.

Use Django's translation utility to declare the string, e.g.:

```python
from django.utils.translation import gettext as _

_("New text to be translated.")
```

Afterwards, run `make core-i18n-extract` to generate the updated translation files.
