Skip to main content

Kontinuirana lokalizacija bez TMS sustava

Vaš se kod kontinuirano implementira. Tako bi trebalo biti i s prijevodima. Saznajte kako automatizirati lokalizaciju u svojem razvojnom procesu.

Što je kontinuirana lokalizacija?

Kontinuirana lokalizacija praksa je automatskog prevođenja novih tekstova u sklopu razvojnog procesa umjesto grupiranja prijevoda u povremena izdanja. Kada programer doda novu značajku s tekstovima korisničkog sučelja, ti se tekstovi prevode prije objave značajke.

Tradicionalni pristup

Većina timova grupira prijevode: prikupe nove tekstove, izvezu ih u TMS, pričekaju prevoditelje, uvezu rezultate i tek ih tada objave. Tako nastaje usko grlo u lokalizaciji koje međunarodna izdanja odgađa danima ili tjednima.

1

Programer dodaje nove tekstove u datoteku izvornog lokaliteta

2

Tekstovi se izvoze i prenose na TMS platformu

3

Prevoditelji dobivaju obavijest i započinju rad

4

Prijevodi se pregledaju i odobravaju

5

Prevedene datoteke preuzimaju se i ponovno spajaju

6

Značajka se objavljuje s prijevodima (nekoliko dana ili tjedana poslije)

Days to weeks

Pristup ugrađen u IDE

Uz prevođenje ugrađeno u IDE programer prevodi tekstove u sklopu uobičajenog rada na kodu. Nema izvoza, prijenosa ni čekanja — prijevodi nastaju u istoj sesiji kao i razvoj.

1

Programer dodaje nove tekstove u datoteku izvornog lokaliteta

2

Programer traži od svojeg AI pomoćnika da prevede datoteku

3

Prevedene datoteke zapisuju se izravno u projekt

4

Značajka se objavljuje s prijevodima u istom commitu

Same commit

Tradicionalni pristup

6 steps

Multiple tools and platforms

Days to weeks per cycle

Pristup ugrađen u IDE

4 steps

Inside your editor

Same commit

3

Postavite proces prevođenja

Timovi koji žele automatizirano prevođenje izvan IDE-a mogu dodati CI/CD korak koji prevodi nove ili izmijenjene tekstove pri svakom slanju na granu main. To funkcionira s GitHub Actionsom, GitLab CI-jem i bilo kojim CI/CD sustavom.

Mali timovi neka započnu prevođenjem u IDE-u. Dodajte CI/CD automatizaciju kada Vaš tim preraste tri ili četiri programera ili kada prijevodi moraju biti zajamčeni pri svakom spajanju u granu main.

Dodajte prevođenje kao korak u postojeći CI/CD proces. Prevođenje se pokreće nakon uspješne izgradnje, a prije implementacije, čime se osigurava da svako izdanje uključuje ažurne prijevode.
.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 QA prijevoda u CI

Automatizirane provjere u Vašem CI procesu otkrivaju prije produkcije prijevode koji nedostaju, oštećena rezervirana mjesta i neispravne formate ICU poruka. Jednostavne skripte uspoređuju datoteku izvornog lokaliteta sa svim ciljnim lokalitetima.

Bez provjere prijevoda na razini CI-ja, prijevodi koji nedostaju neprimjetno stižu u produkciju. Korisnici umjesto prevedenog teksta vide neobrađene ključeve poput „settings.title" ili prazne nizove. CI provjera od pet minuta to u potpunosti sprječava.
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

Provjerite prijevode u CI-ju

Dodajte i18n-validate u svoj CI proces kako biste automatski otkrili ključeve koji nedostaju, oštećena rezervirana mjesta i probleme s množinom. Upotrijebite i18n-pseudo za generiranje lažnih prijevoda za testiranje vizualne regresije.
5

Otkrijte i obradite zastarjele prijevode

Prijevodi zastarijevaju kada se izvorni tekstovi promijene, a prijevodi se ne ažuriraju. Engleski tekst glasi „Save changes", ali njemački i dalje prikazuje staru verziju. Otkrivanje odstupanja uspoređuje vremenske oznake ili hash vrijednosti sadržaja izvornih i prevedenih datoteka.

Zastarjeli prijevodi gori su od prijevoda koji nedostaju. Jasno je da prijevod koji nedostaje nije ispravan — korisnici vide ključ ili zamjenski jezik. Zastarjeli prijevod uvjerljivo prenosi pogrešnu poruku, što može zavarati korisnike ili uzrokovati poteškoće podršci.
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

Odaberite pristup prevođenju

Nije svakom sadržaju potreban isti pristup prevođenju. Tekstovi i oznake korisničkog sučelja izvrsno funkcioniraju s AI prevođenjem. Za marketinški tekst dobro je spojiti AI i ljudski pregled. Pravne tekstove i sadržaj o usklađenosti uvijek bi trebali prevoditi profesionalni prevoditelji.

AI prevođenje obrađuje više od 80% tipičnih tekstova aplikacija uz kvalitetu prikladnu za produkciju. Ljudske prevoditelje angažirajte za pravne tekstove, glas brenda i kulturološki osjetljiv sadržaj u kojem su nijanse najvažnije.
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 tijek rada za prijevode

Prevodite na grani značajke prije spajanja, a ne nakon njega. Time svako spajanje u granu main uključuje potpune prijevode. Dodajte provjeru prije spajanja koja potvrđuje potpunost prijevoda za sve podržane lokalitete.

Velike JSON datoteke lokaliteta uzrokuju česte sukobe pri spajanju kada ih više grana istodobno mijenja. Poredajte ključeve abecedno i upotrijebite jedan ključ po retku kako biste smanjili opseg razlika i olakšali rješavanje sukoba.

Datoteke prijevoda nalaze se u repozitoriju uz Vaš kod. Pod nadzorom su verzija, mogu se pregledati u zahtjevima za povlačenje i implementiraju se istim procesom kao i sve ostalo.
.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');
\""

Uobičajene zamke

Tretiranje lokalizacije kao posla nakon razvoja

Najveća je pogreška čekati završetak razvoja prije prevođenja. To stvara uska grla, odgađa izdanja i svodi prijevode na naknadnu obvezu. Prevodite tijekom razvoja, a ne nakon njega.

Bez provjere valjanosti prijevoda na razini CI sustava

Bez automatiziranih provjera prijevodi koji nedostaju, oštećena rezervirana mjesta i neispravni formati stižu u produkciju. Dodajte provjeru potpunosti i formata u svoj CI proces.

Pretjerano usložnjavanje TMS-om

TMS je osmišljen za upravljanje tijekovima rada ljudskih prevoditelja. Ako koristite AI prevođenje, možda Vam nije potrebno dodatno opterećenje koje donosi TMS. Započnite jednostavno — prevodite u IDE-u ili CI/CD sustavu — i dodajte TMS samo ako trebate upravljati ljudskim prevoditeljima.

Bez praćenja ažurnosti prijevoda

Bez praćenja ažurnosti ne znate koji su prijevodi zastarjeli. Izvorni se tekstovi mijenjaju, ali stari prijevodi ostaju. Ugradite otkrivanje odstupanja u svoj tijek rada kako biste pronašli zastarjeli sadržaj.

Isprobajte i18n Agent odmah

Povucite datoteku za prijevod ovdje

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

ili kliknite za odabir

Ciljni jezici

Registracija nije potrebnaProcjena odmah

Česta pitanja