---
title: Traduction automatique: LibreTranslate
author: Frederic AOUSTIN
version: 1.O
last_date: 16/08/2026
---

# Traduction automatique: LibreTranslate

![category](developpement)
![tag](python)
![tag](ia)

IL m'arrive d'utiliser une IA pour traduire un texte et cela est en faite une mauvaise pratique:

- l'ia utilise de très nombreux token pour réaliser une telle opération
- l'ia ne traduit pas ... il comprend le sens d'un texte et réalise un texte qui a le même sens ... cela peut donc induire des écarts

EN faite souvent j'ai besoin d'un outil pour traduire le texte ... puis d'une IA pour me la synthétiser ou pour m'apporter une valeur lié à la langue.
Le processus de traduction literal n'a en faite peut de valeur et donc doit minimiser l'usage de l'ia ou de tokens.

J'ai donc rechercher une solution de traduction classique que je pourrais héberger: [LibreTranslate](https://libretranslate.com/)

## Installation

Rien de plus simple l'outil étant écrit en python et pouvant être dockérisé.

Il faut noter que ce qui est construit en python est l'interface web  + API ... le coeur de traduction est quand à lui l'outil Archos. 

J'ai placé mon container de traduction 

- derrière un proxy traefick
- derriere une authentification **authelia** 
- avec pour objectif d'avoir un accès au moteur de traduction (accessible via l'api */translate*) uniquement par Key.


```
    translate:
        image: libretranslate/libretranslate:v1.9.6
        container_name: translate
        restart: unless-stopped
        tty: true
        networks:
            meet.jitsi:
        volumes:
            - /root/docker/data/translate/db:/app/db
            - /root/docker/data/translate/models:/home/libretranslate/.local
            - /root/docker/data/translate/app/templates:/app/libretranslate/templates
            - /root/docker/data/translate/app/static/css/main.css:/app/libretranslate/static/css/main.css
        environment:
            - LT_API_KEYS=true
            - LT_API_KEYS_DB_PATH=/app/db/api_keys.db
            - LT_UPDATE_MODELS=true
            - LT_LOAD_ONLY=en,fr,de
            #- LT_REQ_LIMIT=0
            - LT_HIDE_API=true
        labels:
            - "traefik.enable=true"
            # SERVICE
            - "traefik.http.services.translate-service.loadbalancer.server.port=5000"
            # -------------------------
            # REDIRECTION HTTP -> HTTPS
            # -------------------------
            - "traefik.http.routers.translate-insecure.entrypoints=web"
            - "traefik.http.routers.translate-insecure.rule=Host(`translate.fraoustin.fr`)"
            - "traefik.http.routers.translate-insecure.middlewares=https-redirect"
            - "traefik.http.middlewares.https-redirect.redirectscheme.scheme=https"
            # -------------------------
            # ROUTEUR API (PAS D'AUTH)
            # -------------------------
            - "traefik.http.routers.translate-api.rule=Host(`translate.fraoustin.fr`) && PathPrefix(`/translate`)"
            - "traefik.http.routers.translate-api.priority=100"
            - "traefik.http.routers.translate-api.entrypoints=websecure"
            - "traefik.http.routers.translate-api.tls=true"
            - "traefik.http.routers.translate-api.service=translate-service"
            # -------------------------
            # ROUTEUR PAR DÉFAUT (AVEC AUTH)
            # -------------------------
            - "traefik.http.routers.translate.rule=Host(`translate.fraoustin.fr`)"
            - "traefik.http.routers.translate.priority=10"
            - "traefik.http.routers.translate.entrypoints=websecure"
            - "traefik.http.routers.translate.tls=true"
            - "traefik.http.routers.translate.middlewares=authelia@file"
```

Je partage en local les fichiers contenus dans le répertoire templates car je souhaite ajouter par défaut une clé api pour la partie web.
Donc je modifie le fichier *app.js.template* ainsi

```javascript
apiKey: localStorage.getItem("api_key") || "XXXXXXXXXXXXX-MYKEY-YYYYYYYYYY",
```

Pour rappel cette clé ne sera pas accessible sans l'authentification *authelia*

J'ai aussi modifié le fichier static/css/main.css pour acoir quelques choses de plus épuré et joli.

```css
/* ADD BY FAO */
.page-footer {
    display: none !important;
}

.textarea-container textarea {
    border-radius: 25px;
}

#textarea1 {
    background: #fff !important;
    color: #000;
}

#textarea2 {
    background: #f3f3f3 !important;
    color: #000;
}

#logo-container img {
    display: none !important;
}

.container {
    width: 90%;
    max-width: none !important;
}

button, html [type="button"], [type="reset"], [type="submit"] {
    border-radius: 10px;
}

a:not(.noline) {
    text-decoration: none !important;
}
```

## Gestion des clés

Il faut gérer les clés directement dans le conteneur

Pour lister les clés

> ltmanage keys

Pour créer une clé avec 120 demandes max par minutes

> ltmanage keys add 120

en ajouter une limite sur le nombre de caractère

> ltmanage keys add 120 --char-limit 5000

Pour supprimer une clé

> ltmanage keys remove TA_CLE_API

## Gestion des dictionnaires

Je gère directement mes dictionnaires (models) depuis la déclartion docker.

Dans mon exemple je charge les dictionaires fr, en, de et je vérifie à chaque démarrage qu'ils sont à jours.
LibreTranslate va télécharger l'ensemble des croissements donc cela va faire plus que 3 dictionaires mais 6 (fr-en, en-fr, fr-de, de-fr, en-de, de-en).

## gestion des appels api

en python on peut facilement appeler notre serveur de traduction

```python
import requests

URL = "https://translate.mydomain.fr/translate"
API_KEY = "ta-cle-api"

data = {
    "q": "Bonjour, comment allez-vous ?",
    "source": "fr",
    "target": "en",
    "api_key": API_KEY,
}

response = requests.post(URL, json=data)

print("HTTP:", response.status_code)
print(response.json())
```

## Prochaine étape

avoir un serveur MCP pour ia qui utilise ce serveur de traduction pour limiter l'usage des tokens


En résumé cela permet d'avoir en local l'équivalent d'un translate.google.com mais en étant sur de l'usage et de la gestion de vos données et documents


