iOS (Swift)
Le package Swift translate-projects-ios traduit le String Catalog de votre app (Localizable.xcstrings) dans chaque langue que vous configurez. Les traductions sont écrites dans le même catalogue, donc Text("..."), String(localized:) et Xcode fonctionnent comme d'habitude. Il s'utilise comme plugin Xcode ou depuis le terminal, et n'a aucune dépendance.
Prérequis
- Xcode 15 ou version ultérieure (Swift 5.9 ou version ultérieure).
- Une app avec un String Catalog (
Localizable.xcstrings). - Un projet et un token API de Translate Projects. Consulte Premiers pas.
1. Ajoutez le package
Dans Xcode : File → Add Package Dependencies et collez l'URL du dépôt :
https://github.com/translate-projects/translate-projects-ios

Lorsque Xcode demande à quel target ajouter le produit, laissez None : le package ne fait pas partie de votre app, il fournit seulement la commande de traduction.

2. Configurez
Créez translate-projects.json à côté de votre .xcodeproj (ou Package.swift) :
{
"sourceLang": "es",
"targetLangs": ["en", "pt-BR", "fr"],
"file": "MyApp/Localizable.xcstrings",
"tokenFile": ".translate-projects-token"
}
| Option | Obligatoire | Description |
|---|---|---|
sourceLang | Oui | Langue de base du catalogue. Doit être la langue par défaut du projet. |
targetLangs | Oui | Langues cibles, avec les codes de l'API (en, pt-BR, zh-Hans). |
file | Non | Chemin du catalogue. Si le projet ne contient qu'un seul .xcstrings, il est trouvé automatiquement. |
tokenFile | Non | Fichier contenant le token API (uniquement le token ou une ligne TRANSLATE_PROJECTS_API_KEY=...). Sans lui, la variable d'environnement TRANSLATE_PROJECTS_API_KEY est utilisée. |
Ajoutez le fichier du token à .gitignore : ne le committez jamais dans le dépôt.
3. Traduisez
Dans Xcode : clic droit sur le projet dans le navigateur → TranslateProjects. La première fois, Xcode demande l'autorisation d'écrire dans le projet et de se connecter au réseau.
Depuis le terminal ou en CI :
git clone https://github.com/translate-projects/translate-projects-ios
swift run -c release --package-path translate-projects-ios translate-projects-ios --directory .
Si votre projet est un package Swift :
swift package --allow-writing-to-package-directory --allow-network-connections all translate
Toutes les options existent aussi sous forme de flags : --source es --langs en,pt-BR --file ... --token-file .... Avec --force, toutes les langues sont retraduites.
Fichiers générés
MyApp/
├── Localizable.xcstrings ← les traductions sont ajoutées ici
└── Localizable.translate-projects.json ← cache, committez-le
Committez les deux fichiers. La compilation de l'app n'appelle jamais l'API : seule la commande de traduction le fait.
Ce qui est respecté
- Les placeholders (
%@,%lld,%1$@,%.2f,%#@nom@) : si une traduction en perd un ou le modifie, elle n'est pas écrite et l'app affiche le texte original. - Les pluriels, les variations par appareil et les substitutions. Chaque langue reçoit ses propres catégories de pluriel (
pt-BR: one, many, other). - Les textes marqués « Don't translate » et les textes obsolètes ne sont pas envoyés. Les commentaires sont conservés.
- Les textes sans lettres (
"","$9.300","%@") ne sont pas envoyés. - Les modifications manuelles : si vous changez une traduction dans Xcode, elle est respectée lors des exécutions suivantes jusqu'à ce que son texte original change.
--forceles écrase.
Cache
Une deuxième exécution sans nouveaux textes effectue deux requêtes et ne traduit rien. Si quelqu'un corrige une traduction dans le panneau de Translate Projects, l'exécution suivante la télécharge sans --force ; vos modifications manuelles dans le fichier gardent toujours la priorité. Si certains textes changent, seuls ceux-ci sont envoyés et seules les langues obsolètes sont retraduites. Plus de détails dans Cache et erreurs.
Erreurs courantes
- Le token est manquant (
MISSING_API_KEY: set TRANSLATE_PROJECTS_API_KEY): ajouteztokenFiledanstranslate-projects.jsonou exportez la variable. - Plusieurs catalogues (
Several .xcstrings files): indiquez lequel traduire avecfileou--file. sourceLanguagedifférent:sourceLangdoit correspondre à la langue de base du catalogue et à la langue par défaut du projet.- Textes non traduits (
strings without translation, run again to resume): vérifiez que le projet a bien configuré le modèle et la clé d'IA, puis relancez : seuls les textes manquants sont demandés.
🚀 Automatisez vos traductions gratuitement
Translate Projects est gratuit. Vous créez votre projet, connectez la clé de votre fournisseur d'IA et ne lui payez que ce que vous dépensez.
- Sans forfaits ni carte de crédit: Toutes les fonctionnalités sont disponibles dès le premier jour.
- Utilisez votre propre IA: Claude, OpenAI, DeepSeek ou Gemini. Votre clé est stockée chiffrée.
- Réseau de traductions partagé: Si un texte a déjà été traduit, vous le recevez instantanément sans dépenser votre clé.
- Panneau d'administration: Vérifiez et modifiez toutes vos traductions depuis un seul endroit.
Nous sommes là pour vous aider
Si vous avez des questions, besoin d'aide ou souhaitez contribuer, n'hésitez pas à me contacter. Je suis à votre disposition pour vous soutenir dans tout ce dont vous avez besoin.
- Site web: neiderruiz.com
- GitHub: @neiderruiz
- Twitter: @neiderruiz
- YouTube: Neider Ruiz
Soutenez le projet
Si ce projet vous a été utile, je vous invite à m'offrir un café. Votre soutien m'aide à continuer de m'améliorer et à créer du contenu de valeur. Merci d'être là ! ☕