Um eine pluralisierte Beschriftung in einer Mac-App zu vervollständigen, füge in Xcode Pluralvarianten hinzu, trage für jede unterstützte Lokalisierung alle benötigten Kategorien ein und teste die angezeigten Ergebnisse. Diese Anleitung verwendet eine fiktive Meldung zur Elementauswahl.

Die Aufgabe besteht darin, eine einzelne, von der Anzahl abhängige Beschriftung in einer SwiftUI-Mac-App fertigzustellen. Die Meldung gibt an, wie viele Elemente ausgewählt sind, akzeptiert eine nichtnegative ganze Zahl und bewahrt diese Bedeutung in allen Übersetzungen. Der Ablauf kombiniert die Abdeckung der Kategorien, Platzhalterprüfungen und Laufzeittests, damit es einen klaren Abnahmestandard für einen ausgefüllten Katalogeintrag gibt.

Was ist für eine vollständige Pluralabdeckung erforderlich?

Apple empfiehlt String Catalogs für die Plural-Lokalisierung in Xcode 15 und neuer. Die Dokumentation zu Pluralen unterscheidet zwischen einem erforderlichen Fallback und grammatischer Vollständigkeit: other ist in einem Strings-Wörterbuch obligatorisch, aber das Weglassen weiterer sprachspezifischer Kategorien kann zu falscher Grammatik führen. Für Englisch sind one und other erforderlich; die Kategorie zero ist optional. Strings mit Pluralformen lokalisieren.

Die möglichen Kategorienamen sind zero, one, two, few, many und other. Sie beschreiben sprachabhängige grammatische Gruppierungen und keine sechs numerischen Bereiche, die für alle Sprachen gelten. Die Kategorie one sollte nicht zu einer allgemeinen Anwendungsregel werden, die lediglich prüft, ob die Anzahl eins beträgt. Unicode definiert Kategorien danach, welche Änderungen Zahlen in einer Wendung erfordern, einschließlich Änderungen über das Substantiv hinaus. Pluralregeln.

Verwende für diese Aufgabe den folgenden Vertrag für die Meldung. Dies sind beispielhafte Anwendungsanforderungen, keine von Apple vorgegebenen Anforderungen.

Vertragsfeld Anforderung für dieses Beispiel
Meldungsschlüssel selection.count
Englischer Standardwert \(count) items selected
Eingabe Eine nichtnegative Swift-Int-Variable namens count
Bedeutung Anzahl der derzeit ausgewählten Elemente
Ausgabe Eine vollständige lokalisierte Beschriftung mit der Anzahl
Abdeckung Jede unterstützte Lokalisierung, einschließlich der Ausgangslokalisierung
Abnahme Erforderliche Kategorien eingetragen, numerische Ersetzung beibehalten, repräsentative Ausgaben geprüft

Dass die Zahl in dieser Beschriftung erscheinen muss, ist eine bewusste Entscheidung. Apple erlaubt Pluralvarianten, die eine Zahl ausschreiben oder den numerischen Formatbezeichner weglassen. Ein anderer Vertrag für die Meldung könnte das zulassen. Hier erleichtert die sichtbare Anzahl den Vergleich der Beschriftung mit der Auswahl, auf die sie sich bezieht. Strings mit Pluralformen lokalisieren.

Die Swift-Meldung mit dem Katalog verknüpfen

Swifts String.LocalizationValue unterstützt lokalisierbaren Text mit Interpolation zur Laufzeit. Wenn sich eine stabile Kennung vom englischen Ausgangstext unterscheiden soll, empfiehlt Apple einen String-Initializer mit einem separaten defaultValue. Das passt zu selection.count: Die Kennung benennt die Meldung, während ihr Standardwert den englischen Wortlaut vorgibt. String.LocalizationValue.

Erstelle für eine kleine Test-App in Xcode 15 oder neuer ein macOS-App-Projekt mit SwiftUI und einem macOS-Bereitstellungsziel von Version 12 oder neuer. Ersetze die generierte App-Einstiegsdatei durch das vollständige Programm unten und behalte im Ziel nur eine @main-Deklaration. Füge dem App-Ziel Localizable.xcstrings hinzu, bevor du die Katalogschritte ausführst. Das Programm erfordert Xcode und das macOS SDK; es wurde in dieser Rechercheumgebung nicht kompiliert.

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

Die Einträge des numerischen Auswahlfelds sind Testeingaben. Die lokalisierte Zusammenfassung wird mit String(localized:defaultValue:comment:) aufgelöst und anschließend als resultierender String angezeigt. Apple dokumentiert, dass das erste Argument des Initializers den Suchschlüssel vorgibt, der Standardwert den Ausgangstext liefert und Kommentare den Übersetzungskontext bereitstellen. Xcode extrahiert beim Build Strings, die über lokalisierbare APIs übergeben werden. Den Text deiner App für die Übersetzung vorbereiten.

