Engineering//9 Min. Lesezeit

Translation Automation: Lokalisierung mit CI/CD und Webhooks optimieren

Eray Gündoğmuş
Teilen

Translation Automation: Lokalisierung mit CI/CD und Webhooks optimieren

Wichtigste Erkenntnisse

  • Translation Automation eliminiert manuelle Dateiübergaben zwischen Entwicklern und Übersetzern und verkürzt die Lokalisierungszyklen
  • CI/CD-Integration ermöglicht kontinuierliche Lokalisierung, bei der neue Strings automatisch extrahiert, übersetzt und zurückgespielt werden
  • Webhooks ermöglichen es TMS-Plattformen, Aktionen (Builds, Benachrichtigungen, Deployments) auszulösen, wenn Übersetzungen abgeschlossen sind
  • Automation reduziert das Risiko, nicht übersetzte oder veraltete Inhalte auszuliefern
  • Ein gut automatisierter Workflow kann die Lokalisierungsdurchlaufzeit von Wochen auf Stunden reduzieren

Was ist Auto Translation?

Im Kern ist Auto Translation die Praxis, manuelle Schritte aus dem Übersetzungs-Workflow zu entfernen, damit Inhalte von der Quellsprache in die Zielsprachen mit minimalem menschlichen Eingriff übertragen werden. Der Begriff umfasst ein breites Spektrum — von einem einfachen API-Aufruf an Google Translate bis hin zu einer vollständig orchestrierten Pipeline, die neue Strings in Ihrem Code erkennt, sie kontextbewusst per AI übersetzt, durch menschliche Prüfung leitet und die genehmigten Übersetzungen als Pull Request zurück in Ihr Repository einspielt.

Automatic Translation ist wichtig, weil moderne Software-Teams kontinuierlich ausliefern. Wenn Ihr Übersetzungsprozess manuelle Dateiexporte, E-Mail-Koordination und manuelle Importe erfordert, wird er zum Engpass, der jede internationale Veröffentlichung verzögert. Auto Translation beseitigt diesen Engpass.

Es gibt drei Reifegrade der Automatic Translation:

  1. Basis-Auto-Translation: Ein Entwickler ruft eine MT API (DeepL, Google Translate, Azure Translator) auf, um eine Datei zu übersetzen, und integriert die Ausgabe dann manuell. Schnell für Einzelaufgaben, aber nicht skalierbar.
  2. Semi-automatische Übersetzung: Ein TMS überwacht Ihr Repository oder CMS auf Änderungen, wendet automatisch Translation Memory und Machine Translation an und benachrichtigt dann menschliche Prüfer. Der Großteil der Pipeline läuft ohne Eingriff, aber Menschen genehmigen vor der Veröffentlichung.
  3. Vollständig automatisierte Übersetzungs-Pipelines: CI/CD-integrierte Workflows, bei denen String-Änderungen beim Merge erkannt, per AI übersetzt, durch Quality Gates validiert (Platzhalterprüfungen, Längenvalidierung, Vollständigkeitsschwellenwerte) und automatisch zurückgespielt werden, wenn alle Prüfungen bestanden sind. Menschliche Überprüfung ist Content-Typen vorbehalten, die sie erfordern (Marketing-Texte, rechtliche Texte).

Der Rest dieses Leitfadens konzentriert sich auf die Stufen 2 und 3 — die CI/CD- und webhook-gesteuerten Ansätze, die Automatic Translation zu einem nachhaltigen Teil Ihres Entwicklungs-Workflows machen, nicht zu einer einmaligen Abkürzung.

Warum Übersetzungen automatisieren?

In einem manuellen Lokalisierungs-Workflow extrahieren Entwickler Übersetzungsdateien, senden sie per E-Mail an Übersetzer oder laden sie in ein TMS hoch, warten auf Übersetzungen, laden fertige Dateien herunter und spielen sie in die Codebase zurück. Jede Übergabe führt zu Verzögerungen und Fehlermöglichkeiten.

Translation Automation entfernt diese Übergaben, indem Ihr Quellcode-Repository direkt mit Ihrem Translation Management System verbunden wird. Wenn Entwickler Änderungen committen, werden neue oder geänderte Strings automatisch erkannt und zur Übersetzung gesendet. Wenn Übersetzer ihre Arbeit abschließen, werden die Übersetzungen automatisch zurückgespielt.

Die automatisierte Lokalisierungs-Pipeline

Eine typische automatisierte Pipeline folgt diesem Ablauf:

Entwickler committet Code
        ↓
CI/CD erkennt geänderte Übersetzungsdateien
        ↓
TMS CLI pusht neue/geänderte Strings an TMS
        ↓
TMS wendet Translation Memory an (sofortige Treffer)
        ↓
Nicht gematchte Strings → MT-Vorübersetzung oder manuelle Zuweisung
        ↓
Übersetzer schließt Übersetzungen im TMS ab
        ↓
Webhook wird ausgelöst: "translations completed"
        ↓
CI/CD holt fertige Übersetzungen zurück ins Repo
        ↓
PR wird mit neuen Übersetzungen erstellt
        ↓
Überprüfen, mergen, deployen

CI/CD-Integrationsmuster

GitHub Actions Beispiel

Die meisten TMS-Plattformen bieten CLI-Tools, die in CI/CD-Pipelines verwendet werden können:

# .github/workflows/sync-translations.yml
name: Sync Translations

on:
  push:
    branches: [main]
    paths:
      - 'src/locales/en/**'

jobs:
  push-sources:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Push source strings to TMS
        run: |
          npx @better-i18n/cli push \
            --project your-org/your-project \
            --source src/locales/en
        env:
          BETTER_I18N_TOKEN: ${{ secrets.BETTER_I18N_TOKEN }}

Übersetzungen nach Zeitplan abrufen

# .github/workflows/pull-translations.yml
name: Pull Translations

on:
  schedule:
    - cron: '0 */6 * * *'  # Alle 6 Stunden
  workflow_dispatch:       # Manueller Auslöser

jobs:
  pull-translations:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Pull completed translations
        run: |
          npx @better-i18n/cli pull \
            --project your-org/your-project \
            --target src/locales
        env:
          BETTER_I18N_TOKEN: ${{ secrets.BETTER_I18N_TOKEN }}
      - name: Create PR if translations changed
        uses: peter-evans/create-pull-request@v6
        with:
          title: 'chore(i18n): update translations'
          commit-message: 'chore(i18n): pull latest translations from TMS'
          branch: i18n/update-translations

GitLab CI/CD

# .gitlab-ci.yml
push-sources:
  stage: sync
  only:
    changes:
      - src/locales/en/**
  script:
    - npx @better-i18n/cli push --project $PROJECT_ID --source src/locales/en

Webhook-gesteuerte Workflows

Webhooks ermöglichen es Ihrem TMS, Ihre Systeme zu benachrichtigen, wenn Ereignisse eintreten — Übersetzungen abgeschlossen, Reviews genehmigt oder neue Strings erkannt.

Häufige Webhook-Ereignisse

EreignisAuslöserTypische Aktion
translation.completedAlle Strings einer Sprache sind übersetztÜbersetzungen abrufen, PR erstellen
translation.reviewedÜbersetzung besteht ReviewIn Staging deployen
source.updatedNeue Quell-Strings erkanntÜbersetzer benachrichtigen
project.exportedÜbersetzungsexport ist bereitHerunterladen und mergen

Webhook-Handler Beispiel

// Express.js Webhook-Handler
app.post('/webhooks/translations', (req, res) => {
  const { event, language, project } = req.body;

  if (event === 'translation.completed') {
    // GitHub Actions Workflow per API auslösen
    triggerWorkflow('pull-translations', {
      language,
      project,
    });
  }

  res.status(200).json({ received: true });
});

Überlegungen zu Dateiformaten

Verschiedene Dateiformate beeinflussen die Funktionsweise der Automation:

FormatStärkenHäufig in
JSON (flach/verschachtelt)Einfach zu parsen, weit verbreitetReact, Vue, Angular
XLIFFBranchenstandard, bewahrt MetadatenEnterprise-Tools
PO/POTAusgereifte Tooling, übersetzerfreundlichDjango, Rails, PHP
RESX.NET-natives FormatC#, .NET-Projekte
ARBFlutter/Dart-StandardFlutter-Apps
Strings/StringsdictiOS-natives FormatiOS/macOS-Apps
XMLAndroid-natives FormatAndroid-Apps

Ihre Automation-Pipeline muss das spezifische Format verarbeiten, das Ihre Codebase verwendet. Die meisten TMS CLI-Tools unterstützen alle gängigen Formate.

String-Extraktions-Automation

Für Projekte, die keine separaten Übersetzungsdateien verwenden, identifiziert automatisierte String-Extraktion übersetzbare Strings im Quellcode:

Statische Analyse

Tools scannen Quellcode nach Übersetzungsfunktionsaufrufen:

// Diese Muster werden von Extraktions-Tools erkannt:
t('home.title')
useTranslations('common')
formatMessage({ id: 'greeting' })

Extraktionskonfiguration

{
  "extract": {
    "patterns": ["src/**/*.{tsx,ts}"],
    "functions": ["t", "useTranslations", "formatMessage"],
    "output": "src/locales/en/messages.json"
  }
}

Das Ausführen des Extraktionsbefehls als Pre-Commit-Hook oder CI-Schritt stellt sicher, dass neue übersetzbare Strings immer erfasst werden.

Quality Gates in automatisierten Pipelines

Automation sollte Qualitätsprüfungen beinhalten, um zu verhindern, dass fehlerhafte Übersetzungen die Produktion erreichen:

  1. Platzhaltervalidierung: Überprüfen, ob alle Platzhalter ({name}, {count}) aus Quell-Strings in Übersetzungen vorhanden sind
  2. Längenvalidierung: Übersetzungen markieren, die die Länge des Quell-Strings erheblich überschreiten (kann UI-Overflow verursachen)
  3. Vollständigkeitsprüfung: Sicherstellen, dass alle erforderlichen Sprachen einen Mindestübersetzungsprozentsatz vor der Bereitstellung erfüllen
  4. Formatvalidierung: Überprüfen, ob Übersetzungsdateien gültiges JSON/XLIFF/PO sind (keine Syntaxfehler)
# Quality Gate in CI
- name: Validate translations
  run: |
    npx @better-i18n/cli validate \
      --source src/locales/en \
      --target src/locales \
      --min-coverage 95

Häufige Fallstricke

  1. Übermäßige Synchronisierung: Das Abrufen von Übersetzungen bei jedem Commit erzeugt störende PRs. Verwenden Sie stattdessen geplante oder webhook-ausgelöste Abrufe.
  2. Fehlender Kontext: Automatisierte Extraktion erfasst Strings, aber keine Screenshots oder Beschreibungen. Stellen Sie Kontext durch Kommentare oder TMS-Funktionen bereit.
  3. Branch-Konflikte: Übersetzungs-PRs können mit Feature-Branches in Konflikt geraten. Spielen Sie Übersetzungs-Updates häufig ein, um Konflikte zu minimieren.
  4. Secret-Management: TMS API-Tokens müssen sicher in CI/CD-Secrets gespeichert werden, nicht im Repository.
  5. Rate Limiting: API-Aufrufe an TMS-Plattformen können rate-limitiert sein. Implementieren Sie Backoff- und Retry-Logik in Automation-Skripten.

FAQ

Wie oft sollte ich Übersetzungen synchronisieren?

Pushen Sie Quell-Strings bei jedem Merge in main (oder Ihren primären Branch). Holen Sie Übersetzungen entweder nach einem Zeitplan (alle 4-6 Stunden) oder per Webhook ab, wenn Übersetzungen abgeschlossen sind. Vermeiden Sie die Synchronisierung bei jedem Commit in Feature-Branches — das erzeugt unnötigen Lärm.

Sollte ich Übersetzungs-PRs automatisch mergen?

Für gut etablierte Workflows mit Quality Gates (Platzhaltervalidierung, Formatprüfung) kann das automatische Mergen von Übersetzungs-PRs sicher sein. Für neue Setups verlangen Sie manuelle Überprüfung, bis Sie Vertrauen in die Qualitätsprüfungen haben. Viele Teams mergen automatisch für nicht-kritische Sprachen und verlangen Review für primäre Märkte.

Was passiert, wenn Übersetzungen den Build kaputt machen?

Fügen Sie einen CI-Check hinzu, der Übersetzungsdateien vor dem Mergen validiert. Wenn eine Übersetzungsdatei eine ungültige Syntax, fehlende Platzhalter oder andere Probleme aufweist, sollte der PR im CI scheitern und nicht gemergt werden. Dies verhindert, dass fehlerhafte Übersetzungen die Produktion erreichen.

Ist Auto Translation gut genug für die Produktion?

Auto Translation — also vollständig automatisierte maschinelle Übersetzung ohne menschliche Überprüfung — eignet sich für interne Tools, Entwicklerdokumentation und weniger kritische Inhalte, bei denen Geschwindigkeit wichtiger ist als Schliff. Für benutzerorientierte Produkt-UI, Marketing-Texte und rechtliche Inhalte sollte Auto Translation als erster Entwurf in einer Pipeline dienen, die menschliche Überprüfung einschließt. Das Ziel von Automatic Translation im CI/CD-Kontext ist nicht, Menschen zu eliminieren, sondern die manuelle Koordination zu beseitigen, die sie verlangsamt.

Comments

Loading comments...