LokalizaceInternacionalizaceAI překlad

Lokalizace e-mailů: jak překládat kampaně ve všech hlavních ESP

Každá e-mailová platforma přistupuje k jazykům jinak. Některé překládají za vás, jiné vám nabídnou prázdná pole pro jazykové mutace a v jedné si dokonce musíte psát logické podmínky sami. Tady je přehled toho, jak k tomu přistupují Braze, Customer.io, Klaviyo, Mailchimp, Iterable a Brevo, a návod, jak přeložit texty, aniž byste si rozbili Liquid.

Mariia Ivakhnenko
Mariia Ivakhnenko23 min čtení
Na této stránce

Věnuji se lifecycle marketingu, takže jsem v editorech kampaní strávil už pořádný kus života. Lokalizace e-mailů byla přitom věc, kterou jsem neustále podceňoval. Přeložit landing page je úkol, který má vždy stejnou podobu. Ale přeložit e-mailovou kampaň? To je v každém nástroji úplně jiná disciplína, protože každá platforma si po svém definovala, co to vlastně ten „jazyk“ je.

Některé platformy texty přeloží za vás. Jiné vám připraví prázdná pole pro různé jazykové mutace a čekají, že je vyplníte. A jedna po vás dokonce chce, abyste logické větvení psali přímo do těla e-mailu. U všech ale číhá stejné nebezpečí: vaše texty jsou plné šablonové syntaxe, která se z překladu musí vrátit naprosto nedotčená, znak po znaku. Jinak se celá rozesílka rozbije.

Tento průvodce popisuje, jak fungují jednotlivé hlavní platformy, jak z nich texty dostat ven a zase zpátky a které části celého procesu jsou všude stejné.

Tři způsoby, jak e-mailové platformy pracují s jazyky

Než se pustíme do podrobností u jednotlivých platforem, je dobré vědět, se kterou ze tří architektur máte co do činění. Ta totiž určuje celý váš pracovní postup a většinou ji nemůžete nijak změnit.

ArchitekturaCo vám platforma poskytneCo dodáváte vyPlatformy
Překládá za vásStrojový překlad přímo v editoru, jazykové varianty generované z výchozí verzeRevize, opravy, seznam nepřekládaných výrazůKlaviyo, Customer.io, Brevo
Nabídne vám pole pro jazykové mutaceOznačený obsah, strukturu pro varianty, export a import přes CSV nebo APISamotné překladyBraze, Iterable
Nedá vám nicMerge tagy a podmínkyVšechno, zapsané jako logické větvení v těle e-mailuMailchimp

V prostředním řádku se nachází většina seriózních vícejazyčných programů a právě jemu věnuje tento průvodce nejvíce prostoru, protože moment, kdy vám „platforma nabídne prázdnou mřížku jazykových mutací“, je přesně tou chvílí, kdy už musíte mít nastavený jasný proces překladu.

Lokalizace e-mailů v Braze

Braze využívá model „označ a doplň“ a jeho syntaxe je ze všech zmíněných platforem nejvýraznější. Každou část e-mailu určenou k překladu pak stačí uzavřít do Liquid tagu s ID:

{% translation greeting %}Hello!{% endtranslation %}

Základní formát je {% translation vase_id %}výchozí text{% endtranslation %}, přičemž ID musí být v rámci zprávy unikátní. K obalení výběru tagem slouží v editoru klávesová zkratka (Cmd+Alt+L na macOS, Ctrl+Alt+L ve Windows). Braze sám o sobě nic nepřekládá: překlady mu dodáváte nahráním CSV nebo přes API pro překlady, které je v době psaní tohoto textu ve fázi předběžného přístupu.

Dokumentované limity začnou hrát roli, jakmile kampaň nabere reálné obrysy:

LimitHodnota
Překladové tagy na zprávu200
Znaků na výchozí text2 000
Překlady na jednu jazykovou mutaci409 600 bajtů (přibližně 409,6 KB)
Jazykové mutace na pracovní prostor200

Vnořené překladové tagy nejsou podporovány. Lokalizace se přebírá z uživatelského profilu a nastavuje se v sekci Settings → Localization Settings, a to buď z výchozích atributů language a country, nebo z vlastního atributu. Pokud jsou nastaveny oba, má přednost vlastní atribut.

Než začnete, je dobré vědět o dvou specifikách platformy Braze:

Vložení URL do tagu naruší sledování prokliků, pokud uzavřená část nekončí znakem ? nebo &. Braze toto náhradní řešení přímo dokumentuje:

<a href="https://{% translation id_1 %}example.com{% endtranslation %}?">Shop Now</a>

Neotevírejte překladové CSV v Excelu. Samotná dokumentace Braze před tím varuje kvůli problémům se zobrazením jiných než anglických znaků. Je to vůbec nejčastější způsob, jak se lokalizace v Braze nepozorovaně poškodí, a na vině není Braze, ale Excel: ten se snaží odhadnout kódování CSV a často se plete.

Content Blocks platformy Braze mohou mít vlastní překlady, což je způsob, jak lokalizovat sdílené zápatí jednou namísto v každé kampani zvlášť. Odkazujte na ně jako na {{content_blocks.${vas_blok}}}; bloky vložené přes Liquid zůstávají propojené a aktualizují se automaticky, zatímco ty vložené přes rozbalovací nabídku v editoru nikoli. Pokud blok nemá překlad pro danou lokalitu, vykreslí se v původním jazyce, místo aby zobrazení selhalo.

Pokud raději sázíte na větvení než na tagy, Braze nabízí i cestu po vlastní ose:

{% if ${language} == 'en' %}
English content
{% elsif ${language} == 'es' %}
Spanish content
{% else %}
Fallback content
{% endif %}

Mějte na paměti, že uvnitř Liquid tagu se atribut uvádí samostatně jako ${language}, zatímco v samotném textu zprávy musí být v závorkách: {{${language}}}. Braze doporučuje vždy zahrnout i větev {% else %}, protože někteří uživatelé nemusí mít nastavený žádný jazyk, mohou používat nepodporovaný jazyk nebo mít zařízení, u kterého nelze jazyk rozpoznat.

Dokumentace: Lokalizace v Braze

Lokalizace e-mailů v Customer.io

Customer.io zvolilo opačný přístup: lokalizace je nativní, probíhá přímo v editoru zpráv a k dispozici je i tlačítko pro automatický překlad pomocí AI. Zprávu vytvoříte ve výchozím jazyce a pak přidáváte jazykové varianty, aniž byste museli kampaň větvit. Funguje to pro e-maily, SMS, WhatsApp, push notifikace i zprávy v aplikaci.

Atribut pro jazyk si můžete pojmenovat sami. V sekci Workspace Settings → Language settings určíte, ve kterém atributu profilu je jazyk uložen – může to být language, locale nebo cokoli, co už vaše CRM používá. Hodnoty musí být buď dvoumístný kód (en), nebo dvojice jazyk-region oddělená spojovníkem (en-US). Na velikosti písmen nezáleží, takže es-MX i es-mx fungují stejně, ale spojovník je povinný.

Automatický překlad pokrývá tělo zprávy, předměty i preheadery. Na co už ale nestačí, je tento seznam – ten si raději připíchněte na nástěnku:

  • Obrázky (ačkoliv alternativní texty přeložit dokáže)
  • Rozvržení e-mailů v rich-textovém editoru a v editoru kódu
  • Statický text v Liquidu, hodnoty atributů a hodnoty filtrů
  • Snippety
  • Text ve vlastních komponentách, pokud komponentu nejprve neodpojíte.

Ten třetí bod si zaslouží příklad, protože je ze všech nejzáludnější. Samotná dokumentace k lokalizaci od Customer.io používá tento řádek:

Bonjour {{ customer.first_name | default:"ami" }}

Slovo ami je záložní hodnota, která se zobrazí každému, u koho v databázi chybí křestní jméno. Je to reálný text, který uvidí čtenář, a protože se nachází uvnitř filtru Liquid, automatický překlad se ho ani nedotkne. Když to pošlete německému publiku, část vašich příjemců bude oslovena jako ami. Každý záložní řetězec v každém filtru default: se musí pro každou variantu přeložit ručně a rozhraní vám to nijak nepřipomene.

Dvě další omezení, se kterými je třeba počítat: překlady se neaktualizují automaticky, když změníte výchozí šablonu, a A/B testy s překlady fungují u jednorázových rozesílek, ale nikoli u automatizací nebo hromadných zpráv spouštěných přes API.

Snippety si zaslouží vlastní poznámku. Představují mechanismus pro opakovaně použitelný obsah ({{snippets.your_snippet}}, každý má ve výchozím nastavení 16 KB) a automatický překlad je přeskakuje. Customer.io doporučuje vkládat podmínky přímo do samotného snippetu:

