Unlocking Multilingual Abandoned Cart Notifications in Klaviyo

How to build high‑performing, compliant, and scalable abandoned‑cart systems that speak your customers’ language—literally.


Why this matters

When a customer abandons a cart, there’s a narrow window to recover revenue. If that message arrives in the wrong language—or worse, violates regional compliance rules—you lose both the sale and trust. Multilingual abandoned‑cart flows are no longer a nice‑to‑have for global brands; they’re the cost of entry.

At Sticky Digital, multilingual systems do three things exceptionally well: (1) detect language and intent, (2) speak like a human in that language, and (3) respect consent rules by country and channel. Done right, abandoned‑cart becomes a profit center that compounds lifetime value rather than a blunt instrument that racks up unsubscribes.

Want the broader view of how we work? Read Inside Sticky Digital: What It’s Like to Work With a Top Retention Marketing Agency.


Table of contents

  1. Principles for multilingual recovery that actually scale
  2. Klaviyo’s language signals: what’s reliable, what isn’t
  3. Data model: the lean multilingual blueprint
  4. Architecture options: split or dynamic?
  5. Build it: email flow, step‑by‑step (with code)
  6. Build it: SMS flow, step‑by‑step (with copy & compliance by region)
  7. Currency, catalog, and checkout localization
  8. QA plan, seed profiles, and failure modes
  9. Measurement: how to prove it’s working
  10. A/B testing roadmap
  11. Governance: consent, preference center, auditability
  12. Common patterns for Shopify (+ notes for SFCC/BigCommerce)
  13. Copy vault: ready‑to‑ship EN/ES emails & SMS
  14. Engineering appendix: template logic patterns
  15. Troubleshooting index
  16. Working with Sticky Digital

1) Principles for multilingual recovery that actually scale

  • One flow, many languages. Maintain a single Abandoned Cart flow. Localize inside the flow using conditional blocks or a translation dictionary.
  • Prefer explicit to inferred. A declared language_preference beats any inference. Fall back to Klaviyo’s $locale_language only when necessary.
  • Make consent jurisdiction‑aware. SMS consent rules differ by market. Save the how/where/basis of consent and branch legally.
  • Translate for meaning, not just words. Adapt offer framing, humor, and urgency to market norms.
  • Close the loop with CX. Cart issues often reflect UX blockers: shipping shock, duties, payment friction, or sizing.

For our approach to testing and iteration, see A/B Testing Your BFCM Offers.

2) Klaviyo’s language signals: what’s reliable, what isn’t

Use a tiered strategy to determine language:

  • Primary (explicit): language_preference (custom property) collected via forms, checkout, or account.
  • Secondary (system): $locale_language (e.g., en, es) and $locale_country (e.g., US, MX).
  • Tertiary (context): billing/shipping country, site language selector, or URL path (/es).

Rule of thumb: If language_preference exists, use it. Else use $locale_language. Else default to EN and invite a preference update via your footer or preference center.

For product context on why Klaviyo’s profile model matters, see: February 2025 Klaviyo Updates, June 2025 Klaviyo Updates, and Klaviyo Boston Highlights.

3) Data model: the lean multilingual blueprint

Minimal profile properties

  • language_preference (e.g., en, es, fr)
  • $locale_language and $locale_country (system)
  • sms_consent_country (e.g., US, MX)
  • subscriber_tier (for incentives, loyalty/subscription synergy)

Event coverage

  • Checkout Started with cart payload (images, titles, prices)
  • Placed Order
  • Active on Site (optional)

Build loyalty and subscription together for better recovery economics. See our Services.

4) Architecture options: split or dynamic?

Option A — One flow with dynamic content (recommended)

  • Single Abandoned Cart flow with a language split.
  • Use block‑level display conditions or a translation dictionary.
  • Pros: centralized throttles, holdouts, and simpler QA.

Option B — Separate flows per language

  • Duplicate the entire flow per language.
  • Pros: clear ownership per regional team.
  • Cons: heavy maintenance; fragmented testing.

5) Build it: email flow, step‑by‑step (with code)

Flow & filters

  • Trigger: Checkout Started
  • Flow filter: Has not Placed Order since Checkout Started
  • Suppression: opt_out_cart_recovery = true

