Files
2026-06-09 18:40:21 +02:00

162 lines
5.9 KiB
Markdown

---
title: Weblate
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, development, traduction, i18n, localisation, crowdsourcing]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=Development, https://github.com/WeblateOrg/weblate]
---
# 💻 Weblate
> **Plateforme de traduction collaborative web** (crowdsourcing) avec gestion de versions, intégration Git/VCS, mémoire de traduction et automatisation. Utilisé par Mozilla, Red Hat, GNOME, KDE et de nombreuses autres organisations.
## 📋 Informations Générales
| Champ | Valeur |
| :--- | :--- |
| **Site web** | [weblate.org](https://weblate.org/) |
| **GitHub** | [WeblateOrg/weblate](https://github.com/WeblateOrg/weblate) |
| **License** | GPL-3.0 |
| **Langage** | Python (Django) |
| **Étoiles GitHub** | 5 903 ⭐ |
| **Catégorie** | [[cat-development\|Development]] |
| **Note** | **Adopté par Mozilla, Red Hat, GNOME, KDE, OpenStreetMap, Nextcloud, F-Droid** — référence du domaine. **Self-hostable** est la voie majoritaire. |
## 📝 Description
**Weblate** est une **plateforme de localisation (L10n) et traduction collaborative** basée sur le web. Elle gère le cycle complet de la traduction d'un logiciel ou d'un site :
**Fonctionnalités principales** :
- **Interface web de traduction** : éditeur visuel, suggestions, contexte, captures d'écran
- **VCS integration** : push automatique des traductions vers **Git, Mercurial, Subversion**
- **Multi-format** : PO, XLIFF, JSON, YAML, .properties Android, .strings iOS, .ts Qt, etc.
- **Crowdsourcing** : ouverture à des contributeurs externes (traducteurs volontaires)
- **Mémoire de traduction** : réutilisation de traductions entre projets
- **Glossaire** : terminologie unifiée
- **Traduction automatique** : API DeepL, Google Translate, OpenAI, AWS
- **Quality checks** : cohérences, fautes, placeholders
- **Workflow de validation** : review, approval
- **Webhooks** : notification CI/CD, Slack
- **API REST** complète
- **Multi-projets, multi-composants, multi-langues**
**Pourquoi pas POEditor, Crowdin, Lokalise** ? Ce sont des services **SaaS payants**. Weblate est **open source et self-hosted**.
**Cas d'usage** :
- **Projets open source** : permettre à la communauté de traduire
- **Entreprises** : internalisation produits, logiciels internes
- **Apps mobile / web** : gérer les fichiers `.json` / `.strings` / `.xml`
- **Documentation multilingue**
## 🚀 Installation
### Via Docker Compose (méthode officielle)
```yaml
# docker-compose.yml
version: '3.8'
services:
weblate:
image: weblate/weblate:latest
container_name: weblate
restart: unless-stopped
hostname: weblate.example.com
depends_on:
- db
- cache
environment:
- WEBLATE_EMAIL_HOST=*** - WEBLATE_EMAIL_HOST_USER=velli@example.com
- WEBLATE_EMAIL_HOST_PASSWORD=*** - WEBLATE_ALLOWED_HOSTS=weblate.example.com
- WEBLATE_ADMIN_PASSWORD=*** - WEBLATE_ADMIN_EMAIL=velli@example.com
- WEBLATE_SITE_DOMAIN=weblate.example.com
- WEBLATE_SECRET_KEY=*** - WEBLATE_DATABASE_URL=postgresql://weblate:***@db:5432/weblate
- WEBLATE_REDIS_URL=redis://cache:6379/0
volumes:
- weblate-data:/app/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.weblate.rule=Host(`weblate.example.com`)"
- "traefik.http.routers.weblate.entrypoints=websecure"
- "traefik.http.services.weblate.loadbalancer.server.port=8080"
networks:
- proxy
db:
image: postgres:15
container_name: weblate-db
restart: unless-stopped
environment:
- POSTGRES_DB=weblate
- POSTGRES_USER=weblate
- POSTGRES_PASSWORD=*** volumes:
- weblate-db:/var/lib/postgresql/data
networks:
- proxy
cache:
image: redis:7
container_name: weblate-cache
restart: unless-stopped
networks:
- proxy
volumes:
weblate-data:
weblate-db:
networks:
proxy:
external: true
```
## ⚙️ Configuration
1. **Premier démarrage** : admin auto-créé (`WEBLATE_ADMIN_PASSWORD`)
2. **VCS (Git)** : ajouter une **clé SSH** dans Weblate pour push/pull auto
3. **Composants** : un composant = un fichier source (ex. `locales/fr/LC_MESSAGES/django.po`)
4. **Langues** : activer uniquement les langues cibles voulues
5. **Traducteurs** : créer des utilisateurs ou autoriser les **inscriptions libres** (crowdsourcing)
6. **Hooks** : configurer webhooks [[app-forgejo]] / [[app-gitlab]] pour push auto sur commit
7. **Backups** : DB PostgreSQL + `/app/data` (clé secrète, avatars, customisations)
## 🔗 Alternatives
- **Pootle** (Translate House) — Plus ancien, plus simple, moins maintenu
- **Zanata** (Red Hat) — Concurrent JBoss, en pause
- **Transifex** — SaaS leader, payant
- **Crowdin** — SaaS, freemium
- **Lokalise** — SaaS moderne, TMS pro
- **Tolgee** (JS) — Auto-hébergeable, plus moderne, plus orienté devs
- **Traduora** — Open source, en pause
## 🔒 Sécurité
- **HTTPS obligatoire** : Weblate gère l'auth et les secrets
- **Auth externe** : OIDC, OAuth (GitHub, GitLab, Gitea, Google)
- **2FA** : activable par utilisateur
- **Permissions granulaires** : admin, traducteur, reviewer
- **Validation manuelle** : éviter de pousser des traductions non revues vers la prod
- **Audit** : qui a modifié quoi
- **Backups** : PostgreSQL + volume `/app/data`
- **Rate limiting** : Weblate peut être cible de spam (formulaires d'inscription)
## 📚 Ressources
- [Documentation officielle](https://docs.weblate.org/)
- [GitHub WeblateOrg/weblate](https://github.com/WeblateOrg/weblate)
- [Liste des projets qui utilisent Weblate](https://weblate.org/uses/)
- [Weblate.org (cloud)](https://weblate.org/)
## 🔗 Pages Liées
- [[cat-development]] — Catégorie Development
- [[app-forgejo]] / [[app-gitlab]] / [[app-gitea]] — Forges Git (intégration VCS)
- [[app-traefik]] — Reverse proxy
- [[securisation-home-lab]] — Bonnes pratiques
- [[recettes-docker-compose]] — Templates Docker