How to Translate Shopify Theme Content: Buttons, Navigation and System Text
Most merchants spend weeks translating product descriptions, then ship a store where the "Add to Cart" button still reads in English to French visitors. That single untranslated button destroys the professional impression you spent months building — and it's entirely fixable in under an hour.
This guide walks you through exactly how to translate Shopify theme content: the locale JSON files that control buttons and system text, the navigation and menus that need separate handling, and the checkout strings where merchants consistently get tripped up. By the end, you'll know which strings live where, how to find them, and how to keep nothing missed.
What "Theme Content" Actually Includes
When merchants talk about wanting to translate Shopify theme content, they usually mean one category but there are actually four distinct buckets — each translated differently:
- Theme locale strings — "Add to cart," "Sold out," "Search," error messages, form labels, pagination text. These live in your theme's JSON locale files.
- Navigation and menus — Link labels in your header, footer, and any nested menu. These live in Shopify admin under Content → Menus, not in your theme files.
- Pages, policies, and static content — About, FAQ, Shipping, Privacy. These are Shopify content objects translated separately. (See our guide on how to translate Shopify pages for a full walkthrough.)
- Checkout and account strings — Order buttons, payment labels, address form placeholders. These are partially Shopify-controlled and deserve their own section below.
Understanding which bucket a string falls into tells you exactly where to go to translate it. Confusing them — trying to edit checkout text inside your theme files, for example — is the most common time-waster.
How Shopify Theme Locale Files Work
Every Shopify theme ships with a /locales/ folder. Inside, you'll find JSON files named by language code:
en.default.json— your base English stringsfr.json— French overridesde.json— German overrides
When a visitor lands on your store in French (because you've set up a French market in Shopify Markets), Shopify serves fr.json. If a key exists in fr.json, that translation is shown. If the key is missing, Shopify falls back to en.default.json — which is why partial translations produce mixed-language pages. Shopify determines which locale file to serve based on the language assigned to the market the visitor's URL resolves to; there's no guesswork on Shopify's side, but there's plenty of room for gaps on yours.
A typical locale file looks like this:
{
"products": {
"product": {
"add_to_cart": "Ajouter au panier",
"sold_out": "Épuisé",
"unavailable": "Indisponible"
}
},
"general": {
"search": {
"placeholder": "Rechercher..."
}
}
}
How to Edit Theme Locale Files
Option A — Theme editor (recommended for small edits):
- Go to Online Store → Themes → Customize
- Click the language selector at the top of the editor (the globe icon)
- Select your target language
- Navigate to any section; editable theme strings appear inline
Option B — Code editor (for bulk or precise edits):
- Go to Online Store → Themes → Edit code
- Open the
locales/folder - Open
fr.json(or create it if it doesn't exist, copying the structure fromen.default.json) - Edit or add translated key-value pairs
- Save
Option C — Shopify's Translate & Adapt app: Shopify's free built-in tool surfaces locale strings alongside a translation field. It works, but it's manual — one string at a time. For context on where it fits and where it falls short, see our Shopify Translate & Adapt review.
Translating Navigation and Menus
Navigation text is not in your theme locale files. It lives in Shopify admin → Content → Menus. To translate it:
- Go to Settings → Languages and confirm your target language is added
- Go to Content → Menus
- Click the menu you want to translate (e.g., "Main menu")
- At the top, switch to your target language using the language toggle
- Edit each link label in the target language and save
Do this for every menu — header, footer, and any nested or secondary menus. Untranslated navigation is one of the most visible credibility failures on multilingual stores, and it won't appear in your theme locale files no matter how carefully you search.
The Checkout Translation Situation (Read This Carefully)
Checkout is where merchants most often get confused, and the confusion is understandable because there are two distinct layers:
Layer 1 — Shopify's hosted checkout strings: Labels like "Continue to shipping," "Place order," payment method names, and address field labels are controlled by Shopify's platform, not your theme. Shopify translates many of these automatically when a customer is browsing in a supported language. You cannot edit these strings through your theme locale files.
Layer 2 — Customizable checkout content (Shopify Plus only): Merchants on Shopify Plus can use the checkout editor to add custom content blocks, and some theme-controlled strings (like custom order status messages) can be edited. Standard and Basic plan merchants have very limited ability to customize checkout text beyond what Shopify auto-translates.
How to verify what's editable on your plan:
- Go to Settings → Checkout
- If you see a "Customize checkout" button that opens a visual editor, you're on Plus
- If you see only configuration options (no visual editor), your checkout string editing is limited to Shopify's defaults
For a detailed breakdown of what's actually possible — and what isn't — read our guide on translating your Shopify checkout before spending time trying to edit strings that aren't accessible.
The Complete Theme Translation Checklist
Run through this before marking any language as "done":
Theme locale strings
- Add to Cart / Buy Now button labels
- Sold Out, Unavailable states
- Search placeholder and results text
- Form labels (email, name, address, phone)
- Error messages (invalid email, required field)
- Pagination ("Next," "Previous," "Page X of Y")
- Cookie consent banner — important: if this comes from a third-party app (e.g., a GDPR compliance app), it has its own translation settings inside that app. It does not read from your theme locale files. Check the app's own dashboard for language options.
- Newsletter signup text
Navigation
- Main header menu
- Footer menus
- Mobile navigation labels
- Breadcrumb labels (often in theme locale files under
general.breadcrumbs)
App-injected strings
- Review app widgets (e.g., Loox, Judge.me) — translate inside the review app's settings, not your theme
- Chat widget text — translate inside the chat app's settings
- Any third-party popup or upsell text — same rule applies
The principle: if a string comes from a third-party app, that app controls the translation. Theme locale files only cover strings your theme itself renders.
Keeping Translations in Sync When Your Theme Updates
Theme updates are a hidden maintenance trap. When you update your theme, the en.default.json may gain new keys — and your translated locale files won't have those keys yet, causing fallback to English.
After any theme update:
- Open
en.default.jsonand your translated locale files side by side - Diff them for missing keys (VS Code's diff view works well)
- Add and translate any new keys
If you're using an AI translation app that integrates directly with Shopify's translation API, this sync is handled automatically as long as the app monitors content changes. For a broader look at staying on top of catalog and content changes, see how to keep your Shopify translations in sync.
Using StoreLingo for Theme String Translation
Translating theme locale files manually is feasible for one language. For five languages across a theme with 400+ strings, it becomes a significant and error-prone task. StoreLingo translates theme strings directly through Shopify's native translation API — the same infrastructure Shopify uses for its own multilingual storefront — so translations appear without any theme file editing or code changes. It applies your glossary to theme strings too, so brand terms stay consistent whether they appear in a product description or a button label.
Add StoreLingo on the Shopify App Store →
Don't Forget the Language Switcher
Translated theme content only reaches customers if they can switch to their language. If you haven't added a language selector to your navigation or footer, your translations are live but invisible. Our guide on how to add a language switcher to your Shopify store covers placement, implementation, and common mistakes.
FAQ
Do untranslated theme strings hurt my SEO? Theme strings like button labels and form placeholders are generally not indexed by search engines — crawlers care about page content, not "Add to cart." However, leaving navigation labels in English on a localized page can signal to users (and indirectly to Google through engagement signals) that the experience isn't fully localized, so it's worth translating for user experience reasons even if the direct SEO impact is minimal.
Can I translate theme strings without touching code? Yes. Shopify's theme editor exposes locale strings in a visual interface: go to Online Store → Themes → Customize, switch the language at the top, and edit strings inline. For bulk translation across multiple languages, an app that integrates with Shopify's translation API is faster and less error-prone than manual editing.
My theme updated and some translations reverted to English — why?
Theme updates can introduce new locale keys in en.default.json that don't yet exist in your translated locale files. When a key is missing, Shopify falls back to the default language. After any theme update, compare your translated locale files against the updated en.default.json and add translations for any new keys.
Translate your store into 47 languages
StoreLingo translates products, collections, pages and articles with AI — review before publishing, keep your brand terms consistent.
Add to Shopify →