PTC

Cómo localizar su aplicación de iOS: guía de internacionalización de SwiftUI

Prepare su aplicación en Xcode, traduzca .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 cada idioma. Esta guía repasa el flujo de trabajo completo usando SwiftUI y los String Catalogs de Xcode 15+, la vía moderna recomendada por Apple. Para ver el resumen 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 que admita múltiples idiomas y regiones. Con los String Catalogs introducidos en Xcode 15, el flujo de trabajo es drásticamente más sencillo que el enfoque anterior con .strings / .stringsdict.

Internacionalización frente a localización

Estas son dos etapas separadas y deben ocurrir en este orden:

  • La internacionalización (i18n) es el trabajo técnico de base. Usted estructura su código para que el texto, las imágenes y el formato puedan variar según la configuración regional sin cambios en el código. Se hace una vez, idealmente antes de su primer lanzamiento.
  • La localización (l10n) es el trabajo continuo que sigue. Escribir traducciones, ajustar los diseños y proporcionar los recursos específicos de la configuración regional para cada idioma nuevo.

El error más común es tratar la localización como una tarea posterior al lanzamiento, solo para descubrir que el código no está listo. Volver atrás para arreglar cadenas incrustadas en el código, diseños de dirección fija y formateadores que no tienen en cuenta la configuración regional en toda una aplicación existente lleva mucho más tiempo que compilar con la localización en mente desde el principio.

Cómo utiliza Xcode 15+ Localizable.xcstrings como única fuente 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, incluidas las variaciones de plural, las variaciones específicas del dispositivo y las sustituciones de variables.

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 Localizable.xcstrings con cada cadena de origen extraída.

Apple admite varios formatos. .strings (clave-valor anterior), .stringsdict (plurales anteriores) 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 todo el contexto.

Parte 2: Configure su proyecto de Xcode para la localización

Paso 1: Habilite 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 aparece como idioma base. Haga clic en + para añadir cada idioma de destino (español, francés, árabe, etc.).

Paso 2: Cree un String Catalog. Haga clic 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 escanea su código, encuentra cada cadena localizable y rellena el catálogo automáticamente.

Paso 3: Marque las cadenas para su localización. En SwiftUI, cualquier cadena literal que se pase a Text(_:), Label, etiquetas de acción 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
            }
        }
    }
}

Hay 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 simple 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: Utilice String(localized:) fuera de las vistas. Para las cadenas que necesite localizar en un modelo de vista, una función helper o en cualquier lugar fuera de una vista de SwiftUI, utilice String(localized:) en lugar de una cadena de texto simple:

let errorMessage = String(localized: "error_generic")

Paso 4: Añada variantes de plural y de dispositivo. A menudo, las cadenas necesitan formas diferentes según el contexto.

Para la pluralización, empiece con la cadena en su vista de SwiftUI:

Text("\(bookCount) books on your shelf")

Abra el String Catalog, haga clic derecho en la clave y elija Vary by Plural. Xcode genera las categorías de plural automáticamente y las rellena previamente con la cadena de origen. Para el inglés verá One y Other. Corrija el campo One a "%lld book on your shelf". Marque ambas como revisadas.

Cuando más tarde envíe 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, igual que el inglés.

Para las variaciones de dispositivo (por ejemplo, “Tap to continue” en el iPhone frente a “Click to continue” en el Mac), haga clic derecho en la clave y elija Vary by Device. Añada los dispositivos que desea personalizar e introduzca la cadena adecuada para cada uno. iOS sirve la versión que coincida con el dispositivo actual en tiempo de ejecución.

Parte 3: Traduzca su archivo .xcstrings con PTC

En 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 resulta inmanejable con cientos de claves y docenas de idiomas. PTC se encarga de subir, traducir y sincronizar.

Paso 1: Exporte 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 está dentro del paquete .xcloc. Haga clic derecho en el .xcloc exportado en Finder y seleccione Show Package Contents para encontrar Localizable.xcstrings.

Si ve una notificación que dice “Unable to build project for localization string extraction”, su proyecto utiliza APIs exclusivas de iOS que Xcode no puede compilar con 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 configúrelo en No. Luego, vuelva a exportar.

Paso 2: Regístrese en PTC. La prueba cubre 20.000 palabras en 2 idiomas, lo que es suficiente para localizar la mayoría de las aplicaciones. Después de la prueba, PTC funciona con pago al consumo. Sin suscripción, las primeras 500 palabras de cada mes son gratuitas.

