Online store theme race condition on translaltion updates

Topic summary

A developer is experiencing race conditions when updating theme translations via Shopify’s GraphQL API (versions 2024-01 and 2024-10). They’re delivering ~3,400 translations per language across 3 languages using the translationsRegister mutation, batching 100 translations per query.

The Problem:

  • Parallelizing queries results in incomplete theme updates with missing translation keys
  • Each API request appears to create a new locale file version, but updates aren’t merging properly
  • Evidence shown in code editor diffs: deletions appear where only additions should exist (after deleting de.json before delivery)

Current Workaround:
Processing requests sequentially eliminates the race condition but is extremely slow (~4 seconds per request).

Status:
The developer is seeking the most optimized approach to deliver translations for an entire theme without data loss. The question remains unanswered with one bump for visibility.

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

Hi,

I’m updating theme translations for an online store via the GraphQL API (tested with versions 2024-01 and 2024-10). and discovered this process is subject to race conditions.

I’m delivering translations in 3 languages for an entire theme, with around 3,400 translations per language.

I’m using the translationsRegister mutation to deliver 100 translations per query. Each request can include translations for multiple languages.

Requests can include translations for different languages.

While I haven’t encountered any throttle errors, when I try to parallelize the queries, the result is an incomplete theme update.

When I compare locale files in the code editor, I notice that some keys are missing between versions.

My understanding is that each request creates a new version of the locale file, but the updates aren’t being merged properly.

That’s the diff between the Current version and the version 335.
Before starting the delivery the de.json has been deleted, so we should have only additions in the diff.

Delivering each request one by one removes the race condition, but it’s very slow because each request takes ~4s

to complete.

What’s the most optimised way to deliver the translations for an entire theme?

Bump up