Skip to content

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
FormatoJSONPares clave-valorXML 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

ComponenteDescripción
sourceLanguageEl idioma de desarrollo (ej: “en”)
versionVersión del formato String Catalog
stringsDiccionario de todas las strings localizables
commentDescripción para traductores
extractionStateCómo se añadió la string (manual, automatic, etc.)
localizationsTraducciones para cada idioma
stringUnitContenedor para el valor y estado de la traducción
stateEstado de la traducción (translated, needs_review, stale, new)

Estados de Traducción

Los String Catalogs rastrean el estado de cada traducción:

EstadoDescripciónVisualización en Xcode
newString necesita traducción🔴 Rojo
translatedTraducción completa🟢 Verde
needs_reviewTraducción necesita revisión🟡 Amarillo
staleFuente 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íaDescripciónIdiomas de Ejemplo
zeroCero elementosÁrabe, Letón, Galés
oneSingularInglés, Español, Alemán
twoForma dualÁrabe, Galés, Esloveno
fewPocos elementosRuso, Polaco, Checo
manyMuchos elementosRuso, Árabe, Polaco
otherPlural por defecto/generalTodos 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 DispositivoPlataforma
iphoneiPhone
ipadiPad
macmacOS
appletvtvOS
applewatchwatchOS
applevisionvisionOS

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

EspecificadorTipoEjemplo
%@String (NSString/String)“¡Hola, %@!”
%dEntero”%d artículos”
%lldEntero largo”%lld puntos”
%fFloat/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

  1. Inicia sesión en tu panel de AZbox
  2. Navega a tu proyecto
  3. Ve a la sección Importar/Exportar
  4. Selecciona Importar y elige Apple String Catalog (.xcstrings)
  5. Sube tu archivo .xcstrings
  6. 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:

  1. Ve a Importar/Exportar en tu proyecto
  2. Selecciona Exportar y elige Apple String Catalog (.xcstrings)
  3. Selecciona idiomas destino
  4. Descarga el archivo .xcstrings generado
  5. 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

  1. Abre tu proyecto Xcode
  2. Selecciona tu archivo .strings
  3. Haz clic derecho y elige Migrate to String Catalog
  4. Xcode creará un archivo .xcstrings con 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 .xcstrings está 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:

  1. Importar String Catalogs existentes con todos los metadatos preservados
  2. Gestionar traducciones en una plataforma colaborativa en la nube
  3. Soportar escenarios complejos incluyendo plurales y variaciones por dispositivo
  4. Exportar archivos .xcstrings listos para usar en Xcode
  5. 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.

Fondo de llamada a la acción

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