Language split

{% set lang = person|lookup:'language_preference'|default:person|lookup:'$locale_language'|default:'en' %}

Create branches for es, en, fr, and a fallback.

Block‑level display conditions

{% set lang = person|lookup:'language_preference'|default:person|lookup:'$locale_language'|default:'en' %}
{% if lang == 'es' %}
  <!-- Spanish block content renders -->
{% endif %}

Translation dictionary pattern

{% set lang = person|lookup:'language_preference'|default:person|lookup:'$locale_language'|default:'en' %}
{% set t = {
  'en': {'subject':'You left something behind','headline':'Still thinking it over?','cta':'Resume your checkout','legal':'Prices and availability may vary.'},
  'es': {'subject':'Dejaste algo en tu carrito','headline':'¿Aún lo estás pensando?','cta':'Retomar compra','legal':'Los precios y la disponibilidad pueden variar.'},
  'fr': {'subject':'Vous avez oublié un article','headline':'Vous hésitez encore ?','cta':'Reprendre votre achat','legal':'Les prix et la disponibilité peuvent varier.'}
} %}
<h1>{{ t[lang].headline }}</h1>
<p>{{ t[lang].legal }}</p>
<a href="https://yourstore.com/cart">{{ t[lang].cta }}</a>

Language‑aware URLs

{% set base = 'https://yourstore.com' %}
{% set path = '/cart' %}
{% if lang == 'es' %}{% set path = '/es' + path %}{% endif %}
{{ base + path }}

6) Build it: SMS flow, step‑by‑step (copy & compliance)

Consent routing

  • Segments like “SMS Consent: ES‑Language” and “SMS Consent: EN‑Language”.
  • Gate sends by language and country (quiet hours & legal basis differ).

Copy patterns

EN (first touch):
You left something in your cart — want help finishing up? {{ "{{ cart_url }}" }}

ES (primer toque):
Dejaste algo en tu carrito — ¿te ayudo a terminar la compra? {{ "{{ cart_url }}" }}

For more SMS design and urgency frameworks, see our Templates & Assets.

7) Currency, catalog, and checkout localization

  • Route to the correct language version (e.g., /es) and pre‑select currency where supported.
  • Surface shipping estimates and duties early.
  • Show locally trusted payment methods to reduce friction.

8) QA plan, seed profiles, and failure modes

Seed pack

  • Create at least one seed per language‑country combo (e.g., es‑MX, en‑US, fr‑CA).

Scenarios

  • Abandon on /es, then browse / (EN): language should stick.
  • Consent set to EN but locale is ES: explicit property should win.
  • No language properties: default to EN and invite preference set.

Common failures

  • Mixed‑language messaging due to overlapping block conditions.
  • Buttons ignoring language path.
  • Hard‑coded currency.

9) Measurement: how to prove it’s working

Primary KPIs

  • Recovery rate by language
  • Revenue per recipient (RPR) by language and channel
  • Time‑to‑recover (median hours)
  • Unsubscribe/complaint rate by language

Secondary diagnostics

  • Click‑to‑checkout and completion rate
  • Reply rate (SMS)
  • % of profiles with declared language_preference

Decision rule example: If ES‑path RPR < EN‑path RPR by >20% after 10k sends, run a two‑cell copy test (tone vs. incentive).

10) A/B testing roadmap

Phase 1 — Message fit

  • Tone (warm vs. direct) per language
  • Subject line structure (urgency first vs. product first)
  • Incentive reveal timing (none vs. second touch)

Phase 2 — Offer calibration

  • Free shipping vs. %-off vs. add‑to‑cart perk
  • Return policy framing by region

Phase 3 — UX blockers

  • Shipping/duties disclosure
  • Size/fit guidance
  • Payment method logos by market

Deep dive method here: A/B Testing Your BFCM Offers.

11) Governance: consent, preference center, auditability

  • Capture source, timestamp, IP, country, and context (form/checkout), especially for SMS.
  • Localize the preference center; let users set language, channel, and frequency.
  • Keep DSAR‑friendly logs and consistent property naming.

Review our operating principles and security posture on the About page.

12) Common patterns for Shopify (+ notes for SFCC/BigCommerce)

