PTC

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

Prepare su aplicación de 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 iOS renderizada en todos los idiomas. Esta guía recorre el flujo de trabajo completo utilizando SwiftUI y los String Catalogs de Xcode 15+, la ruta moderna recomendada por Apple. Para la descripción general del servicio multiplataforma que abarca tanto iOS como Android, consulte traducir aplicaciones 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 admitan varios idiomas y regiones. Con los String Catalogs introducidos en Xcode 15, el flujo de trabajo es mucho más sencillo que el enfoque tradicional con .strings / .stringsdict.

Internacionalización vs. localización

Estas son dos etapas separadas, y deben producirse en ese orden:

  • La internacionalización (i18n) es la base técnica. Estructura su código de modo 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 a continuación. Escribir traducciones, ajustar diseños y proporcionar recursos específicos de cada configuración regional 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 de forma fija, diseños de dirección fija y formateadores que no tienen en cuenta 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 única fuente de verdad

El modelo de localización de Apple en Xcode 15+ se centra en un único archivo por destino: Localizable.xcstrings. Este archivo es un String Catalog con formato JSON que contiene su idioma de origen más cada traducción, incluidas las variaciones de plural, las variaciones específicas de 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 Localizable.xcstrings con cada cadena de origen extraída.

Apple admite varios formatos. .strings (clave-valor tradicional), .stringsdict (plurales tradicionales) y .xcstrings (moderno). Los proyectos nuevos deberían comenzar con .xcstrings. Los proyectos existentes basados en .strings pueden migrarse mediante 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: Configure su proyecto de Xcode para la localización

Paso 1: Habilitar 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: 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 analiza su código, encuentra cada cadena localizable y rellena el catálogo automáticamente.

Paso 3: Marcar cadenas para la localización. En SwiftUI, cualquier cadena literal pasada a Text(_:), Label, las etiquetas de acción de Button, los títulos de navegación, etc., es automáticamente un 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
            }
        }
    }
}

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 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: Use String(localized:) fuera de las vistas. Para las cadenas que necesite localizar en un modelo de vista, una función auxiliar o cualquier lugar fuera de una vista 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 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 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 ambos como revisados.

Cuando más tarde envíe el catálogo a PTC, la estructura de plural viaja 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. Igual que en inglés.

