Traduire votre application localement avec les LLM et MLX

Les API de traduction cloud envoient les chaines de votre application a des serveurs externes. Pour les equipes qui construisent des applications de sante, de finance ou gouvernementales, c'est un probleme de conformite. Le framework MLX d'Apple fait tourner de grands modeles de langage directement sur la puce Apple Silicon de votre Mac. LocaleKit utilise MLX pour traduire l'integralite de votre projet localement - pas de cle API, pas d'internet, aucune donnee qui quitte votre machine.
Cet article explique comment fonctionne la traduction par LLM sur l'appareil, quand elle est preferable aux API cloud, et comment la configurer avec LocaleKit.
Reference docs
La documentation complete du CLI est disponible sur docs.localekit.app
Qu'est-ce que MLX et pourquoi l'utiliser pour la traduction ?
MLX est le framework de machine learning d'Apple pour Apple Silicon. Il fait tourner des modeles transformer (la meme architecture derriere GPT, Qwen et Gemma) directement sur votre puce M, en utilisant la memoire unifiee partagee entre CPU et GPU.
Pour la traduction d'applications, cela signifie que vous pouvez faire tourner un modele comme Qwen3 avec le support de 119 langues directement sur votre MacBook. Pas de cle API, pas de connexion internet, pas de donnees qui quittent votre machine.
Quand le MLX sur l'appareil a du sens
- Votre projet traite des donnees sensibles (dossiers medicaux, informations financieres, contenu classifie)
- La politique de l'entreprise interdit l'envoi de code source a des services tiers
- Vous voulez un cout nul - pas de facturation au mot ou au token
- Vous travaillez hors ligne ou sur des reseaux restreints
- Vous devez traduire de grands volumes sans limites de taux
Quand les API cloud restent le meilleur choix
- Vous avez besoin de la meilleure precision pour les langues europeennes (DeepL est difficile a battre pour EN-DE, EN-FR)
- La vitesse compte plus que la confidentialite - les API cloud traitent plus vite que l'inference sur l'appareil
- Vous traduisez un petit nombre de chaines et vous avez deja une cle API configuree
Comment LocaleKit utilise MLX
LocaleKit encapsule le pipeline d'inference MLX dans une seule commande CLI. Vous choisissez un modele, vous le pointez sur votre projet, et il traduit chaque cle manquante via l'inference sur l'appareil. Le modele se telecharge une fois et se met en cache localement.
# Translate with the default MLX model (Qwen3 4B)
$ localekit translate --engine mlx
Downloading mlx-community/Qwen3-4B-4bit... done (2.5 GB)
Loading model into memory... done (3.1s)
Translating Localizable.xcstrings:
en-US -> de-DE: 42 keys... done (28s)
en-US -> fr-FR: 42 keys... done (26s)
en-US -> ja-JP: 42 keys... done (31s)
126 translations written.Choisir le bon modele pour votre Mac
Les modeles plus gros produisent de meilleures traductions mais necessitent plus de RAM et tournent plus lentement. Voici comment choisir en fonction de votre materiel :
Modeles MLX par configuration Mac
Mac 8 Go
localekit translate \
--engine mlx
# Default: Qwen3-4B-4bit
# Download: 2.5 GB
# RAM usage: ~3 GBQwen3 4B est le modele par defaut. Bonne qualite dans la plupart des langues. Tient sur un Mac 8 Go avec Xcode ouvert en meme temps.
Mac 16 Go
localekit translate \
--engine mlx \
--mlx-model \
mlx-community/Qwen3-30B-A3B-4bitQwen3 30B est un modele mixture-of-experts. Seuls 3B de parametres s'activent par token, donc il tourne vite malgre sa taille. Meilleur ratio qualite/vitesse sur 16 Go.
Mac 32 Go+
localekit translate \
--engine mlx \
--mlx-model \
mlx-community/Qwen3-32B-4bitQwen3 32B est le modele dense complet. La meilleure qualite de traduction pour les releases en production, surtout pour les paires de langues moins courantes.
Premier lancement vs lancements suivants
Le modele se telecharge une fois depuis Hugging Face et se met en cache dans ~/Library/Caches/huggingface/. Ensuite, localekit translate --engine mlx fonctionne totalement hors ligne.
Workflow complet : traduire un projet Xcode avec MLX
Workflow complet de traduction MLX
Initialiser votre projet
Lancez localekit init a la racine de votre projet Xcode. Cela cree .localekitrc.yml avec les parametres auto-detectes.
Verifier le statut de traduction actuel
Lancez localekit status --detailed pour voir la couverture par langue et le nombre de cles manquantes.
Traduire avec MLX
Lancez localekit translate --engine mlx --languages de-DE,fr-FR,ja-JP. Le modele se charge, traduit toutes les cles manquantes et ecrit directement dans votre fichier .xcstrings.
Valider les resultats
Lancez localekit validate pour verifier les placeholders manquants (par exemple un %@ en anglais absent de la traduction allemande).
Relire et commiter
Ouvrez votre fichier .xcstrings dans Xcode pour relire les traductions en contexte. Commitez les traductions et le fichier .localekit-snapshot.json.
$ localekit status --detailed
Localizable.xcstrings (42 entries)
Base language: en-US
de-DE: 34/42 translated (81%)
fr-FR: 38/42 translated (90%)
ja-JP: 20/42 translated (48%)
$ localekit translate --engine mlx --languages de-DE,fr-FR,ja-JP
de-DE: translating 8 missing keys... done
fr-FR: translating 4 missing keys... done
ja-JP: translating 22 missing keys... done
34 translations written.
$ localekit validate
0 errors, 0 warnings.Qualite de traduction : MLX vs moteurs cloud
Nous avons teste Qwen3 30B contre DeepL et GPT-4o sur 200 chaines d'interface iOS dans 5 langues.
Pour les langues europeennes (allemand, francais, espagnol), DeepL produit toujours le resultat le plus naturel. L'ecart est faible - Qwen3 30B obtient un score a 5-10 % pres en evaluation humaine.
Pour les langues asiatiques (japonais, coreen, chinois), Qwen3 est au niveau de GPT-4o et parfois meilleur pour les chaines d'interface courtes ou le contexte est limite.
Pour tous les moteurs, la plus grande source d'erreurs n'est pas la traduction elle-meme mais la gestion des placeholders. C'est pour cela que localekit validate existe - il detecte les inadeguations de chaines de format quel que soit le moteur.
Le meilleur moteur de traduction est celui que votre equipe securite approuve. Pour les secteurs reglementes, cela signifie uniquement sur l'appareil.
Combiner les moteurs pour de meilleurs resultats
Vous pouvez utiliser plusieurs moteurs sur le meme projet. LocaleKit ne traduit que les cles manquantes, donc les moteurs ne s'ecrasent pas mutuellement.
# Use MLX for Asian languages (Qwen3 excels here)
$ localekit translate --engine mlx --languages ja-JP,ko-KR,zh-CN
# Use DeepL for European languages (best accuracy)
$ localekit translate --engine deepl --languages de-DE,fr-FR,es-ES
# Both runs fill in different gaps. Nothing gets overwritten.MLX en CI/CD
MLX necessite Apple Silicon, donc votre runner CI doit etre un Mac. GitHub Actions propose des runners macos-latest avec des puces M.
name: Translate with MLX
on:
push:
paths:
- "**/Localizable.xcstrings"
jobs:
translate:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Install LocaleKit
run: |
brew tap hexagone-studio/localekit https://github.com/hexagone-studio/LocaleKit.git
brew install localekit-cli
- name: Login
run: localekit login --email ${{ secrets.LOCALEKIT_EMAIL }} --password ${{ secrets.LOCALEKIT_PASSWORD }}
- name: Translate and validate
run: |
localekit translate --engine mlx
localekit validate --strict
- name: Commit
run: |
git config user.name "LocaleKit Bot"
git config user.email "bot@localekit.app"
git add -A
git diff --staged --quiet || git commit -m "Update translations (MLX)"
git pushCout CI
Les runners macOS GitHub Actions coutent 10 fois plus par minute que Linux. Pour les jobs frequents, traduisez localement avec localekit sync a la place - ca fait tourner MLX sur votre Mac et pousse une PR.
FAQ traduction MLX
Combien d'espace disque les modeles MLX occupent-ils ?
Qwen3 4B utilise 2,5 Go. Qwen3 30B utilise 16 Go. Les modeles se mettent en cache dans ~/Library/Caches/huggingface/ et persistent entre les lancements. Supprimez-les a tout moment pour liberer de l'espace.
Peut-on utiliser un modele custom fine-tune ?
Oui. Tout modele compatible MLX sur Hugging Face fonctionne. Passez l'identifiant du modele avec --mlx-model. Le fine-tuning sur la terminologie de votre domaine donne les meilleurs resultats.
MLX supporte-t-il plus de langues que DeepL ?
Oui. Qwen3 supporte 119 langues contre 33 pour DeepL. La qualite varie selon la paire de langues - les langues europeennes et CJK fonctionnent bien. Les paires moins courantes peuvent necessiter un modele plus gros.
La traduction est-elle deterministe ?
Pas exactement. Les LLM sont probabilistes, donc lancer la meme traduction deux fois peut produire une formulation legerement differente. Le sens reste coherent. DeepL est deterministe si vous avez besoin de reproductibilite exacte.
Peut-on combiner MLX et les moteurs cloud sur le meme projet ?
Oui. Lancez localekit translate --engine mlx --languages ja-JP d'abord, puis --engine deepl --languages de-DE. LocaleKit ne remplit que les cles manquantes, donc rien n'est ecrase.
Arrêtez de gérer vos fichiers de traduction manuellement
LocaleKit détecte, traduit et synchronise tous vos fichiers de localisation — iOS, Android, Flutter et plus. Tout tourne localement sur votre machine.
Respect de la vie privée. Aucun cloud requis.