Per completare un'etichetta pluralizzata di un'app Mac, aggiungi le variazioni plurali in Xcode, fornisci ogni categoria necessaria per ciascuna localizzazione supportata e testa i risultati renderizzati. Questa procedura usa un messaggio sintetico di selezione di elementi.

L'obiettivo è completare un'etichetta dipendente dal conteggio in un'app SwiftUI per Mac. Il messaggio indica quanti elementi sono selezionati, accetta un intero non negativo e preserva quel significato attraverso le traduzioni. Il flusso di lavoro combina la copertura delle categorie, i controlli dei segnaposto e i test di runtime affinché una voce di catalogo compilata abbia uno standard di accettazione chiaro.

Cosa richiede una copertura pluralistica completa?

Apple raccomanda i cataloghi di stringhe per la localizzazione dei plurali in Xcode 15 e versioni successive. La sua documentazione sui plurali distingue un fallback obbligatorio dalla completezza grammaticale: other è obbligatorio in un dizionario di stringhe, ma omettere categorie aggiuntive specifiche della lingua può produrre grammatica scorretta. L'inglese richiede one e other; la sua categoria zero è opzionale. Localizing strings that contain plurals.

I possibili nomi di categoria sono zero, one, two, few, many e other. Descrivono raggruppamenti grammaticali dipendenti dalla lingua, piuttosto che sei intervalli numerici condivisi da ogni lingua. Una categoria chiamata one non dovrebbe diventare una regola applicativa universale che controlla solo se il conteggio è uguale a uno. Unicode definisce le categorie attraverso i cambiamenti che i numeri richiedono in una frase, inclusi cambiamenti oltre il sostantivo stesso. Plural Rules.

Per questo compito, usa il seguente contratto del messaggio. Si tratta di requisiti applicativi illustrativi, non di requisiti imposti da Apple.

Campo del contratto Requisito per questo esempio
Chiave del messaggio selection.count
Valore predefinito inglese \(count) items selected
Input Un intero Swift Int non negativo chiamato count
Significato Numero di elementi attualmente selezionati
Output Un'etichetta localizzata completa contenente il conteggio
Copertura Ogni localizzazione supportata, inclusa la localizzazione di origine
Accettazione Categorie obbligatorie fornite, sostituzione numerica preservata, output rappresentativi controllati

Richiedere che il numero appaia è una scelta deliberata per questa etichetta. Apple consente varianti plurali che scrivono a parole un numero o omettono lo specificatore di formato numerico. Un diverso contratto del messaggio potrebbe permetterlo. Qui, mantenere il conteggio visibile rende più facile confrontare l'etichetta con la selezione che descrive. Localizing strings that contain plurals.

Collegare il messaggio Swift al catalogo

String.LocalizationValue di Swift supporta il testo localizzabile con interpolazione a runtime. Quando un identificatore stabile deve differire dal testo di origine inglese, Apple indirizza gli sviluppatori a un inizializzatore String con un defaultValue separato. Questo si adatta a selection.count: l'identificatore nomina il messaggio, mentre il suo valore predefinito fornisce la formulazione inglese. String.LocalizationValue.

Per una piccola app di test, crea un progetto di app macOS usando SwiftUI in Xcode 15 o versioni successive, con un target di deployment macOS 12 o successivo. Sostituisci il file di entry dell'app generato con il programma completo sotto; mantieni solo una dichiarazione @main nel target. Aggiungi Localizable.xcstrings al target dell'app prima di seguire i passaggi del catalogo. Il programma richiede Xcode e l'SDK macOS; non è stato compilato in questo ambiente di ricerca.

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)
    }
}

Le voci del selettore numerico sono input di test. Il riepilogo localizzato è risolto da String(localized:defaultValue:comment:), quindi visualizzato come stringa risultante. Apple documenta che il primo argomento dell'inizializzatore fornisce la chiave di ricerca, il suo valore predefinito fornisce il testo di origine e i commenti forniscono il contesto di traduzione. Xcode estrae le stringhe passate tramite API localizzabili durante una build. Preparing your app's text for translation.

Mantieni l'intero all'interno dell'interpolazione localizzabile. Per questo contratto, non pre-costruire frasi singolari e plurali inglesi separate in ramificazioni dell'applicazione. Mantenere un solo messaggio dà al catalogo una responsabilità chiara: selezionare la formulazione localizzata appropriata per il conteggio fornito.

Fornire le categorie per ogni localizzazione supportata

Usa l'editor di Xcode per creare la struttura delle variazioni:

  1. Scegli Prodotto > Build per popolare il catalogo.
  2. Apri Localizable.xcstrings e seleziona la localizzazione di origine.
  3. Control-clic su selection.count e scegli Varia per plurale.
  4. Compila ogni variazione della lingua di origine.
  5. Aggiungi le localizzazioni supportate usando il pulsante Aggiungi della barra laterale, quindi compila le loro variazioni.

Xcode aggiunge le forme plurali specifiche della lingua e determina lo specificatore di formato dell'interpolazione. Applicare la variazione plurale alla localizzazione di origine mantiene la struttura delle variazioni sincronizzata tra le lingue; applicarla solo a un'altra localizzazione influisce solo su quella localizzazione. Localizing and varying text with a string catalog.

Per questa interpolazione di interi, le voci inglesi possono essere:

Categoria inglese Valore del catalogo
one %lld elemento selezionato
other %lld elementi selezionati

Usa lo specificatore generato da Xcode per il tipo di interpolazione effettivo. L'esempio di intero documentato da Apple usa %lld; copiare un segnaposto diverso in una traduzione può rompere il contratto degli argomenti. Xcode prepopola inizialmente i campi di variazione con il valore della chiave, quindi ispeziona la formulazione in ogni campo. Localizing and varying text with a string catalog.

Crea un foglio di lavoro della copertura con una riga per identificatore di localizzazione effettivo. Registra le categorie che Xcode genera per questo messaggio, se ciascuna ha testo completato e quali input testerai. Usare gli identificatori reali del progetto impedisce a un'etichetta linguistica ampia di nascondere una localizzazione non revisionata.

Non copiare l'insieme di categorie inglesi in ogni riga. Allo stesso modo, non pretendere tutte e sei le categorie ovunque. Lascia che il catalogo fornisca la struttura di lavoro, poi consulta le regole dei plurali cardinali della lingua quando selezioni gli input di test. Le regole cardinali riguardano le quantità; le regole ordinali riguardano le posizioni e rispondono a una domanda diversa. Unicode le documenta come tipi di regole separati. Unicode Technical Standard #35: Numbers.

Convalidare separatamente struttura, segnaposto e testo renderizzato

Usa tre controlli perché ciascuno risponde a una domanda diversa. Una categoria mancante è un problema di copertura; un segnaposto errato è un problema di formattazione; una frase goffa è un problema di formulazione. Registrarli separatamente rende la correzione successiva chiara.

Controllare la copertura delle categorie

Per ogni riga del foglio di lavoro, confronta le categorie attese con le voci di catalogo popolate. Conferma che other esista e che nessuna categoria attesa contenga un valore vuoto o una copia incompleta del testo di origine.

Per un semplice controllo di completezza, definisci l'insieme atteso come le categorie generate per quella localizzazione più qualsiasi override supportato intenzionale. L'insieme mancante è l'insieme atteso meno le categorie contenenti testo completato. Qualsiasi membro mancante lascia il messaggio incompleto secondo lo standard di accettazione di questo articolo. Questo è un metodo pratico di revisione derivato dal flusso di lavoro di variazione documentato, piuttosto che un'affermazione che Xcode applichi esattamente questa lista di controllo.

Se due categorie legittimamente hanno la stessa formulazione, mantieni quella formulazione dove necessario e controlla entrambe le voci. L'obiettivo è preservare il significato del messaggio attraverso le categorie richieste; differenze visibili tra ogni coppia di stringhe sono inutili.

Controllare la sostituzione numerica

Esegui la build e controlla la diagnostica del catalogo. Apple documenta la convalida del catalogo di stringhe per problemi comuni come specificatori di formato non corrispondenti. Risolvi quelle diagnostiche, quindi ispeziona se ogni variante soddisfa ancora il requisito di questo messaggio di visualizzare il conteggio. Build multilingual-ready apps.

Per questo esempio a singolo argomento, chiediti se il segnaposto numerico è presente, ancora numerico e inserito una volta nel posto previsto. Una build riuscita è un'evidenza utile, ma la decisione di accettazione ha bisogno anche della copertura delle categorie e del testo effettivamente renderizzato.

Testare conteggi rappresentativi nell'app Mac

Scegli Prodotto > Schema > Modifica schema, seleziona Esegui e apri Opzioni. Imposta Lingua app e l'Area app applicabile, chiudi il dialogo ed esegui l'app Mac. Ripeti per ogni localizzazione supportata. Apple documenta questa procedura basata su schema per testare l'output localizzato. Testing localizations when running your app.

Il selettore di esempio fornisce un insieme iniziale di conteggi, non una copertura universale delle categorie. Aggiungi valori appropriati per ogni localizzazione prima di considerare completa la sua riga di test.

Scelta del test Cosa controlla
0, 1 e 2 Selezioni vuote, a singolo elemento e a pochi elementi multipli
Almeno un input rappresentativo per categoria richiesta Copertura delle distinzioni grammaticali della localizzazione
Valori ai lati dei confini di regola rilevanti Cambiamenti di categoria oltre i conteggi minimi
Un conteggio valido grande Sostituzione numerica e spazio disponibile nell'etichetta
Ogni input testato Significato, formulazione completa e conteggio visibile

Le regole di Unicode associano le categorie a condizioni e valori di esempio; i dettagli numerici, inclusi i cifre frazionarie, possono essere importanti. Questo contratto accetta solo interi. Se l'applicazione in seguito accetta quantità decimali, rivisita l'interpolazione, la formulazione di origine e i test insieme invece di assumere che i risultati interi stabiliscano ancora la copertura. Unicode Technical Standard #35: Numbers.

Diagnosticare un risultato inaspettato

Usa il sintomo osservato per scegliere la prossima ispezione:

Sintomo Prossima azione
selection.count è assente dal catalogo Esegui di nuovo la build e ispeziona la chiamata localizzabile e la tabella selezionata
Solo una localizzazione ha variazioni plurali Rivisita dove è stata applicata Varia per plurale
Una variante ha ancora la formulazione plurale inglese Ispeziona il campo prepopolato e fornisci la sua traduzione completata
Il numero visualizzato è mancante o malformato Confronta il segnaposto della variante con lo specificatore generato da Xcode e il contratto del messaggio
Un conteggio maggiore usa una formulazione inaspettata Controlla la regola di categoria di quella localizzazione e aggiungi un test rappresentativo
La formulazione corretta non entra Adatta la vista e ritesta l'etichetta completa

Per un progetto più vecchio che usa Xcode prima della versione 15, il percorso supportato da Apple usa le risorse .strings e .stringsdict. Il dizionario plurale fornisce varianti specifiche della lingua e richiede other; non elimina la necessità di fornire le categorie rimanenti necessarie per una grammatica corretta. Localizing strings that contain plurals.

Completa il messaggio quando ogni localizzazione supportata ha una riga di copertura completata, i suoi segnaposto soddisfano il contratto e i conteggi rappresentativi producono l'etichetta intenzionata nell'app in esecuzione. Rivisita quelle righe ogni volta che le localizzazioni supportate, il tipo di input numerico o il significato del messaggio cambiano.

Fonti