
Priebežná lokalizácia bez systému TMS
Váš kód sa nasadzuje priebežne. Rovnako by sa mali priebežne nasadzovať aj Vaše preklady. Tu sa dozviete, ako automatizovať lokalizáciu vo svojom vývojovom procese.
Čo je priebežná lokalizácia?
Priebežná lokalizácia je postup, pri ktorom sa nové reťazce prekladajú automaticky v rámci vývojového procesu namiesto toho, aby sa preklady zhromažďovali do pravidelných vydaní. Keď vývojár pridá novú funkciu s reťazcami používateľského rozhrania, tieto reťazce sa preložia ešte pred vydaním funkcie.
Tradičný prístup
Väčšina tímov spracúva preklady hromadne: zhromaždí nové reťazce, exportuje ich do systému TMS, počká na prekladateľov, importuje výsledky a potom vydá novú verziu. Lokalizácia sa tak stáva prekážkou, ktorá odďaľuje medzinárodné vydania o niekoľko dní až týždňov.
Vývojár pridá nové reťazce do súboru zdrojového jazyka
Reťazce sa exportujú a nahrajú do platformy TMS
Prekladatelia dostanú upozornenie a začnú pracovať
Preklady sa skontrolujú a schvália
Preložené súbory sa stiahnu a opäť zlúčia s projektom
Funkcia sa vydá spolu s prekladmi (o niekoľko dní až týždňov neskôr)
Prístup priamo v IDE
Pri preklade priamo v IDE vývojár prekladá reťazce v rámci svojho bežného pracovného postupu pri programovaní. Žiadny export, žiadne nahrávanie, žiadne čakanie — preklady vznikajú počas tej istej relácie ako samotný vývoj.
Vývojár pridá nové reťazce do súboru zdrojového jazyka
Vývojár požiada svojho asistenta AI o preklad súboru
Preložené súbory sa zapíšu priamo do projektu
Funkcia sa vydá spolu s prekladmi v tom istom commite
Tradičný prístup
6 steps
Multiple tools and platforms
Days to weeks per cycle
Prístup priamo v IDE
4 steps
Inside your editor
Same commit
Nastavte svoj proces prekladu
Ak Váš tím požaduje automatizovaný preklad aj mimo IDE, pridajte krok CI/CD, ktorý pri každom odoslaní zmien do vetvy main preloží nové alebo zmenené reťazce. Tento postup funguje so službami GitHub Actions, GitLab CI aj s ľubovoľným systémom CI/CD.
V malých tímoch začnite s prekladom priamo v IDE. Automatizáciu CI/CD pridajte, keď má Váš tím viac ako 3-4 vývojárov alebo keď potrebujete zaručiť preklady pri každom zlúčení zmien do vetvy main.
# .github/workflows/translate.yml
name: Translate
on:
push:
branches: [main]
paths: ['locales/en/**']
jobs:
translate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Translate changed strings
run: |
npx i18n-agent translate locales/en.json \
--to de,ja,es,fr,ko,zh-Hans \
--api-key ${{ secrets.I18N_AGENT_API_KEY }}
- name: Commit translations
run: |
git config user.name "github-actions"
git config user.email "[email protected]"
git add locales/
git diff --cached --quiet || git commit -m "chore: update translations"
git push# .gitlab-ci.yml
translate:
stage: deploy
only:
changes:
- locales/en/**
script:
- npx i18n-agent translate locales/en.json
--to de,ja,es,fr --api-key $I18N_AGENT_API_KEY
- git add locales/ && git commit -m "chore: translations" && git pushPridajte kontrolu kvality prekladov do CI
Automatizované kontroly vo Vašom procese CI odhalia chýbajúce preklady, poškodené zástupné symboly a neplatné formáty správ ICU skôr, než sa dostanú do produkcie. Ide o jednoduché skripty, ktoré porovnávajú súbor zdrojového jazyka so všetkými cieľovými jazykmi.
#!/bin/bash
# check-translations.sh — Run in CI to catch missing translations
SOURCE="locales/en.json"
LANGS=("de" "ja" "es" "fr")
EXIT_CODE=0
# Extract all keys from source
SOURCE_KEYS=$(jq -r '[paths(scalars)] | map(join(".")) | .[]' "$SOURCE" | sort)
SOURCE_COUNT=$(echo "$SOURCE_KEYS" | wc -l)
for lang in "${LANGS[@]}"; do
TARGET="locales/$lang.json"
if [ ! -f "$TARGET" ]; then
echo "❌ Missing: $TARGET"
EXIT_CODE=1
continue
fi
TARGET_KEYS=$(jq -r '[paths(scalars)] | map(join(".")) | .[]' "$TARGET" | sort)
MISSING=$(comm -23 <(echo "$SOURCE_KEYS") <(echo "$TARGET_KEYS"))
if [ -n "$MISSING" ]; then
COUNT=$(echo "$MISSING" | wc -l)
echo "❌ $lang: $COUNT missing keys"
echo "$MISSING" | head -5
EXIT_CODE=1
else
echo "✅ $lang: all $SOURCE_COUNT keys present"
fi
done
exit $EXIT_CODE#!/bin/bash
# check-placeholders.sh — Validate placeholder consistency
SOURCE="locales/en.json"
LANGS=("de" "ja" "es")
for lang in "${LANGS[@]}"; do
TARGET="locales/$lang.json"
# Compare placeholders like {{name}}, {count}, %s, %d
jq -r 'paths(scalars) as $p | [($p | join(".")), (getpath($p))]
| @tsv' "$SOURCE" | while IFS=$'\t' read -r key value; do
SOURCE_PH=$(echo "$value" | grep -oE '\{\{[^}]+\}\}|%[sd@]' | sort)
TARGET_VAL=$(jq -r "getpath($(echo $key | jq -R 'split(".")'))" "$TARGET")
TARGET_PH=$(echo "$TARGET_VAL" | grep -oE '\{\{[^}]+\}\}|%[sd@]' | sort)
if [ "$SOURCE_PH" != "$TARGET_PH" ]; then
echo "❌ $lang/$key: placeholder mismatch"
echo " Source: $SOURCE_PH"
echo " Target: $TARGET_PH"
fi
done
doneOverujte preklady v CI
Odhaľujte a riešte rozchádzanie prekladov
K rozchádzaniu prekladov dochádza vtedy, keď sa zdrojové reťazce zmenia, ale preklady sa neaktualizujú. V angličtine je uvedené "Save changes", no v nemčine zostáva starý text. Pri zisťovaní odchýlok sa porovnávajú časové pečiatky alebo hodnoty hash obsahu zdrojových a prekladových súborov.
#!/bin/bash
# detect-drift.sh — Find stale translations
SOURCE="locales/en.json"
SOURCE_HASH=$(md5sum "$SOURCE" | cut -d' ' -f1)
HASH_FILE=".translation-hashes"
# Compare current source hash with stored hash
if [ -f "$HASH_FILE" ]; then
STORED_HASH=$(grep "^en:" "$HASH_FILE" | cut -d: -f2)
if [ "$SOURCE_HASH" != "$STORED_HASH" ]; then
echo "⚠️ Source strings changed since last translation"
echo " Run translations to update all locales"
# Show which keys changed
git diff HEAD~1 "$SOURCE" | grep '^[+-]' | grep -v '^[+-][+-]'
fi
fi
# Update stored hash
echo "en:$SOURCE_HASH" > "$HASH_FILE"Vyberte si spôsob prekladu
Nie každý obsah si vyžaduje rovnaký spôsob prekladu. Reťazce a označenia používateľského rozhrania sú veľmi vhodné na preklad pomocou AI. Marketingovým textom prospeje preklad pomocou AI doplnený ľudskou kontrolou. Právne texty a texty týkajúce sa dodržiavania predpisov by mali vždy prekladať profesionálni prekladatelia.
Translation Approach Comparison:
Content Type | Approach | Cost/word | Quality
─────────────────────┼───────────────────┼────────────┼──────────
UI strings, labels | AI/LLM | $0.001-01 | Production
Tooltips, help text | AI/LLM | $0.001-01 | Production
Marketing copy | AI + human review | $0.05-0.15 | High
Legal / compliance | Human translator | $0.15-0.40 | Certified
Brand voice content | Human translator | $0.20-0.50 | PremiumPracovný postup Git pre preklady
Prekladajte vo svojej funkčnej vetve pred zlúčením zmien, nie až po ňom. Tak zabezpečíte, že každé zlúčenie zmien do vetvy main bude obsahovať úplné preklady. Pridajte kontrolu pred zlúčením, ktorá overí úplnosť prekladov pre všetky podporované jazyky.
Veľké súbory JSON s jazykovými údajmi spôsobujú časté konflikty pri zlučovaní, keď ich súčasne upravuje viacero vetiev. Zoraďte kľúče podľa abecedy a každý kľúč umiestnite na samostatný riadok, aby ste zmenšili rozsah rozdielov a uľahčili riešenie konfliktov.
# .gitattributes — reduce merge conflicts in locale files
locales/*.json merge=union
# Sort keys alphabetically to minimize diffs:
# package.json script:
"sort-locales": "node -e \"
const fs = require('fs');
const f = process.argv[1];
const d = JSON.parse(fs.readFileSync(f));
const s = (o) => Object.keys(o).sort().reduce((r,k) =>
({...r, [k]: typeof o[k]==='object' ? s(o[k]) : o[k]}), {});
fs.writeFileSync(f, JSON.stringify(s(d), null, 2)+'\\n');
\""Bežné úskalia
Odkladanie lokalizácie na obdobie po vývoji
Chýbajúce overovanie prekladov na úrovni CI
Zbytočne zložité riešenie so systémom TMS
Nesledovanie aktuálnosti prekladov
Vyskúšajte i18n Agent teraz
Potiahnite súbor na preklad sem
JSON, YAML, PO, XML, CSV, Markdown, Properties
alebo kliknite a vyberte súbor
Cieľové jazyky