# Translate content, also per market

> Read a resource’s translatable content and digests with translatableResource, then save translations, optionally for one market, with translationsRegister.

Page: https://lintelagency.com/resources/graphql/translations-register

## In short

To translate a product, collection or other resource, query translatableResource for its translatable content: each key, its value and a digest. Then call translationsRegister with the locale, key, translated value and translatableContentDigest for each field. Add marketId to a translation to show it only in that market, for example Swiss German wording. The locale must be added to the store.

## Facts

- **API:** Admin GraphQL API
- **Operations:** translatableResource, translationsRegister
- **Access scopes:** read_translations, write_translations
- **API version:** 2026-10
- **Last checked:** 2 November 2026

## How to use it

1. Send TranslatableProduct with the resource ID and keep the digest of each key you translate.
2. Send TranslateProduct with one entry per locale and key, each with that key’s digest.
3. Add marketId to entries that should apply only in one market; entries without it apply in every market.
4. When the original text changes, its digest changes and the translation is marked outdated; register it again with the new digest.

## Code

### translatable-resource.graphql

```graphql
query TranslatableProduct($resourceId: ID!) {
  translatableResource(resourceId: $resourceId) {
    resourceId
    translatableContent {
      key
      value
      digest
      locale
    }
  }
}
```

### translatable-resource.variables.json

```json
{
  "resourceId": "gid://shopify/Product/1234567890"
}
```

### translatable-resource.response.json

```json
{
  "data": {
    "translatableResource": {
      "resourceId": "gid://shopify/Product/1234567890",
      "translatableContent": [
        {"key": "title", "value": "Linen shirt", "digest": "<digest of title>", "locale": "en"},
        {"key": "body_html", "value": "<p>Relaxed fit, washed linen.</p>", "digest": "<digest of body_html>", "locale": "en"}
      ]
    }
  }
}
```

### translations-register.graphql

```graphql
mutation TranslateProduct($resourceId: ID!, $translations: [TranslationInput!]!) {
  translationsRegister(resourceId: $resourceId, translations: $translations) {
    translations {
      key
      locale
      value
      market {
        id
      }
    }
    userErrors {
      code
      field
      message
    }
  }
}
```

### translations-register.variables.json

```json
{
  "resourceId": "gid://shopify/Product/1234567890",
  "translations": [
    {
      "locale": "tr",
      "key": "title",
      "value": "Keten gömlek",
      "translatableContentDigest": "<digest of title>"
    },
    {
      "locale": "de",
      "key": "title",
      "value": "Leinenhemd für die Schweiz",
      "translatableContentDigest": "<digest of title>",
      "marketId": "gid://shopify/Market/1234567890"
    }
  ]
}
```

### translations-register.response.json

```json
{
  "data": {
    "translationsRegister": {
      "translations": [
        {"key": "title", "locale": "tr", "value": "Keten gömlek", "market": null},
        {"key": "title", "locale": "de", "value": "Leinenhemd für die Schweiz", "market": {"id": "gid://shopify/Market/1234567890"}}
      ],
      "userErrors": []
    }
  }
}
```

## Limits and edge cases

- A translation shows to buyers right away when its locale is published.
- Keys depend on the resource type: title, body_html, handle and meta_title for products, for example.
- Use translatableResources with a resourceType to page through all products, collections or other types.
- To remove translations, use translationsRemove.

## Questions

### How do I add translations to Shopify with the API?

Read the digests with translatableResource, then send translationsRegister with locale, key, value and translatableContentDigest for each field.

### What is the translatable content digest?

A hash of the original text. It ties a translation to the version of the text it translates, so Shopify can mark it outdated when the original changes.

### Can I use different translations per market?

Yes. Add marketId to the translation input. Buyers in that market see it; other markets keep the general translation.

## Shopify documentation

- [translationsRegister](https://shopify.dev/docs/api/admin-graphql/latest/mutations/translationsRegister)
- [Manage translated content](https://shopify.dev/docs/apps/build/markets/manage-translated-content)

## Related

- [Selling in many currencies from one Shopify store](https://lintelagency.com/journal/shopify-markets-multi-currency)
- [Translating a Shopify theme and its content](https://lintelagency.com/journal/shopify-theme-translations)
- [Selling in Arabic: right-to-left layout on Shopify](https://lintelagency.com/journal/selling-in-arabic-rtl-shopify)

License: MIT. Free to use in your own store and in client work.
