0Pricing
Swift Academy · Lección

Pluralización y Stringsdict

Gestione las reglas de pluralización en distintos idiomas.

Pluralización y Stringsdict es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

El problema de las formas plurales

El inglés tiene dos formas — 1 item, 2 items —, por lo que los desarrolladores suelen escribir "\(n) item" + (n == 1 ? "" : "s"). Esto falla estrepitosamente: el árabe tiene seis categorías plurales, el ruso tres y el japonés una. Escribir la lógica de los plurales manualmente es un error de localización a punto de ocurrir.

// FRAGILE — only works for English
let n = 5
let bad = "\(n) item" + (n == 1 ? "" : "s")
print(bad)

Categorías plurales

Unicode define las categorías plurales: zero, one, two, few, many, other. Cada idioma utiliza un subconjunto. El sistema elige la categoría adecuada para un número según las reglas de la configuración regional; usted nunca tiene que escribir esas reglas.

// English uses: one, other
// Russian uses: one, few, many, other
// Japanese uses: other (only)
// You provide a variant string per category needed.

Variantes plurales en un String Catalog

En un String Catalog, marque una cadena como poseedora de variaciones plurales. Xcode le permitirá proporcionar texto para cada categoría. En tiempo de ejecución, la variante correcta se selecciona automáticamente según la cantidad interpolada y la configuración regional del usuario.

// Catalog entry, key "message_count":
//   one:   "You have %lld message"
//   other: "You have %lld messages"
let count = 1
let text = String(localized: "You have \(count) messages")
print(text)

El .stringsdict heredado

Antes de los String Catalogs, las formas plurales se almacenaban en un archivo .stringsdict: una lista de propiedades que asignaba una clave a una cadena de formato y a variantes para cada categoría. Todavía los encontrará en proyectos antiguos y siguen siendo totalmente compatibles.

// Localizable.stringsdict (plist) structure:
// key: "items_count"
//   NSStringLocalizedFormatKey: "%#@items@"
//   items: NSStringPluralRuleType
//     one:   "%lld item"
//     other: "%lld items"

Anatomía de una entrada de stringsdict

Cada entrada tiene una clave de formato que referencia una o más variables con nombre, delimitadas por %#@name@. Cada variable declara su tipo de regla (NSStringPluralRuleType), el especificador del tipo de valor (%lld) y una cadena para cada categoría plural.

// The %#@items@ token expands to the chosen
// plural variant. %lld is the integer placeholder
// substituted inside each variant string.
let n = 3
print(String(localized: "\(n) items selected"))

Consultar una cadena con pluralización

Desde el código, el punto de llamada es idéntico al de cualquier cadena localizada: solo tiene que interpolar la cantidad. La selección del plural ocurre dentro del framework, por lo que la misma línea de Swift funciona en todos los idiomas.

func messagesLabel(_ count: Int) -> String {
    return String(localized: "You have \(count) messages")
}
print(messagesLabel(0))
print(messagesLabel(1))
print(messagesLabel(7))

Por qué «one» no es solo 1

Un error común es suponer que la categoría one significa exactamente el número 1. En algunos idiomas incluye cualquier número que termine en 1 (como 21 o 31), y zero puede ser una categoría distinta o no. Proporcione un texto para cada categoría y deje que las reglas decidan.

// Russian: 1, 21, 31 -> 'one'
//          2, 3, 4    -> 'few'
//          5..20, 0   -> 'many'
// Never assume one == 1.

Combinar plurales con otros valores

Un formato puede tener varias variables, por ejemplo, una cantidad y un nombre. Cada una puede pluralizarse de forma independiente. En un String Catalog, indique qué interpolación varía; el resto permanece constante entre las variantes.

let files = 2
let folder = "Photos"
let text = String(
    localized: "\(files) files in \(folder)")
// 'files' drives the plural; 'folder' is substituted as-is
print(text)

Variantes de ancho y dispositivo

El mismo mecanismo de catálogo admite variaciones de device y width, lo que permite mostrar una etiqueta corta en un reloj y otra más larga en el iPad, o abreviarla cuando el espacio es limitado. Estas variaciones funcionan junto con las variantes de plural.

// Catalog can vary by:
//   plural: one / other
//   device: iPhone / iPad / watch
//   width:  short / medium / long
let label = String(localized: "Notifications")
print(label)

Probar la pluralización

Para verificar sus variantes, ejecute la app en cada idioma de destino mediante la sustitución de localización del esquema de Xcode, o use el pseudolenguaje y las vistas previas por configuración regional. Compruebe especialmente los números límite: 0, 1, 2, 5, 11, 21 y 100.

let samples = [0, 1, 2, 5, 11, 21, 100]
for n in samples {
    print(String(localized: "\(n) items"))
}

Prácticas recomendadas

Para obtener plurales correctos:

  • Nunca concatene ni escriba directamente sufijos s.
  • Proporcione todas las categorías que necesiten los idiomas de destino.
  • Obtenga el plural a partir del entero interpolado, no de una cadena calculada previamente.
  • Prefiera los String Catalogs para el código nuevo; conserve .stringsdict únicamente para destinos heredados.
func cartSummary(_ items: Int) -> String {
    String(localized: "Your cart has \(items) items",
           comment: "Cart count; pluralized")
}
print(cartSummary(1))

Comprobación rápida

Recuerde cómo debe gestionarse la selección del plural.

Resumen

Aprendió a pluralizar correctamente según la configuración regional:

  • Las categorías de plural de Unicode son zero, one, two, few, many, other; cada idioma utiliza un subconjunto.
  • Los String Catalogs permiten añadir variantes de plural por clave; el sistema heredado .stringsdict hace lo mismo mediante un plist.
  • Los puntos de llamada siguen siendo sencillos: interpole la cantidad y el framework elegirá la variante.
  • Nunca escriba directamente la lógica de plural; la categoría one no representa solo el número 1.

Preguntas frecuentes

¿La lección «Pluralización y Stringsdict» es gratis?

Sí — el texto completo de «Pluralización y Stringsdict» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Pluralización y Stringsdict»?

Gestione las reglas de pluralización en distintos idiomas. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Pluralización y Stringsdict»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Catálogos de cadenas y cadenas localizadas
  2. Pluralización y Stringsdict
  3. Formato según la configuración regional
  4. De derecha a izquierda y dirección del diseño
← Volver a Swift Academy