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:
- Scegli
Prodotto > Buildper popolare il catalogo. - Apri
Localizable.xcstringse seleziona la localizzazione di origine. - Control-clic su
selection.counte scegliVaria per plurale. - Compila ogni variazione della lingua di origine.
- Aggiungi le localizzazioni supportate usando il pulsante
Aggiungidella 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
- Localizing and varying text with a string catalog — Apple
- Localizing strings that contain plurals — Apple
- String.LocalizationValue — Apple
- Preparing your app's text for translation — Apple
- Testing localizations when running your app — Apple
- Build multilingual-ready apps — Apple
- Plural Rules — Unicode Consortium
- Unicode Technical Standard #35: Unicode Common Locale Data & Rules (CLDR), Part 3: Numbers — Unicode Consortium