The three layers of multi-language personalization
Multi-language personalization is not just translating "Add your name" into French. It's three separate layers: (1) UI label translation via Translate & Adapt, (2) customer input encoding — what characters the customer can type into the text field, and (3) POD partner glyph support — whether the print vendor's fonts can actually render what the customer typed. Skipping any of the three produces order-cancellation-level bugs (blank prints, boxed characters, engraving files that fail QC).
Layer 1: UI label translation with Translate & Adapt
Shopify's free Translate & Adapt app (installed on every Shopify plan) surfaces every string across your store — including product option labels, metafields, and app-set custom fields — into a translation editor. For personalization apps that follow Shopify's metafield conventions (Print It My Way does), all option labels appear in Translate & Adapt automatically. Merchants who use apps with non-standard string storage may need to translate labels inside the app's own settings.
Setup checklist:
1. Settings → Markets → add target markets (e.g., France, Germany, Japan)
2. Assign a domain / subfolder / subdomain per market
3. Settings → Languages → publish target languages
4. Install Translate & Adapt → auto-translate or manual per option label
5. Preview each market URL → verify option labels render translated
Layer 2: customer text-input encoding
The default text-input field on most personalization apps accepts UTF-8, which technically handles every writing system. In practice, three things break:
- Composed vs decomposed Unicode: "é" can be one codepoint (U+00E9) or two (e + combining acute). POD partners' file processors sometimes only accept one form. Normalize with
text.normalize("NFC")before submitting. - Emoji + zero-width joiners: customers paste "👨👩👧" (a family emoji made of joined codepoints). If your character-limit regex counts by UTF-16 code units, one emoji reads as 5-7 characters and the limit blocks legitimate names like "Jean-François" that use combining accents.
- Right-to-left mixed input: Arabic + Latin text in the same field breaks cursor placement in most stock inputs. Use
dir="auto"on the input.
Layer 3: POD partner glyph support
| POD partner | Latin | CJK (Chinese/Japanese) | Arabic / Hebrew | Cyrillic | Emoji |
|---|---|---|---|---|---|
| Printful | Full (500+ fonts) | Partial (Noto Sans JP + SC) | Yes (Noto Sans Arabic) | Yes (Noto Sans) | Blocked |
| Printify | Full | Partial (~15 CJK fonts) | Yes (~5 Arabic fonts) | Yes | Blocked |
| Gelato | Full | Full (Japan warehouse) | Yes | Yes | Blocked |
| Gooten | Full | Latin transliteration only | Not supported | Yes | Blocked |
| CustomCat | Full | Not supported | Not supported | Partial | Blocked |
Font fallback strategy
Load market-specific web fonts only for markets that need them. Loading Noto Sans JP on the US storefront wastes 1.2MB and hurts INP scores.
<!-- Load per-market via Shopify localization variable -->
{% if localization.language.iso_code == "ja" %}
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP&display=swap" rel="stylesheet">
{% elsif localization.language.iso_code == "zh-CN" %}
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC&display=swap" rel="stylesheet">
{% elsif localization.language.iso_code == "ar" %}
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+Arabic&display=swap" rel="stylesheet">
{% endif %}
Live preview across languages
Your live product preview canvas needs a font that supports the customer's input script. Most previews use Google Fonts (Inter, Roboto, etc.) which lack CJK glyphs. Detect the input's Unicode range on keyup and swap the preview font dynamically:
function detectFontForText(text) {
if (/[-ヿ一-鿿]/.test(text)) return "'Noto Sans JP', sans-serif";
if (/[一-鿿]/.test(text)) return "'Noto Sans SC', sans-serif";
if (/[-ۿ]/.test(text)) return "'Noto Sans Arabic', sans-serif";
return "'Inter', sans-serif";
}
Character limits per script
English name field ~20 chars. Chinese name field 8 chars (kanji are ~2.5x wider). Arabic 15 chars (letters connect and take more physical space). Set per-language maxlength to prevent print files from clipping.
Frequently asked questions
How do I translate Shopify personalization option labels?
Use Shopify's free Translate & Adapt app. Option labels stored via standard metafields appear in the translation editor automatically. For apps with non-standard string storage, translate inside the app's own settings.
What character encoding do Shopify personalization fields use?
UTF-8 by default. This covers every writing system, but normalize input with text.normalize("NFC") before submitting to POD partners — some fulfillment systems reject decomposed Unicode forms.
Can I offer Japanese / Chinese / Arabic name engraving?
Yes — Printful, Printify, and Gelato all support CJK and Arabic glyphs. Gooten and CustomCat do not. Verify your POD partner's supported scripts before enabling those languages, and load a matching Noto Sans font per market.
Why does my Japanese customer's engraving come back blank?
Most common cause: the preview font on the storefront doesn't include CJK glyphs, so what the customer typed rendered as "tofu" (blank boxes), and your POD partner's file processor rejected it. Load Noto Sans JP for Japanese-market shoppers, and pre-render the preview to PNG before submitting to POD.
How do I set per-market character limits for personalization text?
Load a per-language maxlength based on localization.language.iso_code. Chinese: 8-10 chars, Japanese: 10-12 chars, Arabic: 12-15 chars, Latin scripts: 20 chars. Character widths differ dramatically across scripts.
Does Shopify Markets work with personalization apps?
Yes if the app stores its labels in Shopify metafields (Print It My Way, Bold Options, Infinite Options all do). Translate & Adapt then handles UI localization automatically.
How do I handle right-to-left text input for Arabic personalization?
Add dir="auto" to the input element — the browser detects script direction and orients the cursor correctly. For the storefront layout, use CSS logical properties (margin-inline-start instead of margin-left) so the same theme works for both LTR and RTL markets.
Best Shopify app for multi-language personalization?
Print It My Way for Translate & Adapt compatibility, per-market fonts, and CJK/Arabic-aware preview rendering. Combined with Shopify Markets (native) for storefront translation.
Related reading
- RTL options display — Arabic and Hebrew layout
- Hreflang variant URLs — SEO for multi-language stores
- Per-market variants — variant differences across markets
- Localized swatches — market-specific color options
Try it free on Shopify
Print It My Way's permanent Free plan supports Shopify Markets, Translate & Adapt integration, and per-market fonts including CJK and Arabic.
Install Print It My Way