Translate Your Shopify Cart Drawer (Not Just the Theme)

Quick answer: To translate a Shopify cart drawer, you need three layers: Markets + language picker, theme strings (Translate & Adapt / | t), and the drawer app's own locales. Autocomplete is full of "shopify translate and adapt not working" and "limitations" — that is usually layer 3. Translate & Adapt will not rewrite hardcoded app buttons. Weglot can miss a shadow-DOM drawer. Pair language with currency. CSA Research 2020: 76% prefer their language; 40% will not buy otherwise. Oxify ships the drawer in eight languages (EN, ES, FR, DE, IT, JA, PT-BR, DA).
The homepage is in Spanish. The cart still says "You are $12 away from free shipping." Checkout feels like a different shop. That is the bug this article is for.
Last checked August 20, 2026. Oxify ships the drawer in eight languages: English, Spanish, French, German, Italian, Japanese, Portuguese (Brazil), Danish. Currency is a separate guide: Shopify multi-currency cart drawer.
Key Takeaways
- Three layers: storefront locale (Markets + Translate & Adapt), theme strings (
| t), app drawer strings (the app must ship locales). - Translate & Adapt will not save you if the drawer app hardcodes English.
- Keep the locale on cart URLs. Community reports of
/cartdropping/esare common. Drawers often keep the page locale. Test both. - Language without currency is half a job. Show the market's money in the same drawer.
- 76% / 40% is CSA Research 2020, not Oxify analytics.
What Shoppers Need in the Drawer
They picked a language. They expect:
- Checkout, Remove, Empty cart
- Reward bar ("$12 more for free shipping")
- Upsell titles you wrote
- Errors ("Enter a valid discount code")
- Gift wrap, terms checkbox, donation line — if you turned those on
If any of those stay English, trust drops at the last step. That is when they have the card out.
The 3-Layer Setup (Theme Apps Skip Layer 3)
| Layer | Who owns it | What breaks if you skip it |
|---|---|---|
| 1. Locale + market | Shopify Markets, domains or subfolders, language picker | Shopper never enters /fr. Everything "works" in English |
| 2. Theme strings | Locale JSON, Translate & Adapt, | t filters | Dawn cart page is French; some labels still English |
| 3. App chrome | The cart-drawer app's translation files | Theme is French; slide-out is English. This is the usual ticket |
Layer 1 — Shopify: Settings → Markets. Add the country. Add the language. Use subfolders (/es, /de) unless you have a real reason for separate domains. Put a language switcher in the header. Shopify's Translate & Adapt docs cover storefront translation. They do not claim to rewrite third-party JavaScript.
Layer 2 — Theme: Hardcoded "Checkout" in a Liquid file will never switch. Wrap storefront copy in translation filters and fill locale files. Translate & Adapt can fill those. Preview each language in the theme editor.
Layer 3 — App: Ask the drawer app which locales it ships. If the answer is "use Translate & Adapt," they probably hardcoded the chrome. Oxify ships eight locales for drawer UI. Your custom upsell titles still need you to type Spanish. The button chrome should not.
Translate & Adapt Walkthrough (Free, Shopify-Native)
- Install Translate & Adapt from the App Store (Shopify's own app, free). Know its ceilings before you plan markets around it: auto-translation covers 2 languages, capped at 100 million characters per year; every language beyond those two is manual entry. A store can publish up to 20 languages total across its markets. Last checked August 20, 2026.
- Settings → Markets → pick the market → add the language and set it to Published. Unpublished languages translate nothing.
- Open Translate & Adapt → choose the language → work through Theme content. This is where cart strings live — "Your cart," "Checkout," "Subtotal."
- Auto-translate the batch, then manually fix the short UI strings (next section on why).
- Preview the storefront under the locale prefix (
/es) and open the cart. Theme cart translated, drawer still English? That is layer 3 — the app, not Translate & Adapt.
Theme Locale Files (Where "Checkout" Actually Lives)
Dawn-style themes render cart labels through translation filters:
{{ 'sections.cart.title' | t }}
{{ 'sections.cart.checkout' | t }}
The values come from locales/en.default.json, locales/es.json, and so on. Edit them at Online Store → Themes → Edit code → Locales, or through Translate & Adapt's theme-content tab. If a label in your theme is a raw string instead of a | t filter — common after a freelancer "quick fix" — no translation app can switch it. Wrap it and add the key to each locale file.
How a Drawer App Knows Which Language You Speak
Worth understanding, because it explains most "why is it still English" tickets. A locale-aware drawer reads the storefront's active locale — Shopify exposes it to JavaScript (Shopify.locale and the theme's localization object) and in the URL prefix (/es, /fr). The app then loads its own shipped strings for that code. Three failure modes follow directly:
- The shopper never entered the locale. No
/esprefix, no Spanish drawer. That is a Markets/language-picker gap (layer 1), not the app. - The app matches exact codes only. A shopper on
pt-PTmay fall back to English if the app only shipspt-BR. Ask the app how fallbacks work. - The app caches the first locale it saw. Shopper switches language mid-session, drawer keeps the old one until reload. Test the switch with items already in the bag.
Third-Party Cart Apps: Two Very Different Answers
Ask your cart app one question: "How do your drawer strings translate?" There are only two honest answers.

