Kostenloses Werkzeug

.resx in JSON umwandeln

.NET-Ressourcendateien auf der einen Seite, gewöhnliches i18n-JSON auf der anderen, samt dem Kopfblock, auf dem Visual Studio besteht.

Läuft im Browser. Kein Konto, kein Upload, nichts verlässt den Rechner.

.resxJSON

Läuft im Browser. Die Datei wird nicht hochgeladen.

Die vier Kopfblöcke, die man nicht weglassen kann

Eine .resx ist XML, also sieht das Schreiben trivial aus, bis Visual Studio das Ergebnis nicht öffnet. Die Datei braucht vier resheader-Einträge (resmimetype, version, reader und writer, die letzten beiden mit vollständigen Assembly-Namen), sonst hält der Designer sie für beschädigt. Dieses Werkzeug schreibt alle vier. Es setzt außerdem an jeden Eintrag xml:space="preserve", denn ohne dieses Attribut schneidet der .NET-Leser führende und abschließende Leerzeichen weg, und genau die trennen in Sätzen wie „Hallo " plus Name die Wörter.

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.

Binärressourcen werden beim Lesen übersprungen. Ein data-Element mit type- oder mimetype-Attribut ist ein eingebettetes Bild, ein Symbol oder ein serialisiertes Objekt. Seinen Base64-Rumpf als Text in eine Übersetzungsdatei zu schreiben ist kein Umwandeln, sondern Datenmüll in der Sprachdatei. Kommentare überleben in beide Richtungen.

So läuft es

  1. Schritt 1

    Datei hineingeben

    .resx 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.

  2. 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.

  3. 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

Öffnet Visual Studio die erzeugte .resx?
Ja. Die vier nötigen resheader-Einträge stehen in jeder Datei, und jeder Eintrag bekommt xml:space="preserve". Damit werden Leerzeichen an den Enden nicht stillschweigend abgeschnitten.
Wo sind meine Bilder geblieben?
Mit Absicht übersprungen. Einträge mit type- oder mimetype-Attribut tragen Binärdaten, keinen Text. Sie nach JSON zu schreiben ergäbe megabyteweise Base64, mit dem kein Übersetzer etwas anfangen kann, und der Rückweg ergäbe keine gültige Bildressource.
Kommen die Kommentare mit?
Ja, in beide Richtungen. Ein comment-Element innerhalb eines data-Elements wird zum Übersetzerhinweis, und auf dem Rückweg wieder zu einem comment-Element.
Geht das auch für .resx aus ASP.NET Core?
Ja. Es ist dasselbe Format, das WinForms, WPF und ASP.NET alle benutzen. Unterschiedlich ist nur die Namenskonvention für die Kultur-Endung, und das ist eine Frage des Dateinamens, nicht des Formats.