Un workflow Alfred qui traduit avec un LLM
24 avril 2026
alfred-translate est un petit workflow Alfred 5 que j'ai construit pour moi. Tapez tt, puis ce que vous voulez traduire. Quatre traductions reviennent, dans l'ordre que vous avez configuré. ⏎ copie celle qui est surlignée, ⌘1–⌘4 permet de prendre l'une des autres.

Je vis aux Pays-Bas et je passe entre l'anglais, le néerlandais et le français dans la même après-midi. Les outils basés navigateur veulent tous un onglet, un collage, un clic. Celui-ci veut une frappe.
Ce qu'il y a sous le capot
Le workflow s'appuie par défaut sur OpenRouter avec Mistral Small 3.2 (24B). C'est environ 1,5 seconde de bout en bout, quelques centimes pour mille traductions, et tout reste dans l'UE. Le modèle tient l'idiome et le ton suffisamment bien pour que j'aie rarement à reprendre le résultat.
L'invite complète est « traduis ceci dans les langues suivantes, renvoie du JSON ». Mistral Small respecte la sortie structurée de façon fiable ; le workflow récupère donc quelque chose comme {"Dutch":"Hallo daar, vlinder.","French":"Bonjour, papillon.", ...}, et Alfred affiche une ligne par clé.
Le fournisseur comme script shell
Le choix de conception intéressant, c'est la couche fournisseur. Le workflow Alfred appelle providers/$PROVIDER.sh avec deux arguments, text et une liste de langues séparées par des virgules, et attend du JSON sur stdout. Deux fournisseurs sont livrés dans le dépôt :
openrouter.shposte sur l'endpoint de complétions de chat d'OpenRouter. Rapide.claude.shinvoque la CLI Claude Code avec--model haiku. Utile si vous payez déjà Claude Code par abonnement, mais le démarrage à froid de la CLI ajoute environ cinq secondes, ce qui est rude pour un workflow piloté à la frappe.
Un squelette codex.sh est aussi fourni pour brancher la CLI Codex. Ajouter votre propre fournisseur tient vraiment en une dizaine de lignes, parce que le contrat est « lis $1 et $2, écris du JSON sur stdout ».
Cette abstraction est la raison d'être du workflow. Claude Code est excellent pour tout le reste, mais cinq secondes d'init CLI pour une traduction font paraître Alfred lent. OpenRouter ramène les mêmes modèles Anthropic, Google et OpenAI à un seul appel HTTP, et l'abstraction du fournisseur me permet de retomber sur les CLI seulement quand j'en ai vraiment besoin.
Configuration
Tout se règle dans la boîte de dialogue Configure Workflow d'Alfred, sans toucher à un fichier :
| Variable | Par défaut | Rôle |
|---|---|---|
OPENROUTER_API_KEY | (vide) | Obligatoire. À récupérer sur openrouter.ai/keys. |
LANGS | Dutch,French,Spanish,English | L'ordre compte. La première entrée est le résultat principal. |
OPENROUTER_MODEL | mistralai/mistral-small-3.2-24b-instruct | N'importe quel modèle OpenRouter. Essayez google/gemini-2.5-flash pour la voie la plus rapide. |
La clé d'API est marquée variablesdontexport : si vous partagez le workflow, elle se retire toute seule.
Installation
Récupérez le dernier translate.alfredworkflow sur la page Releases, double-cliquez pour importer, collez votre clé OpenRouter, terminé. Ou clonez le dépôt et lancez ./build.sh pour le construire localement.
L'ensemble est open source sur GitHub. Les issues et pull requests sont bienvenues, en particulier pour de nouveaux fournisseurs.