iOS (Swift)
El paquete Swift translate-projects-ios traduce el String Catalog de tu app (Localizable.xcstrings) a cada idioma que configures. Las traducciones se escriben en el mismo catálogo, así que Text("..."), String(localized:) y Xcode funcionan como siempre. Se usa como plugin de Xcode o desde la terminal, y no tiene dependencias.
Requisitos
- Xcode 15 o superior (Swift 5.9 o superior).
- Una app con String Catalog (
Localizable.xcstrings). - Un proyecto y un API token de Translate Projects. Mira Primeros pasos.
1. Añade el paquete
En Xcode: File → Add Package Dependencies y pega la URL del repositorio:
https://github.com/translate-projects/translate-projects-ios

Cuando Xcode pregunte a qué target añadir el producto, deja None: el paquete no va dentro de tu app, solo aporta el comando para traducir.

2. Configura
Crea translate-projects.json junto a tu .xcodeproj (o Package.swift):
{
"sourceLang": "es",
"targetLangs": ["en", "pt-BR", "fr"],
"file": "MyApp/Localizable.xcstrings",
"tokenFile": ".translate-projects-token"
}
| Opción | Obligatorio | Descripción |
|---|---|---|
sourceLang | Sí | Idioma base del catálogo. Debe ser el idioma por defecto del proyecto. |
targetLangs | Sí | Idiomas destino, con los códigos de la API (en, pt-BR, zh-Hans). |
file | No | Ruta del catálogo. Si el proyecto tiene un solo .xcstrings, se encuentra solo. |
tokenFile | No | Archivo con el API token (solo el token o una línea TRANSLATE_PROJECTS_API_KEY=...). Sin él se usa la variable de entorno TRANSLATE_PROJECTS_API_KEY. |
Añade el archivo del token a .gitignore: nunca lo subas al repositorio.
3. Traduce
En Xcode: clic derecho en el proyecto en el navegador → TranslateProjects. La primera vez Xcode pide permiso para escribir en el proyecto y conectarse a la red.
Desde la terminal o 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 tu proyecto es un paquete Swift:
swift package --allow-writing-to-package-directory --allow-network-connections all translate
Todas las opciones también existen como flags: --source es --langs en,pt-BR --file ... --token-file .... Con --force se vuelven a traducir todos los idiomas.
Archivos que genera
MyApp/
├── Localizable.xcstrings ← las traducciones se añaden aquí
└── Localizable.translate-projects.json ← caché, haz commit de ella
Haz commit de los dos archivos. Compilar la app nunca llama a la API: solo el comando de traducir.
Qué respeta
- Los placeholders (
%@,%lld,%1$@,%.2f,%#@nombre@): si una traducción pierde o cambia uno, no se escribe y la app muestra el texto original. - Los plurales, las variaciones por dispositivo y las sustituciones. Cada idioma recibe sus propias categorías de plural (
pt-BR: one, many, other). - Los textos marcados como "Don't translate" y los obsoletos no se envían. Los comentarios se conservan.
- Los textos sin letras (
"","$9.300","%@") no se envían. - Las ediciones manuales: si cambias una traducción en Xcode, se respeta en las siguientes ejecuciones hasta que cambie su texto original.
--forcelas sobrescribe.
Caché
Una segunda ejecución sin textos nuevos hace dos peticiones y no traduce nada. Si alguien corrige una traducción en el panel de Translate Projects, la siguiente ejecución la baja sin --force; tus ediciones manuales en el archivo siguen teniendo prioridad. Si cambian algunos textos, solo esos se suben y solo se traducen los idiomas desactualizados. Más detalles en Caché y errores.
Errores comunes
- Falta el token (
MISSING_API_KEY: set TRANSLATE_PROJECTS_API_KEY): añadetokenFileentranslate-projects.jsono exporta la variable. - Varios catálogos (
Several .xcstrings files): indica cuál traducir confileo--file. sourceLanguagedistinto:sourceLangdebe coincidir con el idioma base del catálogo y con el idioma por defecto del proyecto.- Textos sin traducir (
strings without translation, run again to resume): revisa que el proyecto tenga configurados el modelo y la key de IA, y vuelve a ejecutar: solo se piden los que faltan.
🚀 Automatiza tus traducciones gratis
Translate Projects es gratuito. Creas tu proyecto, conectas la key de tu proveedor de IA y solo le pagas a él lo que gastes.
- Sin planes ni tarjeta de crédito: Todas las funciones están disponibles desde el primer día.
- Usa tu propia IA: Claude, OpenAI, DeepSeek o Gemini. Tu key se guarda cifrada.
- Red de traducciones compartida: Si un texto ya fue traducido, lo recibes al instante sin gastar tu key.
- Panel de administración: Revisa y edita todas tus traducciones desde un solo lugar.
Estamos aquí para ayudarte
Si tienes alguna pregunta, necesitas ayuda o quieres contribuir, no dudes en contactarme. Estoy a tu disposición para apoyarte en lo que necesites.
- Sitio web: neiderruiz.com
- GitHub: @neiderruiz
- Twitter: @neiderruiz
- YouTube: Neider Ruiz
Apoya el Proyecto
Si este proyecto te ha sido útil, te invito a invitarme un café. Tu apoyo me ayuda a seguir mejorando y creando contenido de valor. ¡Gracias por estar aquí! ☕