GraphQL API - Text Update von Localize

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”:

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);

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 ¯_(ツ)_/¯.

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 :slightly_smiling_face:

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

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!

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.

@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! :wink:

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:

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:

Shopify:

  • die Werte wurde erfolgreich geupdatet

Hey @Philipp_S

Wow klasse Arbeit und danke fürs updaten!

Das wird auch andere hier helfen können! :wink:

VG,