Apple String Catalogs (.xcstrings): Guía Completa de Localización iOS/macOS
Updated: 28 March, 2026
¿Qué Son los Apple String Catalogs (.xcstrings)?
String Catalogs (.xcstrings) son el formato moderno de localización de Apple, introducido en Xcode 15 en la WWDC 2023. Este formato basado en JSON reemplaza los tradicionales archivos .strings y .stringsdict, proporcionando una solución unificada para gestionar todas las localizaciones en un único archivo.
Los String Catalogs ofrecen características potentes incluyendo extracción automática de strings, soporte de pluralización, variaciones específicas por dispositivo y un editor visual en Xcode, haciendo la localización de iOS y macOS más eficiente que nunca.
Por Qué AZbox Soporta Archivos .xcstrings
En AZbox, entendemos que los desarrolladores Apple necesitan herramientas modernas que funcionen perfectamente con las últimas tecnologías de Apple. Por eso AZbox soporta completamente la importación y exportación de archivos .xcstrings, permitiéndote:
- Importar archivos .xcstrings existentes directamente a tu proyecto AZbox
- Exportar traducciones de vuelta al formato .xcstrings para usar en tu proyecto Xcode
- Preservar todos los metadatos incluyendo comentarios, estados y variaciones
- Gestionar traducciones con nuestra potente plataforma en la nube
- Colaborar con traductores que pueden trabajar sin necesitar Xcode
- Actualizar over-the-air sin aprobación del App Store
.xcstrings vs Formatos Legacy
| Característica | .xcstrings | .strings | .stringsdict |
|---|---|---|---|
| Formato | JSON | Pares clave-valor | XML plist |
| Todos los idiomas en un archivo | ✅ Sí | ❌ No | ❌ No |
| Pluralización | ✅ Integrada | ❌ No | ✅ Sí |
| Variaciones por dispositivo | ✅ Integradas | ❌ No | ❌ No |
| Editor visual | ✅ Xcode 15+ | ❌ No | ❌ No |
| Extracción automática de strings | ✅ Sí | ❌ No | ❌ No |
| Seguimiento de estado de traducción | ✅ Sí | ❌ No | ❌ No |
Estructura de Archivos .xcstrings
Los String Catalogs usan una estructura JSON que organiza todas las traducciones, metadatos y variaciones en un único archivo:
{
"sourceLanguage": "en",
"version": "1.0",
"strings": {
"welcome_title": {
"comment": "Título mostrado en la pantalla de bienvenida",
"extractionState": "manual",
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Welcome to Our App"
}
},
"es": {
"stringUnit": {
"state": "translated",
"value": "Bienvenido a Nuestra App"
}
},
"fr": {
"stringUnit": {
"state": "translated",
"value": "Bienvenue dans Notre App"
}
}
}
}
}
}
Componentes Principales
| Componente | Descripción |
|---|---|
sourceLanguage | El idioma de desarrollo (ej: “en”) |
version | Versión del formato String Catalog |
strings | Diccionario de todas las strings localizables |
comment | Descripción para traductores |
extractionState | Cómo se añadió la string (manual, automatic, etc.) |
localizations | Traducciones para cada idioma |
stringUnit | Contenedor para el valor y estado de la traducción |
state | Estado de la traducción (translated, needs_review, stale, new) |
Estados de Traducción
Los String Catalogs rastrean el estado de cada traducción:
| Estado | Descripción | Visualización en Xcode |
|---|---|---|
new | String necesita traducción | 🔴 Rojo |
translated | Traducción completa | 🟢 Verde |
needs_review | Traducción necesita revisión | 🟡 Amarillo |
stale | Fuente cambió, traducción puede estar desactualizada | 🟠 Naranja |
{
"button_save": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Save"
}
},
"de": {
"stringUnit": {
"state": "needs_review",
"value": "Speichern"
}
},
"ja": {
"stringUnit": {
"state": "new",
"value": ""
}
}
}
}
}
Pluralización en .xcstrings
Los String Catalogs manejan la pluralización elegantemente usando la clave variations con reglas plural:
{
"items_count": {
"comment": "Número de artículos en el carrito",
"localizations": {
"en": {
"variations": {
"plural": {
"zero": {
"stringUnit": {
"state": "translated",
"value": "No items"
}
},
"one": {
"stringUnit": {
"state": "translated",
"value": "1 item"
}
},
"other": {
"stringUnit": {
"state": "translated",
"value": "%lld items"
}
}
}
}
},
"es": {
"variations": {
"plural": {
"zero": {
"stringUnit": {
"state": "translated",
"value": "Sin artículos"
}
},
"one": {
"stringUnit": {
"state": "translated",
"value": "1 artículo"
}
},
"other": {
"stringUnit": {
"state": "translated",
"value": "%lld artículos"
}
}
}
}
}
}
}
}
Categorías de Plural
| Categoría | Descripción | Idiomas de Ejemplo |
|---|---|---|
zero | Cero elementos | Árabe, Letón, Galés |
one | Singular | Inglés, Español, Alemán |
two | Forma dual | Árabe, Galés, Esloveno |
few | Pocos elementos | Ruso, Polaco, Checo |
many | Muchos elementos | Ruso, Árabe, Polaco |
other | Plural por defecto/general | Todos los idiomas (requerido) |
Variaciones por Dispositivo
Los String Catalogs soportan traducciones específicas por dispositivo, perfectas para adaptar texto de UI a diferentes tamaños de pantalla:
{
"navigation_button": {
"comment": "Botón de navegación principal",
"localizations": {
"es": {
"variations": {
"device": {
"iphone": {
"stringUnit": {
"state": "translated",
"value": "Menú"
}
},
"ipad": {
"stringUnit": {
"state": "translated",
"value": "Menú de Navegación"
}
},
"mac": {
"stringUnit": {
"state": "translated",
"value": "Abrir Menú de Navegación"
}
},
"appletv": {
"stringUnit": {
"state": "translated",
"value": "Menú"
}
},
"applewatch": {
"stringUnit": {
"state": "translated",
"value": "☰"
}
}
}
}
}
}
}
}
Dispositivos Soportados
| Clave de Dispositivo | Plataforma |
|---|---|
iphone | iPhone |
ipad | iPad |
mac | macOS |
appletv | tvOS |
applewatch | watchOS |
applevision | visionOS |
Sustituciones (Especificadores de Formato)
Los String Catalogs soportan varios especificadores de formato para contenido dinámico:
{
"greeting_message": {
"comment": "Saludo con nombre del usuario",
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Hello, %@!"
}
},
"es": {
"stringUnit": {
"state": "translated",
"value": "¡Hola, %@!"
}
}
}
},
"download_progress": {
"comment": "Porcentaje de progreso de descarga",
"localizations": {
"es": {
"stringUnit": {
"state": "translated",
"value": "Descargando: %d%%"
}
}
}
}
}
Especificadores de Formato Comunes
| Especificador | Tipo | Ejemplo |
|---|---|---|
%@ | String (NSString/String) | “¡Hola, %@!” |
%d | Entero | ”%d artículos” |
%lld | Entero largo | ”%lld puntos” |
%f | Float/Double | ”%.2f kilómetros” |
%% | Signo de porcentaje literal | ”%d%%“ |
Combinar Variaciones de Plural y Dispositivo
Para escenarios complejos, puedes combinar formas plurales con variaciones por dispositivo:
{
"photos_count": {
"comment": "Número de fotos seleccionadas",
"localizations": {
"es": {
"variations": {
"plural": {
"one": {
"variations": {
"device": {
"iphone": {
"stringUnit": {
"state": "translated",
"value": "1 foto"
}
},
"ipad": {
"stringUnit": {
"state": "translated",
"value": "1 foto seleccionada"
}
}
}
}
},
"other": {
"variations": {
"device": {
"iphone": {
"stringUnit": {
"state": "translated",
"value": "%lld fotos"
}
},
"ipad": {
"stringUnit": {
"state": "translated",
"value": "%lld fotos seleccionadas"
}
}
}
}
}
}
}
}
}
}
}
Importar .xcstrings a AZbox
Paso 1: Exportar desde Xcode
En Xcode 15+, tu String Catalog está ubicado en tu proyecto:
MyApp/
├── MyApp.xcodeproj
├── Localizable.xcstrings ← String Catalog
├── Sources/
└── Resources/
Paso 2: Importar vía Panel de AZbox
- Inicia sesión en tu panel de AZbox
- Navega a tu proyecto
- Ve a la sección Importar/Exportar
- Selecciona Importar y elige Apple String Catalog (.xcstrings)
- Sube tu archivo
.xcstrings - AZbox parseará todas las strings, traducciones y metadatos
Paso 3: Revisar y Gestionar
Después de importar:
- Ver todas las strings organizadas por clave
- Ver estados de traducción (new, translated, needs review)
- Editar traducciones con contexto de los comentarios
- Añadir nuevos idiomas al instante
- Usar traducción automática para strings faltantes
- Rastrear porcentaje de completitud por idioma
Exportar .xcstrings desde AZbox
Cuando estés listo para usar las traducciones en tu proyecto Xcode:
- Ve a Importar/Exportar en tu proyecto
- Selecciona Exportar y elige Apple String Catalog (.xcstrings)
- Selecciona idiomas destino
- Descarga el archivo
.xcstringsgenerado - Reemplaza o fusiona con tu String Catalog existente en Xcode
Usar .xcstrings en Swift
Uso Básico con String(localized:)
// String simple
let title = String(localized: "welcome_title")
// String con comentario
let message = String(localized: "welcome_message",
comment: "Mostrado en el primer inicio")
Pluralización
// Definir en código (auto-extraído al String Catalog)
let itemCount = String(localized: "\(count) items",
comment: "Número de artículos")
// O usar clave explícita
let label = String(localized: "items_count")
SwiftUI Text
struct ContentView: View {
var body: some View {
VStack {
Text("welcome_title")
Text("items_count \(itemCount)")
}
}
}
Interpolación de Strings
// Maneja localización automáticamente
let greeting = String(localized: "Hola, \(username)!")
Usar .xcstrings en Objective-C
// String simple
NSString *title = NSLocalizedString(@"welcome_title", @"Título de pantalla de bienvenida");
// Con formato
NSString *message = [NSString localizedStringWithFormat:
NSLocalizedString(@"items_count", @"Conteo de artículos"), itemCount];
Mejores Prácticas para .xcstrings
1. Usa Claves Descriptivas
Mal:
{
"str1": { ... },
"msg": { ... }
}
Bien:
{
"welcome_screen_title": { ... },
"error_network_unavailable": { ... }
}
2. Siempre Añade Comentarios
{
"save_button": {
"comment": "Botón para guardar cambios del perfil de usuario. Aparece en la parte inferior de la pantalla de edición.",
"localizations": { ... }
}
}
3. Organiza las Claves por Funcionalidad
{
"auth.login.title": { ... },
"auth.login.button": { ... },
"auth.signup.title": { ... },
"settings.profile.title": { ... },
"settings.notifications.title": { ... }
}
4. Maneja Todas las Formas Plurales
Para idiomas como ruso, árabe o polaco que tienen reglas plurales complejas:
{
"files_count": {
"localizations": {
"ru": {
"variations": {
"plural": {
"one": { "stringUnit": { "value": "%lld файл" } },
"few": { "stringUnit": { "value": "%lld файла" } },
"many": { "stringUnit": { "value": "%lld файлов" } },
"other": { "stringUnit": { "value": "%lld файлов" } }
}
}
}
}
}
}
5. Usa Variaciones por Dispositivo con Moderación
Solo usa variaciones por dispositivo cuando sea realmente necesario:
{
"action_button": {
"localizations": {
"es": {
"variations": {
"device": {
"applewatch": {
"stringUnit": { "value": "OK" }
},
"other": {
"stringUnit": { "value": "Continuar" }
}
}
}
}
}
}
}
Migrar de .strings a .xcstrings
Migración Automática en Xcode
- Abre tu proyecto Xcode
- Selecciona tu archivo
.strings - Haz clic derecho y elige Migrate to String Catalog
- Xcode creará un archivo
.xcstringscon todas las traducciones existentes
Migración Manual
Si migras manualmente, convierte de:
Localizable.strings (es):
"welcome_title" = "Bienvenido";
"save_button" = "Guardar";
A Localizable.xcstrings:
{
"sourceLanguage": "es",
"version": "1.0",
"strings": {
"welcome_title": {
"localizations": {
"es": {
"stringUnit": {
"state": "translated",
"value": "Bienvenido"
}
}
}
},
"save_button": {
"localizations": {
"es": {
"stringUnit": {
"state": "translated",
"value": "Guardar"
}
}
}
}
}
}
Problemas Comunes y Soluciones
Problema: Strings No Aparecen
Problema: Las strings localizadas muestran claves en lugar de valores.
Solución: Asegúrate de que:
- El archivo
.xcstringsestá incluido en tu target - La clave coincide exactamente (sensible a mayúsculas)
- El idioma está habilitado en la configuración del proyecto
Problema: Formas Plurales No Funcionan
Problema: Se muestra la forma plural incorrecta.
Solución: Verifica que has definido todas las categorías plurales requeridas para el idioma destino. La categoría other siempre es requerida.
Problema: Conflictos de Estado de Extracción
Problema: Xcode sigue re-extrayendo strings.
Solución: Establece extractionState a "manual" para strings que gestionas manualmente:
{
"my_string": {
"extractionState": "manual",
"localizations": { ... }
}
}
Funcionalidades .xcstrings de AZbox
Cuando importas .xcstrings a AZbox, te beneficias de:
- Preservación completa de metadatos - Comentarios, estados e info de extracción mantenidos
- Validación de formas plurales - Asegura que todas las categorías plurales requeridas estén presentes
- Soporte de variaciones por dispositivo - Gestiona variaciones de iPhone, iPad, Mac fácilmente
- Seguimiento visual de estados - Ve el progreso de traducción de un vistazo
- Resaltado de sustituciones - Marcadores visuales para %@ y %d
- Memoria de traducción - Aprovecha traducciones anteriores para consistencia
- Traducción automática - Rellena huecos con traducción impulsada por IA
- Actualizaciones over-the-air - Actualiza traducciones sin revisión del App Store
- Colaboración en equipo - Los traductores no necesitan Xcode
Conclusión
Los Apple String Catalogs (.xcstrings) representan el futuro de la localización iOS y macOS, ofreciendo un enfoque moderno y unificado para gestionar traducciones. Con el soporte completo de .xcstrings de AZbox, puedes:
- Importar String Catalogs existentes con todos los metadatos preservados
- Gestionar traducciones en una plataforma colaborativa en la nube
- Soportar escenarios complejos incluyendo plurales y variaciones por dispositivo
- Exportar archivos .xcstrings listos para usar en Xcode
- Actualizar traducciones over-the-air sin aprobación del App Store
¿Listo para modernizar tu flujo de trabajo de localización de apps Apple?
Comienza tu Prueba Gratuita | Ver Precios
AZbox proporciona soporte completo para Apple String Catalogs (.xcstrings), convirtiéndolo en la plataforma de localización ideal para desarrolladores iOS, macOS, watchOS, tvOS y visionOS. Importa, gestiona y exporta tus traducciones con facilidad.
Comienza el Crecimiento Global Hoy
Únete a cientos de empresas exitosas que ya usan AZbox para llegar a clientes en todo el mundo. Comienza con una prueba gratuita, no se requiere tarjeta de crédito.
Comenzar - Es Gratis