Skip to main content

Samfelld staðfærsla án TMS

Kóðinn þinn er gefinn út samfellt. Þýðingarnar ættu að vera það líka. Svona gerirðu staðfærslu sjálfvirka í þróunarferlinu.

Hvað er samfelld staðfærsla?

Samfelld staðfærsla felst í því að þýða nýja strengi sjálfkrafa sem hluta af þróunarferlinu í stað þess að safna þýðingum saman fyrir reglulegar útgáfur. Þegar forritari bætir við nýjum eiginleika með notandaviðmótsstrengjum eru strengirnir þýddir áður en eiginleikinn er gefinn út.

Hefðbundna aðferðin

Flest teymi safna þýðingum saman: þau safna nýjum strengjum, flytja þá út í TMS, bíða eftir þýðendum, flytja niðurstöðurnar inn og gefa síðan út. Þetta skapar flöskuháls í staðfærslu sem tefur alþjóðlegar útgáfur um daga eða vikur.

1

Forritari bætir nýjum strengjum við skrá frummálsins

2

Strengirnir eru fluttir út og hlaðið upp á TMS-kerfi

3

Þýðendur fá tilkynningu og hefja vinnu

4

Þýðingarnar eru yfirfarnar og samþykktar

5

Þýddu skrárnar eru sóttar og sameinaðar verkefninu á ný

6

Eiginleikinn er gefinn út með þýðingum (dögum eða vikum síðar)

Days to weeks

Aðferðin sem er innbyggð í þróunarumhverfið

Með þýðingu sem er innbyggð í þróunarumhverfið þýðir forritarinn strengi sem hluta af venjulegu kóðunarferli sínu. Enginn útflutningur, ekkert upphleðsluferli, engin bið — þýðingarnar verða til í sömu lotu og þróunin.

1

Forritari bætir nýjum strengjum við skrá frummálsins

2

Forritarinn biður gervigreindaraðstoðina sína um að þýða skrána

3

Þýddu skrárnar eru skrifaðar beint í verkefnið

4

Eiginleikinn er gefinn út með þýðingum í sömu innfærslu

Same commit

Hefðbundna aðferðin

6 steps

Multiple tools and platforms

Days to weeks per cycle

Aðferðin sem er innbyggð í þróunarumhverfið

4 steps

Inside your editor

Same commit

3

Settu upp þýðingarvinnslurásina

Fyrir teymi sem vilja sjálfvirkar þýðingar utan þróunarumhverfisins má bæta við CI/CD-skrefi sem þýðir nýja eða breytta strengi við hverja innsendingu á main. Þetta virkar með GitHub Actions, GitLab CI og öllum öðrum CI/CD-kerfum.

Byrjaðu á þýðingu í þróunarumhverfinu fyrir lítil teymi. Bættu við CI/CD-sjálfvirkni þegar forriturum í teyminu fjölgar umfram 3-4 eða þegar þú þarft að tryggja þýðingar við hverja sameiningu við main.

Bættu þýðingu sem skrefi við núverandi CI/CD-vinnslurás. Þýðingin keyrir eftir að smíð tekst og áður en útgáfa hefst og tryggir þannig að hver útgáfa innihaldi nýjustu þýðingar.
.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

Bættu gæðaprófun þýðinga við CI

Sjálfvirkar prófanir í CI-vinnslurásinni finna þýðingar sem vantar, skemmda staðgengla og ógild ICU-skilaboðasnið áður en þau berast í rekstrarumhverfið. Þetta eru einfaldar skriftur sem bera skrá frummálsins saman við öll markmálin.

Án sannprófunar þýðinga á CI-stigi berast þýðingar sem vantar hljóðlega í rekstrarumhverfið. Notendur sjá óunnar lykla eins og "settings.title" eða tóma strengi í stað þýdds texta. Fimm mínútna CI-prófun kemur alfarið í veg fyrir þetta.
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

Sannprófaðu þýðingar í CI

