FROM CACHE - de_header
Gelöst

GraphQL API - Text Update von Localize

Philipp_S
Shopify Partner
12 1 1

Hallo,

Anwendungsfall:
Ich möchte mit PHP die Produkt Übersetzungen mit GraphQL Updaten. Die Übersetzungen sind in Shopify "Localize / Translate & Adapt". Mit dem Code unten kann ich die Englischen Titel und Beschriebungen Abfragen.


Frage:
Wie lautet die query wenn ich Titel und/oder Beschreibungen Updaten möchte? 




Bild von "Translate & Adapt":

Unbenannt.jpg

GraphQL Query zum Abfrage der Englischen Titel/Beschreibung von "Localize": 

# QUERY/PHP

$query = 'query {
    product(id: "gid://shopify/Product/123456789") {
        id
        en: translations(locale:"en"){ key locale value}
    }
}';
$data_string =  json_encode(array("query" => $query));

# CURL
$curl = curl_init("https://xxxxxx.myshopify.com/admin/api/2023-04/graphql.json");
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 90);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Authorization: Basic '     . base64_encode("xxx:xxx"),
    'Content-Length: '          . strlen($data_string),
    'X-GraphQL-Cost-Include-Fields: true'
));

# RESULT
$curl_response = curl_exec($curl);
if ($curl_response === false) curl_close($curl);
$responseArr = json_decode($curl_response, true);
print_r($responseArr);
1 AKZEPTIERTE LÖSUNG
Philipp_S
Shopify Partner
12 1 1

Erfolg.

Hallo Gabe,

vielen Dank, das Updaten der Englischen Titel und Beschreibungen klappt nun! Der Trick ist wie oben erwähnt die vorherige Abfrage für den "translatableContentDigest" Wert. Hier zur Zusammenfassung meiner funktionierenten Abfragen.

1. Abfrage des "digest" Wertes mit der Produkt ID
- mit dieser Query erhält man den "digest" Wert für den DE Titel und Beschreibung für den nächsten EN Update Call.   

$query = 'query {
  translatableResource(resourceId: "gid://shopify/Product/' . $id . '") {
    resourceId
    translatableContent {
      key
      value
      digest
      locale
    }
    translations(locale: "en") {
      key
      value
      locale
    }
  }
}';

# 1.
$queryString = json_encode(array(
    "query" => $query
));


Response:

Philipp_S_0-1685455357134.png

 

 

1. Update des englischen Titels, Beschreibung

$mutation = '
mutation translationsRegister($resourceId: ID!, $translations: [TranslationInput!]!) {
  translationsRegister(resourceId: $resourceId, translations: $translations) {
    userErrors {
      message
      code
      field
    }
    translations {
      key
      value
    }
  }
}';

$variables = array(
    "resourceId" => "gid://shopify/Product/8398574092630",
    "translations" => [
        [
            "locale" => "en",
            "key"    => "title",
            "value"  => "new englisch titel",
            "translatableContentDigest" => "4c2aa73351777fb789c8d0c43fd79433ddbf5578b9d046c433ea516fbb497e12"
        ],
        [
            "locale" => "en",
            "key"    => "body_html",
            "value"  => "new englisch desc",
            "translatableContentDigest" => "6cf690b31996ba260afafd6fa6da70bc1c4df6489ba68531774a2e7b1b5fbb95"
        ]
    ]
);
$queryString = json_encode(array(
    "query"     => $mutation,
    "variables" => $variables
));

 

Response:

Philipp_S_1-1685455522222.png

 

Shopify:

- die Werte wurde erfolgreich geupdatet

Philipp_S_2-1685455563550.png

 

 

Lösung in ursprünglichem Beitrag anzeigen

7 ANTWORTEN 7

Gabe
Shopify Staff
16752 2646 3926

Hey @Philipp_S 

 

Danke für die Angaben. Hast du die versch. Leitfaden zum Thema GraphQL mutation to update translations hier schon gesehen?

 

Es scheint Shopify hat keine eingebaute GraphQL Mutation, um Übersetzungen zu aktualisieren.  Vielleicht die Produktinformationen direkt zu aktualisieren, indem man die entsprechenden Mutationen verwenden? PHP Beispiel:

 

 

# GraphQL Mutation
$mutation = '
mutation {
 productUpdate(
   input: {
     id: "gid://shopify/Product/123456789",
     title: "Neuer Produkt-Titel",
     descriptionHtml: "Neue Produkt-Beschreibung"
   }
 ) {
   product {
     id
     title
     descriptionHtml
   }
   userErrors {
     field
     message
   }
 }
}';

$data_string =  json_encode(array("query" => $mutation));

# Die restliche Logik bleibt gleich

 

 

Oder möchtest du die translationsRegister Mutation verwenden? Beachte jedoch, dass dies den Titel und die Beschreibung auf der Standardsprache aktualisiert. Oder es haben die API-Endpunkte und Methoden sich seit dem letzten Update geändert, kann ich derzeit nicht sagen ¯\_(ツ)_/¯.

Gabe | Social Care @ Shopify
 - War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen! 
 - Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung 
 - Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog

Philipp_S
Shopify Partner
12 1 1

Hallo Gabe,

