Pluralisering og Stringsdict
Håndtér pluraliseringsregler på tværs af sprog.
Pluralisering og Stringsdict er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 4 lektioner i alt.
Problemet med flertalsformer
Engelsk har to former – 1 element, 2 elementer – så udviklere skriver ofte "\(n) item" + (n == 1 ? "" : "s"). Det går helt galt: arabisk har seks flertalskategorier, russisk tre og japansk én. Hårdkodning af flertalslogik er en lokaliseringsfejl, der bare venter på at ske.
// FRAGILE — only works for English
let n = 5
let bad = "\(n) item" + (n == 1 ? "" : "s")
print(bad)Flertalskategorier
Unicode definerer flertalskategorierne: nul, én, to, få, mange, andre. Hvert sprog bruger en delmængde af dem. Systemet vælger den rigtige kategori for et tal ud fra lokalitetens regler – du skal aldrig selv skrive reglerne.
// English uses: one, other
// Russian uses: one, few, many, other
// Japanese uses: other (only)
// You provide a variant string per category needed.Flertalsvarianter i et String Catalog
I et String Catalog markerer du en streng som en streng med flertalsvarianter. Xcode lader dig derefter angive tekst for hver kategori. Ved kørsel vælges den rigtige variant automatisk ud fra det antal, der er indsat, og brugerens sprogindstilling.
// 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)Det ældre .stringsdict
Før String Catalogs blev flertalsformer gemt i en .stringsdict-fil – en egenskabsliste, der knytter en nøgle til en formatstreng plus varianter for hver kategori. Du ser dem stadig i ældre projekter, og de er fortsat fuldt understøttet.
// Localizable.stringsdict (plist) structure:
// key: "items_count"
// NSStringLocalizedFormatKey: "%#@items@"
// items: NSStringPluralRuleType
// one: "%lld item"
// other: "%lld items"Opbygningen af en stringsdict-post
Hver post har en formatnøgle, der henviser til en eller flere navngivne variabler omsluttet af %#@name@. Hver variabel angiver sin regeltype (NSStringPluralRuleType), værditypespecifikatoren (%lld) og en streng for hver flertalskategori.
// 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"))Slå en tekststreng op med flertalsbøjning
Fra koden ser kaldestedet identisk ud med enhver lokaliseret tekststreng – du interpolerer bare antallet. Valget af flertalsform sker internt i frameworket, så den samme Swift-linje fungerer på alle sprog.
func messagesLabel(_ count: Int) -> String {
return String(localized: "You have \(count) messages")
}
print(messagesLabel(0))
print(messagesLabel(1))
print(messagesLabel(7))Hvorfor 'one' ikke bare er 1
En almindelig fejl er at antage, at kategorien one betyder præcis tallet 1. På nogle sprog dækker den alle tal, der slutter på 1, f.eks. 21 og 31, og zero er måske eller måske ikke en separat kategori. Angiv altid tekst for hver kategori, og lad reglerne bestemme.
// Russian: 1, 21, 31 -> 'one'
// 2, 3, 4 -> 'few'
// 5..20, 0 -> 'many'
// Never assume one == 1.Kombination af flertalsformer med andre værdier
Et format kan have flere variable – f.eks. et antal og et navn. Hver af dem kan bøjes i flertal uafhængigt af de andre. I et String Catalog markerer du, hvilken interpolation der varierer; resten forbliver konstant på tværs af varianterne.
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)Varianter for bredde og enhed
Den samme katalogmekanisme understøtter variationer for enhed og bredde, så du kan vise en kort etiket på et ur og en længere på iPad eller forkorte den, når pladsen er trang. Disse fungerer sammen med flertalsvarianter.
// Catalog can vary by:
// plural: one / other
// device: iPhone / iPad / watch
// width: short / medium / long
let label = String(localized: "Notifications")
print(label)Test af flertalsbøjning
Du kan kontrollere dine varianter ved at køre appen på hvert målsprog med Xcodes tilsidesættelse af skemalokalisering eller bruge pseudosproget og forhåndsvisninger for de enkelte lokaliteter. Kontroller især grænsetallene: 0, 1, 2, 5, 11, 21 og 100.
let samples = [0, 1, 2, 5, 11, 21, 100]
for n in samples {
print(String(localized: "\(n) items"))
}Bedste praksis
Sådan får du korrekte flertalsformer:
- Sammenkæd aldrig tekst, og indsæt aldrig suffikser som
sdirekte i koden. - Angiv alle de kategorier, målsprogene har brug for.
- Bestem flertalsformen ud fra det interpolerede heltal, ikke ud fra en beregnet tekststreng.
- Foretræk String Catalogs i ny kode, og behold kun
.stringsdicttil ældre mål.
func cartSummary(_ items: Int) -> String {
String(localized: "Your cart has \(items) items",
comment: "Cart count; pluralized")
}
print(cartSummary(1))Hurtigt tjek
Genkald, hvordan valget af flertalsform skal håndteres.
Opsummering
Du har lært at bruge lokalitetskorrekt flertalsbøjning:
- Unicode-flertalskategorierne er zero, one, two, few, many, other; hvert sprog bruger et udvalg af dem.
- String Catalogs lader dig tilføje flertalsvarianter for hver nøgle; det ældre
.stringsdictgør det samme via en plist. - Kaldestederne forbliver enkle – interpoler antallet, så vælger frameworket varianten.
- Hardkod aldrig flertalslogik; kategorien one er ikke kun tallet 1.
Lær Swift med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 122
- Lektioner
- 409
Ofte stillede spørgsmål
Er lektionen “Pluralisering og Stringsdict” gratis?
Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “Pluralisering og Stringsdict”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Pluralisering og Stringsdict”?
Håndtér pluraliseringsregler på tværs af sprog. Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Swift Academy?
Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Pluralisering og Stringsdict”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Swift Academy-lektion?
Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- String Catalogs og lokaliserede strings
- Pluralisering og Stringsdict
- Locale-bevidst formatering
- Højre-til-venstre og layoutretning