Para completar una etiqueta pluralizada de una app para Mac, añade variaciones plurales en Xcode, proporciona todas las categorías necesarias para cada localización admitida y prueba los resultados mostrados. Este recorrido usa un mensaje sintético de selección de elementos.

La tarea consiste en terminar una etiqueta cuyo contenido depende de un recuento en una app para Mac con SwiftUI. El mensaje indica cuántos elementos están seleccionados, acepta un entero no negativo y conserva ese significado en las traducciones. El flujo de trabajo combina la cobertura de categorías, la comprobación de marcadores de posición y las pruebas en tiempo de ejecución para definir un criterio de aceptación claro para una entrada completa del catálogo.

¿Qué se necesita para completar la cobertura plural?

Apple recomienda los catálogos de cadenas para la localización de plurales en Xcode 15 y versiones posteriores. Su documentación sobre plurales distingue entre un valor alternativo obligatorio y la exhaustividad gramatical: other es obligatorio en un diccionario de cadenas, pero omitir otras categorías específicas del idioma puede producir una gramática incorrecta. En inglés se requieren one y other; la categoría zero es opcional. Localizar cadenas que contienen plurales.

Los nombres de categoría posibles son zero, one, two, few, many y other. Describen agrupaciones gramaticales que dependen del idioma, no seis intervalos numéricos comunes a todos los idiomas. Una categoría llamada one no debería convertirse en una regla universal de la aplicación que compruebe únicamente si el recuento es igual a uno. Unicode define las categorías según los cambios que los números requieren en una frase, incluidos los cambios que van más allá del sustantivo. Reglas de plural.

Para esta tarea, usa el siguiente contrato del mensaje. Estos son requisitos ilustrativos de la aplicación, no requisitos impuestos por Apple.

Campo del contrato Requisito para este ejemplo
Clave del mensaje selection.count
Valor predeterminado en inglés \(count) items selected
Entrada Un Int de Swift no negativo llamado count
Significado Número de elementos seleccionados actualmente
Salida Una etiqueta localizada completa que contiene el recuento
Cobertura Todas las localizaciones admitidas, incluida la localización de origen
Aceptación Categorías requeridas suministradas, sustitución numérica conservada y resultados representativos comprobados

Exigir que aparezca el número es una decisión deliberada para esta etiqueta. Apple permite variantes plurales que escriben el número con palabras o que omiten el especificador de formato numérico. Un contrato de mensaje distinto podría permitirlo. En este caso, mostrar el recuento facilita comparar la etiqueta con la selección que describe. Localizar cadenas que contienen plurales.

Vincular el mensaje de Swift al catálogo

String.LocalizationValue de Swift admite texto localizable con interpolación en tiempo de ejecución. Cuando un identificador estable debe diferir del texto de origen en inglés, Apple indica que se use un inicializador de String con un defaultValue separado. Eso encaja con selection.count: el identificador nombra el mensaje, mientras que su valor predeterminado proporciona el texto en inglés. String.LocalizationValue.

Para una app de prueba pequeña, crea en Xcode 15 o una versión posterior un proyecto de app para macOS que use SwiftUI, con un destino de implementación de macOS 12 o posterior. Sustituye el archivo de entrada de la app generado por el programa completo que aparece abajo; conserva una sola declaración @main en el destino. Añade Localizable.xcstrings al destino de la app antes de seguir los pasos del catálogo. El programa requiere Xcode y el SDK de macOS; no se compiló en este entorno de investigación.

import Foundation
import SwiftUI

@main
struct PluralSampleApp: App {
    var body: some Scene {
        WindowGroup {
            PluralSampleView()
        }
    }
}

struct PluralSampleView: View {
    @State private var count: Int = 1

    private let samples: [Int] = [
        0, 1, 2, 3, 4, 5, 10, 11, 12,
        20, 21, 22, 100, 101, 102, 1_000_000
    ]

    private var selectionLabel: String {
        String(
            localized: "selection.count",
            defaultValue: "\(count) items selected",
            comment: "Selection summary. The integer is the number of selected items. Keep the count visible in every plural variant."
        )
    }

