Wie ändere ich die Sprache zwischen Produkt-Upgrades in Shopware 6?

wie schalte ich die Sprache zwischen Produkt-Upserts in Shopware 6 richtig um?


    // upsert product in language 1
    $this->productRepository->upsert([
            $sw_product
        ], $this->context);

    // please give me a solution here ...

    // upsert product in language 2
    $this->productRepository->upsert([
            $sw_product
        ], $this->context);

     // ...

nicht sicher, ob das ein guter Weg ist, was ich in einem anderen Plugin gefunden habe …

$this->context = new Context(new SystemSource(), [], Defaults::CURRENCY, [$langIdFromLanguageRepository]);

Weiter scheint dies nicht in Custom-Fields zu funktionieren …

Was ist der empfohlene Weg in einem eigenen Plugin? Ich kann keine offizielle Dokumentation auf den Shopware-Websites finden …

Wir benötigen eine offizielle stabile Lösung, die langfristig funktioniert.

Du kannst auch Übersetzungen auch direkt für jede Sprache aktualisieren:

$repo->upsert([
        'id' => $product->getId(),
        'translations' => [
            [
                'languageId' => Defaults::LANGUAGE_SYSTEM,
                'customFields' => ['foo' => 'bar']
            ]
        ]
], $context);

Viele Grüße

Hallo @EikeBrandtWarneke,

danke für die Antwort.
Wäre dies offiziell „best practice“?

Ich würde ungern Sachen doppelt übergeben.
Aktuell übergeben wir „customFields“ direkt an den $sw_product array für den upsert.

Beispiel:

$sw_product = [ 
            'productNumber' => '123456',
            'name' => 'Produkt 123'
        ];

....


$sw_product['customFields'] = [
            'custom_field1' => "Hello",
            'custom_field2' => "World"
  ];

Ween ich dein Beispiel richtig verstehe, müsste ich das ganze mit Sprache nochmal im array element ‚translations‘ machen - richtig?

schon mal ein schönes Wochenende und Viele Grüße

Du kannst natürlich auch alles andere direkt mit aktualisieren:

$repo->upsert([
        'id' => $product->getId(),
        'productNumber' => '12345',
        'stock' => 10,
        'translations' => [
            [
                'languageId' => Defaults::LANGUAGE_SYSTEM,
                'name' => 'Name DE',
                'customFields' => ['foo' => 'bar']
            ],
            [
                'languageId' => $englishId,
                'name' => 'Name EN',
                'customFields' => ['bla' => 'blub']
            ]
        ]
], $context);

Viele Grüße

Hallo @EikeBrandtWarneke,

OK, verstehe denke ich.

Das heißt es muss aber nicht wie her

$repo->upsert([
        'id' => $product->getId(),
        'productNumber' => '12345',
        'stock' => 10,
        'name' => 'Name Sprachunabhängig'
        'translations' => [
            [
                'languageId' => Defaults::LANGUAGE_SYSTEM,
                'name' => 'Name DE',
                'customFields' => ['foo' => 'bar']
            ],
            [
                'languageId' => $englishId,
                'name' => 'Name EN',
                'customFields' => ['bla' => 'blub']
            ]
        ]
], $context);

das Feld name nochmal sprachunabhängig vorkommen …

Hallo @EikeBrandtWarneke,

bei mir wird unter der Tabelle „shopware.product_translation“ keine englische Übersetzung angelegt.
Fehler kommt aber auch keiner …

Ich habe eben noch etwas rumgespielt.
Über einen Array wie folgt

'translations' => [                               
                                'en-GB' => ['name' =>'english text'],
                                'fr-FR' => ['name' =>'french text']
                              ] 

scheint es zu gehen, was mich wieder zu meiner ursprünglichen Frage bringt mit dem von Shopware offiziellen richtigen Weg und einer Doku hierzu …