StartseiteSandboxShowcaseAppDokumentBlog
    • EnglishEnglisch
      EN
    • русскийRussisch
      RU
    • 日本語Japanisch
      JA
    • françaisFranzösisch
      FR
    • 한국어Koreanisch
      KO
    • 中文Chinesisch
      ZH
    • españolSpanisch
      ES
    • DeutschDeutsch
      DE
    • العربيةArabisch
      AR
    • italianoItalienisch
      IT
    • British EnglishEnglisch (Vereinigtes Königreich)
      EN-GB
    • portuguêsPortugiesisch
      PT
    • हिन्दीHindi
      HI
    • TürkçeTürkisch
      TR
    • polskiPolnisch
      PL
    • IndonesiaIndonesisch
      ID
    • Tiếng ViệtVietnamesisch
      VI
    • українськаUkrainisch
      UK
    /
    Dokumentation nach Framework filtern
    Alt+←
    Warum Intlayer?
    Anfangen
    Konzept
    • Wie Intlayer funktioniert
    • Konfiguration
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Visueller Editor
    • CMS
    • CI/CD-Integration
    • ÜbersetzungPluralAufzählungBedingungGeschlechtEinfügungDateiVerschachtelungMarkdownHTMLFunktionsabruf
    • Datei pro Locale
    • Compiler
    • Automatisches Ausfüllen
    • Testen
    • Bundle-Optimierung
    Umwelt
    • Next.js 14 und App Router
      Next.js 15
      Next.js ohne Locale URL
      Next.js und Page Router
      Compiler
    • Tanstack Start Solid
    • Astro und React
      Astro und Svelte
      Astro und Vue
      Astro und Solid
      Astro und Preact
      Astro und Lit
      Astro und Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt und Vue
    • Vite und Solid
    • SvelteKit
    • Vite und Preact
    • Vite und Vanilla JS
    • Vite und Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native und Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx und React
    Plugins
    • JSON
    • gettext (.po)
    VS Code-Erweiterung
    Agent
    • MCP-Server
    • Agenten-Fähigkeiten
    Versionen
    • v8
    • v7
    • v6
    Benchmark
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Blog
    Frage stellen
    1. Documentation
    2. Plugin
    3. Sync po
    Erstellung:2026-05-10Letzte Aktualisierung:2026-05-10
    Video-Tutorial ansehen

    Für diese Seite ist ein Video-Tutorial verfügbar.

    Referenzieren Sie diese Dokumentation mit Ihrem bevorzugten AI-Assistenten
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Stellen Sie Ihre Frage und erhalten Sie einen Resümee des Dokuments, indem Sie diese Seite und den AI-Anbieter Ihrer Wahl referenzieren

    Versionshistorie

    1. "Erste Dokumentation für das Sync PO Plugin"
      v8.9.410.5.2026

    Der Inhalt dieser Seite wurde mit einer KI übersetzt.

    Den englischen Originaltext ansehen
    Diese Dokumentation bearbeiten

    Wenn Sie eine Idee haben, um diese Dokumentation zu verbessern, zögern Sie bitte nicht, durch das Einreichen eines Pull-Requests auf GitHub beizutragen.

    GitHub-Link zur Dokumentation
    Kopieren

    Markdown des Dokuments in die Zwischenablage kopieren

    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
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    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
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    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
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    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
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    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
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    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
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    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
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    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
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    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
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    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“.
    JSON
    VS Code-Erweiterung
    Alt+→

    Auf dieser Seite

      Diskussionen sind anonym und werden regelmäßig überprüft, um häufige Probleme zu behandeln. Teilen Sie gerne Feature-Ideen, Feedback zur Dokumentation oder alles rund um Intlayer, wir nutzen diese Eingaben, um unsere Roadmap zu gestalten und das Produkt zu verbessern.

      pnpm add -D @intlayer/sync-po-plugin# odernpm i -D @intlayer/sync-po-plugin
      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;
      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;
      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;
      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
      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;
      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;
      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;
      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});