If your Shopify store sells in multiple countries, you need translated product content. What most e-commerce managers do not see is how much work happens behind the scenes to make that work reliably at scale.
At Memo, we build and maintain Conflux, our own Shopify app that syncs product data from Ergonode to Shopify. It covers everything from product titles and descriptions to attributes, metafields, and variant data. After the core product was running well, the most requested feature from our customers was clear: multi-language support.
So we built it. What followed was two weeks of puzzling, one silent error, and a few important lessons about how Shopify handles translations under the hood.
Why this matters for your store
Running a multilingual Shopify store is not just a technical exercise. It directly affects conversion, SEO, and customer trust. A product page in the wrong language, or with missing translations on key fields, can cost you sales. When you manage a large catalogue and use a PIM like Ergonode to maintain your product data, you need translation syncs that are automatic, accurate, and consistent. Manual work at catalogue scale is simply not an option.
That is exactly the problem Conflux solves. But getting there required us to understand exactly how Shopify handles translations internally, and it turned out to be more complex than expected.
How other platforms do it
For context, we also work with Shopware. There, translations are part of the product update itself. When you send a product to Shopware, you include all language versions in the same API call. One request covers all markets. We expected Shopify to work similarly. It does not.
How Shopify actually works
Shopify keeps product data and translation data completely separate. You cannot update a product and its translations in the same request. That means building an entirely separate flow, running after every product sync, just to handle languages.
Here is what that flow looks like, explained in plain terms.
Step 1: Sync the products and collect their IDs. After pushing product data from Ergonode to Shopify, Shopify returns a global identifier (GID) for each product. Think of it as a unique address for each item in the system.
Step 2: Request the IDs of every translatable field. Using those product GIDs, you then have to separately request the GIDs of every field that can be translated. This includes product titles, descriptions, options, option values, metafields, and variant metafields. Each one gets its own identifier.
Step 3: Fetch the translatable resources. With all those field GIDs, you request what Shopify calls translatable resources. Each resource includes the field name, its current value, the language, and something called a digest. The digest is a unique fingerprint of the original content. Without it, Shopify will not register a new translation, even if everything else is correct.
Step 4: Match everything back to your source data. Here is where it gets tricky. The translatable resources come back from Shopify with no reference to the original product. There is no label, no product name, nothing to tell you which resource belongs to which item. You have to cross-reference the entire response against the original Ergonode data and the configured field mapping to figure out what goes where and in which language. This step alone took the most time to get right.
Step 5: Build the translation objects. Once everything is matched, you can build the actual translation inputs. Each one contains four things: the target language, the translated text, the digest, and the field name.
Step 6: Upload everything in bulk. Finally, you send all translation inputs to Shopify in a single bulk request.
The problem nobody warned us about
After completing all six steps, the translations did not appear in the store. The bulk request returned no errors. No warnings. Nothing. After checking and rechecking the code, we ran a single translation update instead of the bulk method. That returned a clear permissions error. The write_translations scope was missing from the app configuration.
The bulk method had silently swallowed the error and reported success. It is a small configuration fix, but without a proper error message it is nearly impossible to diagnose. This cost us time that a single line of feedback from Shopify would have prevented.
What this tells us about platform maturity
Every platform makes choices about how central localization is to its architecture. Shopware built it into the core data model. In Shopify, it sits alongside the product system rather than inside it.
Neither approach is wrong, but the implications for anyone building on top of the platform are significant. The more steps required to achieve a basic outcome, the more that can go wrong, and the more carefully it needs to be engineered.
What it means for Conflux customers
The complexity is now handled inside Conflux. You do not need to think about GIDs, digests, or bulk mutations. You configure your field mapping once, in a simple interface, and Conflux manages the full translation sync automatically every time your Ergonode data updates. Product titles, descriptions, attributes, metafields, and variant data are synced in every language your store needs. Accurately, automatically, and at catalogue scale.
If you manage a multilingual Shopify store and use Ergonode as your PIM, this is exactly what Conflux was built for.
Learn more about Conflux