When international shoppers navigate a multi-language Shopify store, encountering untranslated text, mixed languages, or literal error strings like translation missing: en.checkout.shipping.rate breaks trust and drives checkout abandonment.
These errors occur when modern Checkout Extensibility apps lack complete language JSON dictionaries, the Shopify Translate & Adapt app has unmapped checkout strings, or third-party translation proxies fail to hand off language routing parameters to Shopify’s secure checkout environment.
Why does Shopify checkout display missing translation errors?
Shopify checkout displays missing translation errors when custom checkout apps lack localization keys for the active language, newly published languages lack checkout string translations in the Translate & Adapt app, or third-party translation apps fail to pass the locale URL prefix (e.g.,
/fror/es) to Shopify’s secure checkout domain.
Fast Diagnostic Snapshot
| Property | Diagnostic Metric |
|---|---|
| Observed Error | Raw code snippet (e.g., translation missing: [locale].[key]), or checkout reverts to English |
| System Layer | Shopify Translate & Adapt / Checkout Extensibility i18n / Settings > Languages |
| Primary Root Cause | Unmapped translation keys in checkout UI extensions |
| Secondary Root Cause | Third-party translation scripts stripped at the secure checkout boundary |
| Admin Route | Shopify Admin > Settings > Languages |
Understanding Multi-Language Checkout Architecture
Shopify enforces strict security boundaries around the checkout. Understanding where translations live prevents chasing errors in the wrong code files:
[Storefront Browsing: /es/products/sample]
├── Can be translated by client-side apps (Weglot, Langify) OR native Shopify Languages.
│
▼
[Checkout Boundary: checkout.shopify.com or yourstore.com/checkouts/...]
├── Third-party client-side translation scripts ARE BLOCKED for security.
├── Checkout reads EXCLUSIVELY from native Shopify language files.
│ ├── Core Checkout Strings (Managed in Settings > Languages)
│ └── App Block Extensions (Managed via app's internal locales/*.json files)
If your storefront uses an external translation app that injects JavaScript to translate on the fly, that app stops functioning the moment the customer transitions to checkout. The checkout must rely entirely on Shopify’s native language settings.
Root Causes and Step-by-Step Fixes
1. Raw translation missing Errors from Checkout UI Extensions
If the error displays on a specific custom checkout block—such as an address validator, gift wrap selector, custom field, or delivery date picker—the issue originates inside a Checkout Extensibility app.
When developers build checkout extensions, they reference translation keys:i18n.translate("shipping.delivery_notes")
If the app developer supplies a translation dictionary for English (en.default.json), but fails to include strings for Spanish (es.json) or French (fr.json), Shopify cannot find the requested string and renders the literal missing key string:translation missing: es.shipping.delivery_notes
The Fix:
- Open Shopify Admin > Settings > Checkout.
- Click Customize on your active checkout configuration.
- Locate the custom app block displaying the error.
- Check the block’s settings in the right sidebar. If the app allows custom label overrides, manually input the translated text directly into the block fields.
- If the block lacks manual field inputs, open the app’s dashboard via Apps and verify whether an updated language pack or multi-language toggle is available.
- If the developer has not provided translations for that locale, disable that specific checkout app block for non-English markets until the developer patches the extension’s
locales/directory.
2. Incomplete Translations in the “Translate & Adapt” App
When you add a new language in Shopify (e.g., German or Japanese), Shopify automatically translates core components, but custom modifications—such as shipping rate names, custom payment gateway instructions, and cart labels—often remain blank or fall back to English.
The Fix:
- Open Shopify Admin > Settings > Languages.
- Identify the language showing translation errors.
- If using Shopify’s official tool, open the Translate & Adapt app.
- In the resource dropdown at the top, select Checkout and system.
- Filter by Missing translations or Needs review.
- Check the following critical sections:
- Checkout & system: Labels for buttons, form errors, and shipping options.
- Shipping rates: If you defined manual shipping rates (e.g., “Standard Insured Shipping”), enter the localized name for each language.
- Discounts: Translated names for active coupon codes and automatic discounts.
- Click Save.
If customer shipping options are completely missing at checkout alongside translation glitches, check Fix: Shopify “Shipping Rate” not appearing at Checkout (Weight vs. Zone Error).
3. Locale Prefix Dropping Between Cart and Checkout
If an international buyer browses your store in Spanish (yourstore.com/es), adds an item to cart, and clicks “Checkout,” but the checkout page loads in English:
- The checkout redirection script dropped the locale prefix.
- The theme’s cart form is hardcoded to submit directly to
/checkoutinstead of passing the localized routing path.
The Fix:
- In Shopify Admin, open Online Store > Themes.
- Click Actions > Edit code.
- Open
sections/main-cart.liquid(orsnippets/cart-drawer.liquid). - Inspect the checkout form submission. It must use the dynamic Shopify routes object rather than a hardcoded URL:
<!-- DANGEROUS: Drops language locale --> <form action="/checkout" method="post"> <!-- CORRECT: Preserves /es, /fr, /de locale prefix --> <form action="{{ routes.cart_url }}" method="post"> <button type="submit" name="checkout">Checkout</button> </form> - Click Save.
4. Third-Party Translation App URL Route Clashes
If your store uses external translation apps (such as Weglot) alongside native Shopify Markets, you may have two translation engines fighting for control of the URL structure:
- Shopify Markets attempts to serve:
yourstore.com/fr-ca/ - The external app attempts to serve:
yourstore.com/fr/
This conflict causes redirect loops or drops the user into an unlocalized checkout template.
The Fix:
- Open Settings > Markets.
- Click into the affected market and select Languages and domains.
- Ensure that each market has a clear, un-conflicted subfolder assigned (e.g.,
/en-gbvs/en-ca). - In your third-party translation app, toggle the integration mode to Shopify Native Integration. This forces the app to write its translations directly into Shopify’s internal language database rather than proxying pages externally.
- If your checkout becomes completely unreachable or triggers high-traffic errors during international sales, reference Fix: Shopify “Checkout is currently unavailable” (High-Traffic Error).
Verifying Localized Checkout Functionality
To test translation integrity across all customer touchpoints:
- Open a new private/incognito browser window.
- Visit your storefront using a localized URL prefix:
https://yourstore.com/fr - Add a product to your cart and ensure that localized discounts apply cleanly. If automatic discounts fail in secondary languages, review Fix: Shopify “Automatic Discount” not applying to Cart.
- Advance to the first step of checkout.
- Verify that the URL preserves the language parameter (e.g.,
?locale=fr). - Inspect all checkout step headers, input labels, error validations, and order review cards to ensure no raw
translation missingkeys appear.