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 detalla 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 activos de su aplicación para que admitan varios idiomas y regiones. Con los String Catalogs introducidos en Xcode 15, el flujo de trabajo es considerablemente 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. Consiste en estructurar el código para que el texto, las imágenes y el formato puedan variar según la configuración regional sin necesidad de cambiar el código. Se realiza una sola vez, idealmente antes del primer lanzamiento.
- Localización (l10n) es el trabajo continuo posterior. Consiste en redactar traducciones, ajustar los diseños y proporcionar activos específicos 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 hardcoded, 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 desarrollar 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 el idioma de origen y todas las traducciones, incluidas las variantes de plural, las variaciones según el dispositivo y las 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 deben 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 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. Para el español, dos, al igual que en inglés.
Para las variaciones 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, esto 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 APIs 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 Pay-As-You-Go. Sin suscripción, y las primeras 500 palabras de cada mes son gratuitas.
Paso 3: Configurar su proyecto y traducir. Arrastre 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 ajustarse a 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 finalizada 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 retraducció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 de usuario puede alojarla, solicitar una retraducció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
Existen 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 se encuentra en GitHub, GitLab o Bitbucket, conecte PTC directamente. La integración con Git es una función Pro. Active Pay-As-You-Go 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 ofrece un control total sobre cuándo y cómo se incorporan las traducciones a su pipeline de compilación. Con Pay-As-You-Go activado, vaya a Configuración > Gestionar tokens de API, haga clic en Añadir token de acceso y consulte la referencia de la API de PTC para conocer los endpoints.
Un selector de idiomas 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("Espanol") { localeManager.setLocale("es") }
Button("Francais") { 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 idiomas de derecha a izquierda (RTL). Utilice los ajustes de idioma del propio Simulator:
- Ejecute la aplicación con Cmd+R para abrir el Simulator.
- Pulse Cmd+Home para ir a la pantalla de inicio.
- Abra Settings > General > Language & Region.
- Toque en 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 realizar pruebas de previsualización sin comprometerse con un idioma, Edit Scheme > Options > Application Language > Right-to-Left Pseudolanguage es una comprobación más rápida. Para probar la expansión de texto, utilice Double-Length Pseudolanguage para ver cómo los diseños manejan cadenas entre un 30 % y un 40 % más largas antes de decidirse por un idioma de destino.
Mejores prácticas de localización en iOS
- Compruebe su interfaz de usuario 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, permita que las etiquetas crezcan y se ajusten de forma natural, evite restricciones de ancho fijo en los 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 y 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 completos antes del lanzamiento.
- Localice imágenes y activos. Las imágenes con texto o elementos visuales culturalmente específicos necesitan variantes localizadas. En
Assets.xcassets, seleccione la imagen y, en el Inspector de atributos, haga clic en Localize. Elija los idiomas para los que desea variantes y sustituya cada una por la versión adecuada. iOS servirá la imagen correcta según 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 tengan en cuenta elLocale. Nunca escriba 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, todavía tiene que 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 hardcoded fuera de Text(_:) aparecerá claramente sin traducir 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, ajustes, casos límite) y súbalas a PTC. La IA de visión de PTC inspecciona cada pantalla y:
- Corrige problemas en los archivos
.xcstringscuando PTC tiene control sobre ellos. Vuelve a traducir una categoría gramatical incorrecta, elige un sinónimo más corto que quepa en una barra de navegación o regenera una forma de plural con la concordancia gramatical correcta. - Genera un prompt para Cursor / Claude Code cuando el problema reside en su código Swift. Una
LocalizedStringKeyfaltante, unStringhardcoded fuera del sistema de localización o una frase construida mediante concatenación en lugar de sustitución.
El resultado: una aplicación de iOS verificada por cada lanzamiento. No un archivo .xcstrings traducido con el control de calidad manual aún pendiente.
Traducir su ficha de la App Store, notas de lanzamiento y notificaciones push
La descripción de la App Store, las notas de lanzamiento con las novedades y el texto de las notificaciones push residen fuera de Localizable.xcstrings. La función Pegar para traducir de PTC gestiona ese contenido en el mismo proyecto. Pegue el texto de origen en el panel de control de PTC, elija los idiomas de destino y obtenga traducciones que utilicen 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.
Traducir 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.
Corregir la localización de 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 archivos de localización en iOS: .xcstrings, .strings, .stringsdict, .xliff
.xcstrings (String Catalog) es el estándar actual desde Xcode 15. Un único archivo basado en JSON que consolida todas las cadenas, reglas de plural y variantes específicas de dispositivos. .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 formatos de almacenamiento.
Localizar 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 las variantes de idioma. iOS mostrará el nombre de aplicación correcto 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 adecuado para el 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.
Cómo de 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 cuestión de minutos, preservando automáticamente las reglas de plural y los marcadores de posición. La mayoría de las cadenas traducidas se publican sin necesidad de 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 habituales 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 cortesía de la casa, 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.