v0.26.0Ein MCP-Server für Coding-Agenten

Liefern Sie Ihre App in jeder Sprache.

Jeder hartcodierte String in Ihrer Web-, Mobile- oder Desktop-App, gefunden und mit dem Kontext Ihrer App übersetzt. Ein Pull-Request zum Überprüfen und Zusammenführen, von einem einzigen CLI-Befehl oder bei jedem Push.

$npx localize-dev run
import { useTranslation } from 'react-i18next';

export function Inbox({ user, unread }) {
  const { t } = useTranslation();
  return (
    <section>
      <h1>{t('inbox.welcome_heading', { name: user.name })}</h1>
      <p>{t('inbox.unread_summary', { unread })}</p>
      <input placeholder={t('inbox.search_placeholder')} />
      <button>{unread ? t('inbox.mark_all_read') : t('inbox.refresh')}</button>
    </section>
  );
}

19 Frameworks, von React und Flutter bis Rails, Android und iOS, und die dazugehörigen Tools

Warum localize.dev?

Fünf manuelle Schritte, in einem Durchlauf erledigt

Die Arbeit, die Sie bei jeder Veröffentlichung wiederholen, wird in einem einzigen Durchgang erledigt und wie jede andere Codeänderung überprüft.

  1. Finden

    Normalerweise:Durchsuche den Code nach Strings, Datei für Datei

    Jetzt:Jede im AST gefundene Zeichenkette, einschließlich Attribute, Ternaries und Template-Literale

  2. Name

    Normalerweise:Erfinde einen Schlüssel für jeden und hoffe, dass er konsistent bleibt

    Jetzt:Semantische Schlüssel aus Komponenten-Kontext; identische Kopien verwenden denselben Schlüssel

  3. Übersetzen

    Normalerweise:Exportiere eine Tabelle, warte auf Übersetzer, füge alles wieder ein

    Jetzt:Jede Zielsprache in einem Durchgang übersetzt

  4. Verifizieren

    Normalerweise:Entdecke den defekten {placeholder} in der Produktion

    Jetzt:Platzhalter vor dem Schreiben überprüft

  5. Veröffentlichen

    Normalerweise:Alles beim nächsten Release wiederholen

    Jetzt:Pull-Request bei jedem Push, damit neue Kopien nie unübersetzt verschickt werden

5 Übergaben der übliche Weg

1 Pull Request mit localize.dev

Probieren Sie es in Ihrem Code aus

So funktioniert's

Von fest codiertem Text zu einem lokalisierten Pull Request

Vier deterministische Schritte, wobei das Modell nur dort zum Einsatz kommt, wo Urteilsvermögen hilft: Schlüssel benennen und übersetzen. Scrolle, um eine Komponente durch alle vier zu verfolgen.

01 / 04

Analysiere den AST

Jede Komponente und Seite wird analysiert: JSX, Vue und Svelte-Vorlagen oder HTML. Text, benutzersichtbare Attribute und die Zeichenfolgen, die Ihr Code rendert, werden extrahiert. URLs, Klassennamen und Codebeispiele werden übersprungen.

src/checkout/Summary.tsx
4<aside className="Zusammenfassung">class · ignoriert
5 <h2>Bestellübersicht</h2>
6

Hallo {user.name}, Sie haben {count} Artikel</p>
7 Rabattcode" />
8 <button>Bestellung aufgeben</button>
9 <Link href="/cart/edit">Warenkorb bearbeiten</Link>URL · ignoriert
10</aside>

5

Gefundene Strings

2

von Regel ignoriert

1

Komponente

Kontextbezogene Übersetzung

Übersetzt für den Ort, an dem sich jede Zeichenkette befindet

Wort-für-Wort-Übersetzung scheitert in dem Moment, in dem ein Wort zwei Bedeutungen hat. localize.dev übersetzt jeden String mit dem, was Ihr Projekt darüber aussagt und was die Zielsprache davon erwartet.

Es liest Ihr Projekt

Ein String wird zusammen mit seinem Speicherort übersetzt: die Datei, die Komponente und das Element, in dem er sich befindet, sodass eine Schaltflächenbeschriftung, ein Titel und ein Platzhalter jeweils die richtige Bedeutung erhalten. Ihre Glossardefinitionen und Stilnotizen halten Produktbegriffe und den Ton in jeder Datei gleich.

  • Dateipfad
  • Komponente
  • Element und Attribut
  • Glossarbegriffe
  • Nicht übersetzbare Namen
  • Ton und Anrede

"Post" → de

src/feed/Composer.tsx · innerhalb von <Button>Veröffentlichen
src/feed/PostCard.tsx · drinnen <CardTitle>Beitrag

Es schreibt für jede Sprache

Pluralformen erhalten jede Form, die die Locale benötigt, auch mit zwei Zählungen in einem Satz, 1. und 2. folgen den eigenen Ordnungszahlen jeder Sprache, Links und Fettdruck verschieben sich dorthin, wo die Grammatik sie platziert, und die Anrede passt zum gewählten Ton für jeden Markt.

  • CLDR-Pluralregeln
  • Ordnungszahlen
  • Wortstellung
  • Formelles oder informelles Sie
  • Kurze UI-Formulierungen

"{count} Dateien" → de

1 Dateione
3 Dateienfew
5 von Dateienmany

Legen Sie Glossarbegriffe, zu behaltende Namen und Stilnotizen pro Projekt im Dashboard fest. Jeder Lauf auf diesem Repository verwendet sie.

Kontinuierliche Lokalisierung

Jeder Push bleibt lokalisiert

Fügen Sie die GitHub Action hinzu und neue Texte werden nie unübersetzt ausgeliefert. Jeder Lauf aktualisiert denselben Branch und dieselbe Pull Request, sodass Sie nie mit einem Stapel von PRs oder Konflikten zwischen den Läufen enden.

  • Führe einen Commit mit den Komponenten und allen Sprachdateien durch.
  • Richten Sie die i18n-Bibliothek Ihres Frameworks ein, falls noch keine vorhanden ist.
  • Der R-Body listet jede Ersetzung und jede übersprungene Zeichenkette auf.
  • Übersetzungen überprüft von Crowdin, Phrase, Lokalise oder Transifex
  • sehr oft landet auf dem Überprüfungs-Tab des Projekts
  • Prüfung, die Pull Requests mit unübersetztem Inhalt ablehnt
Action einrichten

Lokalisiere: 12 neue Strings in 4 Sprachen

localize-dev/mainmain

esfrdeja Platzhalter überprüft
.github/workflows/localize.yml
name: Localize

on:
  push:
    branches: [main]
  pull_request:
    types: [opened, synchronize]
  workflow_dispatch: # "Run workflow" button in the Actions tab

permissions:
  contents: write # push the localize-dev/<branch> branch
  pull-requests: write # open or update the localization PR

# One run per branch at a time; a newer push supersedes the running one.
concurrency:
  group: localize-${{ github.head_ref || github.ref_name }}
  cancel-in-progress: true

jobs:
  localize:
    runs-on: ubuntu-latest
    timeout-minutes: 60
    # Skip localize.dev's own branches, and fork PRs (their token is read-only).
    if: >-
      !startsWith(github.head_ref || github.ref_name, 'localize-dev/') &&
      (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository)
    steps:
      - name: Checkout
        uses: actions/checkout@v5
        with:
          # On PRs, scan the branch itself rather than the merge commit.
          ref: ${{ github.head_ref || github.ref_name }}

      - name: Localize
        uses: ufortstephen/autolocalize-action@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          api_key: ${{ secrets.LOCALIZEDEV_API_KEY }}
          target_locales: 'es,fr,de,ja'
          # src_dir: 'src' # default: your framework's (src, app/views, resources/views, lib…)
          # locales_path: 'public/locales/{locale}/common.json' # default: your framework's
          # working_directory: 'apps/web' # monorepo: localize just this app

Menschliche Überprüfung

Muttersprachler genehmigen, und ihre Korrekturen bleiben bestehen

Maschinelle Übersetzungen sind ein erster Entwurf. Jede Sprache erhält ihren eigenen Prüfer, und jede Korrektur, die er vornimmt, wird für den nächsten Durchlauf gespeichert.

  • Das Modell markiert unsichere Übersetzungen mit einem Grund, sodass Übersetzer dort anfangen können.
  • Ein Übersetzer pro Sprache, per E-Mail einmal pro Ausführung.
  • Genehmigen oder bearbeiten, inklusive Pluralformen, mit einem Link zur Quelldatei.
  • Änderungen werden in den offenen Pull Request übernommen.
  • Notizen für den nächsten Übersetzer und im Glossar vorgeschlagene Begriffe aus wiederholten Korrekturen.
So funktioniert die Überprüfung

12 neue spanische Übersetzungen zum Überprüfen

Gesendet an den spanischen Übersetzer des Projekts, wenn der Lauf abgeschlossen war

Überprüfung · es1 von 3 genehmigt
  • Bestellung aufgeben

    checkout.place_order

    Bestellung aufgeben

    Genehmigt
  • {{count}} Artikel in deinem Warenkorb

    checkout.items

    {{count}} Artikel in deinem Warenkorb

    Genehmigen
  • Zur Kasse

    checkout.heading

    Bezahlung

    Bearbeitet

Die Übersetzer wechseln ständig checkout zu pago.

Zum Glossar hinzufügen

Vor dem Release

Erkennen Sie die Probleme, bevor Ihre Benutzer es tun.

Testen Sie es mit Ihrem eigenen Code, finden Sie Layouts, die bei längerem Text oder von rechts nach links brechen, stoppen Sie nicht übersetzte und veraltete Texte beim Pull Request, weisen Sie Prüfer auf die Übersetzungen hin, die sie benötigen, und bringen Sie Ihre Dokumente mit.

Sehen Sie es zuerst in Ihrem Code

Verbinden Sie ein Repository und erhalten Sie einen Vorschau-Pull-Request: bis zu 200 Strings aus Ihrem Standard-Branch, auf unserer Seite lokalisiert. Kein Workflow, Schlüssel oder Checkout nötig.

localize.dev-Vorschau: 184 Strings auf Deutsch

localize-dev/previewmain

Wie die Vorschau funktioniert

Eine Prüfung, die es so lässt

Die localize-dev-Prüfung scheitert an einem Pull-Request, der Hardcoded-Text hinzufügt, eine Sprache vernachlässigt oder den englischen Text ändert, dessen Übersetzungen nicht mithalten, und zeigt die Zeile an. Läuft in CI ohne API-Schlüssel.

i18n-Prüfung fehlgeschlagen

src/Cart.tsx:7 "Free shipping today" ist nicht übersetzt
locales/de.json 3 Nachrichten haben keine deutsche Übersetzung
locales/en.json cart.pay wurde seit der Übersetzung geändert

Prüfung hinzufügen

Finden Sie Layouts, die brechen, bevor Sie übersetzen

localize-dev run --pseudo erzeugt eine gedehnte, betonte Pseudosprache. Beschnittene Buttons werden sichtbar, und auch Text, der noch hartcodiert ist. Kostenlos, ohne Modell.

Bestellung aufgeben[Þļáçé öŕðéŕ one two]en-XA: ~35% länger, wie Deutsch
Pseudolokalisierung ausprobieren

Überprüfen Sie zuerst die zweifelhaften

Das Modell markiert Übersetzungen, bei denen es unsicher ist, zusammen mit dem Grund. Der Überprüfungs-Reiter öffnet sich für diese; genehmigen Sie den Rest mit einem Klick.

Buchen → Buchenes

Benötigt einen Blick: eine Reservierung oder ein Roman? Annahme: Reservierung aufgrund des Buttons.

Wie die Überprüfung funktioniert

Rechts-nach-links-Layouts, vor dem Release geprüft

Mit Arabisch oder Hebräisch in Ihren Sprachen richten die Kontrolllisten die Ränder und Ausrichtungen an eine Seite aus, und localize-dev rtl --fix tauscht die sicheren durch logische Ausrichtungen, die sich automatisch umdrehen.

- ml-4 text-align-left gerundet-links

+ ms-4 text-align-start gerundet-rechts

Wie funktioniert Rechts-zu-Links?

Ihre Dokumente, in jeder Sprache auch

localize-dev übersetzt Markdown- und MDX-Inhalte, Dokumente, Blogbeiträge und rechtliche Seiten in eine Kopie pro Sprache. Code, Links und Komponenten bleiben exakt wie geschrieben; nur bearbeitete Dokumente werden neu erstellt.

docs/intro.mdintro.es.mdintro.fr.mdintro.de.md
Übersetzen Sie Ihre Dokumente

Funktioniert, wo Sie entwickeln

Eine Engine für Web, Mobile und Desktop

Websites und serverseitig gerenderte Apps, iOS- und Android-Apps, Desktop-Apps und die gemeinsam genutzten Komponentenbibliotheken. Jede erhält die i18n-Bibliothek, die ihr Framework erwartet.

01 / 04

Web-Apps

React · Next.js · Angular · Vue · SvelteKit · Astro

acmegoods.com/en

Free shipping on orders over $50

Acme Goods2
The weekend editPieces for slow mornings and long trips.Shop now
Canvas Weekender
New arrivalsView all
Studio Headphones
Studio Headphones$189
Essential Tee
Essential Tee$32
Parlour Palm
Parlour Palm$38
Minimal Watch
Minimal Watch$149

Integrationen

Dein Framework, deine Tools

Jedes Framework erhält eine eigene i18n-Bibliothek, die für dich eingerichtet ist. Übersetzungen gelangen in den Pull-Request, deine Übersetzungsplattform oder die bereits vorhandenen Lokalisierungsdateien.

Von deinem Terminal aus

Sieh dir jede Änderung an, bevor sie passiert

Führe es zuerst lokal aus. --dry-run zeigt jeden Ersatz und jede übersprungene Zeichenkette mit Grund, damit dich in der Überprüfung nichts überrascht.

localize-dev scanlocalize-dev run --dry-runlocalize-dev run --pseudolocalize-dev checklocalize-dev prlocalize-dev translate
CLI-Referenz
~/acme/storefront

$ npx localize-dev run -l es,fr,de

🔍 Scannen von src/ (Zielsprachen: es, fr, de)

src/checkout/Summary.tsx

L6 Bestellübersicht → {t('checkout.order_summary_heading')}

L12 "Rabattcode" → {t('checkout.discount_code_placeholder')}

L15 Bestellung aufgeben → {t('checkout.place_order_button')}

src/legacy/PromoBanner.tsx:9 übersprungen "Kostenloser Versand bei Bestellungen über 50 $": Klassenkomponente

✅ 3 Zeichen in 1 Datei lokalisiert (3 neue Schlüssel, 0 wiederverwendet). 5 Dateien geschrieben.

$

Wie die Engine funktioniert

Regeln übernehmen die Umschreibung. Das Modell benennt nur die Schlüssel und übersetzt.

Minimale Unterschiede

Änderungen werden an genauen AST-Offsets eingefügt. Formatierung und Importreihenfolge bleiben wie sie sind, damit Prüfer nur die geänderten Zeilen sehen.

- <button>Bestellung aufgeben</button>
<button>{Bestellung aufgeben}</button>
<a href="/terms">…

Vollständige Sätze

Text, Ausdrücke, Links und Fettdruck verschmelzen zu einer Nachricht, damit Übersetzer den vollständigen Satz sehen, anstatt Fragmente.

Hallo {name}, Sie haben {count} elemente

Überspringt, was sicher nicht geändert werden kann

Zeichenketten, die die Engine nicht sicher umschreiben kann, wie die in Klassenkomponenten oder außerhalb eines Composable, bleiben unverändert und werden mit dem Grund gemeldet.

Idempotent

Führe es bei jedem Push aus. Eingeschlossene Strings bleiben unverändert und identische Kopien verwenden ihren bestehenden Schlüssel.

Nichts zu hosten

Übersetzungen laufen auf dem gehosteten localize.dev-Modell in jedem Plan. Sie benötigen keine GPUs, Prompts oder Anbieter-Keys. Ein API-Schlüssel ist ausreichend.

Kein Lock-in

Die Ausgabe ist die i18n-Bibliothek, die dein Framework bereits verwendet, mit einfachen Locale-Dateien in deinem Repo. Hör morgen auf, localize.dev zu verwenden, und deine App funktioniert weiterhin, inklusive Übersetzungen.

  • react-i18next
  • vue-i18n
  • ngx-translate
  • svelte-i18n
  • ember-intl
  • Rails I18n
  • gettext
  • strings.xml
  • Flutter ARB

Daten, Zahlen und Geld auch

toLocaleDateString('en-US'), Intl-Formatter und `$${{price}}` werden so umgeschrieben, dass sie der Sprache der App folgen, sodass $1.234,50 für einen deutschen Besucher als 1.234,50 € angezeigt wird.

Sicherheit & Datenschutz

Was Ihren Computer verlässt

Nur die übersetzten Strings werden an die API gesendet. Deine Quelldateien bleiben auf deinem Rechner oder CI-Runner.

  • Strings, nicht Quellcode

    Nur extrahierte Strings werden gesendet, mit Dateipfad für Kontext. Ganze Dateien verlassen nie Ihren Rechner.

  • Lokal, wenn Sie möchten

    Scans und Offline-Läufe finden auf Ihrem Rechner statt, ohne API-Schlüssel und Netzwerkaufrufe, und sie verbrauchen Ihre Kontingente nicht.

  • Hash-API-Schlüssel

    Nur ein Hash jeder Schlüssel wird gespeichert. Geheimnisse werden einmal angezeigt, und das Widerrufen wirkt sofort.

  • Alles oder nichts

    Wenn ein Lauf Ihren Plan überschreiten würde, stoppt er, bevor er etwas schreibt, sodass Ihr Code nie halb geschrieben bleibt.

Preise

Kostenlos starten. Upgrade, wenn dein Text wächst.

Free

$0für immer

Alles, was Sie brauchen, um ein Nebenprojekt zu lokalisieren oder es an einer echten Codebasis auszuprobieren.

  • 1.000 Zeichenfolgen / Monat
  • 3 Zielsprachen
  • CLI and GitHub Action
  • Der Offline-Modus und Scans verbrauchen nie Ihr Kontingent

Pro

Am beliebtesten

$100/Jahr

Jährlich abgerechnet

Für Produkte, die in mehreren Märkten ausgeliefert werden.

  • Unbegrenzte Zeichenfolgen
  • 5 Zielsprachen
  • Pull-Requests bei jedem Push
  • Nutzungs-Dashboard und mehrere API-Schlüssel

Team

$200/Jahr

Jährlich abgerechnet

Enthält 3 Mitglieder · +50 $/Jahr pro zusätzlichem Mitglied

Für Produktteams, die in vielen Märkten ausliefern.

  • Unbegrenzte Zeichenfolgen
  • Unbegrenzte Zielsprachen
  • 3 Mitglieder inklusive, dann 50 $/Jahr pro Person
  • Unbegrenzte Arbeitsbereiche, Teilen des Plans
  • Gemeinsame Projekte, Schlüssel und Nutzung
  • Prioritäts-Support

Vergleiche Pläne im Detail

Häufige Fragen

Fragen, die Teams zuerst stellen

Ist es nur für React-Web-Apps?+

Nein. Es funktioniert mit React und Next.js, React Native und Expo, Flutter, Angular, Vue und Nuxt, Svelte und SvelteKit, Astro, Solid, Qwik, Lit, Ember, Electron und Tauri, einfachen HTML-Seiten, Rails-, Django- und Laravel-Vorlagen, Android-Layouts, Jetpack Compose und View-Code sowie iOS- und macOS-Apps in SwiftUI und UIKit. Es richtet die passende i18n-Bibliothek für jede ein: react-i18next, ngx-translate, vue-i18n oder @nuxtjs/i18n, svelte-i18n, ember-intl, Flutter’s gen-l10n, Rails I18n, Django’s gettext, Android-Ressourcen oder ein kleines Skript für statische Seiten.

Wir haben bereits i18n eingerichtet. Ist es trotzdem nützlich?+

Ja. localize-dev translate füllt die fehlenden Übersetzungen in den bereits vorhandenen Locale-Dateien auf, in jedem Stack: JSON (i18next, react-intl, vue-i18n, ngx-translate), Rails YAML, gettext .po, Flutter .arb, Android strings.xml, Apple String Catalogs und .strings sowie Browser-Erweiterungsnachrichten. Der Code wird nicht angefasst, bestehende Übersetzungen werden nicht geändert, und in CI wird ein Pull-Request geöffnet, sobald neue Schlüssel landen.

Verlässt mein Code meinen Computer?+

Nur die zu übersetzenden Zeichenfolgen werden mit ihrem Dateipfad und ihrem Speicherort (die Komponente und das Element wie ein Button oder eine Überschrift) als Kontext an die localize.dev API gesendet. Ganze Dateien werden nie gesendet. Das Umschreiben erfolgt lokal (oder auf Ihrem eigenen CI-Runner), und Scans und Offline-Läufe berühren nie das Netzwerk.

Sind maschinelle Übersetzungen gut genug zum Ausliefern?+

Sie sind ein starker erster Entwurf mit korrekten Platzhaltern und konsistenten Schlüsseln. Für regulierte oder markenkritische Texte weisen Sie pro Sprache einen Prüfer zu: Sie erhalten eine E-Mail, wenn ein Lauf abgeschlossen ist, genehmigen oder korrigieren jede Übersetzung auf der Registerkarte "Überprüfen", und Korrekturen fließen in den offenen Pull Request und jeden späteren Lauf ein. Immer wiederkehrende Korrekturen werden mit einem Klick zu Glossarbegriffen. Das Modell markiert auch Übersetzungen, bei denen es sich nicht sicher ist, mit seiner Begründung, sodass Prüfer mit diesen beginnen.

Was passiert, wenn wir localize.dev nicht mehr verwenden?+

Ihre App funktioniert weiter. Die Ausgabe ist die i18n-Bibliothek, die Ihr Framework bereits verwendet (react-i18next, vue-i18n, ngx-translate, Rails I18n, gettext, Android-Zeichenfolgenressourcen, Apple String Catalogs…) mit einfachen Locale-Dateien in Ihrem Repository. Es gibt keine localize.dev-Laufzeit, kein SDK und keinen Proxy, der entfernt werden müsste.

Füge ein Komponent oder eine Seite ein. Sieh es in zwei Sprachen.

Kein Konto nötig. Der Playground nutzt denselben Motor wie die CLI.