Automatische Pluralisierung

@lingo.dev/compiler erkennt automatisch Pluralformen in deinem Text und wandelt sie in das ICU MessageFormat um, um eine korrekte Pluralisierung in allen Sprachen zu gewährleisten.

Was es macht

Der Compiler nutzt KI, um zu erkennen, wenn ein Text Pluralformen enthält (z. B. "1 item" vs. "5 items"), und wandelt diese in die ICU MessageFormat-Syntax um.

Vorher (dein Code):

<p>You have {count} items</p>

Nachher (kompiliert):

<p>{count, plural, one {You have 1 item} other {You have # items}}</p>

Verschiedene Sprachen haben unterschiedliche Pluralregeln. Arabisch hat 6 Formen, Russisch 4, Englisch 2. Das ICU MessageFormat verarbeitet alle korrekt.

Wie es funktioniert

  1. Der Compiler erkennt Interpolationen mit numerischen Werten
  2. Sendet den Text an das LLM zur Erkennung von Pluralformen
  3. Das LLM gibt ein ICU MessageFormat-Muster zurück, wenn eine Pluralisierung erkannt wird
  4. Der Compiler fügt die pluralfähige Übersetzung ein

Dies geschieht automatisch – keine Codeänderungen erforderlich.

Konfiguration

{
  pluralization: {
    enabled: true, // Default: true
    model: "groq:llama-3.1-8b-instant", // Fast model for plural detection
  }
}

Modell: Verwendet ein separates (schnelles) Modell zur Pluralerkennung, um die Kosten niedrig zu halten. Standardmäßig wird das schnellste Modell von Groq verwendet.

Beispiele

Einfache Plurale

<p>You have {count} items in your cart</p>

Wird zu:

{count, plural,
  one {You have 1 item in your cart}
  other {You have # items in your cart}
}

Null-Form

<p>You have {unreadCount} unread messages</p>

Wird zu:

{unreadCount, plural,
  =0 {You have no unread messages}
  one {You have 1 unread message}
  other {You have # unread messages}
}

Komplexe Plurale

<p>{days} days and {hours} hours remaining</p>

Wird zu:

{days, plural,
  one {1 day}
  other {# days}
} and {hours, plural,
  one {1 hour}
  other {# hours}
} remaining

Sprachspezifische Regeln

ICU MessageFormat verarbeitet komplexe Pluralregeln automatisch:

Englisch (2 Formen):

  • one: 1 item
  • other: 0 items, 2 items, 100 items

Russisch (4 Formen):

  • one: 1, 21, 31, 41... (оди́н элеме́нт)
  • few: 2-4, 22-24... (два элеме́нта)
  • many: 0, 5-20, 25-30... (пять элеме́нтов)
  • other: 1.5, 2.5... (1.5 элеме́нта)

Arabisch (6 Formen):

  • zero: 0
  • one: 1
  • two: 2
  • few: 3-10
  • many: 11-99
  • other: 100+

Der Compiler generiert korrekte Formen für jede Zielsprache.

Pluralisierung deaktivieren

Falls Ihre App keine Pluralformen verwendet oder Sie diese manuell verarbeiten möchten:

{
  pluralization: {
    enabled: false,
  }
}

Dies überspringt die Pluralerkennung vollständig und reduziert LLM-Aufrufe.

Manuelle Pluralformen

Sie können ICU MessageFormat direkt in Ihrem Code schreiben:

<p>
  {formatMessage(
    { id: "items", defaultMessage: "{count, plural, one {# item} other {# items}}" },
    { count }
  )}
</p>

Der Compiler versucht nicht, Plurale zu erkennen – er verwendet Ihr exaktes Format.

Performance

Die Pluralerkennung verursacht einen geringen Overhead:

  • Ein zusätzlicher LLM-Aufruf pro eindeutigem Text mit numerischen Interpolationen
  • Verwendet schnelles Modell (Standard: Groq llama-3.1-8b-instant)
  • Ergebnisse werden gecacht – nachfolgende Builds verwenden erkannte Plurale wieder

Kosten: Vernachlässigbar. Schnelle Modelle kosten Bruchteile eines Cents pro Anfrage.

Häufige Fragen

Funktioniert das für alle Sprachen? Ja. ICU MessageFormat unterstützt über 200 Sprachen mit korrekten Pluralregeln.

Was passiert, wenn die KI einen Fehler macht? Verwenden Sie data-lingo-override, um exakte Übersetzungen mit korrekten Pluralformen anzugeben:

<p data-lingo-override={{
  es: "{count, plural, one {1 artículo} other {# artículos}}"
}}>
  {count} items
</p>

Kann ich das Modell für die Pluralerkennung anpassen? Ja. Setzen Sie pluralization.model auf ein beliebiges unterstütztes LLM. Der Standard ist für Geschwindigkeit und Kosten optimiert.

Erhöht dies die Bundle-Größe? Geringfügig. ICU MessageFormat-Muster sind etwas größer als einfache Strings. Die Auswirkung ist minimal.

Was ist mit verschachtelten Pluralformen? Werden unterstützt. Der Compiler verarbeitet mehrere pluralisierte Variablen im selben String.

Muss ich Pluralformen markieren? Nein. Der Compiler erkennt sie automatisch, wenn pluralization.enabled: true.

Debugging

Um erkannte Pluralformen anzuzeigen, prüfen Sie .lingo/metadata.json:

{
  "translations": {
    "abc123": {
      "source": "You have {count} items",
      "pattern": "{count, plural, one {You have 1 item} other {You have # items}}",
      "locales": {
        "es": "{count, plural, one {Tienes 1 artículo} other {Tienes # artículos}}"
      }
    }
  }
}

Das Feld pattern zeigt das vom Compiler erkannte ICU MessageFormat.

Nächste Schritte