Para las variaciones de dispositivo (p. ej., «Tap to continue» en el iPhone vs. «Click to continue» en el 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 apropiada para cada uno. iOS sirve en tiempo de ejecución la versión que coincide con el dispositivo actual.

Parte 3: Traduzca sus .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 resulta inmanejable a lo largo de 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 se encuentra dentro del paquete .xcloc. Haga clic con el botón derecho en el archivo .xcloc exportado en el Finder y seleccione Show Package Contents para encontrar Localizable.xcstrings.

Si ve una notificación «Unable to build project for localization string extraction», su proyecto utiliza API exclusivas de iOS contra las que Xcode no puede compilar usando su SDK interno de macOS durante la extracción de cadenas. Solución: seleccione el destino del proyecto en TARGETS, vaya a Build Settings, busque «Use Compiler to Extract Swift Strings» y establézcalo en No. A continuación, vuelva a exportar.

Paso 2: Regístrese en PTC. La prueba gratuita cubre 20.000 palabras en 2 idiomas, lo que es suficiente para localizar la mayoría de las aplicaciones. Tras la prueba, PTC funciona según el modelo Pay-As-You-Go. Sin suscripción, las primeras 500 palabras cada mes gratis.

Paso 3: Configure su proyecto y traduzca. Arrastre Localizable.xcstrings a PTC. Deje el nombre del archivo de salida como Localizable.xcstrings. Xcode espera exactamente ese nombre 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 dispone de 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 de 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 concreta o no 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 parece incorrecto, informe de un problema con una traducción concreta y solicite una nueva traducción con IA gratuita. PTC aprende del feedback y lo aplica a las cadenas futuras del 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 su interfaz de usuario puede acomodarla. Solicite una nueva traducción que se ajuste al límite actual. Ajuste el límite en Settings > Translation lengths.

Parte 4: Integre las .xcstrings traducidas en su proyecto de Xcode

Tres opciones.

Opción 1: Descargar 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, sustituya el Localizable.xcstrings existente en la carpeta de su proyecto por el de PTC y, a continuación, reinicie Xcode. Sus traducciones aparecen 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 está 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 PTC, vaya a Settings > 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: Usar la API. La API de PTC le ofrece control total sobre cuándo y cómo se incorporan las traducciones a su canalización de compilación. Con Pay-As-You-Go activado, vaya a Settings > Manage API tokens, haga clic en Add access token y, a continuación, consulte la referencia de la API de PTC para conocer 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 mediante el 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 un reinicio de la aplicación para algunas cadenas del sistema. La anulación del entorno de SwiftUI surte efecto de inmediato para las vistas dentro de ese ámbito.

Parte 5: Pruebe su aplicación iOS localizada

Pruebe con la configuración de idioma del esquema. La forma más rápida de probar un idioma concreto 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 y aspecto que en inglés con todo el texto cambiado.

Pruebe el árabe y otros idiomas RTL. La configuración de idioma del esquema puede resultar poco fiable en el Simulator para 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 el árabe y establézcalo como idioma principal.
  5. El Simulator se reinicia. 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 vista previa sin comprometerse con un 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, utilice Double-Length Pseudolanguage para ver cómo gestionan los diseños cadenas un 30-40 % más largas antes de comprometerse con un idioma de destino.

Buenas prácticas para la localización en iOS

  • Compruebe su interfaz de usuario con longitudes de texto variadas. El alemán es aproximadamente un 30 % más largo que el inglés. El francés y el español, aproximadamente un 20 %. Utilice el sistema de diseño flexible de SwiftUI, deje 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 cinco categorías de plural, el árabe tiene seis, el japonés no tiene ninguna. Los String Catalogs gestionan esto cuando añade el idioma. Asegúrese de que todos los campos generados estén rellenados antes de la entrega.
  • Localice las imágenes y los 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 desee variantes y sustituya cada una por la versión apropiada. iOS sirve la imagen correcta según la configuración regional del usuario.
  • Mantenga su idioma base completo. Su idioma base (normalmente el inglés) es el recurso de reserva para cualquier traducción que falte. Una base incompleta puede provocar recursos de reserva inesperados incluso en idiomas por lo demás completamente traducidos. Xcode señala las cadenas base que faltan o están obsoletas 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 el momento de la búsqueda. 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 varias configuraciones regionales por territorio, multiplicando así de hecho su presupuesto de caracteres de 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. Date.FormatStyle, Decimal.FormatStyle y los formateadores que tienen en cuenta Locale. Nunca codifique de forma fija "$" ni "MM/DD/YYYY".
  • Use %lld para los recuentos de enteros y String(localized: "You have ^[\(count) message](inflect: true)") donde se aplica la concordancia gramatical automática de Apple.

Revisión visual de la traducción de su aplicación iOS traducida - entregue sin QA manual por idioma

Después de que PTC traduzca sus .xcstrings, todavía tiene que verificar la aplicación en ejecución en todos los idiomas. Tradicionalmente, una pasada de QA manual de varios días por cada versión. Una etiqueta traducida puede desbordar una barra de navegación en alemán. «Send» puede traducirse como sustantivo en francés cuando el botón necesitaba un verbo. Una cadena en inglés codificada de forma fija fuera de Text(_:) quedará claramente sin traducir en la aplicación iOS en ejecución.

La revisión visual con IA de PTC sustituye esa pasada. Para las aplicaciones iOS nativas (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 los problemas en las .xcstrings cuando PTC las controla. Vuelve a traducir una categoría gramatical incorrecta, elige un sinónimo más corto que quepa en una barra de navegación, regenera una forma de plural con la concordancia gramatical correcta.
  • Genera un prompt de Cursor / Claude Code cuando el problema reside en su código Swift. Un LocalizedStringKey que falta, un String codificado de forma fija fuera del sistema de localización, una frase construida por concatenación en lugar de por sustitución.

El resultado: una aplicación iOS verificada por cada versión. No una .xcstrings traducida con la QA manual todavía pendiente.

Traduzca su ficha de la App Store, las notas de la versión y las notificaciones push

La descripción de su App Store, las notas de novedades de la versión y el texto de las notificaciones push residen fuera de Localizable.xcstrings. La función Paste to Translate de PTC gestiona ese texto en el mismo proyecto. Pegue el texto de origen en el panel de PTC, elija los idiomas de destino y reciba traducciones que utilizan el mismo glosario y la misma voz de marca que sus cadenas dentro de la aplicación. Apple indexa las palabras clave de varias configuraciones regionales por territorio, por lo que las fichas localizadas son especialmente valiosas para la búsqueda.

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 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 la misma voz de marca que sus traducciones de .xcstrings.

Solucione una 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 destino de la aplicación. Haga clic en Localizable.xcstrings en el Navigator, abra el File Inspector y compruebe que el destino 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 de 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, las reglas de plural y las variantes específicas de dispositivo. .strings es el formato tradicional de clave-valor, todavía válido en bases de código más antiguas, combinado con .stringsdict para los plurales. .xliff y .xcloc son formatos de exportación para la entrega 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 = "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 según el idioma del dispositivo.

Cambie el idioma de la aplicación iOS sin reiniciar

iOS no proporciona una API nativa para esto. El enfoque estándar consiste en 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 inicia la aplicación. Si necesita cambiar dentro de la sesión sin reiniciar, tiene que gestionar la localización manualmente cargando el paquete apropiado para el idioma seleccionado.

Por qué iOS recurre al inglés para los 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 los recursos de reserva, asegúrese de que su String Catalog no muestre cadenas que falten ni estén obsoletas antes de cada versión.

Qué precisión tiene la localización con IA para una aplicación iOS completa

PTC utiliza IA para traducir archivos .xcstrings, .strings y .stringsdict en minutos, preservando las reglas de plural y los marcadores de posición automáticamente. La mayoría de las cadenas traducidas se publican sin ediciones. Para obtener los mejores resultados, informe a PTC sobre su aplicación durante la configuración para que las traducciones reflejen el tono y la terminología correctos.

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 concreta, priorice primero su idioma. Para el menor coste de adaptación, comience con idiomas geográfica o culturalmente cercanos a su mercado base.

Localice su propia aplicación iOS

Comience con la prueba gratuita de 30 días de PTC - 20.000 palabras de regalo, 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: