Pluralizzazione e Stringsdict
Gestisci le regole di pluralizzazione tra le lingue.
Pluralizzazione e Stringsdict è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.
Il problema dei plurali
L'inglese ha due forme — 1 item, 2 items — perciò gli sviluppatori scrivono spesso "\(n) item" + (n == 1 ? "" : "s"). Questo approccio fallisce completamente: l'arabo ha sei categorie plurali, il russo tre e il giapponese una. Inserire la logica dei plurali direttamente nel codice è un problema di localizzazione in attesa di verificarsi.
// FRAGILE — only works for English
let n = 5
let bad = "\(n) item" + (n == 1 ? "" : "s")
print(bad)Categorie plurali
Unicode definisce le categorie plurali: zero, one, two, few, many, other. Ogni lingua ne usa un sottoinsieme. Il sistema sceglie la categoria corretta per un numero in base alle regole della locale: non è mai necessario scrivere queste regole manualmente.
// English uses: one, other
// Russian uses: one, few, many, other
// Japanese uses: other (only)
// You provide a variant string per category needed.Varianti plurali in uno String Catalog
In uno String Catalog si indica che una stringa presenta variazioni per il plurale. Xcode consente quindi di fornire il testo per ogni categoria. A runtime viene scelta automaticamente la variante corretta in base al conteggio interpolato e alla locale dell'utente.
// 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)Il vecchio .stringsdict
Prima degli String Catalog, i plurali venivano definiti in un file .stringsdict: una property list che associa una chiave a una stringa di formato e alle varianti per ciascuna categoria. Questi file sono ancora presenti nei progetti più datati e rimangono completamente supportati.
// Localizable.stringsdict (plist) structure:
// key: "items_count"
// NSStringLocalizedFormatKey: "%#@items@"
// items: NSStringPluralRuleType
// one: "%lld item"
// other: "%lld items"Anatomia di una voce stringsdict
Ogni voce contiene una chiave di formato che fa riferimento a una o più variabili denominate, racchiuse in %#@name@. Ogni variabile dichiara il tipo di regola (NSStringPluralRuleType), lo specificatore del tipo di valore (%lld) e una stringa per ogni categoria plurale.
// 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"))Recuperare una stringa con pluralizzazione
Dal codice, il punto di invocazione appare identico a quello di qualsiasi stringa localizzata: è sufficiente interpolare il conteggio. La selezione del plurale avviene all'interno del framework, quindi la stessa riga di Swift funziona in ogni lingua.
func messagesLabel(_ count: Int) -> String {
return String(localized: "You have \(count) messages")
}
print(messagesLabel(0))
print(messagesLabel(1))
print(messagesLabel(7))Perché «one» non significa soltanto 1
Un errore comune consiste nel pensare che la categoria one indichi esattamente il numero 1. In alcune lingue comprende tutti i numeri che terminano con 1, come 21 e 31, mentre zero può costituire o meno una categoria distinta. Fornite sempre il testo per ogni categoria e lasciate che siano le regole a decidere.
// Russian: 1, 21, 31 -> 'one'
// 2, 3, 4 -> 'few'
// 5..20, 0 -> 'many'
// Never assume one == 1.Combinare i plurali con altri valori
Un formato può contenere diverse variabili, ad esempio un conteggio e un nome. Ognuna può avere una pluralizzazione indipendente. In uno String Catalog indicate quale interpolazione varia; il resto rimane costante tra le diverse varianti.
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)Varianti di larghezza e dispositivo
Lo stesso meccanismo dei cataloghi supporta le variazioni di device e width, consentendo di mostrare un'etichetta breve su un orologio e una più lunga su iPad, oppure di abbreviare il testo quando lo spazio è limitato. Queste variazioni funzionano insieme alle varianti plurali.
// Catalog can vary by:
// plural: one / other
// device: iPhone / iPad / watch
// width: short / medium / long
let label = String(localized: "Notifications")
print(label)Testare la pluralizzazione
Per verificare le varianti, eseguite l'app in ogni lingua di destinazione usando l'override della localizzazione dello schema in Xcode, oppure usate la pseudolingua e le anteprime per locale. Controllate alcuni numeri limite: 0, 1, 2, 5, 11, 21, 100.
let samples = [0, 1, 2, 5, 11, 21, 100]
for n in samples {
print(String(localized: "\(n) items"))
}Buone pratiche
Per ottenere plurali corretti:
- Non concatenate mai né inserite manualmente suffissi
s. - Fornite ogni categoria necessaria per le lingue di destinazione.
- Ricavate il plurale dall'intero interpolato, non da una stringa precalcolata.
- Preferite gli String Catalog per il nuovo codice; mantenete
.stringsdictsolo per le destinazioni legacy.
func cartSummary(_ items: Int) -> String {
String(localized: "Your cart has \(items) items",
comment: "Cart count; pluralized")
}
print(cartSummary(1))Verifica rapida
Ricordate come deve essere gestita la selezione del plurale.
Riepilogo
Avete imparato a gestire la pluralizzazione corretta per la locale:
- Le categorie plurali Unicode sono zero, one, two, few, many, other; ogni lingua ne usa un sottoinsieme.
- Gli String Catalog consentono di aggiungere varianti plurali per ogni chiave; i
.stringsdictlegacy fanno lo stesso tramite un plist. - I punti di invocazione rimangono semplici: interpolate il conteggio e il framework selezionerà la variante.
- Non inserite mai manualmente la logica dei plurali: la categoria one non indica soltanto il numero 1.
Domande Frequenti
La lezione «Pluralizzazione e Stringsdict» è gratuita?
Sì — il testo completo di «Pluralizzazione e Stringsdict» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.
Cosa imparerò in «Pluralizzazione e Stringsdict»?
Gestisci le regole di pluralizzazione tra le lingue. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Pluralizzazione e Stringsdict»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Cataloghi di stringhe e stringhe localizzate
- Pluralizzazione e Stringsdict
- Formattazione in base alle impostazioni locali
- Da destra a sinistra e direzione del layout