XLIFF a PO soubory - jak je porovnávat
Překládal jsem pár projektů a vždycky jsem řešil - co se změnilo od minule? Které stringy jsou nové? Které někdo smazal? Tady je jak na to.
Co jsou XLIFF a PO soubory?
XLIFF (XML Localization Interchange File Format)
XLIFF je průmyslový standard pro výměnu lokalizačních dat. Soubor XLIFF obsahuje zdrojový text a jeho překlad ve strukturovaném XML formátu:
<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" target-language="cs" datatype="plaintext">
<body>
<trans-unit id="greeting">
<source>Hello, World!</source>
<target>Ahoj, světe!</target>
<note>Uvítací zpráva aplikace</note>
</trans-unit>
<trans-unit id="button.save">
<source>Save</source>
<target>Uložit</target>
</trans-unit>
</body>
</file>
</xliff>
Výhody XLIFF:
- Standardizovaný formát (OASIS)
- Podpora metadat (poznámky, stavy překladu)
- Kompatibilita s CAT nástroji (SDL Trados, memoQ, OmegaT)
- Verzování (XLIFF 1.2 a XLIFF 2.0)
PO/POT soubory (GNU Gettext)
PO (Portable Object) je formát používaný v open-source projektech, zejména těch postavených na GNU/Linux:
# Komentář pro překladatele
msgid "Hello, World!"
msgstr "Ahoj, světe!"
#: src/components/Button.js:42
msgid "Save"
msgstr "Uložit"
#, fuzzy
msgid "Cancel"
msgstr "Zrušit"
Struktura PO souborů:
- POT (Portable Object Template) – šablona se zdrojovými texty
- PO – soubor s překlady pro konkrétní jazyk
- MO (Machine Object) – zkompilovaná binární verze pro produkci
Proč je porovnávání lokalizačních souborů důležité?
1. Sledování změn ve zdrojovém textu
Když vývojáři změní zdrojový text, překladatelé potřebují vědět:
- Které řetězce se změnily
- Které jsou nové
- Které byly odstraněny
2. Kontrola kvality překladu
Porovnání umožňuje:
- Kontrolu konzistence terminologie
- Detekci neúplných překladů
- Ověření formátovacích značek
3. Koordinace překladatelského týmu
Při spolupráci více překladatelů:
- Kdo co přeložil
- Merge konfliktů při sloučení
- Revize a schvalování změn
4. Verzování a audit
Pro regulované odvětví:
- Sledování historie změn
- Audit trail pro certifikace
- Obnovení předchozích verzí
Nástroje pro porovnání XLIFF souborů
Diff pro XML strukturu
Protože XLIFF je XML, můžete použít naše nástroje pro porovnání XML:
- Načtěte starší verzi XLIFF do levého panelu
- Načtěte novější verzi do pravého panelu
- Zobrazte strukturální změny
Tip: Před porovnáním naformátujte XML pro lepší čitelnost:
xmllint --format stary.xliff > stary_formatted.xliff
xmllint --format novy.xliff > novy_formatted.xliff
Specializované XLIFF nástroje
Okapi Framework (open-source):
# Instalace přes Java
java -jar okapi-apps/rainbow.jar
# Porovnání XLIFF souborů
tikal -x original.xliff -fc okf_xliff
tikal -x updated.xliff -fc okf_xliff
memoQ Diff:
- Vestavěná funkce pro porovnání projektů
- Vizuální zvýraznění změn
- Export diff reportů
Online XLIFF diff
Pro rychlé porovnání bez instalace:
- Otevřete PorovnejText.cz/xml-diff
- Vložte obsah obou XLIFF souborů
- Analyzujte změny v jednotlivých
<trans-unit>elementech
Nástroje pro porovnání PO/POT souborů
GNU msgcmp a msgmerge
Gettext nástroje nabízejí specializované příkazy:
# Porovnání PO souboru se šablonou POT
msgcmp preklad.po sablona.pot
# Sloučení změn z nové šablony
msgmerge -U preklad.po nova_sablona.pot
# Zobrazení statistik
msgfmt --statistics preklad.po
Výstup msgfmt --statistics:
245 přeložených zpráv, 12 fuzzy, 3 nepřeložené
Porovnání PO jako text
PO soubory jsou čitelný text, takže můžete použít běžné diff nástroje:
# Základní diff
diff stary.po novy.po
# Barevný diff
diff --color stary.po novy.po
# Side-by-side zobrazení
diff -y stary.po novy.po
PorovnejText.cz pro PO soubory
Náš textový diff nástroj je ideální pro:
- Rychlé porovnání dvou verzí PO souboru
- Vizuální kontrolu změn v překladu
- Detekci konfliktů před merge
Postup:
- Otevřete /
- Vložte starší PO soubor vlevo
- Vložte novější PO soubor vpravo
- Analyzujte barevně zvýrazněné změny
Praktické workflow pro překladatele
Workflow s Git a PO soubory
# Struktura projektu
projekt/
├── locale/
│ ├── template.pot # Zdrojová šablona
│ ├── cs/
│ │ └── LC_MESSAGES/
│ │ ├── messages.po # Český překlad
│ │ └── messages.mo # Zkompilovaný
│ └── sk/
│ └── LC_MESSAGES/
│ ├── messages.po # Slovenský překlad
│ └── messages.mo
# Git workflow
git pull origin main
msgmerge -U locale/cs/LC_MESSAGES/messages.po locale/template.pot
# ... překlad nových řetězců ...
git add locale/cs/LC_MESSAGES/messages.po
git commit -m "Aktualizace českého překladu"
git push origin feature/czech-translation
Workflow s XLIFF a CAT nástroji
1. Vývojář exportuje nový XLIFF z aplikace
2. Překladatel importuje XLIFF do CAT nástroje
3. CAT nástroj porovná s překladovou pamětí (TM)
4. Překladatel pracuje pouze na změněných segmentech
5. Export aktualizovaného XLIFF
6. Vývojář importuje zpět do aplikace
Pokročilé techniky porovnávání
Ignorování metadat při porovnání
Někdy chcete porovnat pouze překladový obsah bez metadat:
Pro XLIFF – extrakce textů:
# Extrakce pouze source a target elementů
grep -E "<source>|<target>" dokument.xliff > texty.txt
Pro PO – pouze msgid a msgstr:
# Extrakce překladových párů
grep -E "^msgid|^msgstr" preklad.po > pary.txt
Detekce fuzzy překladů
Fuzzy překlad znamená, že zdrojový text se změnil, ale starý překlad může být stále částečně použitelný:
#, fuzzy
#| msgid "Save document"
msgid "Save document as..."
msgstr "Uložit dokument"
Vyhledání všech fuzzy:
grep -B1 "^#, fuzzy" preklad.po
Kontrola formátovacích značek
Důležité je ověřit, že překlad obsahuje stejné formátovací značky jako originál:
# Příklad kontrolního skriptu
import re
def check_format_strings(msgid, msgstr):
"""Kontrola %s, %d, {name} atd."""
patterns = [
r'%[sd]', # printf style
r'\{\w+\}', # Python format
r'%\(\w+\)[sd]' # Python named
]
for pattern in patterns:
src_matches = re.findall(pattern, msgid)
tgt_matches = re.findall(pattern, msgstr)
if sorted(src_matches) != sorted(tgt_matches):
return False
return True
Integrace s překladatelskými nástroji
OmegaT (open-source CAT)
OmegaT podporuje XLIFF, PO a mnoho dalších formátů:
Projekt OmegaT/
├── source/ # Zdrojové soubory
├── target/ # Přeložené soubory
├── tm/ # Překladová paměť
└── omegat/
└── project_save.tmx
Porovnání v OmegaT:
- Otevřete projekt
- Tools → Check Issues
- Zobrazí nekonzistence, fuzzy, nepřeložené
Poedit
Poedit je oblíbený editor PO souborů s vestavěnými diff funkcemi:
- Zobrazení změn oproti uložené verzi
- Kontrola konzistence terminologie
- Statistiky překladu
- Strojový překlad pro návrhy
Phrase (Memsource)
Cloudová platforma pro enterprise lokalizaci:
- Verzování překladů
- Workflow schvalování
- Diff reporty pro klienty
- API pro automatizaci
Časté problémy a jejich řešení
Problém 1: Kódování znaků
# Kontrola kódování
file preklad.po
# Výstup: preklad.po: UTF-8 Unicode text
# Konverze do UTF-8
iconv -f ISO-8859-2 -t UTF-8 stary.po > novy.po
Problém 2: Nekonzistentní zalomení řádků
Různé operační systémy používají různé znaky pro nový řádek:
# Normalizace na Unix (LF)
dos2unix preklad.po
# Před porovnáním
dos2unix stary.po novy.po
diff stary.po novy.po
Problém 3: Merge konflikty v PO souborech
<<<<<<< HEAD
msgid "Save"
msgstr "Uložit"
=======
msgid "Save"
msgstr "Ukládat"
>>>>>>> feature/new-translations
Řešení:
- Použijte msgcat pro automatické sloučení:
msgcat --use-first verze1.po verze2.po > merged.po - Nebo řešte ručně pomocí diff nástroje
Problém 4: Změna pořadí řetězců
Někdy se řetězce přeorganizují bez změny obsahu. Pro porovnání seřaďte:
# Seřazení PO souboru
msgsort stary.po -o stary_sorted.po
msgsort novy.po -o novy_sorted.po
diff stary_sorted.po novy_sorted.po
Automatizace v CI/CD
GitHub Actions pro kontrolu překladů
name: Translation Check
on: [push, pull_request]
jobs:
check-translations:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install gettext
run: sudo apt-get install gettext
- name: Check PO files
run: |
for po in locale/*/LC_MESSAGES/*.po; do
msgfmt --check --statistics "$po"
done
- name: Check for fuzzy strings
run: |
fuzzy_count=$(grep -r "^#, fuzzy" locale/ | wc -l)
echo "Fuzzy strings: $fuzzy_count"
if [ $fuzzy_count -gt 10 ]; then
echo "Warning: Too many fuzzy strings!"
fi
Pre-commit hook
#!/bin/bash
# .git/hooks/pre-commit
# Kontrola syntaxe PO souborů
for po in $(git diff --cached --name-only | grep '\.po$'); do
msgfmt --check "$po" 2>&1
if [ $? -ne 0 ]; then
echo "Error in $po"
exit 1
fi
done
Doporučené workflow pro různé týmy
Malý tým (1-3 překladatelé)
- Verzování: Git s PO soubory
- Editor: Poedit nebo VS Code s rozšířením
- Porovnání: PorovnejText.cz pro rychlé kontroly
- Komunikace: Slack/Discord pro koordinaci
Střední tým (4-10 překladatelů)
- Platforma: OmegaT nebo Crowdin
- Verzování: Git + překladová paměť (TMX)
- Workflow: Pull requesty s review
- Automatizace: CI/CD kontroly
Enterprise tým (10+ překladatelů)
- Platforma: Phrase, Lokalise nebo SDL Trados
- Workflow: Víceúrovňové schvalování
- Integrace: API napojení na vývoj
- Reporting: Automatické diff reporty pro PM
Shrnutí
Efektivní porovnávání lokalizačních souborů je základem kvalitního překladu:
| Formát | Nástroj pro diff | Alternativa |
|---|---|---|
| XLIFF | XML diff / CAT nástroje | PorovnejText.cz/xml-diff |
| PO/POT | msgcmp, diff | PorovnejText.cz/ |
| TMX | XML diff | Speciální CAT nástroje |
| JSON | JSON diff | PorovnejText.cz/json-diff |
Klíčové tipy:
- Používejte verzovací systém (Git)
- Normalizujte formátování před porovnáním
- Automatizujte kontroly v CI/CD
- Zálohujte překladovou paměť
Investice do správného workflow pro lokalizaci se vrátí v podobě konzistentních překladů, rychlejší práce a menšího počtu chyb.
Potřebujete rychle porovnat dva překladové soubory? Vyzkoušejte náš nástroj pro porovnání textu pro PO soubory nebo XML diff pro XLIFF – vše funguje přímo v prohlížeči a vaše citlivá data zůstávají na vašem počítači.
Vyzkoušejte PorovnejText.cz zdarma
Nejrychlejší český nástroj pro porovnání textů. Vše probíhá ve vašem prohlížeči, žádná registrace není potřeba.
Porovnat texty nyní →Související články
Jak porovnávám překlady - tipy pro lokalizaci
Praktický návod pro překladatele a lokalizační týmy. Jak sledovat změny v translation souborech bez zbytečné práce.
Co je normostrana a jak ji spočítat – praktický průvodce
Normostrana je základní jednotka rozsahu textu. Vysvětlíme kolik znaků má, kdy se používá 1500 vs 1800, a jak ji rychle spočítat online.