Oxify takes the second route: every text field in the drawer has an Add translations link that opens a per-language editor — pick the locale code, type the string, done. The drawer then serves the version matching the shopper's active locale instead of one hardcoded sentence for everyone.
- Custom text fields per language (UpCart-style): the app gives you editable text boxes, and you paste the Spanish yourself. Works, but you maintain every string in every language, and new features ship in English until you notice.
- Native locale support: the app reads the storefront locale and swaps its own shipped translations. Zero maintenance for chrome strings. Oxify does this for eight languages.
The third answer — "just use Translate & Adapt" — usually means hardcoded English you cannot fix.
Translate These Five Strings First
If you translate nothing else in the drawer, translate the strings shoppers read with a card in hand:
- Add to cart (the button that starts everything)
- Checkout
- The free-shipping bar ("You are €12 away from free shipping" — number and currency must localize too)
- Remove / quantity controls
- Discount-code errors ("Enter a valid discount code" — an English error on a Spanish store reads as a scam signal)
Auto-translation (DeepL, AI, Translate & Adapt's built-in) is fine for product descriptions. For these five, check by hand: short UI strings have the least context and the worst machine output. "Checkout" auto-translated as a noun instead of a verb is a classic. Two minutes per language.
Cart Page vs Cart Drawer (Locale Drop)
Shopify Community threads report /cart falling back to the default language while collection pages stay translated. A slide-out drawer often inherits the current page locale, so it looks "fixed" until someone opens a raw cart permalink.
Test this matrix per language:
- Open the drawer on a collection page
- Open
/es/cart(or your locale prefix) if you still use a cart page - Open a cart permalink you sent from admin
- Switch language with items already in the bag
If permalinks dump locale, add the prefix in the link (/fr/cart/...). Shopify's cart permalink docs allow a locale in the path.
Copy Rules That Survive Translation
- Do not put the shipping threshold only in a screenshot of English. Drive the number from Markets / the rewards app so "12 €" is not a leftover " $12 ".
- Keep upsell titles short. Long English puns die in German.
- Match the announcement bar to the same locale. A French drawer under an English site-wide bar is the same bug in two places.
- Terms checkbox labels must be translated too. A Spanish store with an English legal tick is worse than no tick. See terms in the cart drawer.
When Translate & Adapt Is "Not Working"
That query is almost never a Markets bug. It is the drawer JavaScript.
- Theme cart page is Spanish. Slide-out still says Checkout / Remove / Empty cart in English.
- Reward bar still has "$12 away from free shipping."
- Your custom upsell title is translated (you typed it). The button chrome is not.
Fix: pick a cart drawer app that ships locales. Oxify's listing includes multi-language. If you already paid for Weglot, still open the drawer in each language. Shadow DOM and app embeds are the usual miss.
How This Compares to Ranking i18n Posts
Translate & Adapt tutorials and "best translation apps" roundups cover layers 1–2. Weglot-style apps cover the whole HTML. They rarely mention:
- Cart-drawer JavaScript that never hits the DOM translator
/cartlocale drop- Currency in the same breath as language (we split the deep dive, but we will not pretend language-only is done)
If you already paid for Weglot, still open the drawer in each language. If the overlay is a shadow DOM with English, Weglot may miss it. That is an app bug, not a Markets bug.
Frequently Asked Questions
Why is Translate & Adapt not working on my cart drawer?
How many languages can Translate & Adapt handle for free?
How many languages does Oxify's cart drawer support?
Why is my cart page English when the shop is Spanish?
Why does my cart lose the language between pages?
How do I translate UpCart or another cart app's text?
Is the 76% "won't buy in a foreign language" stat from Shopify?
Do I need a different cart app per country?
Should I translate upsell products too?
What to Do Next
Turn on the market. Translate theme strings. Open the drawer in every language. The leftover English list is your spec.
If that leftover is app chrome, Oxify Cart Drawer & Upsells includes those eight locales in the bag, plus the rest of the cart funnel, from $9.99/mo. Then finish money in the multi-currency guide.