Paso 3: Configure su proyecto y traduzca. Arrastre Localizable.xcstrings a PTC. Deje el nombre del archivo de salida como Localizable.xcstrings. Xcode espera ese nombre exacto al resolver cadenas localizadas. Seleccione sus idiomas de destino.

PTC genera automáticamente una descripción del producto 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 igualar 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 manera concreta o que no deba traducirse en absoluto. Haga clic en Start Translation.

Paso 4: Revise y descargue. Una vez completada la traducción, la pestaña Translations 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 le convence, informe de un problema con una traducción específica y solicite una retraducción con IA gratuita. 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, se resalta. Tiene tres opciones. Acepte la traducción más larga si encaja en su interfaz. Solicite una retraducción que se ajuste al límite actual. Ajuste el límite en Configuración > Longitudes de traducción.

Parte 4: Integre el archivo .xcstrings traducido en su proyecto de Xcode

Tiene tres opciones.

Opción 1: Descargue los archivos manualmente desde PTC. Vaya a la pestaña Resource Files 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 Localizable.xcstrings existente en la carpeta de su proyecto por el de PTC y luego reinicie Xcode. Sus traducciones aparecerán en el String Catalog con una marca de verificación junto a cada idioma completamente traducido.

Opción 2: Integre 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 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 Add Git Integration. Proporcione la URL de su repositorio, conceda acceso a PTC y elija su rama y sus archivos de origen. PTC envía un merge request con las traducciones.

Opción 3: Utilice 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 el pago al consumo activado, vaya a Configuración > Gestionar tokens de API, haga clic en Add access token y luego consulte la referencia de la API de PTC para ver los endpoints.

Un selector de idioma dentro de 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 tiene efecto inmediato para las vistas dentro de ese alcance.

Parte 5: Pruebe su aplicación de iOS localizada

Pruebe con la configuración de idioma del scheme. La forma más rápida de probar un idioma específico es a través de su scheme 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.

Pruebe el árabe y otros idiomas RTL. La configuración de idioma del scheme puede ser poco fiable en el Simulator para los idiomas RTL. Utilice la propia configuración de idioma del Simulator:

  1. Ejecute la aplicación con Cmd+R para abrir el Simulator.
  2. Pulse Cmd+Home para ir a la pantalla de inicio.
  3. Abra Settings > General > Language & Region.
  4. Toque Add Language, seleccione árabe y configúrelo como idioma principal.
  5. El Simulator se reinicia. Abra su aplicación desde la pantalla de inicio.

Compruebe que el texto aparezca en árabe y que el diseño se refleje correctamente, con el título de navegación y el contenido alineados a la derecha. Para hacer pruebas de vista previa sin comprometerse a un idioma, Edit Scheme > Options > Application Language > Right-to-Left Pseudolanguage es una comprobación más rápida. Para las pruebas de expansión de texto, utilice Double-Length Pseudolanguage para ver cómo los diseños manejan cadenas un 30-40 % más largas antes de comprometerse a un idioma de destino.