Lass die ganze Zahl in der lokalisierbaren Interpolation. Für diesen Vertrag solltest du in Anwendungszweigen keine separaten englischen Sätze für Singular und Plural vorab zusammenbauen. Mit einer einzigen Meldung hat der Katalog eine klare Aufgabe: den passenden lokalisierten Wortlaut für die angegebene Anzahl auszuwählen.

Die Kategorien für jede unterstützte Lokalisierung eintragen

Erstelle die Variationsstruktur mit dem Xcode-Editor:

  1. Wähle Product > Build, um den Katalog zu füllen.
  2. Öffne Localizable.xcstrings und wähle die Ausgangslokalisierung aus.
  3. Klicke mit gedrückter Ctrl-Taste auf selection.count und wähle Vary by Plural.
  4. Fülle jede Variante der Ausgangssprache aus.
  5. Füge über die Schaltfläche Add in der Seitenleiste unterstützte Lokalisierungen hinzu und fülle ihre Varianten aus.

Xcode fügt sprachspezifische Pluralformen hinzu und bestimmt den Formatbezeichner der Interpolation. Wenn du auf die Ausgangslokalisierung eine Pluralvariation anwendest, bleibt die Variationsstruktur über die Sprachen hinweg synchronisiert; wird sie nur auf eine andere Lokalisierung angewendet, betrifft sie ausschließlich diese Lokalisierung. Text mit einem String-Katalog lokalisieren und variieren.

Für diese Ganzzahlinterpolation können die englischen Einträge so aussehen:

Englische Kategorie Katalogwert
one %lld item selected
other %lld items selected

Verwende für den tatsächlichen Interpolationstyp den von Xcode erzeugten Bezeichner. In Apples dokumentiertem Ganzzahlbeispiel wird %lld verwendet; einen anderen Platzhalter in eine Übersetzung zu kopieren, kann die Argumentvereinbarung verletzen. Xcode füllt Variationsfelder zunächst mit dem Wert des Schlüssels vor. Prüfe daher den Wortlaut in jedem Feld. Text mit einem String-Katalog lokalisieren und variieren.

Erstelle ein Abdeckungsblatt mit einer Zeile pro tatsächlich verwendeter Lokalisierungskennung. Halte fest, welche Kategorien Xcode für diese Meldung erzeugt, ob für jede fertiger Text vorliegt und welche Eingaben du testen wirst. Die tatsächlichen Kennungen des Projekts verhindern, dass eine allgemeine Sprachbezeichnung eine ungeprüfte Lokalisierung verdeckt.

Kopiere nicht einfach den englischen Kategoriensatz in jede Zeile. Verlange ebenso wenig überall alle sechs Kategorien. Lass den Katalog die Arbeitsstruktur bereitstellen und ziehe dann die kardinalen Pluralregeln der jeweiligen Sprache zur Auswahl der Testeingaben heran. Kardinalregeln beziehen sich auf Mengen; Ordinalregeln betreffen Positionen und beantworten eine andere Frage. Unicode dokumentiert sie als getrennte Regeltypen. Unicode Technical Standard #35: Zahlen.

Struktur, Platzhalter und angezeigten Text getrennt überprüfen

Führe drei Prüfungen durch, denn jede beantwortet eine andere Frage. Eine fehlende Kategorie ist ein Abdeckungsproblem, ein falscher Platzhalter ein Formatierungsproblem und ein unbeholfener Satz ein Problem mit dem Wortlaut. Wenn du sie getrennt festhältst, ist klar, was als Nächstes zu korrigieren ist.

Kategorienabdeckung prüfen

Vergleiche für jede Zeile des Abdeckungsblatts die erwarteten Kategorien mit den ausgefüllten Katalogeinträgen. Bestätige, dass other vorhanden ist und dass kein erwarteter Eintrag leer ist oder einen unfertigen Text aus der Ausgangssprache enthält.

Für eine einfache Vollständigkeitsprüfung gilt: Die erwartete Menge umfasst die für diese Lokalisierung erzeugten Kategorien sowie alle bewusst unterstützten Überschreibungen. Die fehlende Menge ergibt sich aus der erwarteten Menge abzüglich der Kategorien mit fertigem Text. Jedes fehlende Element bedeutet nach dem Abnahmestandard dieses Artikels, dass die Meldung noch nicht fertig ist. Dies ist eine praktische Prüfmethode, die sich aus dem dokumentierten Variationsablauf ableitet, und keine Behauptung, Xcode setze genau diese Checkliste durch.

Wenn zwei Kategorien berechtigterweise denselben Wortlaut haben, behalte diesen bei Bedarf bei und prüfe beide Einträge. Ziel ist es, die Bedeutung der Meldung über alle erforderlichen Kategorien hinweg zu bewahren; sichtbare Unterschiede zwischen jedem String-Paar sind nicht nötig.

