FunkcePluginCeníkZdroje
Změnit jazyk
ZdrojeJak přeložit soubory XLIFF (Drupal, Symfony, Angular, iOS)

Jak přeložit soubory XLIFF (Drupal, Symfony, Angular, iOS)

SimplePoTranslate Team16. dubna 2026
Jak přeložit soubory XLIFF (Drupal, Symfony, Angular, iOS)

Vývojářka Drupalu minulý týden na Stack Overflow zveřejnila příběh, který se tisícekrát ročně odehrává v lokalizačních týmech podniků. Její tým exportoval soubor XLIFF o velikosti 40 MB ze svého Drupal webu. Otevřela ho v textovém editoru, vložila části do Google Translate, soubor znovu sestavila, importovala zpět do Drupalu – a polovina stránek se odmítla vykreslit, protože přeložené řetězce obsahovaly chybně formátovaný XML, uniklé znaky na špatných místech a rozbité tagy <g>, kde bylo zničeno inline formátování.

XLIFF je z dobrého důvodu podnikovým lokalizačním standardem. Je založen na XML, je nezávislý na nástrojích a podporuje bohatá metadata, která seriózní překladové projekty potřebují: stavy překladu, alternativní překlady, poznámky mezi překladateli a vývojáři a strukturované inline značky. Jeho samotná flexibilita však usnadňuje poškození a nástroje, které bezpečně pracují se soubory .po, často selhávají u XLIFF.

Tento průvodce vysvětluje, čím se XLIFF liší, proč ho obecné překladové přístupy rozbíjejí a jakým správným způsobem překládat soubory XLIFF pro Drupal, Symfony, Angular a iOS – čtyři platformy, kde se XLIFF v roce 2026 nejčastěji používá.

Co je XLIFF (a proč ho používají podnikové týmy)

XLIFF je zkratka pro XML Localization Interchange File Format. Je to standard OASIS navržený speciálně pro přesun překladového obsahu mezi nástroji – systémy pro správu obsahu, databázemi překladových pamětí, CAT nástroji a lokalizačními platformami. Na rozdíl od souborů Gettext .po (které ukládají ploché páry klíč-hodnota) nebo lokálních souborů JSON (které se libovolně vnořují), je XLIFF strukturovaný XML dokument se standardizovaným schématem.

XLIFF 1.2 vs XLIFF 2.0

V oběhu existují dvě verze a nejsou plně kompatibilní.

XLIFF 1.2 je starší a rozšířenější verze. Používá prvky <trans-unit> k obalení přeložitelného obsahu, s podřízenými prvky <source> a <target>. Inline formátování používá spárované tagy <g>, <x> a <bpt> / <ept>. Nástroj Translation Management Tool (TMGMT) Drupalu a mnoho starších platforem stále exportuje verzi 1.2.

XLIFF 2.0 je revize z roku 2014, jednodušší a čistší. Používá <unit> a <segment> s <source> a <target>. Inline značky používají <pc> (párovaný kód) a <ph> (zástupný symbol). Překladový komponent Symfony a moderní exporty iOS ve výchozím nastavení používají 2.0.

Překladový nástroj, který zpracovává 1.2, automaticky nezpracuje 2.0. Slovníky tagů jsou odlišné a pravidla pro escapování se mírně liší. Před výběrem překladové pipeline vždy zkontrolujte, kterou verzi vaše platforma exportuje.

Anatomie XLIFF jednotky

Minimální trans-unit XLIFF 1.2 vypadá takto:

<trans-unit id="msg_welcome" datatype="plaintext">
  <source>Welcome, <g id="1">%name%</g>!</source>
  <target state="needs-translation">Welcome, <g id="1">%name%</g>!</target>
  <note>Displayed on the homepage after login</note>
</trans-unit>

Tag <g id="1"> obaluje zástupnou proměnnou. Atribut state říká platformě, že tento řetězec potřebuje překlad. Tag <note> je nápovědou pro vývojáře. Překladatel, který rozumí XLIFF, by měl vytvořit:

<target state="translated">¡Bienvenido, <g id="1">%name%</g>!</target>

Překladatel, který soubor považuje za prostý text, může vytvořit kteroukoli z těchto poškozených variant:

<target>¡Bienvenido, <g id="1">%nombre%</g>!</target>
<target>¡Bienvenido, &lt;g id="1"&gt;%name%&lt;/g&gt;!</target>
<target>¡Bienvenido, %name%!</target>

Každá z nich narušuje import odlišným způsobem. První přejmenuje proměnnou. Druhá unikne XML. Třetí zcela odstraní formátovací tag.

Špatná řešení (Proč nemůžete jen tak překládat XML)