    var body: some View {
        VStack(alignment: .leading, spacing: 16) {
            Picker("Sample count", selection: $count) {
                ForEach(samples, id: \.self) { value in
                    Text(verbatim: String(value)).tag(value)
                }
            }

            Text(verbatim: selectionLabel)
        }
        .padding(24)
        .frame(minWidth: 360)
    }
}

Las opciones numéricas del selector son entradas de prueba. El resumen localizado se resuelve mediante String(localized:defaultValue:comment:) y luego se muestra como la cadena resultante. Apple documenta que el primer argumento del inicializador proporciona la clave de búsqueda, el valor predeterminado proporciona el texto de origen y los comentarios aportan contexto para la traducción. Xcode extrae durante la compilación las cadenas que se pasan a través de API localizables. Preparar el texto de la app para su traducción.

Mantén el entero dentro de la interpolación localizable. Para este contrato, no crees por separado frases en inglés en singular y plural mediante ramas de la aplicación. Un único mensaje ofrece al catálogo una responsabilidad clara: seleccionar la redacción localizada adecuada para el recuento proporcionado.

Suministrar las categorías para cada localización admitida

Usa el editor de Xcode para crear la estructura de variaciones:

  1. Elige Product > Build para completar el catálogo.
  2. Abre Localizable.xcstrings y selecciona la localización de origen.
  3. Haz clic con el botón derecho o Control-clic en selection.count y elige Vary by Plural.
  4. Completa cada variación del idioma de origen.
  5. Añade las localizaciones admitidas con el botón Add de la barra lateral y completa sus variaciones.

Xcode añade formas plurales específicas de cada idioma y determina el especificador de formato de la interpolación. Aplicar la variación plural a la localización de origen mantiene sincronizada la estructura de variaciones entre idiomas; aplicarla solo a otra localización afecta únicamente a esa localización. Localizar y variar texto con un catálogo de cadenas.

Para esta interpolación de enteros, las entradas en inglés pueden ser:

Categoría en inglés Valor del catálogo
one %lld item selected
other %lld items selected

Usa el especificador que Xcode genere para el tipo real de la interpolación. El ejemplo de enteros documentado por Apple usa %lld; copiar un marcador de posición distinto en una traducción puede romper el contrato del argumento. Xcode rellena inicialmente los campos de variación con el valor de la clave, así que revisa la redacción de cada campo. Localizar y variar texto con un catálogo de cadenas.

Crea una hoja de cobertura con una fila por cada identificador de localización real. Anota las categorías que Xcode genera para este mensaje, si cada una tiene un texto terminado y qué entradas probarás. Usar los identificadores reales del proyecto evita que una etiqueta de idioma general oculte una localización que no se haya revisado.

No copies el conjunto de categorías del inglés en todas las filas. Tampoco exijas las seis categorías en todas partes. Deja que el catálogo proporcione la estructura de trabajo y luego consulta las reglas de plural cardinal del idioma al elegir las entradas de prueba. Las reglas cardinales se refieren a cantidades; las ordinales, a posiciones, y responden a una pregunta distinta. Unicode documenta estos tipos de reglas por separado. Estándar Técnico Unicode n.º 35: Números.

Validar por separado la estructura, los marcadores de posición y el texto mostrado

Haz tres comprobaciones porque cada una responde a una pregunta distinta. La falta de una categoría es un problema de cobertura; un marcador de posición incorrecto es un problema de formato; una frase poco natural es un problema de redacción. Registrarlos por separado facilita identificar la siguiente corrección.

Comprobar la cobertura de categorías

Para cada fila de la hoja, compara las categorías esperadas con las entradas completadas del catálogo. Confirma que exista other y que ninguna categoría esperada tenga un valor vacío o una copia sin terminar del texto de origen.

Para una comprobación sencilla de integridad, define el conjunto esperado como las categorías generadas para esa localización, más cualquier variante admitida añadida de forma intencional. El conjunto de categorías que faltan es el conjunto esperado menos las categorías con texto terminado. Si falta algún elemento, el mensaje queda incompleto según el criterio de aceptación de este artículo. Es un método práctico de revisión derivado del flujo de variaciones documentado, no una afirmación de que Xcode aplique exactamente esta lista de comprobación.