{% if customer.language == 'fr' %}
  Se désabonner
{% elsif customer.language == 'de' %}
  Abmelden
{% else %}
  Unsubscribe
{% endif %}

Nastavení v Customer.io tak ve výsledku obvykle vypadá jako kombinace nativních variant pro těla zpráv a ručně spravovaných podmínek uvnitř každého sdíleného snippetu. To je dobré vědět, než začnete předpokládat, že AI tlačítko pokryje úplně všechno.

Dokumentace: Lokalizace v Customer.io

Lokalizace e-mailů v Klaviyo

Funkce v Klaviyo se nazývá Smart Translations a umožňuje strojový překlad obsahu zpráv do více než 60 jazyků přímo v editoru kampaní nebo flow. Povolíte ji v části Settings → Account → Translation pomocí přepínače „Translate messages“. Vyžaduje placený účet a není k dispozici v bezplatné zkušební verzi.

Klaviyo v dokumentaci uvádí konkrétní seznam prvků, které se překládají automaticky: textové bloky, popisky a alternativní texty. Předměty e-mailů na něm ale nenajdete, takže si to ve svém účtu raději ověřte, než začnete předpokládat, že je kampaň kompletně pokryta.

Určování jazyka standardně využívá pole Locale v profilu; pokud není k dispozici, použije se jako záloha Country nebo Language. Klaviyo přijímá kódy BCP-47 (en-GB, es-ES) a také prosté textové hodnoty jako English nebo French.

Práci s Klaviyo zpříjemňují dvě věci. První z nich je seznam „Do Not Translate“: názvy značek, produktů a jakékoli termíny, na které model nemá nikdy sahat, definované jednou na úrovni účtu. Většina platforem nic podobného nenabízí, a přitom je to právě ten rozdíl mezi tím, zda váš název produktu přežije deset jazykových mutací, nebo se z něj stane deset různých slov.

Druhou výhodou je nabídka pro přepsání u jednotlivých prvků. U každého přeloženého prvku máte k dispozici volby Re-translate, Match source, Edit a Ignore a mezi jazyky se můžete přepínat pomocí šipek v horní části editoru. Celá revize se tak promění v pouhé procházení označených položek namísto zdlouhavého pročítání celého textu.

Klaviyo také podporuje export a import přes CSV, což je přesně to, co potřebujete, pokud využíváte překladatele nebo externí nástroje. V sekci Translate → menu akcí najdete položku Export CSV, a to buď ve formátu Smartling, nebo Simple. Sloupce jsou block_id (unikátní identifikátor pro každý řetězec k překladu), source (původní text) a jeden sloupec pro každý jazyk pojmenovaný kódem daného jazyka. Pravidla jsou přísná a logická: neupravujte ani nemažte hodnoty block_id, nepřidávejte řádky a neměňte hodnoty source.

Jedna věc, která lidi přicházející z Braze nebo Customer.io překvapí: Klaviyo nepoužívá Liquid. Využívá syntaxi šablon Django.

{% if person|lookup:'Loyalty Points' > 150 %}
Hey VIP! You've always got free shipping & free returns
{% elif person|lookup:'Loyalty Points' > 0 %}
You have {{ person|lookup:'Loyalty Points' }} points, and you just need 150 to become a VIP!
{% else %}
Have you heard about our VIP program? Join today on our website to start earning rewards.
{% endif %}

Tagy vypadají natolik podobně jako v Liquidu, že se snadno necháte zmást – a pak vám rozdíl mezi elif a elsif zkazí celé odpoledne. Personalizace se záložní hodnotou se zapisuje jako {{ first_name|default:'friend' }}.

Dokumentace: Klaviyo Smart Translations · Syntaxe Django

Lokalizace e-mailů v Mailchimpu

Mailchimp nemá žádnou nativní funkci pro vícejazyčné kampaně. Nabízí pouze podmíněné merge tagy a dokumentovaný postup spočívá v tom, že do jednoho e-mailu vložíte všechny jazykové verze a pomocí podmínek určíte, která se má zobrazit.

*|IF:MC_LANGUAGE=es|*
Spanish content here.
*|ELSEIF:MC_LANGUAGE=de|*
German content here.
*|ELSE:|*
Display English content for everyone else.
*|END:IF|*

