App Translate & Adapt: Produkt-Metafelder mit GraphQL erstellen und abfragen

Topic summary

Problemstellung:
Ein Shopify-Nutzer möchte Produkt-Metafelder, die über die REST-API erstellt wurden, mithilfe der App “Translate & Adapt” übersetzen. Die Übersetzung scheint nur über GraphQL möglich zu sein, aber passende Queries waren zunächst nicht auffindbar.

Lösungsansatz:

  • Die Translations API in Kombination mit GraphQL muss verwendet werden
  • Wichtig: Das translations-Feld muss anders abgefragt werden als in der Standard-Dokumentation beschrieben

Konkrete Schritte (vom Fragesteller erfolgreich getestet):

  1. Metafelder eines Produkts abfragen mit Produkt-ID über GraphQL
  2. Digest-Wert ermitteln über translatableResourcesByIds mit der jeweiligen Metafeld-ID
  3. Übersetzung registrieren mittels translationsRegister-Mutation unter Verwendung des Digest-Werts

Voraussetzungen im Shopify Backend:

  • Sprachen aktiviert
  • API-Rechte für externe App angepasst (Version 2024-04)
  • Metafelder erstellt

Status: Problem gelöst – der Nutzer hat eine funktionierende Lösung entwickelt und mit der Community geteilt.

Summarized with AI on November 7. AI used: claude-sonnet-4-5-20250929.

Hallo,

wir nutzen in unserem Shop die App Translate & Adapt. Auf Produktebene haben wir mehrere Metafelder erstellt, die ich problemlos über die REST-API abfragen und aktualisieren kann.

Frage:
Wie können die Werte dieser Metafelder, nachdem sie für ein Produkt angelegt wurden, übersetzt werden?

Soweit ich herausfinden konnte, scheint dies nur über GraphQL möglich zu sein. Allerdings konnte ich bisher keine passende Query finden, die mir die übersetzten Metafelder zurückgibt.

Habe im Shopify Backend bei Translate & Adapt ein Meta Feld auf Englisch befüllt und versucht dieses Feld in EN abzufragen. Erhalte alle möglichen Meta Felder jedoch nicht das Englische.

→ Wie müsste man es angehen damit man die Englischen Meta Felder Abfragen und erstellen kann?

Mit dieser Abfrage erhalte ich alle Meta Felder (de)
$queryFull = ‘{
product(id: "gid://shopify/Product/’ . $proId . ‘") {
id
metafields(first: 20) {
edges {
node {
id
namespace
key
value
type
}
}
}
}
}’;

Hey @Philipp_S

Um die übersetzten Werte der Metafelder in Shopify über GraphQL abzufragen und zu erstellen, kannst du hoffentlich die Translations API in Kombination mit der GraphQL oder REST API verwenden. Ggf. muss aber dafür ausschließlich das GraphQL verwenden und siehe dazu auch unseren Tutorial hier und auch hier der vielleicht weiterhelfen kann.

Hier ein Beispiel einer GraphQL-Abfrage aus unserer Doku entnommen:

{
  product(id: "gid://shopify/Product/YOUR_PRODUCT_ID") {
    id
    metafields(first: 20) {
      edges {
        node {
          id
          namespace
          key
          value
          type
          translations(locale: "en") {
            locale
            value
          }
        }
      }
    }
  }
}

Da wird das translations-Feld verwendet, um die übersetzten Werte des Metafelds in der gewünschten Sprache (z.B. Englisch) zu erhalten. Dann um ein Metafeld zu übersetzen, die Translations API verwenden:

mutation {
  translationsRegister(
    translations: [
      {
        key: "Metafield/gid://shopify/Metafield/YOUR_METAFIELD_ID",
        locale: "en",
        value: "Your translated value"
      }
    ]
  ) {
    userErrors {
      field
      message
    }
  }
}
  • Deine App muss authentifizierte Anfragen an die GraphQL Admin API senden können.
  • Deine App benötigt die Zugriffsbereiche read_products, write_translations und write_locales.
  • Du hast mindestens ein Produkt in deinem Shopify-Shop erstellt.

Aktiviere zunächst die Locale, in der du übersetzen möchtest (z.B. Spanisch). GraphQL Mutation und Variablen:

mutation enableLocale($locale: String!) {
  	shopLocaleEnable(locale: $locale) {
    	shopLocale {
      	locale
      	name
      	published
    	}
  	}
}
{
  	"locale": "es"
}

Rufe die übersetzbaren Inhalte eines Produkts ab, um die Werte zu erhalten, die übersetzt werden sollen.GraphQL Abfrage:

{
  	translatableResources(first: 1, resourceType: PRODUCT) {
    	edges {
      	node {
        	resourceId
        	translatableContent {
          	key
          	value
          	digest
          	locale
        	}
      	}
    	}
  	}
}

Erstelle die Übersetzung für das Produkt. Dabei muss der digest-Wert aus der vorherigen Abfrage verwendet werden. GraphQL Mutation und Variablen:

mutation CreateTranslation($id: ID!, $translations: [TranslationInput!]!) {
  	translationsRegister(resourceId: $id, translations: $translations) {
    	userErrors {
      	message
      	field
    	}
    	translations {
      	locale
      	key
      	value
    	}
  	}
}
{
  	"id": "gid://shopify/Product/YOUR_PRODUCT_ID",
  	"translations": [
    	{
      	"key": "title",
      	"value": "Camiseta buena",
      	"locale": "es",
      	"translatableContentDigest": "dcf8d211f6633dac78dbd15c219a81b8931e4141204d18fba8c477afd19b75f9"
    	}
  	]
}

Veröffentlichte die Locale, damit die Übersetzung im Shop sichtbar wird. GraphQL Mutation:

mutation updateLocale {
  	shopLocaleUpdate(locale: "es", shopLocale: {published: true}) {
    	userErrors {
      	message
      	field
    	}
    	shopLocale {
      	name
      	locale
      	primary
      	published
    	}
  	}
}

Um die übersetzten Metafelder abzurufen, kannst du die folgende Abfrage verwenden - GraphQL Abfrage:

{
  product(id: "gid://shopify/Product/YOUR_PRODUCT_ID") {
    id
    metafields(first: 20) {
      edges {
        node {
          id
          namespace
          key
          value
          type
          translations(locale: "es") {
            locale
            value
          }
        }
      }
    }
  }
}

Hoffe das hilft dir weiter - lass wissen falls nicht! :wink:


Warum nicht etwas Gamification in das Shop einbauen, um deinen Kunden etwas Fun im Shop anzubieten? Gerne kann ich bei Interesse Tipps dazu geben!

Hast du weitere Fragen zum Shop? Gebe einfach ein Suchbegriff oben in der Suchleiste der Community Landingpage ein, denn das Thema haben wir sehr wahrscheinlich schon besprochen. Halte bitte Ausschau in deiner E-Mail auf Notifications zu Antworten auf deine Fragen in der Community.

Hallo @Gabe
danke für deine Antwort, ich konnte nun die korrekten Abfragen erstellen und nun die Meta Felder übersetzen.
Meine Lösung unterscheidet sich zu deiner Bz. funktionierten deine Abfragen nicht, das Feld “translations” muss anders Abgefragt werden.

Hier meine Lösung ggf. hilft dies andere:

Im Shopify Backend:

  • Sprachen aktiviert
  • Externen App (API) Rechte angepasst (v. 2024-04
  • Meta Felder erstellt
  1. Abfrage der Meta Felder eines Produktes mit seiner ID:
{
        product(id: "gid://shopify/Product/' . $proId . '") {
            id
            metafields(first: 10) {
                edges {
                    node {
                        id
                        key
                        value
                    }
                }
            }
        }
    }

Dann mit der jeweiligen Meta ID erneut den “digest” Wert Abfragen:

{
        translatableResourcesByIds(first: 1, resourceIds: ["' . $resourceId . '"]) {
            nodes {
                resourceId
                translatableContent {
                    digest
                }
            }
        }
    }

Dann das jeweilige Meta Feld Updaten:

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

        $variables = array(
            "resourceId" => "gid://shopify/Metafield/" . $meta_id,
            "translations" => [
                [
                    "locale" => $locale,
                    "key"    => "value",
                    "value"  => $dummyArr[$i],
                    "translatableContentDigest" => $meta_digest
                ]
            ]
        );

        $curl_post_data = array(
            "query"     => $queryFull,
            "variables" => $variables
        );

Hey @Philipp_S

Wow, eine super Lösung um die Metafelder in Shopify zu übersetzen und abzurufen, einschließlich der korrekten GraphQL-Abfragen und -Mutationen. Du nutzt praktisch die GraphQL-API, um die Metafeld-IDs und Digest-Werte zu callen, und dann die Translations API, um die Übersetzungen zu registrieren. Dann die übersetzten Metafelder abfragen, indem du die translations-Funktion in der GraphQL-Abfrage verwendest. Great work! :wink:

1 Like