Bættu i18n-validate við CI-vinnslurásina til að finna sjálfkrafa lykla sem vantar, skemmda staðgengla og vandamál með fleirtölu. Notaðu i18n-pseudo til að búa til gerviþýðingar fyrir sjónræn aðhvarfspróf.
5

Greindu og meðhöndlaðu þýðingarek

Þýðingarek verður þegar frumstrengir breytast en þýðingar uppfærast ekki. Á ensku stendur "Save changes" en þýski textinn er enn sá gamli. Rekgreining ber saman tímastimpla eða tætigildi frum- og þýðingarskráa.

Úreltar þýðingar eru verri en þýðingar sem vantar. Það er augljóst þegar þýðingu vantar — notendur sjá lykil eða varamálið. Úrelt þýðing segir rangt til um á sannfærandi hátt og getur því villt um fyrir notendum eða valdið þjónustuvanda.
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

Veldu þýðingaraðferð

Ekki þarf að þýða allt efni með sömu aðferð. Notandaviðmótsstrengir og merkingar henta vel fyrir gervigreindarþýðingar. Markaðstexti nýtur góðs af gervigreind og mannlegum yfirlestri. Lögfræðitexta og texta um reglufylgni ættu faglærðir þýðendur alltaf að þýða.

Gervigreindarþýðingar skila meira en 80 % dæmigerðra forritsstrengja í gæðum sem hæfa rekstrarumhverfi. Nýttu mannlega þýðendur fyrir lögfræðitexta, vörumerkjarödd og menningarlega viðkvæmt efni þar sem blæbrigði skipta mestu.
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-vinnuferli fyrir þýðingar

Þýddu á eiginleikagreininni áður en hún er sameinuð, ekki eftir á. Þannig inniheldur hver sameining við main fullgerðar þýðingar. Bættu við prófun fyrir sameiningu sem staðfestir að þýðingar séu fullgerðar fyrir öll studd tungumál.

Stórar JSON-tungumálaskrár valda oft sameiningarárekstrum þegar margar greinar breyta þeim samtímis. Raðaðu lyklum í stafrófsröð og hafðu einn lykil í hverri línu til að minnka breytingasamanburðinn og auðvelda úrlausn árekstra.

Þýðingarskrár eru geymdar í gagnasafninu ásamt kóðanum. Þær eru útgáfustýrðar, hægt er að yfirfara þær í togabeiðnum og þær eru gefnar út um sömu vinnslurás og allt annað.
.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');
\""

Algengar gryfjur

Að meðhöndla staðfærslu sem eftiráverk

Stærstu mistökin eru að bíða með þýðingar þar til þróun lýkur. Það skapar flöskuhálsa, tefur útgáfur og gerir þýðingar að aukaatriði. Þýddu meðan á þróun stendur, ekki eftir á.

Engin sannprófun þýðinga á CI-stigi

Án sjálfvirkra prófana berast þýðingar sem vantar, skemmdir staðgenglar og ógild snið í rekstrarumhverfið. Bættu sannprófun á fullgerð og sniði við CI-vinnslurásina.

Óþarflega flókin TMS-lausn

TMS var hannað til að halda utan um vinnuferli mannlegra þýðenda. Ef þú notar gervigreindarþýðingar þarftu hugsanlega ekki þá yfirbyggingu sem TMS fylgir. Byrjaðu einfalt — þýddu í þróunarumhverfinu eða CI/CD — og bættu aðeins við TMS ef þú þarft að halda utan um mannlega þýðendur.

Ekki fylgst með hversu nýlegar þýðingar eru

Án slíkrar rekjunar veistu ekki hvaða þýðingar eru úreltar. Frumstrengir breytast en gamlar þýðingar haldast óbreyttar. Byggðu rekgildisgreiningu inn í vinnuferlið til að finna úrelt efni.

Prófaðu i18n Agent núna

Slepptu þýðingarskránni þinni hér

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

eða smelltu til að fletta

Markmál

Engin skráning nauðsynlegKostnaðaráætlun samstundis

Algengar spurningar