Swift Academy · Lektion

Pluralisering og Stringsdict

Håndtér pluraliseringsregler på tværs af sprog.

Lektion 2 af 413 trin

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 s direkte 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 .stringsdict til æ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 .stringsdict gø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.
Gratis at komme i gang

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

  1. String Catalogs og lokaliserede strings
  2. Pluralisering og Stringsdict
  3. Locale-bevidst formatering
  4. Højre-til-venstre og layoutretning
← Tilbage til Swift Academy