Numerische Ersetzung prüfen

Erstelle einen Build und prüfe die Katalogdiagnosen. Apple dokumentiert die Validierung von String Catalogs auf häufige Probleme wie nicht übereinstimmende Formatbezeichner. Behebe diese Diagnosen und prüfe anschließend, ob jede Variante weiterhin die Anforderung dieser Meldung erfüllt, die Zahl anzuzeigen. Apps mit Mehrsprachenunterstützung erstellen.

Prüfe bei diesem Beispiel mit einem Argument, ob der numerische Platzhalter vorhanden, weiterhin numerisch und genau einmal an der vorgesehenen Stelle eingefügt ist. Ein erfolgreicher Build ist ein nützlicher Beleg, aber für die Abnahme müssen außerdem die Kategorienabdeckung und der tatsächlich angezeigte Text berücksichtigt werden.

Repräsentative Anzahlen in der Mac-App testen

Wähle Product > Scheme > Edit Scheme, dann Run und öffne Options. Stelle App Language und die passende App Region ein, schließe den Dialog und starte die Mac-App. Wiederhole dies für jede unterstützte Lokalisierung. Apple dokumentiert dieses schemabasierte Verfahren zum Testen lokalisierter Ausgaben. Lokalisierungen beim Ausführen der App testen.

Das Beispielauswahlfeld bietet einen Ausgangssatz von Anzahlen, aber keine universelle Abdeckung aller Kategorien. Ergänze passende Werte für jede Lokalisierung, bevor du deren Testzeile als vollständig markierst.

Testauswahl Was sie prüft
0, 1 und 2 Leere Auswahl sowie Auswahl eines einzelnen und mehrerer weniger Elemente
Mindestens eine repräsentative Eingabe pro erforderlicher Kategorie Abdeckung der grammatischen Unterscheidungen der Lokalisierung
Werte beiderseits relevanter Regelgrenzen Kategorienwechsel über die kleinsten Anzahlen hinaus
Eine große gültige Anzahl Numerische Ersetzung und verfügbarer Platz für die Beschriftung
Jede getestete Eingabe Bedeutung, vollständiger Wortlaut und sichtbare Anzahl

Unicode-Regeln ordnen Kategorien Bedingungen und Beispielwerte zu; numerische Details, einschließlich Nachkommastellen, können eine Rolle spielen. Dieser Vertrag akzeptiert nur ganze Zahlen. Wenn die Anwendung später Dezimalmengen akzeptiert, passe Interpolation, Ausgangswortlaut und Tests gemeinsam an, statt davon auszugehen, dass die Ganzzahlergebnisse weiterhin eine vollständige Abdeckung belegen. Unicode Technical Standard #35: Zahlen.

Ein unerwartetes Ergebnis diagnostizieren

Wähle anhand des beobachteten Problems die nächste Prüfung aus:

Problem Nächste Maßnahme
selection.count fehlt im Katalog Erstelle erneut einen Build und prüfe den lokalisierbaren Aufruf sowie die ausgewählte Tabelle
Nur eine Lokalisierung enthält Pluralvarianten Prüfe erneut, wo Vary by Plural angewendet wurde
Eine Variante enthält weiterhin englischen Pluralwortlaut Prüfe das vorausgefüllte Feld und trage die fertige Übersetzung ein
Die angezeigte Zahl fehlt oder ist fehlerhaft Vergleiche den Platzhalter der Variante mit dem von Xcode erzeugten Bezeichner und dem Vertrag für die Meldung
Bei einer größeren Anzahl erscheint ein unerwarteter Wortlaut Prüfe die Kategorienregel dieser Lokalisierung und ergänze einen repräsentativen Test
Der korrekte Wortlaut passt nicht Passe die Ansicht an und teste die vollständige Beschriftung erneut

Für ein älteres Projekt mit einer Xcode-Version vor Version 15 sieht Apples unterstützter Weg die Ressourcen .strings und .stringsdict vor. Das Pluralwörterbuch stellt sprachspezifische Varianten bereit und erfordert other; die übrigen für eine korrekte Grammatik erforderlichen Kategorien müssen trotzdem eingetragen werden. Strings mit Pluralformen lokalisieren.

Schließe die Meldung ab, wenn jede unterstützte Lokalisierung eine vollständig ausgefüllte Zeile im Abdeckungsblatt hat, ihre Platzhalter dem Vertrag entsprechen und repräsentative Anzahlen in der laufenden App die beabsichtigte Beschriftung ergeben. Überprüfe diese Zeilen erneut, sobald sich die unterstützten Lokalisierungen, der Typ der numerischen Eingabe oder die Bedeutung der Meldung ändern.

Quellen