Kostenloses Werkzeug
.strings in .xcstrings umwandeln
Xcode 15 hat Localizable.strings durch den String Catalog ersetzt. Die Umstellung läuft hier im Browser, in beide Richtungen, Kommentare bleiben stehen.
Läuft im Browser. Kein Konto, kein Upload, nichts verlässt den Rechner.
Läuft im Browser. Die Datei wird nicht hochgeladen.
Die Umstellung, die Xcode für fremde Dateien nicht anbietet
Xcode stellt eine .strings-Datei um, wenn man einem Target einen String Catalog hinzufügt, aber nur für Dateien, die schon in diesem Target liegen. Eine .strings aus einer Agentur, von einem Auftragnehmer oder aus einem älteren Branch muss man von Hand umwandeln, und von Hand heißt hier: ein JSON-Format mit einer verschachtelten Struktur aus localizations, variations und stringUnit, das niemand auswendig schreibt. Dieses Werkzeug schreibt es. Die Schlüssel werden alphabetisch sortiert, so wie Xcode sie sortiert. Wer das Ergebnis committet, bekommt sonst einen Diff über die ganze Datei.
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.
Gerätevarianten (variations.device, die Trennung zwischen iPhone und iPad) und substitutions gehen nicht mit. Die Zwischenform kennt sie nicht, und sie zu erfinden hieße, den falschen Text auf das falsche Gerät zu schreiben. extractionState steht auf allem, was das Werkzeug schreibt, auf manual, denn es kann nicht wissen, welche Strings Xcode beim Durchsuchen des Quelltexts gefunden hat. Kommentare überleben in beide Richtungen.
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 .xcstrings 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
- Bleiben die Pluralformen erhalten?
- Ja, in beide Richtungen. Im String Catalog liegt Plural unter variations.plural.KATEGORIE.stringUnit, also eine Ebene tiefer als eine gewöhnliche Zeichenkette. Ein Leser, der nur auf stringUnit schaut, lässt still jeden Plural der Datei fallen. Dieser liest beides.
- Warum fehlt in meiner .xcstrings die Quellsprache?
- Das ist normal, und das Werkzeug kommt damit zurecht. Wenn der Schlüssel der englische Satz ist, was Xcodes Voreinstellung ist, lässt Xcode die Lokalisierung der Quellsprache ganz weg, um Platz zu sparen. Ein Konverter, der nur localizations liest, hält die Datei für leer. Hier wird in diesem Fall der Schlüssel als Text genommen.
- Geht es auch von .xcstrings zurück nach .strings?
- Ja, über den Pfeil in der Mitte. Die Richtung ist nützlich, wenn ein Werkzeug in der Kette noch immer nur .strings versteht, oder wenn man einen String Catalog in einer lesbaren Form vergleichen will.
- Wird meine Datei irgendwohin hochgeladen?
- Nein. Beide Codecs laufen als JavaScript in diesem Tab. Man kann die Netzverbindung trennen, und der Konverter arbeitet weiter. In Sprachdateien stehen Produktnamen, Preise und unveröffentlichte Funktionen. Das ist keine Datei, die man einem beliebigen Webdienst gibt.