Si dos categorías tienen legítimamente la misma redacción, conserva esa redacción donde sea necesario y revisa ambas entradas. El objetivo es preservar el significado del mensaje en las categorías requeridas; no hace falta que todas las cadenas sean visiblemente distintas.

Comprobar la sustitución numérica

Compila y revisa los diagnósticos del catálogo. Apple documenta la validación de catálogos de cadenas para problemas comunes, como especificadores de formato que no coinciden. Resuelve esos diagnósticos y luego comprueba si cada variante sigue cumpliendo el requisito de este mensaje de mostrar el recuento. Crear apps listas para varios idiomas.

Para este ejemplo con un único argumento, comprueba que el marcador de posición numérico esté presente, siga siendo numérico y aparezca una sola vez en el lugar previsto. Una compilación correcta es una prueba útil, pero la aceptación también requiere cobertura de categorías y texto realmente mostrado.

Probar recuentos representativos en la app para Mac

Elige Product > Scheme > Edit Scheme, selecciona Run y abre Options. Configura App Language y el App Region correspondiente, cierra el cuadro de diálogo y ejecuta la app para Mac. Repite el proceso para cada localización admitida. Apple documenta este procedimiento mediante el esquema para probar el resultado localizado. Probar localizaciones al ejecutar la app.

El selector de ejemplo proporciona un conjunto inicial de recuentos, no una cobertura universal de categorías. Añade valores adecuados para cada localización antes de dar por completa su fila de prueba.

Selección de prueba Qué comprueba
0, 1 y 2 Selecciones vacías, de un elemento y de varios elementos en cantidades pequeñas
Al menos una entrada representativa por cada categoría requerida Cobertura de las distinciones gramaticales de la localización
Valores a ambos lados de los límites de reglas pertinentes Cambios de categoría más allá de los recuentos mínimos
Un recuento grande válido Sustitución numérica y espacio disponible para la etiqueta
Cada entrada probada Significado, redacción completa y recuento visible

Las reglas de Unicode asocian categorías con condiciones y valores de ejemplo; pueden importar detalles numéricos, incluidos los dígitos fraccionarios. Este contrato acepta solo enteros. Si la aplicación admite cantidades decimales más adelante, revisa conjuntamente la interpolación, el texto de origen y las pruebas, en lugar de suponer que los resultados con enteros siguen ofreciendo una cobertura suficiente. Estándar Técnico Unicode n.º 35: Números.

Diagnosticar un resultado inesperado

Usa el síntoma observado para decidir qué revisar a continuación:

Síntoma Siguiente acción
Falta selection.count en el catálogo Vuelve a compilar y revisa la llamada localizable y la tabla seleccionada
Solo una localización tiene variaciones plurales Revisa dónde se aplicó Vary by Plural
Una variante aún tiene la redacción plural en inglés Revisa el campo rellenado previamente y proporciona la traducción terminada
El número mostrado falta o tiene un formato incorrecto Compara el marcador de posición de la variante con el especificador generado por Xcode y con el contrato del mensaje
Un recuento mayor usa una redacción inesperada Comprueba la regla de categoría de esa localización y añade una prueba representativa
La redacción correcta no cabe Ajusta la vista y vuelve a probar la etiqueta completa

Para un proyecto antiguo que use una versión de Xcode anterior a la 15, la vía admitida por Apple utiliza recursos .strings y .stringsdict. El diccionario plural proporciona variantes específicas del idioma y requiere other; esto no elimina la necesidad de proporcionar las demás categorías necesarias para una gramática correcta. Localizar cadenas que contienen plurales.

Da el mensaje por terminado cuando cada localización admitida tenga una fila de cobertura completa, sus marcadores de posición cumplan el contrato y los recuentos representativos produzcan la etiqueta prevista en la app en ejecución. Vuelve a revisar esas filas cada vez que cambien las localizaciones admitidas, el tipo de entrada numérica o el significado del mensaje.

Fuentes