*|MC_LANGUAGE|* obsahuje kód jazyka kontaktu a *|MC_LANGUAGE_LABEL|* jeho čitelný název. Mailchimp se pokouší detekovat jazyk podle prohlížeče odběratele; nastavit ho můžete i u jednotlivých kontaktů v sekci profil → Settings → Language, případně hromadně při importu. Nezapomeňte, že *|END:IF|* uzavírá jak bloky IF, tak IFNOT.

Právě toto jediné omezení bývá obvykle rozhodující. Lokalizovaný e-mail, jehož předmět je v nesprávném jazyce, totiž ztratí šanci na otevření dříve, než vůbec začne záležet na jeho obsahu. Většina týmů, které v Mailchimpu používají více než dva jazyky, tak stejně nakonec skončí u samostatných kampaní pro každý jazyk zvlášť – v takovém případě jim pak metoda s podmíněnými merge tagy nepřináší vůbec nic. Je dobré to vědět už ve fázi plánování, a ne až po vytvoření šablony.

Dokumentace: Překlad obsahu v Mailchimpu

Lokalizace e-mailů v Iterable

Iterable nabízí plnohodnotnou funkci pro práci s lokalitami a jeho dokumentace je osvěžujícím způsobem přímočará v tom, co to obnáší a co už ne:

Lokality obsah nepřekládají.

Získáte připravenou strukturu pro varianty, překlady už jsou na vás. Odměnou za to je, že všechny varianty sdílejí jedno templateId, takže vaše metriky zůstanou sjednocené a nebudou se tříštit mezi deset samostatných šablon. Každý, kdo se někdy pokoušel vyhodnocovat kampaň rozdělenou na kopie podle jazyků, potvrdí, že už jen kvůli tomu se nastavení vyplatí.

Dané pole se musí jmenovat přesně locale. Iterable výslovně upozorňuje, že pokud ho pojmenujete languagePreference nebo jakkoli jinak, nedokáže uživatele k variantám přiřadit. Názvy lokalit se řídí standardy ISO-639 a ISO-3166 (fr-CA, fr-FR), podporovány jsou i třípísmenné kódy a lokality nelze po vytvoření přejmenovat, takže si ujasněte systém pojmenování dříve, než jich vytvoříte dvacet. Pokud je pole lokality prázdné, použije se výchozí lokalizace; v případě neshody rozhoduje nastavení na úrovni projektu, zda se odeslání přeskočí, nebo se odešle výchozí verze.

Iterable také výslovně odrazuje od vytváření vlastních řešení:

Ačkoli je Iterable flexibilní platforma a obsah ve více jazycích v ní lze vytvořit i pomocí Handlebars nebo Catalogu, nejedná se o osvědčené postupy pro lokalizaci.

Šablonování využívá Handlebars a u názvů polí záleží na velikosti písmen. Ve WYSIWYG editoru vás může potrápit jedna zvláštnost: podmínky musí být uzavřeny v HTML komentářích, jinak je editor poškodí.

