Blog

Translate Your Shopify Cart Drawer (Not Just the Theme)

translate shopify cart drawer

Quick answer: To translate a Shopify cart drawer, translate three layers: storefront language (Markets), theme strings (Translate & Adapt or | t keys) and the drawer app's own text. Translate & Adapt cannot reach text hardcoded in an app's JavaScript, so a Spanish theme can still show an English drawer.

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 11 October 2026: Shopify's help pages, the Translate & Adapt listing and the drawer apps' own documentation. Oxify Cart Drawer & Upsells (our app) ships its drawer text in eight languages: English, Spanish, French, German, Italian, Japanese, Portuguese (Brazil), Danish. Why bother: CSA Research (2020) found 76% of consumers prefer products with information in their own language and 40% will not buy otherwise. That is a 2020 survey, not Oxify data. 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 or document where its strings live).
  • Translate & Adapt will not save you if the drawer app hardcodes English.
  • Keep the locale on cart URLs. Shopify tells custom themes to use the routes Liquid object (routes.cart_url) instead of a hardcoded /cart. Test the drawer and a raw cart link in every language.
  • Language without currency is half a job. Show the market's money in the same drawer.
  • Auto-translate limits depend on where your store is located: up to 2 languages, or up to 8 in 12 listed countries. A store can sell in up to 20 languages (30 on Plus). Checked 11 October 2026.

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)

LayerWho owns itWhat breaks if you skip it
1. Locale + marketShopify Markets, domains or subfolders, language pickerShopper never enters /fr. Everything "works" in English
2. Theme stringsLocale JSON, Translate & Adapt, | t filtersDawn cart page is French; some labels still English
3. App chromeThe cart-drawer app's translation filesTheme is French; slide-out is English. This is the usual ticket

Which layer is your drawer in? It depends on whose drawer it is. In our October 2026 check of 475 live Shopify stores, 243 (51.2%) had native theme cart-drawer markup or a cart-type setting in their page HTML. 48 (10.1%) had at least one of the five cart-drawer entries we tracked detected (four apps plus Rebuy Smart Cart theme code), and 15 had both. A theme's own drawer usually takes its labels from the theme's locale files (layer 2). A drawer app brings its own text (layer 3). The check shows which drawer a store loads, not whether anyone translated it, and the sample is hand-picked, skews to larger brands and gives lower-bound app counts.

You can classify your own store the way we classified theirs: search the page source for cart-drawer. A theme drawer shows up as a <cart-drawer> element or a section id containing it, and its labels usually come from the locale files. If the drawer only appears when an app embed is switched on, it is layer 3.

Layer 1 — Shopify: Settings → Languages → Add language, turn on the domain it belongs to, then open the menu beside it and choose Publish. Settings → Markets is where you add the country. Use subfolders (/es, /de) unless you have a real reason for separate domains, and put a language switcher in the header. Plan limits (Shopify Help Center, checked 11 October 2026): up to 20 languages on Basic, Grow, Shopify and Advanced, up to 30 on Shopify Plus. Shopify's checkout is pre-translated into 33 languages, so layer 1 often fixes checkout before it touches your drawer.

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. Themes built by Shopify ship default text professionally translated into those same 33 languages, so stock labels usually work. The labels that break are the ones someone hardcoded. Preview each language in the theme editor before you publish it.

Layer 3 — App: Ask the drawer app which locales it ships. If the answer is "use Translate & Adapt," ask where its strings live: a few apps keep them in shop metafields that translation apps can list, but the app's docs should say so. Otherwise the chrome is in the app's JavaScript and no theme tool reaches it. Oxify ships eight locales for drawer UI, all among the 33 languages Shopify lists for translated checkout and theme defaults. Dutch, Polish and Korean are on Shopify's list but not Oxify's, so whichever drawer you use, ask what it shows for a locale it does not ship. Your custom upsell titles still need you to type Spanish. The button chrome should not.

