Creation:2026-05-10Last update:2026-05-10

    Sync PO (i18n Brücken) - Sync PO mit ICU / i18next Unterstützung

    Verwenden Sie Intlayer als Add-on zu Ihrem bestehenden i18n-Stack. Dieses Plugin hält Ihre Gettext PO-Nachrichten mit Intlayer-Wörterbüchern synchron, damit Sie:

    • Ihren bestehenden PO-basierten Übersetzungs-Workflow beibehalten können.
    • Ihre Nachrichten mit Intlayer (CLI, CI, Anbieter, CMS) verwalten und übersetzen können, ohne Ihre App zu refaktorisieren.
    • Tutorials und SEO-Inhalte für jedes Ökosystem bereitstellen können, während Sie Intlayer als PO-Verwaltungsebene vorschlagen.

    Hinweise und aktueller Umfang:

    • Externalisierung in das CMS funktioniert für Übersetzungen und klassischen Text.
    • Noch keine Unterstützung für Platzhalter, Plurale/ICU oder fortgeschrittene Laufzeitfunktionen anderer Bibliotheken innerhalb der PO-Einträge selbst.
    • Der visuelle Editor wird für i18n-Ausgaben von Drittanbietern noch nicht unterstützt.

    Wann Sie dieses Plugin verwenden sollten

    • Sie verwenden bereits Gettext PO-Dateien für Ihre Übersetzungen.
    • Sie möchten KI-gestütztes Ausfüllen, Tests in der CI und Content-Ops nutzen, ohne Ihre Rendering-Laufzeit zu ändern.

    Installation

    bash
    pnpm add -D @intlayer/sync-po-plugin# odernpm i -D @intlayer/sync-po-plugin

    Plugins

    Dieses Paket bietet zwei Plugins:

    • loadPO: Lädt PO-Dateien in Intlayer-Wörterbücher.

      • Dieses Plugin wird verwendet, um PO-Dateien aus einer Quelle zu laden und in Intlayer-Wörterbücher zu integrieren. Es kann die gesamte Codebasis scannen und nach spezifischen PO-Dateien suchen. Dieses Plugin kann verwendet werden:
        • wenn Sie eine i18n-Bibliothek verwenden, die einen bestimmten Ort für das Laden Ihrer PO-Dateien vorschreibt, Sie aber Ihre Inhaltsdeklaration an einer beliebigen Stelle in Ihrer Codebasis platzieren möchten.
        • Es kann auch verwendet werden, wenn Sie Ihre Nachrichten von einer Remote-Quelle (z. B. einem CMS, einer API usw.) abrufen und Ihre Nachrichten in PO-Dateien speichern möchten.

      Unter der Haube scannt dieses Plugin die gesamte Codebasis, sucht nach spezifischen PO-Dateien und lädt sie in Intlayer-Wörterbücher. Beachten Sie, dass dieses Plugin die Ausgabe und Übersetzungen nicht zurück in die PO-Dateien schreibt.

    • syncPO: Synchronisiert PO-Dateien mit Intlayer-Wörterbüchern.

      • Dieses Plugin wird verwendet, um PO-Dateien mit Intlayer-Wörterbüchern zu synchronisieren. Es kann den angegebenen Ort scannen und die PO-Dateien laden, die dem Muster für spezifische PO-Dateien entsprechen. Dieses Plugin ist nützlich, wenn Sie die Vorteile von Intlayer nutzen möchten, während Sie eine andere i18n-Bibliothek verwenden.

    Verwendung beider Plugins

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";import { loadPO, syncPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  // Halten Sie Ihre aktuellen PO-Dateien mit Intlayer-Wörterbüchern synchron  plugins: [    /**     * Lädt alle PO-Dateien in src, die dem Muster {key}.i18n.po entsprechen     */    loadPO({      source: ({ key }) => `./src/**/${key}.i18n.po`,      locale: Locales.ENGLISH,      priority: 1, // Stellt sicher, dass diese PO-Dateien Vorrang vor Dateien unter `./locales/en/${key}.po` haben    }),    /**     * Lädt die Ausgabe und Übersetzungen und schreibt sie zurück in die PO-Dateien im Verzeichnis locales     */    syncPO({      source: ({ key, locale }) => `./locales/${locale}/${key}.po`,      priority: 0,    }),  ],};export default config;

    syncPO Plugin

    Schnellstart

    Fügen Sie das Plugin zu Ihrer intlayer.config.ts hinzu und verweisen Sie auf Ihre bestehende PO-Struktur.

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";import { syncPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  // Halten Sie Ihre aktuellen PO-Dateien mit Intlayer-Wörterbüchern synchron  plugins: [    syncPO({      // Layout pro Sprache und pro Namespace      source: ({ key, locale }) => `./locales/${locale}/${key}.po`,    }),  ],};export default config;

    Alternative: Eine Datei pro Sprache:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";import { syncPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    syncPO({      source: ({ locale }) => `./locales/${locale}.po`,    }),  ],};export default config;

    Wie es funktioniert

    • Lesen: Das Plugin entdeckt PO-Dateien über Ihren source-Builder und lädt sie als Intlayer-Wörterbücher.
    • Schreiben: Nach dem Build und Ausfüllen schreibt es lokalisierte PO-Dateien zurück in dieselben Pfade (mit korrekten Gettext-Headern).
    • Automatisches Ausfüllen: Das Plugin deklariert einen autoFill-Pfad für jedes Wörterbuch. Das Ausführen von intlayer fill aktualisiert standardmäßig nur fehlende Übersetzungen in Ihren PO-Dateien.

    API:

    ts
    syncPO({  source: ({ key, locale }) => string, // erforderlich  location?: string, // optionales Label, Standard: "sync-po::path/to/source"  priority?: number, // optionale Priorität für die Konfliktlösung, Standard: 0

    Mehrere PO-Quellen und Priorität

    Sie können mehrere syncPO-Plugins hinzufügen, um verschiedene PO-Quellen zu synchronisieren. Dies ist nützlich, wenn Sie mehrere Übersetzungsquellen oder unterschiedliche PO-Strukturen in Ihrem Projekt haben.

    Prioritätssystem

    Wenn mehrere Plugins auf denselben Wörterbuchschlüssel abzielen, bestimmt der Parameter priority, welches Plugin Vorrang hat:

    • Höhere Prioritätszahlen gewinnen gegenüber niedrigeren
    • Die Standardpriorität von .content-Dateien ist 0
    • Die Standardpriorität von Plugins ist 0
    • Plugins mit derselben Priorität werden in der Reihenfolge verarbeitet, in der sie in der Konfiguration erscheinen
    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";import { syncPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    // Primäre PO-Quelle (höchste Priorität)    syncPO({      source: ({ key, locale }) => `./locales/${locale}/${key}.po`,      location: "main-translations",      priority: 10,    }),    // Fallback PO-Quelle (niedrigere Priorität)    syncPO({      source: ({ locale }) => `./fallback-locales/${locale}.po`,      location: "fallback-translations",      priority: 5,    }),    // Legacy PO-Quelle (niedrigste Priorität)    syncPO({      source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.po`,      location: "legacy-translations",      priority: 1,    }),  ],};export default config;

    Load PO Plugin

    Schnellstart

    Fügen Sie das Plugin zu Ihrer intlayer.config.ts hinzu, um bestehende PO-Dateien als Intlayer-Wörterbücher zu erfassen. Dieses Plugin ist schreibgeschützt (keine Schreibvorgänge auf die Festplatte):

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";import { loadPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    // Erfassen Sie PO-Nachrichten, die sich an einer beliebigen Stelle in Ihrem Quellbaum befinden    loadPO({      source: ({ key }) => `./src/**/${key}.i18n.po`,      // Lädt eine einzelne Sprache pro Plugin-Instanz (standardmäßig die defaultLocale der Konfiguration)      locale: Locales.ENGLISH,      priority: 0,    }),  ],};export default config;

    Alternative: Layout pro Sprache, weiterhin schreibgeschützt (nur die ausgewählte Sprache wird geladen):

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";import { loadPO } from "@intlayer/sync-po-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    loadPO({      // Nur Dateien für Locales.FRENCH werden über dieses Muster geladen      source: ({ key, locale }) => `./locales/${locale}/${key}.po`,      locale: Locales.FRENCH,    }),  ],};export default config;

    Wie es funktioniert

    • Entdecken: Erstellt einen Glob aus Ihrem source-Builder und sammelt passende PO-Dateien.
    • Erfassen: Lädt jede PO-Datei mit der angegebenen locale als Intlayer-Wörterbuch.
    • Schreibgeschützt: Schreibt oder formatiert keine Ausgabedateien; verwenden Sie syncPO, wenn Sie eine bidirektionale Synchronisierung benötigen.
    • Bereit für automatisches Ausfüllen: Definiert einen fill-Pfad, damit intlayer content fill fehlende Schlüssel ausfüllen kann.

    API

    ts
    loadPO({  // Pfade zu Ihren PO-Dateien erstellen. `locale` ist optional, wenn Ihre Struktur kein Sprachsegment hat  source: ({ key, locale }) => string,  // Zielsprache für die von dieser Plugin-Instanz geladenen Wörterbücher  // Standardmäßig configuration.internationalization.defaultLocale  locale?: Locale,  // Optionales Label zur Identifizierung der Quelle  location?: string, // Standard: "plugin"  // Priorität für die Konfliktlösung mit anderen Quellen  priority?: number, // Standard: 0});

    Verhalten und Konventionen

    • Wenn Ihre source-Maske einen Sprach-Platzhalter enthält, werden nur Dateien für die ausgewählte locale erfasst.
    • Wenn kein {key}-Segment in Ihrer Maske vorhanden ist, lautet der Wörterbuchschlüssel "index".
    • Schlüssel werden aus Dateipfaden abgeleitet, indem der Platzhalter {key} in Ihrem source-Builder ersetzt wird.
    • Das Plugin verwendet nur entdeckte Dateien und erzeugt keine fehlenden Sprachen oder Schlüssel.
    • Der fill-Pfad wird aus Ihrer source abgeleitet und verwendet, um fehlende Werte über die CLI zu aktualisieren, wenn Sie sich dafür entscheiden.

    Konfliktlösung

    Wenn derselbe Übersetzungsschlüssel in mehreren PO-Quellen vorhanden ist:

    1. Das Plugin mit der höchsten Priorität bestimmt den endgültigen Wert
    2. Quellen mit niedrigerer Priorität werden als Fallback für fehlende Schlüssel verwendet
    3. Dies ermöglicht es Ihnen, Legacy-Übersetzungen beizubehalten, während Sie schrittweise zu neuen Strukturen migrieren

    CLI

    Die synchronisierten PO-Dateien werden wie andere .content-Dateien behandelt. Das bedeutet, dass alle Intlayer-Befehle für die synchronisierten PO-Dateien verfügbar sind. Einschließlich:

    • intlayer content test, um zu testen, ob Übersetzungen fehlen
    • intlayer content list, um die synchronisierten PO-Dateien aufzulisten
    • intlayer content fill, um fehlende Übersetzungen auszufüllen
    • intlayer content push, um die synchronisierten PO-Dateien hochzuladen
    • intlayer content pull, um die synchronisierten PO-Dateien herunterzuladen

    Weitere Details finden Sie im Intlayer CLI.

    Einschränkungen (aktuell)

    • Keine Unterstützung für Platzhalter oder Plurale/ICU bei der Zieladressierung von Drittanbieter-Bibliotheken.
    • Der visuelle Editor ist für Nicht-Intlayer-Laufzeiten noch nicht verfügbar.
    • Nur PO-Synchronisation; andere Katalogformate als PO werden nicht unterstützt.

    Warum das wichtig ist

    • Wir können etablierte i18n-Lösungen empfehlen und Intlayer als Add-on positionieren.
    • Wir nutzen deren SEO/Keywords mit Tutorials, die damit enden, Intlayer für die PO-Verwaltung vorzuschlagen.
    • Erweitert die Zielgruppe von „neuen Projekten“ auf „jedes Team, das bereits i18n verwendet“.