Cómo localizar su aplicación de iOS: guía de internacionalización de SwiftUI
Prepare su aplicación en Xcode, traduzca los archivos .xcstrings con IA y, a continuación, suba capturas de pantalla para que PTC (Private Translation Cloud) revise la aplicación de iOS renderizada en todos los idiomas. Esta guía recorre todo el flujo de trabajo utilizando SwiftUI y los String Catalogs de Xcode 15+, el método moderno recomendado por Apple. Para obtener una visión general del servicio multiplataforma que cubre tanto iOS como Android, consulte traducir aplicaciones de iOS y Android con IA.
Parte 1: Cómo funciona la localización en iOS
La localización en iOS es el proceso de adaptar el texto, el formato y los recursos de su aplicación para admitir varios idiomas y regiones. Con los String Catalogs introducidos en Xcode 15, el flujo de trabajo es drásticamente más sencillo que el enfoque heredado de .strings / .stringsdict.
Internacionalización frente a localización
Se trata de dos etapas distintas que deben ocurrir en este orden:
- Internacionalización (i18n) es la base técnica. Usted estructura su código para que el texto, las imágenes y el formato puedan variar según la configuración regional sin realizar cambios en el código. Se hace una sola vez, idealmente antes de su primer lanzamiento.
- Localización (l10n) es el trabajo continuo que sigue. Consiste en redactar traducciones, ajustar los diseños y proporcionar recursos específicos de cada región para cada nuevo idioma.
El error más común es tratar la localización como una tarea posterior al lanzamiento, solo para descubrir que la base de código no está preparada. Volver atrás para corregir cadenas codificadas, diseños de dirección fija y formateadores que no detectan la configuración regional en una aplicación existente lleva mucho más tiempo que crearla pensando en la localización desde el principio.
Cómo Xcode 15+ utiliza Localizable.xcstrings como fuente única de verdad
El modelo de localización de Apple en Xcode 15+ se centra en un único archivo por target: Localizable.xcstrings. Este archivo es un String Catalog en formato JSON que contiene su idioma de origen más cada traducción, incluyendo variaciones de plural, variaciones específicas del dispositivo y sustituciones.
Xcode extrae automáticamente las cadenas localizables de su código SwiftUI (cualquier Text("..."), Label("...", systemImage:), Button("...") y cualquier interpolación de cadenas que utilice LocalizedStringKey). Al ejecutar la compilación de su aplicación, se rellena el archivo Localizable.xcstrings con cada cadena de origen extraída.
Apple admite varios formatos: .strings (clave-valor heredado), .stringsdict (plurales heredados) y .xcstrings (moderno). Los proyectos nuevos deberían comenzar con .xcstrings. Los proyectos existentes basados en .strings pueden migrar a través de File > New > File > String Catalog y la opción de importación de Xcode. La documentación oficial de localización de Apple cubre todos los antecedentes.
Parte 2: Configurar su proyecto de Xcode para la localización
Paso 1: Activar la localización. Abra su proyecto en Xcode y seleccione el archivo del proyecto en el Navigator. En la pestaña Info, desplácese hasta Localizations. El inglés ya aparecerá como idioma base. Haga clic en + para añadir cada idioma de destino (español, francés, árabe, etc.).
Paso 2: Crear un String Catalog. Haga clic con el botón derecho en su proyecto y seleccione New File from Template. Busque String Catalog y añádalo. Mantenga el nombre predeterminado Localizable.xcstrings. Compile el proyecto una vez con Cmd+B. Xcode escaneará su código, encontrará cada cadena localizable y rellenará el catálogo automáticamente.
Paso 3: Marcar las cadenas para localización. En SwiftUI, cualquier cadena literal pasada a Text(_:), Label, etiquetas de acción de Button, títulos de navegación, etc., se convierte automáticamente en una LocalizedStringKey:
import SwiftUI
struct WelcomeView: View {
let userName: String
let unreadCount: Int
var body: some View {
VStack {
Text("Welcome, \(userName)!")
Text("You have \(unreadCount) unread messages")
Button("Get Started") {
// action
}
}
}
}
Existen dos patrones en los que Xcode no puede extraer cadenas automáticamente. Ambos fallan de forma silenciosa:
Consejo 1: Evite pasar variables a Text. Cuando pasa una variable a una vista Text en lugar de una cadena literal, SwiftUI la trata como una cadena de texto plano y omite por completo la búsqueda en el catálogo:
// NOT localized - SwiftUI treats the variable as a plain String
let title = "welcome_title"
Text(title)
// Localized correctly
Text(LocalizedStringKey(title))
Consejo 2: Use String(localized:) fuera de las vistas. Para las cadenas que necesite localizar en un view model, una función auxiliar o cualquier lugar fuera de una vista de SwiftUI, utilice String(localized:) en lugar de una cadena simple:
let errorMessage = String(localized: "error_generic")
Paso 4: Añadir variantes de plural y de dispositivo. Las cadenas a menudo necesitan formas diferentes según el contexto.
Para la pluralización, comience con la cadena en su vista de SwiftUI:
Text("\(bookCount) books on your shelf")
Abra el String Catalog, haga clic con el botón derecho en la clave y elija Vary by Plural. Xcode genera las categorías de plural automáticamente y las rellena con la cadena de origen. Para el inglés verá One y Other. Corrija el campo One a "%lld book on your shelf". Marque ambos como revisados.
Cuando envíe posteriormente el catálogo a PTC, la estructura de plurales viajará con el archivo. Para el árabe, PTC genera traducciones para las seis categorías de plural (zero, one, two, few, many, other) porque la gramática árabe requiere las seis. El español necesita dos, al igual que el inglés.
Para las variantes de dispositivo (por ejemplo, “Tap to continue” en iPhone frente a “Click to continue” en Mac), haga clic con el botón derecho en la clave y elija Vary by Device. Añada los dispositivos que desee personalizar e introduzca la cadena adecuada para cada uno. iOS servirá la versión que coincida con el dispositivo actual en tiempo de ejecución.
Parte 3: Traducir sus archivos .xcstrings con PTC
Para proyectos pequeños, podría abrir cada columna de idioma en el catálogo y escribir las traducciones directamente. A medida que su aplicación crece, eso se vuelve inmanejable con cientos de claves y docenas de idiomas. PTC se encarga de la subida, traducción y sincronización.
Paso 1: Exportar su String Catalog desde Xcode. Vaya a Product > Export Localizations. Xcode empaqueta su String Catalog en un archivo .xcloc por cada idioma de destino. Para PTC, solo necesita el archivo .xcstrings que se encuentra dentro del paquete .xcloc. Haga clic con el botón derecho en el .xcloc exportado en el Finder y seleccione Mostrar contenido del paquete para encontrar Localizable.xcstrings.
Si ve una notificación que indica “Unable to build project for localization string extraction”, su proyecto utiliza API exclusivas de iOS con las que Xcode no puede compilar contra su SDK interno de macOS durante la extracción de cadenas. Solución: seleccione el target del proyecto en TARGETS, vaya a Build Settings, busque “Use Compiler to Extract Swift Strings” y establézcalo en No. Luego exporte de nuevo.
Paso 2: Registrarse en PTC. La prueba gratuita cubre 20.000 palabras en 2 idiomas, lo cual es suficiente para localizar la mayoría de las aplicaciones. Después de la prueba, PTC funciona mediante pago al consumo. Sin suscripciones, las primeras 500 palabras de cada mes son gratuitas.
Paso 3: Configurar su proyecto y traducir. Arrastre el archivo Localizable.xcstrings a PTC. Deje el nombre del archivo de salida como Localizable.xcstrings. Xcode espera ese nombre exacto al resolver las cadenas localizadas. Seleccione sus idiomas de destino.
PTC genera automáticamente una descripción de su aplicación a partir del archivo subido. Revísela y edítela si es necesario. Si tiene archivos de traducción existentes, súbalos para que PTC pueda coincidir con su estilo. De lo contrario, traduzca desde cero. Añada términos al glosario. PTC añade el nombre de su aplicación automáticamente. Añada cualquier terminología específica de la marca que deba traducirse de una forma determinada o no traducirse en absoluto. Haga clic en Comenzar traducción.
Paso 4: Revisar y descargar. Una vez completada la traducción, la pestaña Traducciones muestra cada cadena de origen junto a su traducción. Cualquier persona que añada al proyecto puede editar las traducciones directamente. Si algo no parece correcto, informe de un problema con una traducción específica y solicite una re-traducción gratuita con IA. PTC aprende de los comentarios y los aplica a futuras cadenas en el mismo proyecto.
Si alguna cadena traducida supera su límite de longitud, aparecerá resaltada. Tiene tres opciones: aceptar la traducción más larga si su interfaz puede acomodarla, solicitar una re-traducción que se ajuste al límite actual o ajustar el límite en Configuración > Longitudes de traducción.
Parte 4: Integrar los archivos .xcstrings traducidos en su proyecto de Xcode
Tiene tres opciones.
Opción 1: Descargar archivos manualmente desde PTC. Vaya a la pestaña Archivos de recursos y descargue el ZIP. Contiene un único Localizable.xcstrings con sus cadenas de origen en inglés y todas las traducciones. Cierre Xcode, reemplace el archivo Localizable.xcstrings existente en la carpeta de su proyecto por el de PTC y, a continuación, reinicie Xcode. Sus traducciones aparecerán en el String Catalog con una marca de verificación junto a cada idioma totalmente traducido.
Opción 2: Integrar con Git. Si su proyecto reside en GitHub, GitLab o Bitbucket, conecte PTC directamente. La integración con Git es una función Pro. Active el pago al consumo para acceder a ella. En su panel de control de PTC, vaya a Configuración > Merge Requests y haga clic en Añadir integración con Git. Proporcione la URL de su repositorio, conceda acceso a PTC y elija su rama y archivos de origen. PTC enviará un merge request con las traducciones.
Opción 3: Usar la API. La API de PTC le otorga un control total sobre cuándo y cómo se incorporan las traducciones a su pipeline de compilación. Con el pago al consumo activado, vaya a Configuración > Gestionar tokens de API, haga clic en Añadir token de acceso y, a continuación, consulte la referencia de la API de PTC para conocer los endpoints.
Un selector de idioma integrado en la aplicación (algunas aplicaciones lo necesitan) puede anular la configuración regional del sistema por vista a través del entorno de SwiftUI:
import SwiftUI
@MainActor
class LocaleManager: ObservableObject {
@Published var currentLocale: Locale = .current
func setLocale(_ identifier: String) {
currentLocale = Locale(identifier: identifier)
UserDefaults.standard.set([identifier], forKey: "AppleLanguages")
}
}
struct LanguageSettingsView: View {
@EnvironmentObject var localeManager: LocaleManager
var body: some View {
List {
Button("English") { localeManager.setLocale("en") }
Button("Español") { localeManager.setLocale("es") }
Button("Français") { localeManager.setLocale("fr") }
}
.environment(\.locale, localeManager.currentLocale)
}
}
Cambiar AppleLanguages en tiempo de ejecución requiere reiniciar la aplicación para algunas cadenas del sistema. La anulación del entorno de SwiftUI surte efecto inmediatamente para las vistas dentro de ese ámbito.
Parte 5: Probar su aplicación de iOS localizada
Probar con la configuración de idioma del esquema. La forma más rápida de probar un idioma específico es a través de su esquema de Xcode. Vaya a Product > Scheme > Edit Scheme, haga clic en la pestaña Options, cambie App Language y App Region a la configuración regional que desee y ejecute con Cmd+R. Funciona bien para la mayoría de los idiomas. Debería ver el mismo diseño que en inglés con todo el texto cambiado.
Probar árabe y otros idiomas RTL. La configuración de idioma del esquema puede ser poco fiable en el Simulator para RTL. Utilice los ajustes de idioma del propio Simulator:
- Ejecute la aplicación con Cmd+R para abrir el Simulator.
- Presione Cmd+Home para ir a la pantalla de inicio.
- Abra Settings > General > Language & Region.
- Pulse Add Language, seleccione árabe y establézcalo como idioma principal.
- El Simulator se reiniciará. Abra su aplicación desde la pantalla de inicio.
Compruebe que el texto aparece en árabe y que el diseño se refleja correctamente, con el título de navegación y el contenido alineados a la derecha. Para pruebas de previsualización sin necesidad de cambiar el idioma, Edit Scheme > Options > Application Language > Right-to-Left Pseudolanguage es una comprobación más rápida. Para pruebas de expansión de texto, use Double-Length Pseudolanguage para ver cómo los diseños manejan cadenas un 30-40 % más largas antes de decidirse por un idioma de destino.
Mejores prácticas de localización en iOS
- Compruebe su interfaz para diferentes longitudes de texto. El alemán suele ser un 30 % más largo que el inglés. El francés y el español, un 20 %. Utilice el sistema de diseño flexible de SwiftUI, deje que las etiquetas crezcan y se ajusten de forma natural, evite restricciones de ancho fijo en elementos de texto y realice pruebas en varios idiomas durante el desarrollo.
- No omita las variantes de pluralización. El ruso tiene cinco categorías de plural, el árabe tiene seis, el japonés no tiene ninguna. Los String Catalogs gestionan esto al añadir el idioma. Asegúrese de que todos los campos generados estén rellenos antes del lanzamiento.
- Localice imágenes y recursos. Las imágenes con texto o elementos visuales culturalmente específicos necesitan variantes localizadas. En
Assets.xcassets, seleccione la imagen y, en el Attributes Inspector, haga clic en Localize. Elija los idiomas para los que desea variantes y reemplace cada una con la versión adecuada. iOS servirá la imagen correcta basándose en la configuración regional del usuario. - Mantenga completo su idioma base. Su idioma base (normalmente el inglés) es el recurso de reserva para cualquier traducción que falte. Un idioma base incompleto puede causar fallos inesperados incluso en idiomas que, por lo demás, están totalmente traducidos. Xcode marca las cadenas base faltantes o desactualizadas durante la compilación.
- Localice su ficha de la App Store. Una aplicación localizada con una ficha solo en inglés pierde usuarios en la fase de descubrimiento. En App Store Connect puede localizar el nombre de la aplicación, el subtítulo, la descripción y las palabras clave por territorio. Las palabras clave son especialmente valiosas: Apple indexa palabras clave de múltiples configuraciones regionales por territorio, multiplicando de hecho su presupuesto de caracteres para palabras clave más allá de los 100 caracteres estándar. Utilice la función Pegar para traducir de PTC para el contenido de la App Store.
- Use formateadores que detecten la configuración regional. Utilice
Date.FormatStyle,Decimal.FormatStyley formateadores que detecten elLocale. Nunca codifique directamente"$"o"MM/DD/YYYY". - Use
%lldpara recuentos de enteros yString(localized: "You have ^[\(count) message](inflect: true)")donde se aplique la concordancia gramatical automática de Apple.
Revisión visual de la traducción de su aplicación de iOS: lance sin control de calidad manual por idioma
Después de que PTC traduzca sus archivos .xcstrings, aún debe verificar la aplicación en funcionamiento en cada idioma. Tradicionalmente, esto suponía una fase de control de calidad manual de varios días por cada lanzamiento. Una etiqueta traducida puede desbordar una barra de navegación en alemán. “Send” puede traducirse como un sustantivo en francés cuando el botón necesitaba un verbo. Una cadena en inglés codificada fuera de Text(_:) resultará flagrantemente evidente al no estar traducida en la aplicación de iOS en ejecución.
AI Visual QA de PTC sustituye esa fase. Para aplicaciones nativas de iOS (el flujo de la extensión de navegador no se aplica), utilice la subida de capturas de pantalla. Capture las pantallas críticas de la aplicación en ejecución en cada idioma de destino (inicio de sesión, pestaña principal, configuración, casos límite) y súbalas a PTC. La IA de visión de PTC inspeccionará cada pantalla y:
- Corregirá problemas en los archivos
.xcstringscuando PTC tenga el control sobre ellos. Volverá a traducir una categoría gramatical incorrecta, elegirá un sinónimo más corto que quepa en una barra de navegación o regenerará una forma de plural con la concordancia gramatical correcta. - Generará un prompt para Cursor / Claude Code cuando el problema resida en su código Swift. Una
LocalizedStringKeyfaltante, unStringcodificado fuera del sistema de localización o una frase construida por concatenación en lugar de sustitución.
El resultado: una aplicación de iOS verificada en cada lanzamiento. No un archivo .xcstrings traducido con el control de calidad manual aún pendiente.
Traduzca su ficha de la App Store, notas de lanzamiento y notificaciones push
La descripción de la App Store, las notas de lanzamiento de novedades y el texto de las notificaciones push residen fuera de Localizable.xcstrings. La función Pegar para traducir de PTC gestiona esos textos en el mismo proyecto. Pegue el texto de origen en el panel de control de PTC, elija los idiomas de destino y reciba las traducciones que utilizan el mismo glosario y voz de marca que las cadenas internas de su aplicación. Apple indexa palabras clave de múltiples configuraciones regionales por territorio, por lo que las fichas localizadas son especialmente valiosas para el descubrimiento.
Traduzca contenido de usuario en la aplicación con la API de PTC
El chat interno, las publicaciones en redes sociales y las reseñas de usuarios necesitan traducción a medida que llega el contenido. La API REST de PTC traduce este contenido bajo demanda con autenticación mediante token Bearer, utilizando el mismo glosario y voz de marca que las traducciones de sus archivos .xcstrings.
Solucionar problemas de localización en iOS que no funciona
La causa más común es que el archivo de localización no está incluido en el target de la aplicación. Haga clic en Localizable.xcstrings en el Navigator, abra el File Inspector y compruebe que el target de su aplicación esté marcado en Target Membership. Confirme también que el idioma figure en la sección Localizations de su proyecto, en la pestaña Info. Si ambos parecen correctos, limpie la carpeta de compilación con Shift+Cmd+K y vuelva a compilar.
Formatos de archivo de localización en iOS: .xcstrings, .strings, .stringsdict, .xliff
.xcstrings (String Catalog) es el formato predeterminado actual desde Xcode 15. Un único archivo basado en JSON que consolida todas las cadenas, reglas de plural y variantes específicas del dispositivo. .strings es el formato clave-valor heredado, aún válido en bases de código antiguas, emparejado con .stringsdict para los plurales. .xliff y .xcloc son formatos de exportación para entregar a traductores; no son formatos de almacenamiento.
Localice el nombre de su aplicación con InfoPlist.strings
Cree un archivo InfoPlist.strings y localícelo para cada idioma admitido. En cada versión de idioma, añada CFBundleDisplayName = "Nombre de su aplicación traducido";. Seleccione el archivo en el Navigator, abra el File Inspector y haga clic en Localize para añadir variantes de idioma. iOS mostrará el nombre correcto de la aplicación según el idioma del dispositivo.
Cambiar el idioma de la aplicación de iOS sin reiniciar
iOS no proporciona una API nativa para esto. El enfoque estándar es establecer AppleLanguages en UserDefaults y pedir al usuario que reinicie:
UserDefaults.standard.set(["es"], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
El cambio surte efecto la próxima vez que se inicie la aplicación. Si necesita cambiar de idioma durante la sesión sin reiniciar, tendrá que gestionar la localización manualmente cargando el bundle correspondiente al idioma seleccionado.
Por qué iOS recurre al inglés para idiomas no admitidos
iOS utiliza su idioma base como recurso de reserva cuando una traducción no está disponible. Este es el comportamiento esperado. Para minimizar estos casos, asegúrese de que su String Catalog no muestre cadenas faltantes o desactualizadas antes de cada lanzamiento.
Qué tan precisa es la localización con IA para una aplicación de iOS completa
PTC utiliza IA para traducir archivos .xcstrings, .strings y .stringsdict en minutos, preservando automáticamente las reglas de plural y los marcadores de posición. La mayoría de las cadenas traducidas se publican sin ediciones. Para obtener los mejores resultados, proporcione información sobre su aplicación a PTC durante la configuración para que las traducciones reflejen el tono y la terminología adecuados.
A qué idiomas de iOS localizar primero
El español, el francés, el alemán, el japonés y el chino simplificado son puntos de partida comunes más allá del inglés. Si su aplicación ya tiene usuarios en una región específica, priorice su idioma primero. Para un menor coste de adaptación, comience con idiomas geográfica o culturalmente cercanos a su mercado base.
Localice su propia aplicación de iOS
Comience con la prueba gratuita de 30 días de PTC: 20.000 palabras de regalo, sin tarjeta de crédito. Suba su archivo Localizable.xcstrings, tradúzcalo en minutos y, a continuación, suba capturas de pantalla para que PTC verifique la aplicación renderizada.
Relacionado:
- Traducir aplicaciones de iOS y Android con IA: visión general del servicio multiplataforma.
- Cómo localizar su aplicación de Android: la guía equivalente para Android Studio.
- Referencia de la API de PTC: endpoints REST para la integración con CI.