simonet85 / laravel-deepl
Laravel package for DeepL translation: facade, cache, placeholder protection and an Artisan command that fills your lang/*.json files
Requires
- php: ^8.2
- deeplcom/deepl-php: ^1.10
- illuminate/console: ^11.0|^12.0|^13.0
- illuminate/contracts: ^11.0|^12.0|^13.0
- illuminate/support: ^11.0|^12.0|^13.0
Requires (Dev)
- orchestra/testbench: ^9.0|^10.0|^11.0
- phpunit/phpunit: ^10.5|^11.0|^12.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Package Laravel pour traduire avec DeepL : une façade, un cache qui évite de payer deux fois le même texte, la protection des :placeholders de Laravel, et une commande Artisan qui remplit vos fichiers lang/*.json.
Il s'appuie sur le SDK officiel deeplcom/deepl-php.
Installation
composer require simonet85/laravel-deepl
php artisan vendor:publish --tag=deepl-config # optionnel
Configuration (.env)
| Variable | Défaut | Rôle |
|---|---|---|
DEEPL_API_KEY |
– | Clé d'API. Une clé se terminant par :fx utilise l'API gratuite. Ne la commitez jamais. |
DEEPL_SOURCE_LANG |
fr |
Langue source. Vide = détection automatique par DeepL. |
DEEPL_FORMALITY |
– | default, more, less, prefer_more, prefer_less. |
DEEPL_CONTEXT |
– | Contexte libre (non facturé) pour affiner les traductions. |
DEEPL_CACHE |
true |
Met les traductions en cache. |
DEEPL_CACHE_STORE |
défaut Laravel | Magasin de cache à utiliser. |
DEEPL_CACHE_TTL |
30 jours | Durée du cache, en secondes. |
DEEPL_BATCH_SIZE |
50 |
Textes par requête (maximum DeepL : 50). |
DEEPL_SERVER_URL |
auto | Serveur personnalisé (proxy). |
target_languages (dans config/deepl.php) associe vos locales aux codes exigés par DeepL, par exemple en => en-GB.
Utilisation
use Simonet85\LaravelDeepL\Facades\DeepL; DeepL::translate('Bonjour', 'en'); // "Hello" DeepL::translate(['a' => 'Merci', 'b' => 'Au revoir'], 'de'); // clés conservées DeepL::translate('Il reste :count places', 'en'); // :count est préservé DeepL::usage(); // ['used' => …, 'limit' => …, 'remaining' => …]
Les textes vides ne sont pas envoyés, et les caractères & < > sont échappés puis restaurés.
Commandes Artisan
php artisan deepl:translate en # complète lang/en.json avec les clés manquantes php artisan deepl:translate es --dry-run # liste ce qui serait traduit, sans appeler DeepL php artisan deepl:translate en --force # retraduit aussi les clés existantes php artisan deepl:translate de --scan=app --scan=resources/js php artisan deepl:usage # caractères consommés ce mois-ci
deepl:translate collecte les clés de tous les lang/*.json existants (ce qui couvre les clés construites dynamiquement, comme __(item.title), que le scanner ne peut pas voir) et dans les littéraux __('…'), trans('…'), @lang('…') des dossiers scan_paths (app, resources/js, resources/views par défaut). Les clés de type auth.failed sont ignorées. Les traductions déjà présentes sont conservées : relisez et corrigez-les à la main sans crainte de les perdre.
Tests
composer install vendor/bin/phpunit
Les tests utilisent un faux client : aucun appel réseau, aucun caractère consommé.
Licence
MIT