Markets
If you sell across multiple countries or in multiple currencies, this guide walks through how Mercer surfaces Shopify Markets to your customers.
This guide assumes you’ve already set up Markets in your Shopify admin
under Markets. Mercer reads from localization.country,
localization.language, and localization.available_countries — all
standard Shopify objects. If your store is single-market, you can skip
this guide; nothing in Mercer requires Markets to be configured.
Three switcher patterns + a country gate
Mercer offers three patterns for the switcher (where the customer can manually change country / language) plus an optional first-visit country gate (a dismissible toast that asks on the first page load).
| Pattern | Where it lives | When to use |
|---|---|---|
| Dropdown | Header, top-right | Up to ~8 markets. |
| Modal | Header link opens a full modal | 10+ markets, or to surface full country names |
| Footer | Footer only — nothing in the header or menu drawer | Editorial / luxe stores wanting clean header |
| Country gate | First-visit toast, dismissible | Optional, off by default. Toggle separately. |
You set the pattern in Theme settings → Markets → Switcher style. The four options are Dropdown, Modal, Footer only, and Off. The shipped default is Dropdown, so a header switcher appears automatically once there’s something to switch — 2+ countries or 2+ published languages (a single-country store with multiple languages shows the language picker only). Switch to Modal, Footer only, or Off if you prefer.
Dropdown
The header shows a small ISO·currency chip in the top-right (e.g. “US · USD”). Clicking it expands a dropdown with country and language pickers. Best for stores with up to 8 markets where customers know where they want to shop.
Modal
The header shows the same ISO·currency chip as the Dropdown variant
(e.g. “US · USD”). Clicking opens a centered modal with a country
<select> and a language <select>, plus a quick-pick grid of up to
eight countries (the first in your list, always including the current
one) — each tile showing the country name and its currency
(ISO code + symbol). The country list is a flat, alphabetized set, not
grouped by region. Best for catalogs with 10+ markets or where you want
to surface full country names without crowding the header.
Footer only
Removes the switcher from the header and the menu drawer. Adds a small switcher to the footer. Best for editorial / luxury stores that want a minimal header.
Menu drawer switcher
Whenever the header uses its menu drawer — on phones and tablets, and on desktop when the menu doesn’t fit — the drawer also includes an inline country / language switcher. There’s no separate setting for it: it appears with Dropdown or Modal and is omitted with Footer only and Off.
Country gate
Independent of the switcher pattern. When enabled, the first-time visitor sees a dismissible suggestion toast (not a centered modal) with generic copy:
It looks like you’re in
{country}. Switch to view available prices, taxes, and delivery options.
The detected country / currency name is filled in at runtime; the copy is not hardcoded to any specific country or currency.
Two buttons: Take me there (switches localization to the suggestion
— the detected country + market currency, or just the language for a
language-only suggestion) and Stay here (soft-dismisses the toast).
A separate Don’t ask again on this device checkbox controls how long
the dismissal is remembered. Dismissals are stored in localStorage: a
soft dismiss (the X or Stay here) is remembered for 1 day; opting in
to the checkbox remembers the choice for 365 days.
The gate also handles a language-only suggestion. The toast only
renders on stores with 2+ published countries, but within that, if a
visitor’s detected country already matches the active one and only their
detected language differs, the same toast appears with “View this store
in {language}” framing — suggesting the language instead of a country.
The country-change and language-change cases share the toast and the
same two buttons.
Mercer detects the visitor’s country client-side via Shopify’s
/browsing_context_suggestions.json browsing-context endpoint (which is
itself IP-resolved server-side). No third-party geolocation is used. The
toast does not appear if:
- The visitor has already dismissed it (dismissal recorded in
localStorage). - The detected country and language both match the active market (nothing to suggest).
- No localization options are configured for the detected country (so the switch would be a no-op).
To enable: Theme settings → Markets → Country selection prompt.
Pricing pattern
Mercer renders Shopify’s active prices through the money filter. Two
patterns control the accompanying presentation; currency comparison is
against your shop’s primary currency, not a fixed currency such as USD:
| Pattern | Behavior |
|---|---|
| Local only (default) | Displays the active price using Shopify’s money formatting. |
| Round-up disclosure | Displays the same numeric price, plus a Rounded for {{ currency }} label when cart.currency differs from shop.currency. This setting does not calculate or apply rounding. |
Toggle in Theme settings → Markets → Price localization pattern. Leave this on Local only unless the disclosure accurately describes your pricing setup. Configure currency conversion and rounding in Shopify; the theme’s label does not change what customers pay.
Hreflang
Shopify generates hreflang from your published language and market
domain configuration. Mercer includes Shopify’s required
content_for_header output and does not generate an additional set of
hreflang tags, including on single-country stores with multiple languages.
View the published page’s source and search for hreflang to inspect the
alternates for your setup. The output depends on your market, domain,
and language configuration; there is no separate Mercer hreflang toggle.
See Shopify’s international SEO guide .
Right-to-left (RTL) support
The <html dir> attribute flips to rtl automatically for any
right-to-left script the theme recognizes — ar, he, fa, ur,
ps, sd, ug, yi, dv, and ckb (ar and he being the common
examples). All other locales keep dir="ltr".
Mercer’s CSS uses logical properties (inline-start,
inline-end, margin-inline-*, and related properties), so page
layout mirrors without a separate RTL stylesheet. Drawer and
off-canvas motion for cart, mega-menu, and filter sheet surfaces is
explicitly RTL-aware.
PDP gallery arrow keys and horizontal scrollers also respect direction: left / right behavior inverts under RTL so keyboard and button navigation match the visual reading direction.
Preview your published RTL locale and test navigation, product selection, and cart flows before launch. Direction-aware CSS and JavaScript are in place, but that does not establish that every page and app integration has been visually checked in your language. The bundled EU language packs listed below are LTR.
EU language packs
Mercer ships locale files for French (fr), German (de), Italian
(it), and Spanish (es) alongside the default English. Each locale
includes storefront strings (fr.json, de.json, it.json,
es.json) and Theme Editor strings (fr.schema.json,
de.schema.json, it.schema.json, es.schema.json).
To activate a language, add it under Settings → Languages in Shopify admin, prepare its translations, and publish it. Assign the language to the relevant market and domain under Markets → [market] → Domain / language. Mercer reads Shopify’s active language; no theme setting is required. See Shopify’s language guide and market domain and language setup .
The bundled translations are AI-assisted drafts awaiting native-speaker
review. Before public-facing production use, have a native-speaker copy
editor review the storefront and Theme Editor wording for your market.
The locale work prioritizes key completeness and placeholder integrity —
tokens such as {{ price }} and {{ count }} are preserved
byte-identically — over final translation polish.
Pluralization sub-keys (one / other) are preserved per locale.
HTML-bearing values keep their tags.
Localized links
Use Shopify’s routes object and object URLs such as product.url,
collection.url, and navigation link.url to retain the active
storefront context. Mercer also calls its localized-href snippet in
places that accept raw merchant-entered paths. The snippet adds the
active path prefix where needed; it is not a global link rewriter.
A hard-coded /products/wool-trench in Custom Liquid is not automatically
processed by that snippet. Prefer Shopify’s URL objects, or explicitly
render the helper for a raw path:
<a href="{% render 'localized-href', path: '/products/wool-trench' %}">
Shop the wool trench
</a>Common Markets pitfalls
”My switcher doesn’t show”
Three things to check:
- Theme settings → Markets → Switcher style — has it been changed to Off? (The default is Dropdown.)
- Markets in the Shopify admin — is there something to switch to? The switcher renders once you have 2+ countries or 2+ published languages. A single-country, single-language store has nothing to switch to, so no switcher renders. (A single-country store with multiple languages still shows the switcher — the language picker only.)
- Check which countries Shopify makes available to the storefront.
Mercer lists
localization.available_countries; countries are not removed merely because they share a currency or language.
Hiding the controls on a single-country, single-language store does not by itself disable the Markets assets. Switcher style → Off disables the switcher; the optional country gate is configured separately.
”My country gate isn’t appearing”
The country gate only appears once per visitor (the dismissal is set in
localStorage — 1 day for a soft dismiss, or 365 days if the visitor
ticked Don’t ask again on this device). If you’ve already seen it,
clear localStorage for your storefront URL or browse in incognito.
It also doesn’t appear if the detected country has no configured market — the switch would be a no-op.
”Prices show in the wrong currency”
This is usually a Markets configuration issue, not a Mercer one. Check:
- Markets — is the visitor’s country in an active market?
- The market’s currency and pricing configuration — is the currency you expect selected?
- The market’s Catalogs — is the product included?
Mercer renders whatever Shopify reports as the active price.
”My country gate switches the customer but the page doesn’t reload”
The country gate uses Shopify’s standard localization form to switch.
On submit, Shopify redirects to the same page with the new
localization applied. If your customer’s browser is blocking
form-submit redirects (rare), the page won’t reload — but this is
out of Mercer’s control. The switch itself takes effect; the next
navigation reflects it.
What’s next
- Read B2B if you also offer wholesale.
- Read FAQ for general gotchas.
- For a deeper Shopify Markets primer, see Shopify’s Markets documentation .