Většina týmů začíná se stejnými třemi přístupy a stráví několik dní, než se vzdá.

Předání XLIFF obecné AI

Zkopírujte soubor, vložte ho do Claude nebo ChatGPT, požádejte o překlad. Model obvykle odvede rozumnou práci s textem, ale tagy XLIFF zpracovává nekonzistentně. Někdy zachová tagy <g>, někdy přeloží atribut id, jindy je zcela odstraní. Validace selže. Váš import vyhodí chyby parsování XML.

Použití CAT nástroje bez podpory XLIFF

Nástroje jako Poedit jsou vytvořeny pro formát .po. Mohou otevřít XLIFF, ale zacházejí s ním jako s obecným textovým kontejnerem. Inline tagy nejsou uzamčeny. Zástupné symboly nejsou chráněny. Získáte překlad, který vypadá v editoru dobře, ale při importu selže validace schématu.

Napsání vlastního skriptu

Váš tým napíše Node nebo Python skript, který parsuje XLIFF pomocí xml2js, extrahuje zdrojové řetězce, volá Google Translate a zapisuje cílové řetězce zpět. Funguje to pro 90 % řetězců. Zbývajících 10 % – řetězce s vnořeným formátováním, množnými skupinami nebo speciálními znaky – se rozbije způsoby, které se projeví až po nasazení.

Stejný režim selhání „flexibilní formát se setkává s naivním překladatelem“ postihuje soubory i18next JSON a Gettext .po. Náš průvodce překladem souborů i18next JSON pro React a Next.js a náš příspěvek jak přeložit soubory .po bez porušení proměnných kódu pokrývají paralelní problémy pro tyto formáty.

Správná cesta: Syntakticky citlivé zpracování XLIFF

Správná XLIFF překladová pipeline se řídí stejnými principy jako náš PO engine, přizpůsobený pro XML.

Parsovat, ne Regexem

Zacházejte s XLIFF jako se strukturovaným dokumentem. Parsujte jej skutečným XML parserem, sestavte strom a procházejte prvky <trans-unit> (nebo <unit> pro 2.0). Pokus o párování zdrojového a cílového obsahu pomocí regulárních výrazů je rychlou cestou k poškozeným souborům.

Uzamkněte inline tagy před překladem

Každý <g>, <x>, <bpt>, <ept>, <ph>, <pc> uvnitř <source> musí být zachován podle pozice a atributu id. Nahraďte je číselnými zástupnými symboly před odesláním textu do LLM a poté vložte původní tagy s jejich atributy zpět po návratu překladu.

Respektujte stavový automat

XLIFF jednotky mají stavové atributy: new, needs-translation, translated, reviewed, final, signed-off. Pipeline by měla překládat pouze jednotky ve stavu new nebo needs-translation a nastavit výstupní stav na translated (nikoli final – recenzent by měl stále ověřovat).

Zachovejte strukturu nad rámec překladových jednotek

Soubory XLIFF obsahují hlavičky, metadata, atributy na úrovni souboru, poznámky a alternativní překlady (<alt-trans>). Tyto prvky musí zůstat beze změny po celou dobu cyklu. Jejich odstranění nebo přeuspořádání narušuje zpětnou kompatibilitu se zdrojovou platformou.

Validace před dodáním

Před vrácením přeloženého XLIFF souboru proveďte validaci proti schématu. XLIFF 1.2 má oficiální XSD. XLIFF 2.0 má své vlastní. Nástroj, který se nedokáže sám validovat, je nástroj, který vám dodá poškozené soubory.

Poznámky specifické pro platformu

Každá hlavní platforma, která používá XLIFF, má své zvláštnosti, které stojí za to znát.

Drupal

Nástroj Translation Management Tool (TMGMT) Drupalu exportuje XLIFF 1.2. Typy obsahu zahrnují uzly (stránky, články), taxonomické termíny a konfiguraci. TMGMT obaluje každé přeložitelné pole do samostatného <trans-unit> s ID formátem specifickým pro Drupal (fieldname:delta:format).

Háček: Drupal ukládá informace o formátu textu (filtrované HTML, plné HTML, prostý text) spolu s obsahem. Překlad musí zachovat HTML značky, pokud to formát umožňuje, a převést na prostý text, pokud ne. Vaše pipeline potřebuje povědomí o jednotlivých polích.

Symfony

Překladový komponent Symfony ve výchozím nastavení používá XLIFF 2.0 (od Symfony 4). Řetězce se nacházejí v translations/messages.xx.xliff. Symfony podporuje formát zpráv ICU uvnitř XLIFF, což znamená, že jedna jednotka může obsahovat {count, plural, one {...} other {...}} struktury.

Háček: Množné kategorie ICU uvnitř XLIFF potřebují dvojitou ochranu. XML tagy zůstanou nedotčené A klíčová slova ICU (plural, one, other, =0) se nesmí překládat. Mnoho XLIFF nástrojů zpracovává jednu vrstvu, ale ne obě.

Angular i18n

Angular exportuje XLIFF 1.2 nebo 2.0 pomocí příkazu ng extract-i18n. Soubory obsahují řetězce šablon komponent, s tagy <x> reprezentujícími výrazy Angular a interpolace jako {{ count }}.

Háček: Angular používá kolize hash id napříč identickými zdrojovými řetězci. Překlad musí přesně zachovat ID jednotek, jinak je Angular nemůže při importu spárovat. Přejmenování atributů id během zpracování okamžitě způsobí chybu.

iOS (Xcode Export)

Xcode exportuje XLIFF 1.2 pro lokalizaci aplikací přes Product > Export Localizations. Řetězce pocházejí z Localizable.strings, záznamů Info.plist, storyboardů a XIBů. Pravidla množného čísla iOS jsou umístěna v souborech .stringsdict exportovaných jako další trans-jednotky.

Háček: Řetězce storyboardů iOS odkazují na ID prvků UI. Ty nesmí být změněny. Dále Xcode vyžaduje, aby atribut target-language přesně odpovídal očekávanému formátu locale (es, nikoli es-ES, v některých kontextech), jinak import tiše ignoruje.

Překlad XLIFF pomocí SimplePoTranslate

SimplePoTranslate podporuje XLIFF v plánech Pro a Lifetime. Pracovní postup je stejný jako u souborů .po.

1. Exportujte svůj XLIFF

Z vaší zdrojové platformy exportujte jeden nebo více souborů .xliff. Pro Drupal použijte exportní akci TMGMT. Pro Symfony najděte translations/messages.en.xliff. Pro Angular spusťte ng extract-i18n --format=xlf2. Pro Xcode použijte export lokalizace.

2. Nahrajte do SimplePoTranslate

Přetáhněte soubor do ovládacího panelu. Platforma automaticky detekuje verzi XLIFF (1.2 nebo 2.0), parsuje strukturu a identifikuje přeložitelné jednotky. Vyberte cílový jazyk a tón.

3. Syntakticky citlivý překlad

Inline tagy, ICU parametry, zástupné symboly a ID jednotek jsou před překladem uzamčeny. Základní AI engine vidí pouze čistý text s kontextem. Přeložený text je znovu vložen do přesné původní struktury, stavy jsou aktualizovány a soubor je před dodáním validován proti schématu XLIFF.

4. Stáhnout a importovat

Stáhněte přeložený XLIFF (plus ekvivalenty .po, .json a .php, pokud potřebujete multiplatformní řešení). Importujte do vaší zdrojové platformy. Ověřte vykreslením několika přeložených stránek nebo zobrazení před nasazením.

# Angular example
ng extract-i18n --format=xlf2 --output-path=src/locale
# upload src/locale/messages.xlf to SimplePoTranslate
# download messages.es.xlf
# reference in angular.json i18n configuration
ng build --localize

5. Integrujte do CI

Jakmile pipeline důvěřujete, automatizujte ji. Exportujte XLIFF při každém vydání, odešlete přes API, stáhněte přeložené soubory, commitněte do repozitáře, nasaďte. Toto je stejný CI-friendly vzor, který mnoho agentur používá pro překlad WordPress .po – viz náš příspěvek o cloudovém překladu bez rozbitých webů pro architektonický vzor.

Shrnutí

XLIFF je správný nástroj pro seriózní lokalizační práci – strukturovaný, nezávislý na nástrojích a dostatečně bohatý na to, aby přenášel metadata projektu napříč systémy. Jeho XML struktura je však také křehká. Každý tag, atribut a hodnota stavu má sémantickou váhu a překladatel, který nerozumí XLIFF jako formátu, poškodí váš soubor způsoby, které se nemusí projevit, dokud import neselže nebo uživatel nenahlásí poškozené UI.

Bezpečný přístup je syntakticky citlivý: parsovat XML, uzamknout strukturální prvky, překládat pouze textové plochy s kontextem, validovat proti schématu před dodáním. To platí bez ohledu na to, zda dodáváte Drupal web, Symfony API, Angular SPA nebo iOS aplikaci. Platforma se liší, ale disciplína XLIFF nikoli.

Jste připraveni překládat soubory XLIFF pro Drupal, Symfony, Angular nebo iOS bez poškozených tagů? Vyzkoušejte SimplePoTranslate zdarma – není vyžadována kreditní karta. Nahrajte .xliff, stáhněte bezpečné překlady, importujte do své platformy.

Související témata