Heute musste ich eine XLIFF Datei mit Übersetzungen in eine CSV Datei konvertieren. Da die Datei recht Umfangreich war wollte ich das nicht manuell machen und habe ein entsprechendes Programm gesucht, was die Aufgabe übernimmt. Die gefundenen Programme waren alle recht alt und haben leider nicht mehr funktioniert.

Die Datei sah ungefähr so aus:

<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
  <file source-language="en-US" datatype="plaintext" original="">
    <body>
      <trans-unit id="defaultTitle">
        <source>defaultTitle</source>
        <target>The Example App</target>
      </trans-unit>
      <trans-unit id="whatIsThisApp">
        <source>whatIsThisApp</source>
        <target>Help</target>
      </trans-unit>
      <trans-unit id="metaDescription">
        <source>metaDescription</source>
        <target>This is "The Example App", a reference for building your own applications using Contentful.</target>
      </trans-unit>
      <!-- ... weitere Einträge -->
  </file>
</xliff>  

jq, yq, xq

Die Lösung war dann doch recht einfach. Das Tool “xq” was ich sowieso schon genutzt habe, konnte die XML Datei ohne Problem in ein CSV konvertieren. Das Programm xq ist ein Teil von yq, was ähnlich zu jq ist. Verwirrt?

  • jq -> Für Queries auf json Dateien
  • yq -> Für Queries auf Yaml Dateien
  • xq -> Für Queries auf XML Dateien

Auf meinem Arch Linux lässt sich das Programm über pacman einfach installieren.

sudo pacman -S yq

Damit ist xq auch auf der Platte.

Die eigentliche Konvertierung geht dann mit diesem Einzeiler:

cat messages.en-US.xlf | xq -r '.xliff.file.body."trans-unit"[] | [.source, .target] | @csv' > messages.en-US.csv

Mit den Programmen lassen sich auch andere Dinge nett machen. Als Beispiel mal alle URLs aus einer XML Sitemap auslesen.

curl https://magerun.net/post-sitemap.xml | xq -r '.urlset.url[].loc'

eat und fx

Wer auf der CLI mehr macht, sollte sich auch noch die Programme eat und fx anschauen. Das sind auch sehr praktische Helfer.

Mit eat kann man Inhalte aus verschiedenen Quellen in JSON konvertieren. Das Tool “isst” sozusagen fast alles.

So kann man aus der schon oben verwendeten XML Sitemap schnell mal JSON machen.

curl https://magerun.net/post-sitemap.xml | eat

Und fx ist ähnlich zu jq, bietet aber dafür interaktion an. So kann man JSON Daten direkt live filtern oder Inhalte auf- und zuklappen. Sehr paktisch, wenn man mal etwas anschauen möchte.

Beispiel:

cat composer.json | fx