danke für deine schnelle Rückmeldung.
Deine query ändert den Titel und die Beschreibung der Standart Sprache (de) des Shops, jedoch nicht die (en) Texte. Werde aus der Dokumentation leider auch nicht schlauer 🙂

Hast du ggf. ne Idee wie die mutation aussehen könnte für en?


Gabe
Shopify Staff
16752 2646 3926

Die Hauptidee hinter der Mutation translationsRegister besteht darin, eine Übersetzung für eine Nicht-Standardsprache im Shop zu registrieren. Um das zu tun, einfach die Nicht-Standardsprache angeben (in deinem Fall "en").

So könnte dann eine Mutationsanfrage aussehen:

 

$mutation = '
mutation translationsRegister($resourceId: ID!, $translations: [TranslationInput!]!) {
  translationsRegister(resourceId: $resourceId, translations: $translations) {
    userErrors {
      message
      code
      field
    }
    translations {
      key
      value
    }
  }
}';

$variables = array(
    "resourceId" => "gid://shopify/Product/123456789",
    "translations" => [
        [
            "locale" => "en",
            "key" => "title",
            "value" => "New product title",
            "translatableContentDigest" => "digestfrompreviousquery"
        ],
        [
            "locale" => "en",
            "key" => "description",
            "value" => "New product description",
            "translatableContentDigest" => "digestfrompreviousquery"
        ]
    ]
);

$data_string = json_encode(array(
    "query" => $mutation,
    "variables" => $variables
));

// Der Rest der CURL Logik bleibt gleich...

 

Beachte, dass die translatableContentDigest Werte in den translations korrekt sein müssen. Man sollten die Werte verwenden, die man in der vorherigen Abfrage von translatableResource erhalten hat. Auch der "resourceId" Wert muss korrekt sein, sprich, die eindeutige ID des Produkts.

 

In manchen Fällen möglicherweise andere Schlüssel verwenden, sprich, die du in der vorherigen Abfrage von translatableResource erhalten hast.

 

Bei weiteren Fragen kann ich gerne einen Experten empfehlen!

Gabe | Social Care @ Shopify
 - War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen! 
 - Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung 
 - Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog

Philipp_S
Shopify Partner
12 1 1

Vielen Dank für die Info. Habe die Query oben schon versucht zu erstellen, mir waren jedoch die 'translatableContentDigest' Werte und die resourceId unbekannt. Werde diese vorab Abfragen und dann die Query testen bzw. bescheid geben obs geklappt hat.

Gabe
Shopify Staff
16752 2646 3926

@Philipp_S 

 

Ich hoffe das klappt! Ich bin am Montag wieder da und wir können das ganze Thema dann etwas weiter ausreizen!

 

Schönes W-Ende! 😉

Gabe | Social Care @ Shopify
 - War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen! 
 - Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung 
 - Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog

Philipp_S
Shopify Partner
12 1 1

Erfolg.

Hallo Gabe,

vielen Dank, das Updaten der Englischen Titel und Beschreibungen klappt nun! Der Trick ist wie oben erwähnt die vorherige Abfrage für den "translatableContentDigest" Wert. Hier zur Zusammenfassung meiner funktionierenten Abfragen.

1. Abfrage des "digest" Wertes mit der Produkt ID
- mit dieser Query erhält man den "digest" Wert für den DE Titel und Beschreibung für den nächsten EN Update Call.   

$query = 'query {
  translatableResource(resourceId: "gid://shopify/Product/' . $id . '") {
    resourceId
    translatableContent {
      key
      value
      digest
      locale
    }
    translations(locale: "en") {
      key
      value
      locale
    }
  }
}';

# 1.
$queryString = json_encode(array(
    "query" => $query
));


Response:

Philipp_S_0-1685455357134.png

 

 

1. Update des englischen Titels, Beschreibung

$mutation = '
mutation translationsRegister($resourceId: ID!, $translations: [TranslationInput!]!) {
  translationsRegister(resourceId: $resourceId, translations: $translations) {
    userErrors {
      message
      code
      field
    }
    translations {
      key
      value
    }
  }
}';

$variables = array(
    "resourceId" => "gid://shopify/Product/8398574092630",
    "translations" => [
        [
            "locale" => "en",
            "key"    => "title",
            "value"  => "new englisch titel",
            "translatableContentDigest" => "4c2aa73351777fb789c8d0c43fd79433ddbf5578b9d046c433ea516fbb497e12"
        ],
        [
            "locale" => "en",
            "key"    => "body_html",
            "value"  => "new englisch desc",
            "translatableContentDigest" => "6cf690b31996ba260afafd6fa6da70bc1c4df6489ba68531774a2e7b1b5fbb95"
        ]
    ]
);
$queryString = json_encode(array(
    "query"     => $mutation,
    "variables" => $variables
));

 

Response:

Philipp_S_1-1685455522222.png

 

Shopify:

- die Werte wurde erfolgreich geupdatet

Philipp_S_2-1685455563550.png

 

 

Gabe
Shopify Staff
16752 2646 3926

Hey @Philipp_S 

 

Wow klasse Arbeit und danke fürs updaten! 

 

Das wird auch andere hier helfen können! 😉

 

VG,

Gabe | Social Care @ Shopify
 - War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen! 
 - Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung 
 - Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog