Skip to main content

Neprekinjena lokalizacija brez sistema TMS

Vaša koda se uvaja neprekinjeno. Tudi Vaši prevodi bi se morali. Preberite, kako lokalizacijo avtomatizirati v svojem razvojnem poteku dela.

Kaj je neprekinjena lokalizacija?

Neprekinjena lokalizacija pomeni samodejno prevajanje novih besedil v okviru razvojnega poteka dela, namesto zbiranja prevodov v občasne izdaje. Ko razvijalec doda novo funkcijo z besedili uporabniškega vmesnika, se ta prevedejo pred izdajo funkcije.

Tradicionalni pristop

Večina ekip prevode zbira v svežnje: zbere nova besedila, jih izvozi v TMS, počaka na prevajalce, uvozi rezultate in nato izda. Tako nastane ozko grlo pri lokalizaciji, ki mednarodne izdaje zakasni za več dni ali tednov.

1

Razvijalec v izvorno jezikovno datoteko doda nova besedila

2

Besedila se izvozijo in naložijo na platformo TMS

3

Prevajalci prejmejo obvestilo in začnejo delo

4

Prevodi se pregledajo in odobrijo

5

Prevedene datoteke se prenesejo in združijo nazaj

6

Funkcija se izda s prevodi (čez več dni ali tednov)

Days to weeks

Pristop, vgrajen v IDE

Pri prevajanju, vgrajenem v IDE, razvijalec besedila prevede v okviru svojega običajnega programerskega poteka dela. Brez izvoza, nalaganja in čakanja: prevodi nastanejo v isti seji kot razvoj.

1

Razvijalec v izvorno jezikovno datoteko doda nova besedila

2

Razvijalec pomočnika umetne inteligence prosi, naj prevede datoteko

3

Prevedene datoteke se zapišejo neposredno v projekt

4

Funkcija se izda s prevodi v istem commitu

Same commit

Tradicionalni pristop

6 steps

Multiple tools and platforms

Days to weeks per cycle

Pristop, vgrajen v IDE

4 steps

Inside your editor

Same commit

3

Nastavite svoj prevajalski pipeline

Ekipe, ki želijo prevajanje avtomatizirati tudi zunaj razvojnega okolja IDE, naj dodajo korak CI/CD, ki ob vsakem potisku v main prevede nova ali spremenjena besedila. To deluje z GitHub Actions, GitLab CI in katerim koli sistemom CI/CD.

Majhne ekipe naj začnejo s prevajanjem, vgrajenim v IDE. Avtomatizacijo CI/CD dodajte, ko Vaša ekipa preraste 3-4 razvijalce ali ko morajo biti prevodi zagotovljeni pri vsaki združitvi v main.

Prevajanje dodajte kot korak v obstoječi pipeline CI/CD. Zažene se po uspešni gradnji in pred uvedbo, zato vsaka izdaja vključuje posodobljene prevode.
.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

Dodajte zagotavljanje kakovosti prevodov v CI

Samodejna preverjanja v Vašem pipelineu CI odkrijejo manjkajoče prevode, poškodovane označbe mest in neveljavne oblike sporočil ICU, preden dosežejo produkcijo. To so preprosti skripti, ki izvorno jezikovno datoteko primerjajo z vsemi ciljnimi različicami.

Brez preverjanja prevodov na ravni CI manjkajoči prevodi neopazno dosežejo produkcijo. Uporabniki namesto prevedenega besedila vidijo neobdelane ključe, kot je "settings.title", ali prazne nize. 5-minutno preverjanje v CI to v celoti prepreči.
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

Preverjajte prevode v CI

V svoj pipeline CI dodajte i18n-validate, da samodejno odkrije manjkajoče ključe, poškodovane označbe mest in težave z množinskimi oblikami. Z i18n-pseudo ustvarite lažne prevode za vizualno regresijsko testiranje.
5

Odkrijte in obravnavajte razhajanje prevodov

Do razhajanja prevodov pride, ko se izvorna besedila spremenijo, prevodi pa ne. Angleščina pravi "Save changes", nemščina pa še vedno prikazuje staro besedilo. Zaznavanje razhajanja primerja časovne žige ali zgoščene vrednosti vsebine izvornih in prevajalskih datotek.

Zastareli prevodi so hujši od manjkajočih. Manjkajoči prevod je očitno napačen: uporabniki vidijo ključ ali nadomestni jezik. Zastarel prevod prepričljivo sporoča napačno stvar, kar lahko zavede uporabnike ali povzroči težave pri podpori.
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

Izberite svoj pristop k prevajanju

Vsa vsebina ne potrebuje enakega prevajalskega pristopa. Besedila in oznake uporabniškega vmesnika dobro delujejo s prevajanjem z umetno inteligenco. Trženjskim besedilom koristi umetna inteligenca s človeškim pregledom. Pravna besedila in besedila o skladnosti naj vedno prevajajo poklicni prevajalci.

Prevajanje z umetno inteligenco na produkcijski ravni obravnava več kot 80 % običajnih besedil aplikacij. Človeške prevajalce prihranite za pravna besedila, glas blagovne znamke in kulturno občutljivo vsebino, kjer so odtenki najpomembnejši.
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

Potek dela Git za prevode

Prevajajte na svoji veji funkcije pred združitvijo, ne po njej. Tako vsaka združitev v main vključuje celotne prevode. Dodajte preverjanje pred združitvijo, ki preveri popolnost prevodov za vse podprte jezikovne različice.

Velike jezikovne datoteke JSON povzročajo pogoste spore pri združevanju, kadar jih hkrati spreminja več vej. Ključe razvrstite po abecedi in uporabite po en ključ na vrstico, da zmanjšate diff in olajšate reševanje sporov.

Prevajalske datoteke so v Vašem repozitoriju poleg kode. Različice so nadzorovane, datoteke lahko pregledate v zahtevah pull request in jih uvedete skozi isti pipeline kot vse drugo.
.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');
\""

Pogoste pasti

Lokalizacija kot opravilo po razvoju

Največja napaka je čakanje s prevajanjem do konca razvoja. To ustvarja ozka grla, zakasni izdaje in spremeni prevode v poznejši premislek. Prevajajte med razvojem, ne po njem.

Brez preverjanja prevodov na ravni CI

Brez samodejnih preverjanj manjkajoči prevodi, poškodovane označbe mest in neveljavne oblike dosežejo produkcijo. V svoj pipeline CI dodajte preverjanje popolnosti in oblike.

Pretirano zapleten sistem TMS

Sistem TMS je zasnovan za upravljanje potekov dela človeških prevajalcev. Če uporabljate prevajanje z umetno inteligenco, dodatne teže sistema TMS morda ne potrebujete. Začnite preprosto: prevajajte v IDE ali CI/CD in TMS dodajte samo, če potrebujete upravljanje človeških prevajalcev.

Brez spremljanja svežine prevodov

Brez spremljanja svežine ne veste, kateri prevodi so zastareli. Izvorna besedila se spreminjajo, stari prevodi pa ostajajo. V svoj potek dela vgradite zaznavanje razhajanja, da odkrijete zastarelo vsebino.

Preizkusite i18n Agent zdaj

Spustite prevajalsko datoteko sem

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

ali kliknite za izbiro

Ciljni jeziki

Registracija ni potrebnaTakojšnja ocena

Pogosta vprašanja