Mejores prácticas para la localización en iOS

  • Revise su interfaz para ver las variaciones en la longitud del texto. El alemán es aproximadamente un 30 % más largo que el inglés. El francés y el español, en torno a un 20 %. Utilice el sistema de diseño flexible de SwiftUI, permita que las etiquetas crezcan y se ajusten de forma natural, evite las restricciones de ancho fijo en los elementos de texto y pruebe en varios idiomas diferentes durante el desarrollo.
  • No omita las variantes de pluralización. El ruso tiene tres categorías de plural, el árabe tiene seis, el japonés no tiene ninguna. Los String Catalogs se encargan de esto cuando añade el idioma. Asegúrese de que todos los campos generados estén completados antes de publicar.
  • 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 sirve la imagen correcta en función de la configuración regional del usuario.
  • Mantenga su idioma base completo. Su idioma base (normalmente el inglés) es la reserva para cualquier traducción que falte. Una base incompleta puede causar reservas inesperadas incluso en idiomas que por lo demás están completamente traducidos. Xcode señala las cadenas base ausentes o desactualizadas durante la compilación.
  • Localice su ficha de tienda en la App Store. Una aplicación localizada con una ficha de tienda 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 las palabras clave de múltiples configuraciones regionales por territorio, lo que multiplica efectivamente su presupuesto de caracteres para palabras clave más allá de los 100 caracteres estándar. Utilice la función Paste to Translate de PTC para el contenido de la App Store.
  • Utilice formateadores que tengan en cuenta la configuración regional. Formateadores que reconozcan Date.FormatStyle, Decimal.FormatStyle y Locale. Nunca incruste en el código "$" ni "MM/DD/YYYY".
  • Utilice %lld para recuentos de enteros y String(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 traducida: publique sin control de calidad manual por idioma

Después de que PTC traduzca su .xcstrings, todavía tiene que verificar la aplicación en ejecución en cada idioma. Tradicionalmente, esto suponía una pasada de control de calidad manual de varios días por 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 incrustada en el código fuera de Text(_:) quedará claramente sin traducir en la aplicación de iOS en ejecución.

El AI Visual QA de PTC reemplaza esa pasada. Para las 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 inspecciona cada pantalla y:

  • Corrige los problemas en .xcstrings cuando PTC los controla. Retraduce una categoría gramatical incorrecta, elige un sinónimo más corto que encaje en una barra de navegación y regenera una forma plural con la concordancia gramatical correcta.
  • Genera un prompt de Cursor / Claude Code cuando el problema reside en su código Swift. Un LocalizedStringKey ausente, un String incrustado en el código fuera del sistema de localización o una oración construida por concatenación en lugar de por sustitución de variables.

El resultado: una aplicación de iOS verificada por lanzamiento. No un .xcstrings traducido con un control de calidad manual aún por delante.

Traduzca su ficha de tienda en la App Store, sus notas de lanzamiento y sus notificaciones push

Su 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 Paste to Translate de PTC procesa ese texto en el mismo proyecto. Pegue el texto de origen en el panel de control de PTC, elija los idiomas de destino y reciba traducciones que utilizan el mismo glosario y la misma voz de marca que las cadenas dentro de la aplicación. Apple indexa las palabras clave de múltiples configuraciones regionales por territorio, por lo que las fichas localizadas son especialmente valiosas para el descubrimiento.

Traduzca el contenido de usuario dentro de la aplicación con la API de PTC

El chat dentro de la aplicación, las publicaciones sociales y las reseñas de los usuarios necesitan traducción a medida que llega el contenido. La API REST de PTC traduce este contenido bajo demanda con autenticación Bearer, utilizando el mismo glosario y la misma voz de marca que sus traducciones de .xcstrings.

Solucione 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 aparece 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 valor predeterminado actual desde Xcode 15. Un único archivo basado en JSON que consolida todas las cadenas, las reglas de plural y las variantes específicas del dispositivo. .strings es el formato de clave-valor anterior, que sigue siendo válido en bases de código más antiguas, emparejado con .stringsdict para los plurales. .xliff y .xcloc son formatos de exportación para entregarlos a los 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 = "Your Translated App Name";. Seleccione el archivo en el Navigator, abra el File Inspector y haga clic en Localize para añadir variantes de idioma. iOS muestra el nombre correcto de la aplicación en función del idioma del dispositivo.

Cambie 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 entra en vigor la próxima vez que se inicia la aplicación. Si necesita cambiar el idioma dentro de la sesión sin reiniciar, tiene que gestionar la localización manualmente cargando el paquete de recursos adecuado para el idioma seleccionado.

Por qué iOS recurre al inglés para los idiomas no admitidos

iOS utiliza su idioma base como reserva cuando no hay una traducción disponible. Este es el comportamiento esperado. Para minimizar las reservas, asegúrese de que su String Catalog no muestre cadenas ausentes o desactualizadas antes de cada lanzamiento.

Cómo de precisa es la localización con IA para toda una aplicación de iOS

PTC utiliza IA para traducir archivos .xcstrings, .strings y .stringsdict en minutos, conservando 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, háblele a PTC de su aplicación durante la configuración para que las traducciones reflejen el tono y la terminología adecuados.

En 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 en primer lugar. Para tener el 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 de 30 días de PTC: 20.000 palabras por nuestra cuenta, sin tarjeta de crédito. Suba su Localizable.xcstrings, tradúzcalo en minutos y, a continuación, suba capturas de pantalla y deje que PTC verifique la aplicación renderizada.

Relacionado: