Kostenloses Werkzeug
.po in JSON umwandeln
WordPress, Drupal und Django sprechen Gettext. Das Frontend spricht JSON. Das hier ist die Brücke, und sie liest mehrzeilige Einträge richtig.
Läuft im Browser. Kein Konto, kein Upload, nichts verlässt den Rechner.
Läuft im Browser. Die Datei wird nicht hochgeladen.
Warum ein zeilenweiser Leser an PO scheitert
Ein PO-Eintrag ist nicht eine Zeile. Die Regelform für jeden längeren Text ist msgid mit leerem Wert, gefolgt von so vielen Fortsetzungszeilen, wie es braucht: jede davon ein nacktes Textstück in Anführungszeichen, das an das darüber geöffnete Feld angehängt werden muss. Dazu msgctxt zur Unterscheidung, msgid_plural mit durchnummerierten msgstr-Zielen und vier Sorten Kommentar, die vier verschiedene Dinge bedeuten. Ein Ausdruck über Zeilen reicht dafür nicht. Dieser Leser ist ein Zustandsautomat über die Datei, und ein Absatz mit 400 Zeichen über neun Zeilen kommt als ein Text an.
Was heil bleibt
Umwandeln ist einfach. Die Datei nicht zu zerlegen ist die Arbeit.
Jeder Konverter, der eine Sprachdatei als Fließtext behandelt, liefert irgendwann einen Absturz aus. An diesen drei Stellen passiert es.
- Platzhalter bleiben Platzhalter
- %@, %lld, %1$s, {name} und {{count}} kommen genau so heraus, wie sie hineingegangen sind. Ein Platzhalter, der maskiert, umnummeriert oder übersetzt wurde, ist kein Schönheitsfehler, sondern ein Absturz auf dem Gerät.
- Pluralformen bleiben getrennt
- Xcodes variations, das plurals-Element von Android und msgstr[n] aus Gettext meinen dasselbe und schreiben es alle anders. Hier werden sie aufeinander abgebildet, statt zu einer Zeichenkette zusammenzufallen. Polnisch hat vier Formen; alle vier überleben.
- Schlüssel behalten ihre Form
- Verschachtelung, Punktpfade, Felder und Übersetzerhinweise gehen mit, wo das Zielformat einen Platz dafür hat. Wo nicht, steht es im Abschnitt darunter.
Was nicht mitkommt
Steht hier, weil man es sonst erst im kaputten Build erfährt.
Die Plural-Forms-Regel aus dem Kopf geht nicht mit. Beim Schreiben entsteht ein Kopf mit Zeichensatz und Sprache, aber ohne Pluralregel: Eine für die falsche Sprache erfundene Regel ist der teurere Fehler, weil msgfmt sie annimmt und zur Laufzeit die falsche Form wählt. Fundstellen im Quelltext und Flags wie fuzzy werden gelesen, aber nicht geschrieben; nur Entwicklerkommentare werden zu Übersetzerhinweisen, und genau das bedeuten sie.
So läuft es
- Schritt 1
Datei hineingeben
.po auf das linke Feld ziehen, über den Knopf auswählen oder den Text einfügen. Nichts wird hochgeladen. Die Umwandlung läuft in diesem Tab.
- Schritt 2
Ergebnis lesen
Das JSON steht da, während getippt wird. Der Zähler unter dem Feld sagt, wie viele Schlüssel durchgekommen sind. Eine Datei, die die Hälfte verloren hat, sieht man sofort.
- Schritt 3
Kopieren oder herunterladen
Text in die Zwischenablage, oder als Datei mit der richtigen Endung. Der Pfeil in der Mitte dreht die Richtung um.
Eine Sprachdatei rein. 64 Sprachen raus.
Ein Format umzuwandeln ist der Teil, den man von Hand machen kann. 3.627 Schlüssel in 64 Sprachen zu übersetzen, ohne einen einzigen Platzhalter zu zerlegen, ist der Teil, den man nicht von Hand macht. Beim nächsten Release zahlt man nur für die Strings, die sich geändert haben.
19 € im Monat inkl. MwSt., monatlich kündbar.
Fragen
- Wie steht Plural im JSON?
- Als schlüssel.plural.one und schlüssel.plural.other. Zurück nach PO werden daraus wieder EIN Eintrag mit msgid_plural und durchnummerierten Zielen, nicht zwei getrennte msgid-Einträge, die msgfmt als Dublette zurückweisen würde.
- Was passiert mit msgctxt?
- Der Kontext wird mit U+0004 an die Message-ID gehängt, dasselbe Trennzeichen, das Gettext im kompilierten Katalog selbst benutzt. Es läuft rund: nach JSON und zurück, und die msgctxt-Zeile steht wieder da.
- Kann ich das für ein WordPress-Theme benutzen?
- Ja. Die .po aus Loco Translate oder Poedit exportieren, hier umwandeln, und die Texte liegen in einer Form vor, die ein JavaScript-Build importieren kann. In der Gegenrichtung kommt eine .po heraus, die Poedit öffnet.
- Liest es auch .pot-Vorlagen?
- Ja. Eine .pot ist eine .po mit leeren msgstr-Werten. Heraus kommen die Schlüssel mit leeren Texten, also genau der Ausgangspunkt für eine neue Sprache.