Skip to main content

Průběžná lokalizace bez TMS

Váš kód se nasazuje průběžně. Překlady by měly také. Zde je návod, jak automatizovat lokalizaci ve Vašem vývojovém workflow.

Co je průběžná lokalizace?

Průběžná lokalizace je praxe automatického překládání nových řetězců jako součást Vašeho vývojového workflow, místo dávkování překladů do periodických vydání. Když vývojář přidá novou funkci s UI řetězci, tyto řetězce se přeloží ještě před nasazením funkce.

Tradiční přístup

Většina týmů dávkuje překlady: shromáždí nové řetězce, exportuje je do TMS, počká na překladatele, importuje výsledky a teprve pak vydá. Tím vzniká lokalizační úzké hrdlo, které zpožďuje mezinárodní vydání o dny až týdny.

1

Vývojář přidá nové řetězce do souboru zdrojové lokality

2

Řetězce se exportují a nahrají do platformy TMS

3

Překladatelé dostanou oznámení a začnou pracovat

4

Překlady jsou zkontrolovány a schváleny

5

Přeložené soubory se stáhnou a sloučí zpět

6

Funkce se vydá s překlady (o dny až týdny později)

Days to weeks

Přístup nativní pro IDE

U překladu nativního pro IDE vývojář překládá řetězce jako součást běžného vývojového workflow. Žádný export, žádné nahrávání, žádné čekání — překlady probíhají ve stejné relaci jako vývoj.

1

Vývojář přidá nové řetězce do souboru zdrojové lokality

2

Vývojář požádá svého AI asistenta o překlad souboru

3

Přeložené soubory se zapíší přímo do projektu

4

Funkce se vydá s překlady ve stejném commitu

Same commit

Tradiční přístup

6 steps

Multiple tools and platforms

Days to weeks per cycle

Přístup nativní pro IDE

4 steps

Inside your editor

Same commit

3

Nastavte si překladovou pipeline

Pro týmy, které chtějí automatizovat překlady i mimo IDE, přidejte CI/CD krok, který při každém pushi do main přeloží nové nebo změněné řetězce. Funguje to s GitHub Actions, GitLab CI nebo jakýmkoli CI/CD systémem.

U malých týmů začněte s překladem nativním pro IDE. CI/CD automatizaci přidejte, až Váš tým přeroste 3-4 vývojáře nebo když potřebujete mít překlady garantované při každém merge do main.

Přidejte překlad jako krok do stávající CI/CD pipeline. Překlad poběží po úspěšném buildu a před nasazením, čímž zajistí, že každé vydání bude obsahovat aktuální překlady.
.github/workflows/translate.yml
# .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
# .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 push
4

Přidejte do CI QA pro překlady

Automatizované kontroly ve Vaší CI pipeline zachytí chybějící překlady, rozbité zástupné znaky a neplatné formáty zpráv ICU ještě před tím, než se dostanou do produkce. Jde o jednoduché skripty, které porovnávají soubor zdrojové lokality se všemi cílovými lokalitami.

Bez validace překladů na úrovni CI se chybějící překlady tiše dostanou do produkce. Uživatelé pak uvidí nezpracované klíče jako „settings.title“ nebo prázdné řetězce místo přeloženého textu. Pětiminutová CI kontrola tomu zcela zabrání.
check-translations.sh
#!/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
check-placeholders.sh
#!/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
done

Ověřujte překlady v CI

Přidejte do Vaší CI pipeline i18n-validate, aby automaticky zachytil chybějící klíče, rozbité zástupné znaky a problémy s plurály. Pro vizuální regresní testování použijte i18n-pseudo ke generování falešných překladů.
5

Detekujte a řešte odchylky v překladech

K odchylkám v překladech dochází, když se zdrojové řetězce změní, ale překlady se neaktualizují. Angličtina říká „Save changes“, ale němčina stále obsahuje starý text. Detekce odchylek porovnává časová razítka nebo hashe obsahu zdrojových a překladových souborů.

Zastaralé překlady jsou horší než chybějící překlady. Chybějící překlad je zjevně špatně — uživatelé uvidí klíč nebo fallback jazyk. Zastaralý překlad přesvědčivě říká něco jiného, což může uživatele uvést v omyl nebo způsobit problémy na podpoře.
detect-drift.sh
#!/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"
6

Zvolte si přístup k překladu

Ne veškerý obsah vyžaduje stejný přístup k překladu. UI řetězce a popisky skvěle fungují s AI překladem. Marketingové texty těží z kombinace AI + lidské revize. Právní a compliance texty by měli vždy překládat profesionální lidští překladatelé.

AI překlad zvládá 80 %+ typických řetězců v aplikaci v produkční kvalitě. Lidské překladatele si vyhraďte pro právní texty, brand voice a kulturně citlivý obsah, kde nejvíc záleží na nuancích.
Cost Comparison
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 | Premium
7

Git workflow pro překlady

Překládejte na své feature větvi před merge, ne až po něm. Tím zajistíte, že každý merge do main bude obsahovat kompletní překlady. Přidejte pre-merge kontrolu, která ověří úplnost překladů pro všechny podporované lokality.

Velké JSON soubory s lokalitami způsobují časté merge konflikty, když je více větví upravuje současně. Seřaďte klíče abecedně a používejte jeden klíč na řádek, abyste minimalizovali velikost diffu a usnadnili řešení konfliktů.

Překladové soubory jsou v repozitáři spolu s kódem. Jsou verzované, dají se revidovat v pull requestech a nasazují se stejnou pipeline jako vše ostatní.
.gitattributes + package.json
# .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');
\""

Běžné problémy

Považování lokalizace za krok po vývoji

Největší chyba: čekat s překladem až po vývoji. To vytváří úzká hrdla, zpožďuje vydání a dělá z překladů až dodatečnou záležitost. Překládejte během vývoje, ne po něm.

Žádná validace překladů na úrovni CI

Bez automatických kontrol se do produkce dostanou chybějící překlady, rozbité zástupné znaky a neplatné formáty. Přidejte do CI pipeline validaci úplnosti a formátu.

Překomplikování pomocí TMS

TMS byl navržen pro řízení workflow lidských překladatelů. Pokud používáte AI překlad, možná režii TMS nepotřebujete. Začněte jednoduše — překládejte v IDE nebo v CI/CD — a TMS přidejte jen tehdy, když potřebujete spravovat práci lidských překladatelů.

Nesledování aktuálnosti překladů

Bez sledování aktuálnosti nevíte, které překlady jsou zastaralé. Zdrojové řetězce se mění, ale staré překlady zůstávají. Zařaďte do workflow detekci odchylek, aby se zastaralý obsah zachytil.

Vyzkoušejte i18n Agent nyní

Sem přetáhněte svůj překladový soubor

JSON, YAML, PO, XML, CSV, Markdown, Properties

nebo klikněte a vyberte soubor

Cílové jazyky

Bez registraceOkamžitý odhad

Často kladené otázky