Why Your Shopify Store Needs Localization
76% of online shoppers prefer to buy in their native language. 40% will never purchase from a site that isn't in their language.
Shopify powers over 4.6 million stores worldwide, yet most sell in English only. That's a massive missed opportunity.
Here's what localization does to your metrics:
| Metric | English-Only | Fully Localized | Improvement |
|---|---|---|---|
| Conversion Rate | 1.8% | 4.5% | +150% |
| Cart Abandonment | 72% | 45% | -37% |
| Average Order Value | $65 | $82 | +26% |
| Return Customer Rate | 22% | 41% | +86% |
Real example: A fashion brand selling in the US expanded to Germany and France using IntlPull. Within 3 months: +312% international revenue, +89% organic traffic from non-English markets.
This guide walks you through every step of localizing your Shopify store with IntlPull — from installation to your first multilingual sale.
The Problem with Shopify's Built-in Translation Tools
Shopify offers Translate & Adapt, a free first-party app. It works for basic use cases, but merchants consistently hit these walls:
What Translate & Adapt Can Do
- Auto-translate up to 2 languages (100M characters/year)
- Translate product titles, descriptions, collections, and pages
- Adapt content for regional markets (e.g., US vs UK English)
What It Cannot Do
| Limitation | Impact |
|---|---|
| Only 2 free auto-translated languages | Scaling beyond 2 markets requires manual work or paid apps |
| Cannot translate theme locale files | Your buttons, navigation, checkout labels stay in English |
| No URL/slug translation | SEO suffers — /products/running-shoes stays English in every market |
| No bulk import/export | Cannot use professional translators with standard workflows |
| No translation memory | Repeated phrases get retranslated (and billed) every time |
| No branching/review workflow | No way to stage translations before publishing |
| Limited API access | Cannot integrate with CI/CD or developer workflows |
| Quality is inconsistent | Auto-translation quality drops on technical or brand-specific content |
The gap is clear: Shopify handles currency and markets well, but the translation layer needs a professional tool.
How IntlPull Solves Shopify Localization
IntlPull is a Translation Management System (TMS) purpose-built for developers and modern ecommerce teams. The Shopify integration provides:
Core Capabilities
┌─────────────────────────────────────────────────┐
│ IntlPull TMS │
│ │
│ ┌──────────┐ ┌───────────┐ ┌──────────────┐ │
│ │ AI Trans │ │ Review │ │ Translation │ │
│ │ Engine │ │ Workflows │ │ Memory │ │
│ └────┬─────┘ └─────┬─────┘ └──────┬───────┘ │
│ │ │ │ │
│ ┌────┴──────────────┴───────────────┴────┐ │
│ │ Bidirectional Sync Engine │ │
│ └────┬────────────────────────────┬──────┘ │
│ │ │ │
│ ┌────▼─────────┐ ┌─────────────▼──────┐ │
│ │Theme Locales │ │ Dynamic Content │ │
│ │ JSON files │ │ Products/Pages/etc │ │
│ └────┬─────────┘ └─────────────┬──────┘ │
└───────┼────────────────────────────┼─────────────┘
│ │
┌────▼────────────────────────────▼────┐
│ Your Shopify Store │
│ Themes · Products · Collections │
│ Pages · Navigation · Metafields │
└──────────────────────────────────────┘
What makes IntlPull different:
- Bidirectional sync — Pull translations from Shopify into IntlPull, or push from IntlPull to Shopify. Or both.
- Theme locale files — Sync the actual
.jsonlocale files that power your storefront UI (buttons, labels, navigation, error messages). - Dynamic content — Translate products, collections, pages, and articles via Shopify's Translate & Adapt API.
- 37+ languages — AI translation with multiple providers (Google, DeepL, OpenAI, Gemini) — not limited to 2.
- Translation memory — Never pay to translate the same phrase twice.
- Review workflows — Stage, review, approve translations before they go live.
- Auto-sync — Webhook-triggered. When content changes in Shopify, IntlPull syncs automatically.
- Language switcher — Drop-in theme extension with 4 display styles.
Step 1: Install the IntlPull Shopify App
From the Shopify App Store
- Go to the Shopify App Store and search for "IntlPull"
- Click Add app
- Review the permissions and click Install
Permissions Required
| Permission | Why |
|---|---|
read_themes | Read theme locale JSON files |
write_translations | Push translations to Shopify |
read_products | Read product titles, descriptions for translation |
read_locales | Detect which languages are enabled on your store |
read_content | Read pages, articles, and collection content |
Security note: IntlPull never stores your Shopify access token in plaintext. All tokens are encrypted at rest.
Step 2: Connect Your IntlPull Project
After installation, you'll see the Setup page inside your Shopify Admin.
Create or Link a Project
1. Log in to IntlPull (or create an account)
2. Create a new project or select an existing one
3. Copy your project API key (starts with ip_live_...)
4. Paste it in the Shopify app setup screen
5. Click "Connect"
Configure Source Language
Set your store's source language (usually en for English). This tells IntlPull which language is your "base" — all translations are derived from it.
Choose Sync Direction
| Direction | Use Case |
|---|---|
| Pull | Import Shopify translations into IntlPull for editing |
| Push | Send IntlPull translations to Shopify |
| Bidirectional | Two-way sync (recommended) — changes in either system propagate |
Recommended: Start with Pull to import your existing translations, review them in IntlPull, then switch to Bidirectional for ongoing management.
Step 3: Add Languages to Your Store
Enable Languages in Shopify
Before IntlPull can sync translations, the languages must be enabled in Shopify:
- Go to Settings → Languages in your Shopify Admin
- Click Add language
- Select the languages you want (e.g., Spanish, French, German, Japanese)
- Click Save
Or Add Languages via IntlPull
IntlPull can add languages to your Shopify store automatically:
TypeScript1// Using IntlPull API 2POST /api/v1/projects/{projectId}/language-settings/bulk 3{ 4 "languages": [ 5 { "language_code": "es", "language_name": "Spanish" }, 6 { "language_code": "fr", "language_name": "French" }, 7 { "language_code": "de", "language_name": "German" }, 8 { "language_code": "ja", "language_name": "Japanese" } 9 ], 10 "auto_translate": true 11}
Language Support
IntlPull supports 37+ languages with high-quality AI translation:
| Region | Languages |
|---|---|
| Western Europe | Spanish, French, German, Italian, Portuguese, Dutch, Swedish, Danish, Norwegian, Finnish |
| Eastern Europe | Polish, Czech, Romanian, Hungarian, Bulgarian, Slovak, Croatian, Slovenian, Ukrainian, Russian |
| Asia-Pacific | Japanese, Chinese (Simplified & Traditional), Korean, Hindi, Vietnamese, Thai, Indonesian |
| Middle East | Arabic, Hebrew, Turkish |
| Americas | Portuguese (Brazil), Spanish (LATAM) |
Step 4: Sync Theme Locale Files
This is where IntlPull shines over other Shopify translation tools.
What Are Theme Locale Files?
Every Shopify theme has a /locales directory containing JSON files that power the storefront UI:
themes/
└── your-theme/
└── locales/
├── en.default.json ← Source language
├── es.json ← Spanish translations
├── fr.json ← French translations
├── de.json ← German translations
└── ja.json ← Japanese translations
Structure of a Locale File
JSON1{ 2 "general": { 3 "accessibility": { 4 "skip_to_content": "Skip to content", 5 "close": "Close" 6 }, 7 "search": { 8 "placeholder": "Search our store", 9 "submit": "Search", 10 "no_results": "No results for \"{{ terms }}\"" 11 } 12 }, 13 "products": { 14 "product": { 15 "add_to_cart": "Add to cart", 16 "sold_out": "Sold out", 17 "quantity": "Quantity", 18 "size_guide": "Size guide" 19 } 20 }, 21 "cart": { 22 "general": { 23 "title": "Your cart", 24 "empty": "Your cart is empty", 25 "continue_shopping": "Continue shopping", 26 "checkout": "Checkout" 27 } 28 } 29}
These are the strings your customers actually see — "Add to cart," "Checkout," "Your cart is empty." If these aren't translated, your store looks half-localized.
Syncing with IntlPull
- In the Shopify app settings, enable "Sync Theme Locales"
- IntlPull will pull all locale files from your active theme
- Each JSON key becomes a translation key in your IntlPull project:
Namespace: theme.general.search
Key: placeholder
Value (en): "Search our store"
Value (es): "Buscar en nuestra tienda"
Value (fr): "Rechercher dans notre boutique"
Value (de): "In unserem Shop suchen"
- Edit translations in IntlPull's editor with full context
- Push back to Shopify with one click
Handling Theme Updates
When Shopify themes update, new locale keys may appear. IntlPull handles this automatically:
- New keys are detected and flagged as "untranslated"
- Removed keys are preserved in IntlPull (soft delete)
- Changed source values trigger re-translation alerts
- Auto-translate can fill new keys instantly using AI
Step 5: Translate Dynamic Content
Dynamic content includes everything that's not in theme files:
Content Types
| Content | Examples | API Used |
|---|---|---|
| Products | Title, description, SEO title/description | Translate & Adapt |
| Collections | Title, description | Translate & Adapt |
| Pages | Title, body HTML | Translate & Adapt |
| Articles | Title, body, summary | Translate & Adapt |
| Navigation | Menu item labels | Translate & Adapt |
| Metafields | Custom content blocks, product specs | Translate & Adapt |
How IntlPull Syncs Dynamic Content
1. IntlPull calls Shopify's GraphQL API (v2026-01)
2. Fetches all translatable resources with pagination
3. Creates IntlPull translation keys mapped to Shopify resource GIDs
4. You translate in IntlPull (AI, manual, or professional)
5. IntlPull pushes translations back via registerTranslations mutation
Example: Translating a Product
Source (English):
JSON1{ 2 "title": "Men's Running Shoes - Lightweight Sneakers", 3 "description": "Breathable mesh upper with cushioned EVA midsole...", 4 "seo_title": "Buy Men's Running Shoes | Free Shipping", 5 "seo_description": "Lightweight running shoes for men..." 6}
After IntlPull translation to German:
JSON1{ 2 "title": "Herren Laufschuhe - Leichte Sportschuhe", 3 "description": "Atmungsaktives Mesh-Obermaterial mit gedämpfter EVA-Mittelsohle...", 4 "seo_title": "Herren Laufschuhe kaufen | Kostenloser Versand", 5 "seo_description": "Leichte Laufschuhe für Herren..." 6}
SEO tip: IntlPull lets you customize SEO titles and descriptions per language. Don't just translate — optimize for local search terms. Germans search "Laufschuhe kaufen," not "running shoes buy."
Namespace Organization
IntlPull organizes Shopify content with clear namespaces:
shopify.theme.general.* → Theme UI strings
shopify.theme.products.* → Product-related theme strings
shopify.theme.cart.* → Cart-related theme strings
shopify.products.{gid}.* → Individual product content
shopify.collections.{gid}.* → Individual collection content
shopify.pages.{gid}.* → Individual page content
This makes it easy to filter, search, and manage translations at scale.
Step 6: Set Up the Language Switcher
IntlPull includes a Theme App Extension that adds a professional language switcher to your store.
Installation
- Open Shopify Theme Editor
- There are two placement options:
Option A: App Block (In-Theme Placement)
- Navigate to your header or footer section
- Click "Add block"
- Select "Language Switcher" under the IntlPull app
- Configure style, position, and colors
Option B: Floating Embed (Always Visible)
- Click "App embeds" in the Theme Editor sidebar
- Enable "Language Switcher (Floating)"
- Choose position (bottom-left, bottom-right, top-left, top-right)
Display Styles
| Style | Description | Best For |
|---|---|---|
| Dropdown | Clean select menu with language names | Header placement |
| Flags | Country flag icons in a row | Visual, icon-heavy themes |
| Pills | Rounded pill buttons | Modern, minimal themes |
| Inline | Text links separated by dividers | Footer or breadcrumb areas |
Customization Options
- Background color
- Text color
- Active language highlight color
- Border radius
- Font size
- Show/hide language names
- Show/hide flag icons
- Dropdown direction (up/down)
Performance note: The language switcher is a Shopify Theme App Extension — it loads asynchronously, adds zero JavaScript to your initial page load, and requires no external API calls from the storefront.
Step 7: Enable Auto-Sync
Set it and forget it. IntlPull can sync translations automatically when content changes.
How Auto-Sync Works
Shopify Store IntlPull
│ │
│ Content changes │
│ (new product, theme update) │
│ │
├──── Webhook ─────────────────►│
│ (HMAC-SHA256 verified) │
│ │
│ ┌────┤
│ │ Detect changes
│ │ Auto-translate new keys
│ │ Flag changed source text
│ └────┤
│ │
│◄───── Push translations ──────┤
│ │
Webhook Events
IntlPull listens for these Shopify webhook events:
| Event | Trigger | Action |
|---|---|---|
locales/create | New language added | Pull new locale, auto-translate |
locales/update | Theme locale file changed | Sync changes to IntlPull |
themes/update | Theme switched or updated | Re-sync all theme locales |
app/uninstalled | App removed | Clean up integration data |
Enable Auto-Sync
- In the IntlPull Shopify app, go to Settings
- Toggle "Auto-Sync" on
- Choose sync scope:
- Theme locales only — fastest, least resource-intensive
- Dynamic content only — products, collections, pages
- Full sync — everything
Tip: Start with "Theme locales only" for auto-sync, and manually trigger full content syncs as needed. This keeps your webhook processing fast and avoids unnecessary API calls.
Step 8: Translation Workflow Best Practices
The Hybrid Approach (Recommended)
Not all content needs the same translation quality:
| Content Type | Strategy | Why |
|---|---|---|
| Theme UI strings | AI auto-translate + review | Standardized phrases, rarely change |
| Product titles | AI translate + human review | Brand voice matters for SEO |
| Product descriptions | Professional translation for top 20% | Revenue-critical content |
| Legal pages | Professional translation | Compliance risk |
| Blog articles | AI auto-translate | Volume-focused, less brand-critical |
| Meta descriptions | AI translate + SEO optimization | Must include local keywords |
Using Translation Memory
IntlPull's translation memory saves every approved translation. Benefits:
- "Add to cart" translated once → reused across all products automatically
- Consistent terminology → "Checkout" always translates the same way
- Cost savings → repeated phrases don't consume AI translation credits
- Glossary enforcement → brand terms stay consistent
Review Workflow
1. New key detected (auto or manual)
│
▼
2. AI auto-translate (draft status)
│
▼
3. Reviewer edits in IntlPull editor
(with context, screenshots, glossary)
│
▼
4. Approved → pushed to Shopify
│
▼
5. Translation memory updated
Bulk Operations
For stores with thousands of products:
TypeScript1// Import existing translations from CSV 2POST /api/v1/projects/{projectId}/import 3{ 4 "format": "csv", 5 "language": "es", 6 "strategy": "merge" // Don't overwrite existing translations 7} 8 9// Export for professional translators 10POST /api/v1/projects/{projectId}/export 11{ 12 "format": "xliff", // Industry-standard format 13 "languages": ["de", "fr", "ja"], 14 "status": "untranslated" // Only export what's missing 15}
Step 9: Multilingual SEO for Shopify
Localization without SEO is a missed opportunity. Here's how to maximize organic traffic.
Hreflang Tags
Shopify Markets automatically generates hreflang tags for your enabled languages:
HTML1<link rel="alternate" hreflang="en" href="https://yourstore.com/" /> 2<link rel="alternate" hreflang="es" href="https://yourstore.com/es/" /> 3<link rel="alternate" hreflang="fr" href="https://yourstore.com/fr/" /> 4<link rel="alternate" hreflang="de" href="https://yourstore.com/de/" /> 5<link rel="alternate" hreflang="x-default" href="https://yourstore.com/" />
URL Structure
Shopify uses the subdirectory approach by default:
yourstore.com/ → English (default)
yourstore.com/es/ → Spanish
yourstore.com/fr/ → French
yourstore.com/de/ → German
yourstore.com/ja/ → Japanese
This is actually the recommended approach for most stores — it consolidates domain authority and is easiest to manage.
SEO Checklist for Each Language
| Element | Action | IntlPull Feature |
|---|---|---|
| Page titles | Translate + optimize for local keywords | Per-language SEO fields |
| Meta descriptions | Write unique per language (not just translate) | Custom SEO metadata |
| Product titles | Include local search terms | AI + human review |
| Alt text | Translate image alt text | Bulk translation |
| Structured data | Ensure JSON-LD includes translated values | Automatic with Shopify |
| Sitemap | Verify all language versions are indexed | Shopify Markets handles this |
Local Keyword Research
Don't translate keywords — research them:
English: "running shoes" → 110,000 monthly searches
German: "Laufschuhe" → 74,000 monthly searches
"Laufschuhe kaufen" → 12,000 monthly searches (high intent!)
"Joggingschuhe" → 8,100 monthly searches
French: "chaussures de course" → 33,000 monthly searches
"chaussures running" → 27,000 monthly searches
IntlPull's AI translation preserves context, but always review SEO-critical content with local market knowledge.
Step 10: Monitor and Optimize
IntlPull Dashboard Metrics
After connecting, monitor these in your IntlPull project:
| Metric | What It Tells You |
|---|---|
| Translation coverage | % of keys translated per language |
| Sync status | Last sync time, keys added/updated/removed |
| Untranslated keys | New content that needs translation |
| Review queue | Translations awaiting approval |
| Sync history | Full audit trail of all sync operations |
Shopify Analytics Integration
Cross-reference translation coverage with Shopify analytics:
- Conversion rate by language — Is your German translation performing?
- Bounce rate by market — High bounce on French pages? Check translation quality
- Revenue by market — Track ROI per localized market
- Cart abandonment by language — Untranslated checkout = lost sales
Common Issues and Fixes
| Issue | Cause | Fix |
|---|---|---|
| Some strings still in English | Theme locale keys not synced | Re-trigger theme locale sync |
| Products not translated | Dynamic content sync disabled | Enable "Sync Dynamic Content" in settings |
| Language switcher not showing | Theme extension not enabled | Enable in Theme Editor → App Embeds |
| Translations reverting | Sync direction conflict | Set to "Push" (IntlPull as source of truth) |
| Slow sync | Large product catalog | Use incremental sync, not full |
Advanced: Using the IntlPull CLI
For developers who prefer the command line:
Installation
Terminalnpm install -g @intlpull/cli
Configuration
JSON1// .intlpull.json 2{ 3 "projectId": "your-project-id", 4 "framework": "shopify", 5 "sourceLanguage": "en", 6 "outputDir": "./locales", 7 "namespaces": ["theme", "products"] 8}
Common Commands
Terminal1# Pull all translations from IntlPull 2intlpull pull 3 4# Push local changes to IntlPull 5intlpull push 6 7# Check translation status 8intlpull status 9 10# Auto-translate missing keys 11intlpull translate --languages es,fr,de,ja 12 13# Export for professional translators 14intlpull export --format xliff --languages de --status untranslated
CI/CD Integration
Add to your deployment pipeline:
YAML1# .github/workflows/sync-translations.yml 2name: Sync Translations 3on: 4 push: 5 branches: [main] 6 paths: 7 - 'locales/**' 8 9jobs: 10 sync: 11 runs-on: ubuntu-latest 12 steps: 13 - uses: actions/checkout@v4 14 - run: npm install -g @intlpull/cli 15 - run: intlpull push 16 env: 17 INTLPULL_API_KEY: ${{ secrets.INTLPULL_API_KEY }}
Pricing and ROI
IntlPull Pricing for Shopify Stores
IntlPull offers plans designed for ecommerce:
| Plan | Keys | Languages | AI Translation | Best For |
|---|---|---|---|---|
| Free | 500 | 5 | 10,000 chars/mo | Small stores testing localization |
| Starter | 5,000 | 10 | 100,000 chars/mo | Growing stores, 2-3 markets |
| Pro | 25,000 | Unlimited | 1M chars/mo | Active ecommerce, 5+ markets |
| Enterprise | Unlimited | Unlimited | Unlimited | Large catalogs, custom workflows |
ROI Calculation
Average Shopify store revenue: $50,000/month (US only)
International market potential: +60% addressable market
Conservative conversion improvement: +13% (Shopify's own data)
Additional monthly revenue: $50,000 × 0.60 × 0.13 = $3,900/month
IntlPull Pro plan cost: $49/month
ROI: 7,857% — pays for itself in the first day.
Migration from Other Translation Apps
Already using Weglot, Langify, or Transcy? IntlPull makes migration straightforward:
Migration Steps
- Export your current translations (CSV or JSON)
- Import into IntlPull via the dashboard or CLI
- Connect the Shopify integration
- Push to verify all translations are in place
- Remove the old app
Feature Comparison
| Feature | Weglot | Langify | Transcy | IntlPull |
|---|---|---|---|---|
| Theme locale sync | Proxy | Manual | Auto | Bidirectional |
| Dynamic content | Proxy | Plugin | Auto | API + Sync |
| Translation memory | No | No | No | Yes |
| Review workflows | No | No | No | Yes |
| Branching | No | No | No | Yes |
| CLI access | No | No | No | Yes |
| API access | Limited | No | Limited | Full REST API |
| CI/CD integration | No | No | No | Yes |
| MCP (AI IDE) support | No | No | No | Yes |
| Self-hosted option | No | No | No | Yes |
Summary: Your Localization Checklist
Here's your complete step-by-step checklist:
- Install IntlPull Shopify app
- Connect your IntlPull project with API key
- Set sync direction (start with Pull → switch to Bidirectional)
- Enable languages in Shopify (Settings → Languages)
- Sync theme locale files (UI strings, navigation, cart, checkout)
- Sync dynamic content (products, collections, pages)
- Set up the language switcher (dropdown, flags, pills, or inline)
- Enable auto-sync for real-time translation updates
- Configure translation workflow (AI + human review for critical content)
- Optimize SEO per language (local keywords, meta descriptions)
- Monitor conversion rates per market in Shopify Analytics
- Set up CLI/CI/CD for developer workflows (optional)
You don't need to do everything at once. Start with theme locales and your top 3 target languages. Add markets as you see results.
FAQs
How long does the initial sync take?
For a typical store with 100-500 products, the first full sync takes 2-5 minutes. Theme locale sync is nearly instant.
Does IntlPull affect my store's performance?
No. The language switcher is a Shopify Theme App Extension that loads asynchronously. All translation processing happens server-side in IntlPull's infrastructure.
Can I use professional translators with IntlPull?
Yes. Export untranslated content as XLIFF (industry standard), send to your translation agency, import the results. IntlPull supports JSON, YAML, XLIFF, PO, CSV, Android XML, and iOS Strings formats.
What happens if I uninstall the app?
Your translations remain in Shopify. IntlPull cleans up its integration data but doesn't remove any content from your store.
Does IntlPull support Shopify Plus?
Yes. IntlPull works with all Shopify plans — Basic, Shopify, Advanced, and Plus.
Can I translate checkout?
Shopify pre-translates the checkout into 33 languages. For custom checkout extensions (Shopify Plus), IntlPull can manage those translations too.
Start Localizing Today
Your competitors are already selling in multiple languages. Every day you wait, you're leaving international revenue on the table.
Install IntlPull for Shopify → and start your first sync in under 5 minutes.
Questions? Reach out at support@intlpull.com or join our Discord community.
