Rest API - Anlegen einer Kategorie mit mehrsprachigen Texten

Hallo zusammen, 

ich versuche zu verstehen, wie ich eine Kategorie über die REST-API (SW6) anlege und dabei gleichzeitig deutsche und englische Bezeichnungen / Beschreibungen mitgeben kann. 

Es gibt laut Model das Objekt “translated”… aber ich finde keine Beschreibung dazu.

Kann mir jemand einen Beispielaufruf geben, wie das JSON-Konstrukt da sein muss ?

Beste Grüße

Holger 

1 „Gefällt mir“

Guten Morgen Holger,

für das translated-Objekt brauchst du die Language-UUIDs der Sprachen, dann sieht das JSON so ähnlich aus:

"translations":{  
      "c37a87003ce3401884d19afc7d459000":{
         "id":"a2cfd3e5f445404db11afb03e1f107e0",
         "languageId":"c37a87003ce3401884d19afc7d459000",
         "categoryId":"cd15d5fcdd1e4a18b9844b091b9281b5",

         "name":"Übersetzter-Kategoriename",
         "description":"Übersetzte-Kategoriebeschreibung"
      }
   },

Welche Sachen übersetzbar sind und wie diese dann heißen, kannst du am besten in der CategoryTranslationDefinition nachschauen.
Btw. dies funktioniert bei allen Übersetzungen so.

Ich hoffe, das hilft dir weiter.

Gruß

Krispin

1 „Gefällt mir“

Hallo,

statt der UUID ist es auch möglich den ISO Code zu nutzen, also de-DE oder en-GB

Viele Grüße aus Schöppingen

cool Michael Telgmann

1 „Gefällt mir“

@Krispin schrieb:

Guten Morgen Holger,

für das translated-Objekt brauchst du die Language-UUIDs der Sprachen, dann sieht das JSON so ähnlich aus:

„translations“:{
„c37a87003ce3401884d19afc7d459000“:{
„id“:„a2cfd3e5f445404db11afb03e1f107e0“,
„languageId“:„c37a87003ce3401884d19afc7d459000“,
„categoryId“:„cd15d5fcdd1e4a18b9844b091b9281b5“,

„name“:„Übersetzter-Kategoriename“,
„description“:„Übersetzte-Kategoriebeschreibung“
}
},

Welche Sachen übersetzbar sind und wie diese dann heißen, kannst du am besten in der CategoryTranslationDefinition nachschauen.
Btw. dies funktioniert bei allen Übersetzungen so.

Ich hoffe, das hilft dir weiter.

Gruß

Krispin

Guten Morgen Krispin, 

genau danach habe ich gesucht. Vielen Dank.

Fragen dazu: 

  • Ist das translations-Objekt irgendwo dokumentiert ? Ich finde in der gesamten Shopware 6 Doku nichts dazu… weder über die Swagger-Doku, noch über " _info/openapi3.json"

  • Was ist denn die „id“ innerhalb des translations-Objekts ? Muss ich die selbst vergeben ? languageId und categoryId sind mir klar.

  • „…kannst du am besten in der CategoryTranslationDefinition nachschauen.“ Wo genau finde ich das.

Sorry, wenn ich Noob-Fragen stelle :slight_smile:

Viele Grüße

Holger 

 

1 „Gefällt mir“

Hi Holger,

kein Problem, die Entity-Definitions sind PHP-Datein in der Shopware-Platform: https://github.com/shopware/platform/blob/master/src/Core/Content/Category/Aggregate/CategoryTranslation/CategoryTranslationDefinition.php

Jede Translation ist ein neuer Eintrag in der dazugehörigen Tabelle (hierbei: category_translation), daher benötigt eine neue Übersetzung eine eigene ID für den Eintrag.
Also benötigst du hier eine neue UUID.

Aber es geht noch einfacher, du kannst auch einfach beim erstellen die IDs weglassen, da diese dann automatisch generiert werden.
Somit kannst du z.B. folgendes machen:

{  
   "active":true,
   "translations":{  
      "de-DE":{  
         "name":"Juwelen"
      }
   },
   "name":"Jewelry"
}

Mit dem obigen JSON erstellst du somit eine neue Kategorie mit dem Namen Jewelry und der deutschen Übersetzung Juwelen, die Kategorie-ID und auch die Translation-ID wird automatisch generiert und muss nicht explizit angegeben werden.

Sorry für die Verwirrung, aber bei der Migration z.B. setzen wir immer die IDs, um auch bei einem Update die Daten zu überschreiben und nicht neu anzulegen.

Gruß

Krispin

2 „Gefällt mir“

Hallo Krispin, 

herzlichen Dank für die Erläuterung. Das hilft mir ungemein und kann ich abstrahieren für andere Objekte :slight_smile:

Herzliche Grüße

Holger 

Hallo Krispin, 

es funktioniert nur leider nicht… 

Mein JSON sieht so aus: 

 


   “active”:true,
   “id”:“753C34548E0E486392234039DB77BD97”,
   “type”:“category”,
   “name”:“Testeintrag1”,
   “translations”:{ 
      “en-GB”:{ 
         “name”:“Testeintrag1 Englisch”
      }
   }
}

 

Und ich bekomme einen internal server error zurück… 

Frage… ist das nicht eher ein Array… ? Denn theoretisch muss ich doch auch gleichzeitig mehrere Sprachen beschicken können, oder ?

Wie würde das denn dann aussehen, wenn ich neben Englisch noch Spanisch und Französisch mitgeben will ?

 

Viele Grüße

Holger

Hi Holger,

welchen Server-Error bekommst du denn?
Das JSON von dir funktioniert bei mir, aber du musst die UUID in Kleinbuchstaben machen.

Gruß

Krispin

Hallo Krispin, 

du hattest Recht… das hatte ich bei der Prozedur übersehen… mache ich sonst immer lowercase… 

Ich habe nun erfolgreich eine Kategorie angelegt mit einer zusätzlichen Sprache… Aber wie kommt die dritte Sprache rein, wenn ich nicht mit einem Array arbeite ?

Habe schon ein paar Varianten probiert aber nix funktioniert. 

Viele Grüße

Holger 

Ich ziehe mein Frage zurück :slight_smile:

Habs hinbekommen mit: 


   „active“:true,
   „name“:„Testeintrag1“,
   „translations“:{ 
      „en-GB“:{ 
         „name“:„Testeintrag2 Englisch“
      },
      „es-ES“:{ 
         „name“:„Testeintrag Spanisch“
      }
   }
}

Herzliche Grüße und Danke

Holger 

Hallo zusammen,

wie wertet Ihr denn die Antwort aus? Versuche es irgendwie in ein Array zu bekommen, doch leider ohne Erfolg. Oder brauch ich das gar nicht und kann auch so auf die einzelnen Werte zugreifen?

Manuel

Kann es sein, dass die ganze „translated“ Sache noch immer nicht in der REST API Doku unter https://shopware.stoplight.io erklärt ist? Finde dazu nämlich immer noch nichts Offizielles.

Ich schaue da so gut wie nie rein.
Wenn Du den einfachsten Weg gehen willst, um zu wissen, wie Du etwas posten musst, dann geh ins Shopware Backend (zum Beispiel mit Google Chrome), drücke F12 und dann kannst Du deine Calls aufzeichnen, wenn Du zum Beispiel eine Übersetzung für ein Objekt speicherst.

Beste Grüße
Holger

Das hätte mir hier aber vermutl. nicht gezeigt, dass man statt IDs auch den Sprach-ISO-Code verwenden kann.