Shopify

  • Use Shopify Markets for currency + language sub‑folders (e.g., /es).
  • Pass selected language into Klaviyo via web tracking; set language_preference when a user changes the selector.
  • Ensure cart/checkout URLs preserve language path.

SFCC / BigCommerce

  • Align on a single lang query param your cart recognizes and have Klaviyo append it.
  • Persist the param across sessions.

13) Copy vault: ready‑to‑ship EN/ES emails & SMS

Email 1 — Soft reminder (no incentive)

EN Subject: You left something behind
ES Asunto: Dejaste algo en tu carrito

EN Preheader: It’ll be here when you’re ready.
ES Preheader: Aquí estará cuando estés listo.

EN Body: Still thinking it over? Your items are saved, and checkout takes 30 seconds.
CTA: Resume your checkout

ES Cuerpo: ¿Aún lo estás pensando? Tus artículos están guardados y el pago toma 30 segundos.
CTA: Retomar compra

Email 2 — Value reinforcement (policy clarity)

EN Subject: Free returns, fast shipping — want to finish up?
ES Asunto: Devoluciones gratis, envío rápido — ¿terminamos tu compra?

EN Body: Most carts die over questions: shipping cost, returns, or sizing. Answers are here — and your items are still in stock.
ES Cuerpo: La mayoría de los carritos mueren por dudas: envío, devoluciones o tallas. Las respuestas están aquí — y tus artículos siguen en stock.

Email 3 — Gentle incentive (time‑boxed)

EN Subject: A small nudge to finish ✨
ES Asunto: Un empujoncito para terminar ✨

EN Body: Use code WELCOME10 at checkout in the next 24 hours.
ES Cuerpo: Usa el código WELCOME10 en las próximas 24 horas.

SMS set (EN/ES)

EN #1: You left something in your cart — need a hand? {{ "{{ cart_url }}" }}
ES #1: Dejaste algo en tu carrito — ¿te ayudo? {{ "{{ cart_url }}" }}

EN #2: Still want it? Your cart’s saved for 24 hours: {{ "{{ cart_url }}" }}
ES #2: ¿Aún lo quieres? Tu carrito se guarda 24 h: {{ "{{ cart_url }}" }}

14) Engineering appendix: template logic patterns

A) Safe language resolution

{% set lang = person|lookup:'language_preference'|default:person|lookup:'$locale_language'|default:'en' %}

B) Language‑aware subject lines

{% if lang == 'es' %}
  Dejaste algo en tu carrito
{% elif lang == 'fr' %}
  Vous avez oublié un article
{% else %}
  You left something behind
{% endif %}

C) Language‑aware URLs

{% set base = 'https://yourstore.com' %}
{% set path = '/cart' %}
{% if lang == 'es' %}{% set path = '/es' + path %}{% endif %}
{{ base + path }}

D) Segment examples

  • Language: Spanish — Properties about someone > language_preference equals es (OR $locale_language equals es).
  • SMS Consent + ES — Has SMS consent AND (language_preference = es OR $locale_language = es).

15) Troubleshooting index

  • Problem: Emails mixing languages.
    Fix: Ensure only one block evaluates to true; define lang once at top.
  • Problem: SMS not sending to ES market.
    Fix: Segment also by country; confirm valid consent in that locale.
  • Problem: Currency mismatch.
    Fix: Avoid hard‑coded currency; use market‑aware prices or currency‑neutral phrasing.
  • Problem: Links go to EN site from ES emails.
    Fix: Prepend /es based on lang; test with seeds.

16) Working with Sticky Digital

Multilingual abandoned‑cart is one slice of a full retention system. When you’re ready to scale beyond the first win—loyalty tiers that feed subscription, preference‑center orchestration, offer testing, and lifecycle analytics—our team can take you there.

  • Services & Audits — scope, build, and optimize email/SMS with loyalty + subscription together.
  • Case Studies — how retention work compounds CLV.
  • Contact — ready for a multilingual cart‑recovery build?
  • About — values, operating principles, and how we collaborate.

Related reading on our site:
Best Klaviyo Email Agencies for DTC Growth
Top Retention Marketing Agencies for Shopify Brands
Browse all DTC retention topics

Back to blog