Translate & Adapt Walkthrough (Free, Shopify-Native)

  1. Install Translate & Adapt from the App Store (Shopify's own app, free). Know its ceilings before you plan markets around it. Per Shopify's automatic-translation page, auto-translation covers up to 2 languages beyond your default in most countries, and up to 8 (with weekly Auto-sync) if your store is located in Austria, Belgium, Denmark, France, Germany, Ireland, Italy, the Netherlands, Spain, Sweden, Switzerland or the United Kingdom, or if the app shows Translate now for your store. Removing a language does not reset that limit. Beyond it you enter translations manually, import them, or use a third-party app. A store can sell in up to 20 languages in total (30 on Plus). Checked 11 October 2026.
  2. Settings → Languages → Add language, turn on each domain it should appear on, then Publish it. A language that is not published is invisible to shoppers.
  3. Open Translate & Adapt → choose the language → work through Theme content. This is where cart strings live — "Your cart," "Checkout," "Subtotal."
  4. Auto-translate the batch, then manually fix the short UI strings (next section on why). Shopify's help page also says to review automatic translations for accuracy before you publish them. Leave app-owned entries alone: do not bulk-translate Shop & Metafield entries named after a drawer app unless its docs say to. One translation app's help article describes a cart-drawer app whose drawer stuck open after its metafields were translated.
  5. 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 /es prefix, 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-PT may fall back to English if the app only ships pt-BR. Shopify lists Portuguese (Brazil) and Portuguese (Portugal) as separate languages, so this fork is real. 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 Models, Often Combined

Ask your cart app one question: "How do your drawer strings translate?" There are two honest answers, and a good app gives both.

  • Text fields per language: the app gives you editable text boxes and you type the Spanish yourself. You maintain every string in every language. UpCart's help docs describe this model: add the languages in Shopify's language settings, then use the Translate button in Manage all carts (read 11 October 2026). On 11 October 2026 the UpCart listing showed "not currently available"; check the listing before installing. See UpCart alternatives if you are choosing again.
  • Shipped locales: the app reads the storefront locale and swaps in its own translations of the built-in labels. Zero maintenance for chrome strings. Oxify does this for eight languages.
Add translations dialog for cart drawer text with a language selector in Oxify

Oxify uses both: shipped locales for the built-in labels, plus an Add translations link on every text field in the drawer 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.

A third answer — "just use Translate & Adapt" — is only right if the app documents that its strings appear there. Otherwise it usually means hardcoded English you cannot fix from Shopify's side.

Translate These Five Strings First

If you translate nothing else in the drawer, translate the strings shoppers read with a card in hand:

  1. Add to cart (the button that starts everything)
  2. Checkout
  3. The free-shipping bar ("You are €12 away from free shipping" — number and currency must localize too)
  4. Remove / quantity controls
  5. 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.

The free-shipping bar carries a number and a currency as well as words. In our check, 191 of 475 stores (40.2%) tied free shipping to a money amount in the top of the homepage (announcement bar, header or menus), printed in USD on 165 of them, GBP on 16, AUD on 5, CAD on 3 and INR on 2. We requested each store's US market; 438 of 475 rendered it. These are homepage messages, not drawer reward bars or shipping policies, but the sentence has three moving parts in every market: the words, the amount and the currency symbol. Our free-shipping bar guide covers building the bar itself.

Cart Page vs Cart Drawer (Locale Drop)

Shopify's help center says custom themes must use the routes Liquid object for internal links instead of paths like /cart, and the routes documentation says using it instead of hardcoded URLs helps a theme support multiple languages. A hardcoded /cart is how a Spanish shopper can land on an English cart 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 link.

<a href="{{ routes.cart_url }}">{{ 'sections.cart.title' | t }}</a>

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 the locale, add the prefix in the link. Shopify's cart permalink documentation has an optional step for exactly this: put the buyer's locale before /cart, as in /fr/cart/70881412:1,70881382:1 (variant IDs and quantities), so they land in a localized checkout.

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, and translated labels are often longer than the English ones in a narrow drawer. Check wrapping on a phone; the cart drawer custom CSS guide shows how to adjust drawer styles.
  • 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 usually the drawer's JavaScript, not Markets.

  • 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 or documents how its strings reach Translate & Adapt. Oxify's App Store description lists multi-language support ("Multi-language & multi-currency," read 11 October 2026).

If you pay for a page-scanning translator such as Weglot, still open the drawer in each language with items in the bag. A translator is an external script, and a drawer rendered in a shadow DOM hides its internals from external scripts. UpCart's help page for its "Render cart in shadow DOM" setting says the setting hides the drawer's internal structure from external scripts and suggests clearing it to test integration problems. It does not mention translation apps, so treat this as a mechanism to test, not confirmed Weglot behavior.

Frequently Asked Questions

Why is Translate & Adapt not working on my cart drawer?

It usually is working — on theme strings. Hardcoded drawer buttons live in the app's JavaScript. Translate & Adapt will not rewrite those. Use a drawer that ships locales, or one whose docs say its strings appear as translatable fields. A translator that scans the page, such as Weglot, may also miss a drawer that renders in a shadow DOM, so test it.

How many languages can Translate & Adapt translate for free?

The app is free. Automatic translation covers up to 2 languages beyond your default in most countries, or up to 8 if your store is in Austria, Belgium, Denmark, France, Germany, Ireland, Italy, the Netherlands, Spain, Sweden, Switzerland or the UK, or the app shows Translate now. Removing a language does not reset the limit. Manual translation has no such cap; a store can sell in up to 20 languages (30 on Plus). This does not reach app-drawer strings. Checked 11 October 2026.

How many languages does Oxify's cart drawer support?

Oxify Cart Drawer & Upsells (our app) ships its drawer text in eight languages: English, Spanish, French, German, Italian, Japanese, Portuguese (Brazil), and Danish. Your custom offer titles are still written by you in each language you care about. Currency display is configured with Markets — see the multi-currency guide.

Why is my cart page English when the shop is Spanish?

Usually a link without the locale prefix. A hardcoded href to /cart, a product URL or a cart permalink can send the shopper to the default language. Shopify's help center says custom themes must use the routes Liquid object (routes.cart_url) instead of /cart. Fix theme and app links, put the prefix in permalinks (/es/cart/...), then test a full browse-add-checkout run per language.

How do I translate UpCart or another cart app's text?

UpCart's help docs say to add the languages in Shopify's language settings first, then use the Translate button in Manage all carts and enter the text per language, so you maintain those strings. Apps with shipped locales switch automatically with the storefront language. If an app offers neither, its strings are hardcoded and no translation app will reach them. UpCart's drawer was detected on 11 of the 475 stores in our October 2026 check.

Does Weglot translate a Shopify cart drawer?

Only if it can reach the drawer's text. Open the drawer in every language with items in the bag. If it stays English, use the cart app's own translation settings, which work without Weglot. We have not confirmed how Weglot handles a drawer rendered in a shadow DOM, so ask Weglot support if that is your case.

Is the 76% "won't buy in a foreign language" stat from Shopify?

No. It is from CSA Research's 2020 "Can't Read, Won't Buy" survey (8,709 people, 29 countries): 76% prefer their language; 40% will not buy otherwise. Use it as a 2020 research cite for why language matters, not as your store's conversion rate.

Do I need a different cart app per country?

No. One drawer that reads the storefront locale is enough for every market. You do need Markets, translated theme strings, and an app that actually ships those locales. Separate apps per country is how discount codes and inventory drift apart over time.

Should I translate upsell products too?

Yes. A French button that adds an English-titled product still feels half-done. Translate product titles and the offer sentence. Keep one SKU; do not clone the catalog per language unless Markets requires it for other reasons, such as separate pricing.

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 (our app; rated 4.9 from 40 App Store reviews on 11 October 2026) includes those eight locales in the bag, plus the rest of the cart funnel, from $9.99/mo with a 14-day free trial. Skip it if your market needs a language outside those eight and you would rather not type those strings yourself. Then finish money in the multi-currency guide.

Ask AI about Oxify App