<!--{{#if activeUser}}-->
    <div>Hi active user!</div>
<!--{{else}}-->
    <div>Hi inactive user</div>
<!--{{/if}}-->

Pro export a následný import slouží endpoint GET /api/templates/email/get, který pro potřeby překladatelů stáhne obsah šablony.

Dokumentace: Iterable ve více jazycích

Lokalizace e-mailů v Brevu

Brevo patří k platformám, které překládají za vás, a v této konkrétní funkci je nejpřímějším konkurentem Mailchimpu. Vytvoříte jednu kampaň, která se přizpůsobí jazyku nebo kódu země u daného kontaktu, kliknete na Add languages a Brevo kampaň pro každý jazyk duplikuje, abyste ji mohli přeložit – buď ručně, nebo pomocí AI asistenta Aura.

Možnosti toho, co lze pro jednotlivé jazyky měnit, jsou širší než u většiny konkurence: jméno odesílatele, předmět, náhledový text i samotný design e-mailu, a k tomu navíc adresa pro odpověď, sledování v Google Analytics či vlastní stránka pro odhlášení. Právě předmět je klíčový, protože to je přesně to, co Mailchimp nezvládá.

Dokumentovaná omezení: nejsou podporovány překlady založené na souborech (takže žádný export a import CSV, což Brevo diskvalifikuje, pokud využíváte externí překladatelské služby), funkce nefunguje u A/B testovacích kampaní a u uložených sekcí je potřeba vytvořit verzi pro každý jazyk zvlášť. Kontakty, jejichž jazykový atribut neodpovídá žádnému z nastavených jazyků, obdrží výchozí verzi.

Dokumentace: Vícejazyčné kampaně v Brevu

Liquid, Handlebars a merge tagy: části, které musí zůstat zachovány

Bez ohledu na to, jakou platformu používáte, má samotný krok překladu jeden zásadní požadavek. Váš text obsahuje syntaxi šablon a každý její znak se musí vrátit v naprosto stejném tvaru, v jakém byl vložen. Přeložený tag {% endif %} by způsobil chybu při odesílání.

Takhle vypadá syntaxe na platformách popsaných v tomto průvodci:

PlatformaJazykPersonalizacePodmínka
BrazeLiquid{{${first_name}}}{% if %} / {% elsif %} / {% else %} / {% endif %}
Customer.ioLiquid{{customer.first_name}}{% if %} / {% elsif %} / {% else %} / {% endif %}
KlaviyoDjango{{ first_name }}{% if %} / {% elif %} / {% else %} / {% endif %}
MailchimpMerge tagy*|FNAME|**|IF:X|* / *|ELSEIF:X|* / *|ELSE:|* / *|END:IF|*
IterableHandlebars{{firstName}}{{#if}} / {{else}} / {{/if}}
BrevoŠablonovací jazyk Brevo{{ contact.FIRSTNAME }}{% if %} / {% else %} / {% endif %}

Za téměř všechny problémy, které zde nastávají, mohou tři typy chyb.

Model přeloží token. Vrátí se vám {{ prénom }} nebo {% si %} a odesílání selže nebo se vykreslí doslovný text. Každý kvalitní nástroj tokeny maskuje dříve, než se text dostane k modelu, a po překladu je obnoví, takže je model nikdy nevidí jako slova.

Model token přesune. Slovosled se v různých jazycích přirozeně liší, takže je logické, že se token posunout. Problém nastává, když se ocitne v nesprávné části věty nebo když {% if %} a jeho {% endif %} skončí v jiném pořadí. Na pozici totiž záleží. Řešením je zkontrolovat, zda se sada tokenů na výstupu shoduje s tou na vstupu, a pokud ne, nechat blok zpracovat znovu.

Změní se počet tokenů. Nebezpečný je zejména vynechaný token, protože e-mail se sice vykreslí, ale s chybějícím jménem nebo chybějící větví. Proto je počítání důležitější než pouhá kontrola od oka.

A pravidlo, které platí pro všechny tři: podmíněné větve jsou samostatné řetězce. Na tomto řádku máme dva nezávislé kusy textu, a pokud je překladateli nebo modelu předložíte jako jeden nerozlišený celek, odvede na obou horší práci, než kdyby dostal každou část zvlášť a s kontextem:

{% if ${loyalty_tier} == 'gold' %}Gold members get an extra 10%.{% else %}Join Gold for an extra 10%.{% endif %}

HTML e-maily a tabulky řetězců jsou dvě různé disciplíny

Na této cestě vás čeká rozcestí, které rozhodne o celém vašem nastavení – a většina lidí ho objeví, až když jsou v půlce.

Některý obsah e-mailu tvoří dokument: HTML šablona, vygenerovaný e-mail, zkrátka něco, co má svou strukturu a návaznost a čte se odshora dolů. Takový obsah chcete překládat jako souvislý text, protože nadpis a tělo pod ním k sobě patří a překladatel, který vidí obojí, se rozhoduje lépe než ten, kterému ukážete každou část zvlášť.

Jiný obsah e-mailu tvoří tabulka řetězců: seznam s klíči, ve kterém každý řádek stojí samostatně. cta_button, subject_line, footer_unsub. K nim se vážou metadata, která jsou důležitější než samotný text: klíč, který se nesmí nikdy změnit, poznámka ke kontextu a často i limit znaků, protože příliš dlouhý předmět se v doručené poště ořízne.

CSV soubory z platforem Braze a Klaviyo i veškeré formáty lokalizačních souborů ze světa softwaru (gettext PO, XLIFF) jsou tabulky řetězců. Vaše HTML šablony jsou dokumenty. Budete-li s tabulkou řetězců zacházet jako s dokumentem, přijdete o klíče; budete-li s dokumentem zacházet jako s tabulkou řetězců, rozsekáte souvislý text na nesouvisející fragmenty.

Právě proto jsme v nástroji Transept vytvořili podporu pro soubory s řetězci jako samostatnou cestu, místo abychom ji jen začlenili do importu dokumentů. CSV s texty e-mailů se načte jako mřížka s klíčem, zdrojem a překladem, kde u každého řádku vidíte limit znaků jako živé počítadlo a připojenou poznámku ke kontextu.

Mřížka řetězců v nástroji Transept zobrazující importované CSV e-mailové kampaně. Obsahuje řádky pro subject_line, preheader, hero_headline, hero_body, cta_button, loyalty_line, shipping_note a footer_unsub; ve zdrojovém sloupci jsou zachovány personalizační značky Braze a podmínky Liquid, vpravo jsou německé překlady a pod každým z nich počítadla znaků jako 46/90 a 8/18.

Důležité je, aby soubor odcházel ve stejné podobě, v jaké byl přijat. Exportujete původní soubor v přeložené verzi, se všemi klíči a sloupci na místech, kde je platforma očekává, místo abyste exportovali něco, co byste pak museli ručně upravovat.

Co jsme zjistili při vývoji podpory e-mailů v Transeptu

Import souborů s řetězci jsme zavedli přesně pro tento typ workflow a během celého procesu jsme narazili na věci, o kterých jsem nikde neviděl ani zmínku. Jde o naše vlastní poznatky z našeho kódu a testování.

„50% off“ je technicky vzato konverze printf

Softwarové řetězce často používají zástupné symboly printf: %s, %d, %1$s. Pokud je před překladem maskujete, běžný regulární výraz akceptuje celou sadu příznaků printf, což zahrnuje i příznak mezery (% d vypíše mezeru před kladnými čísly). Je to validní printf a jeho akceptování je obhajitelné.

Pro marketingové texty je to však katastrofa. Pokud je příznak mezery povolen, 50% off obsahuje shodu: % o se interpretuje jako osmičková konverze s příznakem mezery. Stejně tak 100% organic. A stejně tak Up to 70% off, což je vůbec nejčastější obrat v propagačních e-mailech.

Vyzkoušeli jsme oba způsoby:

VstupStriktní vzorS příznakem mezery
50% sleva na první objednávkužádná shoda% o
100% organická bavlnažádná shoda% o
Ahoj %s, ušetřili jste %d%%%s, %d, %%%s, %d, %%

Maskování % o promění váš řádek se slevou v zástupný symbol a modelu naservíruje zkomolenou větu. Příznak mezery záměrně nepodporujeme a o nic tím nepřicházíme: žádná skutečná tabulka řetězců ho totiž nepoužívá.

Personalizační tag platformy Braze má tři uzavírací složené závorky

Na tohle jsme přišli při psaní tohoto průvodce, což je pádný argument pro to, proč průvodce vůbec psát.

Syntaxe Braze je {{${first_name}}}. Spočítejte si ty uzavírací závorky: jedna patří k samotnému atributu (}), další dvě uzavírají výstupní tag Liquidu. Tři za sebou.

Téměř každý tokenizer pro Liquid vyhledává „líně“ (non-greedily) až k prvnímu výskytu }}. U řetězce {{${first_name}}} se tak zastaví o jednu závorku dříve: zachytí {{${first_name}} a v překládaném textu nechá viset osamocenou }. Token se tváří jako zpracovaný, ale ta zbloudilá závorka se k modelu dostane jako běžný text a vrátí se buď posunutá, zdvojená, nebo úplně zmizí.

{{${first_name}}}, your spring sale starts now

  non-greedy scan  →  token: {{${first_name}}     leftover: "}, your spring sale starts now"
  brace-aware scan →  token: {{${first_name}}}    leftover: ", your spring sale starts now"

Ten náš dělal přesně to. Chybu jsme našli a opravili tak, aby v rámci tokenu umožňoval jednu úroveň vnoření, a do testovací sady jsme přidali i přesnou syntaxi Braze. Pokud si spravujete vlastní e-mailové nástroje, otestujte je konkrétně na řetězci {{${attribute}}} – běžná forma {{ attribute }} totiž funguje bez problémů a chybu dokonale maskuje.

Uvozovky uvnitř zástupných symbolů rozbíjejí odpovědi v JSONu

Když modelu pošlete dávku řetězců a omezíte jeho odpověď na formát JSON, neescapovaná uvozovka " uvnitř řetězce v odpovědi tento řetězec předčasně ukončí, čímž se zbytek dávky zahodí. Narazili jsme na to u zástupných symbolů, které obsahovaly atributy v uvozovkách, a u jednoho z modelů se nám to podařilo zreprodukovat přibližně v 58 % pokusů.

Řešení nespočívá v lepších instrukcích pro escapování v promptu, ale v úpravě přenosového formátu na variantu bez uvozovek. Tím chybu zcela vyloučíte: model uvidí pouze zástupné symboly bez uvozovek a jejich kanonická podoba s uvozovkami se obnoví až následně. Snaha přimět model pomocí promptu, aby JSON nerozbíjel, sice většinou funguje, ale to je ten nejhorší možný profil spolehlivosti – chyb si totiž vůbec nemusíte všimnout.

„Fuzzy“ záznamy jsou signál, nikoli překlad

Pokud vaše řetězce pocházejí z PO souborů nástroje gettext, záznamy v nich nesou příznak fuzzy, což znamená: „toto bylo automaticky spárováno, člověk to nepotvrdil“. Považovat fuzzy záznamy za hotové překlady by znamenalo importovat hromadu dohadů jako schválenou práci.

Při úvodním plnění (seeding) je vynecháváme, překládáme je znovu a při exportu příznak fuzzy odstraňujeme, protože v té fázi už je záznam zkontrolovaný a příznak už neodpovídá skutečnosti.

Osvědčené postupy pro lokalizaci e-mailových kampaní

Návyky, které odlišují hladký průběh od bolestivého procesu, seřazené zhruba podle toho, kolik trápení vám ušetří.

Kódy národního prostředí si určete jednou provždy na úrovni profilu. Ať už jsou dvoupísmenné, nebo s určením regionu, musí být všude stejné. Většina případů, kdy se „překlad nezobrazil“, je totiž způsobena tím, že profil s kódem nl-BE narazí na zprávu označenou jako nl.

Doplňujte ke každému řetězci kontext dříve, než ho kamkoli odešlete. Překladatel, který v tabulce uvidí Shop the sale, netuší, zda jde o tlačítko, nadpis nebo odkaz, ani to, že se musí vejít do osmnácti znaků. Každá platforma, která nabízí pole pro kontext nebo popis, po vás chce právě tu věc, která nejvíce zvyšuje kvalitu výsledku – a přesto ho téměř nikdo nevyplňuje.

Berte limity znaků jako zásadní omezení. Němčina bývá zhruba 1,5krát až 2krát delší než angličtina. CTA, které se v angličtině vejde, v jiném jazyce přeteče, a předmět, který se vejde, se v doručené poště ořízne uprostřed slova. Informaci o limitu předávejte spolu s řetězcem, aby překladatel viděl počítadlo.

Udržujte si seznam termínů, které se nepřekládají. Patří sem názvy produktů, značek a funkcí. Klaviyo má tuto funkci vestavěnou; u jiných platforem ji najdete ve svém glosáři. V každém případě si jej sepište ještě před prvním spuštěním, a ne až ve chvíli, kdy název svého produktu najdete v šesti různých variantách.

Překládejte i náhradní varianty. Každý filtr default:, každou větev {% else %} i každé „Dobrý den“, které se zobrazí, když chybí jméno. Právě tyto řetězce se v náhledu nikdy neobjeví, takže uniknou kontrole, a přitom odcházejí příjemcům, o kterých toho víte nejméně.

Využívejte svá rozhodnutí opakovaně napříč rozesílkami. Texty kampaní se neustále opakují: stejná patička, stejný řádek pro odhlášení, každý rok stejné sezónní ladění. Díky překladové paměti vyřešíte překlad „Nakupujte ve výprodeji“ jednou a ten pak zůstane stejný ve všech dalších kampaních, místo aby se text roztříštil do tří variant jen proto, že se při třech různých příležitostech rozhodlo pokaždé jinak.

Před ostrým odesláním proveďte testovací rozesílku v každém jazyce. Nechte si pro každé národní prostředí vygenerovat skutečnou šablonu s reálným profilem. Podmínky, které v editoru vypadají v pořádku, mohou selhat způsobem, který odhalí až samotné vygenerování – a právě v tomto kroku zachytíte nepřeloženou náhradní variantu nebo nefunkční větev, dokud vás to ještě nic nestojí.

Často kladené otázky

Co je lokalizace e-mailů?

Lokalizace e-mailů je proces přizpůsobení e-mailové kampaně jinému jazyku a trhu: textů, předmětu a preheaderu, náhradních variant personalizace a formátovacích zvyklostí cílového prostředí. Od běžného překladu se liší tím, že e-mail obsahuje syntaxi šablon (slučovací značky, podmínky v Liquidu či Handlebars), která musí zůstat nedotčena, a zároveň musí překlad respektovat omezení, jako je například délka předmětu.

Které e-mailové platformy překládají kampaně automaticky?

Klaviyo (Smart Translations, 60+ jazyků), Customer.io (automatický překlad pomocí AI u e-mailů, SMS, WhatsAppu, push oznámení a in-app zpráv) a Brevo (prostřednictvím svého asistenta Aura) generují překlady přímo v editoru. Braze a Iterable poskytují připravenou strukturu pro národní prostředí, ale očekávají, že překlady dodáte sami. Mailchimp nemá žádnou nativní funkci pro vícejazyčné kampaně a spoléhá na podmíněné slučovací značky.

Lze v Mailchimpu přeložit předmět e-mailu?

Ne. Dokumentace Mailchimpu uvádí, že překlad předmětu není možný, protože v poli předmětu nefungují podmíněné slučovací značky. Chcete-li přes Mailchimp odesílat lokalizované předměty, musíte pro každý jazyk vytvořit samostatnou kampaň a segmentovat ji podle pole s jazykem kontaktu.

Jak zabránit tomu, aby překlad poškodil značky Liquid?

Maskujte tokeny dříve, než se text dostane k překladovému modelu, aby je nepovažoval za běžná slova. Poté je obnovte a před schválením výsledku ověřte, zda se sada tokenů na výstupu shoduje se vstupem. Kvalitu zlepšíte také tím, že každou podmíněnou větev přeložíte jako samostatný řetězec, místo abyste předávali celý řádek {% if %}...{% endif %} jako jeden celek. Každá větev se tak přeloží jako samostatná věta, kterou ve skutečnosti je.

Jaký je rozdíl mezi HTML e-mailem a tabulkou řetězců?

HTML e-mail je dokument: souvislý strukturovaný text, který je nejlepší překládat jako celek, aby se mezi nadpisem a tělem zprávy zachoval kontext. Tabulka řetězců je seznam s klíči, kde každý řádek stojí samostatně a obsahuje klíč, který se nesmí měnit, obvykle poznámku ke kontextu a často i limit počtu znaků. Exporty CSV z platforem Braze a Klaviyo, soubory gettext PO a formát XLIFF – to všechno jsou tabulky řetězců. Oba formáty vyžadují odlišné zacházení: pokud k tabulce řetězců přistupujete jako k dokumentu, ztratíte klíče, a pokud k dokumentu přistupujete jako k tabulce řetězců, roztříštíte souvislost textu.

Mám pro překlady použít export do CSV, nebo API platformy?

CSV je praktickou volbou, pokud překlad provádí člověk nebo externí dodavatel, a právě tento postup doporučují Braze a Klaviyo ve své dokumentaci. Využití API je lepší v případech, kdy se proces pravidelně opakuje nebo je objem dat tak velký, že se ruční manipulace se soubory stává úzkým hrdlem. Braze nabízí API pro překlady (v době psaní tohoto textu v rámci předběžného přístupu) a Iterable zpřístupňuje obsah šablon prostřednictvím GET /api/templates/email/get. Brevo nepodporuje ani jednu z těchto možností: nenabízí překlady založené na souborech, takže kampaně musíte překládat přímo v rozhraní.

Kolik jazyků může jedna e-mailová kampaň podporovat?

Záleží na platformě. Braze umožňuje až 200 národních prostředí na jeden pracovní prostor a 200 překladových značek na zprávu. Klaviyo díky funkci Smart Translations pokrývá přes 60 jazyků. Customer.io podporuje několik stovek kódů pro jazyky a regiony. V praxi bývá limitem málokdy samotná platforma; jde spíše o to, kolik jazyků dokážete udržet v aktuálním a prověřeném stavu při změnách zdrojového textu.

Autor

Mariia Ivakhnenko
Mariia IvakhnenkoSpoluzakladatelka

Spoluzakladatelka Transeptu. Tři tituly z anglického jazyka a literatury – Kyjev, Ostrava a rok v Salcburku – a rodilá Ukrajinka, která většinu svého spisovatelského života prožívá v angličtině. K AI se dostala jako prompt inženýrka, poté přešla k produktovému a lifecycle marketingu. Píše semifiktivní příběhy o skutečných lidech a neustále krouží kolem otázky, co se ztrácí mezi jazyky.