Kostenloses Werkzeug
.strings in JSON umwandeln
iOS auf der einen Seite, i18next oder next-intl auf der anderen. Beide Richtungen, und Werte mit Semikolon darin bleiben ganz.
Läuft im Browser. Kein Konto, kein Upload, nichts verlässt den Rechner.
Läuft im Browser. Die Datei wird nicht hochgeladen.
Der Leser, an dem die meisten .strings-Konverter scheitern
Eine .strings-Datei sieht aus, als könnte man sie am Semikolon zerteilen. Kann man nicht: Semikolon, Gleichheitszeichen und Anführungszeichen stehen ständig in echten Werten. Aus Preis: 5 €; inkl. MwSt. werden bei einem naiven Leser zwei kaputte Zeilen, und man merkt es erst, wenn die App einen halben Satz anzeigt. Dieser Leser behandelt einen Wert als Folge von Zeichen, die weder Anführungszeichen noch Rückstrich sind, oder als Rückstrich mit beliebigem Zeichen dahinter. Das ist dieselbe Regel, die Foundation benutzt. Er löst außerdem \U-Maskierungen aus älteren Dateien auf und nimmt Blockkommentare als Übersetzerhinweis mit.
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.
Auf der Ebene der Texte nichts. Auf dem Weg nach JSON fallen die Blockkommentare über den Einträgen weg, weil JSON keinen Platz für einen Kommentar hat. In der Gegenrichtung kommen sie zurück, wenn die Quelle welche hatte. Verschachtelte JSON-Objekte werden zu Punkt-Schlüsseln, und genau so sieht ein iOS-Schlüssel ohnehin aus.
So läuft es
- Schritt 1
Datei hineingeben
.strings 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
- Was passiert mit meinen Punkt-Schlüsseln?
- Sie werden zu verschachtelten JSON-Objekten: aus settings.title wird ein settings-Objekt mit einem title darin, die Form, die i18next und next-intl wollen. Wer den Schalter unter der Ausgabe ausschaltet, behält sie als flache Schlüssel.
- Bleiben die Formatangaben erhalten?
- Ja, zeichengenau. %@, %lld, %1$s und %d kommen unverändert heraus. Platzhalter sind der häufigste Weg, auf dem eine automatische Umwandlung eine App zerlegt: Ein umnummeriertes %1$s stürzt zur Laufzeit ab, statt nur falschen Text zu zeigen.
- Liest es eine aus Xcode exportierte Datei?
- Ja, samt der Blöcke, die Xcode über jeden Eintrag schreibt. Wer stattdessen XLIFF exportiert hat, nimmt den XLIFF-Viewer.
- Wird etwas hochgeladen?
- Nein. Die Umwandlung ist JavaScript in diesem Tab und arbeitet auch ohne Netzverbindung weiter.