Shopper copy
Rewrite any of the words the cart drawer shows a shopper, in one language or several, and see what happens to a box you leave empty.
What it is
Every word the drawer shows a shopper comes from us by default — Checkout, Subtotal, You might also like, and around eighty more. The Shopper copy screen is where you replace any of them with your own wording.
You do not have to fill anything in. Each box shows our current wording as grey placeholder text. Leave it alone and the shopper keeps seeing that. Type something and yours replaces it.
The same screen holds your other languages. Each language is a separate set of boxes, so a French shopper can read words you wrote in French.
Where the words appear
The boxes are grouped by where in the drawer the shopper sees them, not by which module they belong to. Each box is labelled with its internal name — checkout_button, empty_cart_heading — because that name is what the widget looks up. Use the group heading, the short description under it, and the grey placeholder to work out which box you want.
Screen-reader wording lives here too, in Announcements and errors. Those strings are mostly spoken rather than shown, and they are still words a shopper receives.
Change a word
- In the app, open Carts and click the cart you want to edit. You land on the Cart builder screen.
- Under See it and style it, press Shopper copy.
- Scroll to the group that holds the words you want — the groups are listed in the table below.
- Type your wording into the box. The grey text in an empty box is what shoppers see today.
- Press the save button at the bottom. It is labelled with the language you are editing, so on a shop with one language it reads Save en.
- Press Back to the cart, then Review and publish. Nothing you change here reaches a shopper until you publish.
There is one save button for the whole screen, and it saves the language you are on. Pressing a language button, or pressing Add under Add a language, loads a fresh form — anything you typed and did not save is gone. Save first, then switch.
Putting a word back
Clear the box and save. There is no separate reset button and none is needed: an empty box means "use theirs". Typing our exact wording back in has the same effect — the app recognises it as unchanged and stores nothing, so those words follow ours if we ever reword them.
The groups
| Group | What it covers |
|---|---|
| Drawer heading and close | The title at the top of the drawer and its close button. |
| Cart lines | Each item in the cart — its controls, badges and stock notes. |
| Totals and checkout | The subtotal block and the checkout button. |
| Rewards bar | The progress bar toward free shipping or a discount tier. |
| Free gift | The gift badge on the line, the picker, and the locked teaser. |
| Recommended products | The upsell block below the cart lines. |
| Discount code | The code field, and what a shopper is told when a code does nothing. |
| Quantity limits | Shown when a cart is over or under a limit you set. |
| Order notes and terms | The notes box and the terms checkbox, when those modules are on. |
| Subscriptions | The delivery-frequency editor on a subscription line. |
| Checkbox add-on | The tick-box add-on block, when that module is on. |
| Countdown | The countdown timer block, when that module is on. |
| Announcements and errors | Mostly read aloud by screen readers rather than shown. They are still shopper-facing. The sticky bubble's label and the empty-cart wording are here too. |
Every group is always shown, whether or not you use the module it belongs to. Wording for a module you have not added simply never appears on your storefront.
Placeholders and plurals
Some of our wording contains a placeholder in double curly brackets — {{product}}, {{total}}, {{code}}. The drawer fills those in when it draws the line. Where a box accepts placeholders, the hint under it lists exactly which ones, for example You can use {{limit}}, {{product}}, {{have}}.
- You can keep a placeholder, move it, or drop it. Shortening a message is a normal edit.
- You cannot add one that is not listed for that box. The screen refuses to save and tells you which ones that box can use. A placeholder we cannot fill would reach a shopper as literal
{{discount_pct}}. - The placeholder brings no punctuation or currency symbol of its own — the drawer formats money and numbers for the shopper's locale.
The counting brackets
A few defaults contain a single-bracket block that picks a word by number:
{count, plural, one {# item} other {# items}}
That is what makes "1 item" and "2 items" both come out right, in languages with more plural forms than English too. Edit the words inside it if you like, but keep the brackets matched. If they do not match up, the screen says so and refuses to save rather than letting the shopper read the raw brackets.
Length
Each box takes up to 500 characters.
Another language
- On the Shopper copy screen, find the Language section at the top.
- In Add a language, type a two-letter code such as
fr, or a regional one such aspt-BR, and press Add. - A button for that language appears next to the others and the boxes below empty out. You are now writing that language.
- Fill in the boxes you want to translate and press the save button — it now reads Save fr.
- Publish, as usual.
Adding a language writes nothing on its own. A language you add and then leave blank is a tab and not a change; it is stored the moment you save words into it, and it disappears again if you reload before saving.
To remove a language, clear every box in it and save. The language is dropped rather than kept as an empty one.
Which words a shopper actually gets
The drawer takes the language from Shopify — whatever language the shopper is browsing your storefront in. It then looks, in this order, for:
- Exactly that language, region and all:
fr-CA. - The language on its own:
fr. So writingfrcoversfr-CAwithout you writing it twice. - Your default language, which is
en. - Our wording.
Only one language's boxes are used at a time, and any box you left empty in that language falls back to our wording, not to your English. If you rewrote checkout_button in en and then added fr, a French shopper gets your French where you wrote it and our English everywhere else — including that checkout button. To keep your wording throughout, fill in the same boxes in each language.
Arabic, Hebrew, Persian, Urdu and the other right-to-left languages flip the drawer's layout automatically. That follows the shopper's language and needs nothing from you.
The size banner
Your cart's settings are written into the HTML of every page on your store, and copy is part of that. If the whole thing passes 80% of the 8 KB we aim for, a banner appears on this screen telling you the current size in bytes.
Going over does not break anything — your cart works exactly as it did. It is a page-weight note. The thing worth knowing is the arithmetic: each extra language costs roughly as much again, because every language you write is carried on every page view, for every shopper, whichever language they read.
Limitations
These are things merchants reasonably expect and the app does not currently do. They are listed here rather than left to be discovered.
- You cannot change the default language. It is always
en, and there is no field anywhere in the app that sets it. That matters because it is the fallback: a shopper browsing in a language you have not written gets theenboxes, then our English. - No translation help of any kind. There is no automatic translation, no import or export, no copy-from-another-language, and no bulk paste. Every language means going through the boxes again by hand.
- Not connected to Shopify's own translations. What you write here lives in this app only. Shopify Translate & Adapt, Markets language settings and translation apps do not see it and cannot fill it in.
- The preview always shows English. The Preview screen mounts the drawer with the language fixed to
en, so wording you saved underfror any other code cannot be checked there. The only way to see it is to publish and browse your storefront in that language. - Words you typed into a module's own settings are not on this screen and are not translated. Announcement bar messages, trust badge text, Custom HTML and the names you give reward tiers are shown to every shopper exactly as you typed them, in every language.
- No search. With around 85 boxes across thirteen sections, finding one particular string means scrolling and reading the group descriptions. Your browser's own find-on-page is the practical way to jump to a name like
checkout_button. - The box labels are internal names, not plain English. They read
blocked_cart_minrather than "when the cart is under your minimum". The group heading and the grey default text are what identify a box. - You cannot invent placeholders. A box can only use the ones already in our wording for it, so you cannot add, say, a shopper's name or a shipping date to a string that never had one.
- No preview of one string in place. There is nothing that highlights where a given box appears in the drawer, and no per-language preview, so a long replacement can turn out to wrap awkwardly only once it is live.
- An A/B test winner overwrites this screen. If you run a copy A/B test set to apply the winner automatically, and the new version wins, its wording replaces everything saved here — including your other languages. Choose Tell me, and I will decide if you have written more than one language.
- Nothing is versioned per string. There is no history of what a box said before you changed it. The version history on the publish screen restores a whole cart configuration, not one word.
Next steps
Saving here does not change your live store. The success banner says so: these changes go live the next time you publish. Finish with Review and publish — your wording shows up in the publish summary under Text. See Preview and publishing.