Skip to main content

Συνεχής τοπική προσαρμογή χωρίς TMS

Ο κώδικάς σας διατίθεται συνεχώς στην παραγωγή. Το ίδιο πρέπει να συμβαίνει και με τις μεταφράσεις σας. Δείτε πώς να αυτοματοποιήσετε την τοπική προσαρμογή στη ροή εργασίας ανάπτυξης.

Τι είναι η συνεχής τοπική προσαρμογή;

Η συνεχής τοπική προσαρμογή είναι η πρακτική της αυτόματης μετάφρασης νέων συμβολοσειρών στο πλαίσιο της ροής εργασίας ανάπτυξης, αντί της ομαδοποίησης των μεταφράσεων σε περιοδικές εκδόσεις. Όταν ένας προγραμματιστής προσθέτει μια νέα λειτουργία με συμβολοσειρές UI, αυτές μεταφράζονται προτού κυκλοφορήσει η λειτουργία.

Η παραδοσιακή προσέγγιση

Οι περισσότερες ομάδες μεταφράζουν μαζικά: συλλέγουν τις νέες συμβολοσειρές, τις εξάγουν σε ένα TMS, περιμένουν τους μεταφραστές, εισάγουν τα αποτελέσματα και κατόπιν κυκλοφορούν την έκδοση. Έτσι δημιουργείται ένα σημείο συμφόρησης στην τοπική προσαρμογή, το οποίο καθυστερεί τις διεθνείς εκδόσεις κατά ημέρες ή εβδομάδες.

1

Ο προγραμματιστής προσθέτει νέες συμβολοσειρές στο αρχείο γλώσσας-πηγής

2

Οι συμβολοσειρές εξάγονται και μεταφορτώνονται σε μια πλατφόρμα TMS

3

Οι μεταφραστές ειδοποιούνται και αρχίζουν να εργάζονται

4

Οι μεταφράσεις ελέγχονται και εγκρίνονται

5

Γίνεται λήψη των μεταφρασμένων αρχείων και ενσωμάτωσή τους στο έργο

6

Η λειτουργία κυκλοφορεί με τις μεταφράσεις, έπειτα από ημέρες ή εβδομάδες

Days to weeks

Η προσέγγιση μέσα από το IDE

Με τη μετάφραση μέσα από το IDE, ο προγραμματιστής μεταφράζει τις συμβολοσειρές στο πλαίσιο της συνήθους ροής εργασίας προγραμματισμού. Χωρίς εξαγωγή, χωρίς μεταφόρτωση, χωρίς αναμονή — οι μεταφράσεις ολοκληρώνονται στην ίδια συνεδρία με την ανάπτυξη.

1

Ο προγραμματιστής προσθέτει νέες συμβολοσειρές στο αρχείο γλώσσας-πηγής

2

Ο προγραμματιστής ζητά από τον βοηθό AI να μεταφράσει το αρχείο

3

Τα μεταφρασμένα αρχεία εγγράφονται απευθείας στο έργο

4

Η λειτουργία κυκλοφορεί με τις μεταφράσεις στο ίδιο commit

Same commit

Η παραδοσιακή προσέγγιση

6 steps

Multiple tools and platforms

Days to weeks per cycle

Η προσέγγιση μέσα από το IDE

4 steps

Inside your editor

Same commit

3

Ρυθμίστε το pipeline μετάφρασης

Για τις ομάδες που θέλουν αυτοματοποιημένη μετάφραση πέρα από το IDE, προσθέστε ένα βήμα CI/CD που μεταφράζει τις νέες ή τροποποιημένες συμβολοσειρές σε κάθε push στο main. Λειτουργεί με GitHub Actions, GitLab CI ή οποιοδήποτε σύστημα CI/CD.

Ξεκινήστε με μετάφραση μέσα από το IDE για μικρές ομάδες. Προσθέστε αυτοματοποίηση CI/CD όταν η ομάδα σας ξεπεράσει τους 3-4 προγραμματιστές ή όταν χρειάζεστε εγγυημένες μεταφράσεις σε κάθε συγχώνευση στο main.

Προσθέστε τη μετάφραση ως βήμα στο υπάρχον pipeline CI/CD. Η μετάφραση εκτελείται μετά την επιτυχή ολοκλήρωση του build και πριν από τη διάθεση στην παραγωγή, ώστε κάθε έκδοση να περιλαμβάνει ενημερωμένες μεταφράσεις.
.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

Προσθέστε έλεγχο ποιότητας μετάφρασης στο CI

Οι αυτοματοποιημένοι έλεγχοι στο pipeline CI εντοπίζουν ελλείπουσες μεταφράσεις, κατεστραμμένα placeholders και μη έγκυρες μορφές μηνυμάτων ICU προτού φτάσουν στην παραγωγή. Πρόκειται για απλά scripts που συγκρίνουν το αρχείο γλώσσας-πηγής με όλες τις γλώσσες-στόχους.

Χωρίς επικύρωση μεταφράσεων σε επίπεδο CI, οι ελλείπουσες μεταφράσεις φτάνουν απαρατήρητες στην παραγωγή. Οι χρήστες βλέπουν ανεπεξέργαστα κλειδιά όπως «settings.title» ή κενές συμβολοσειρές αντί για μεταφρασμένο κείμενο. Ένας έλεγχος CI διάρκειας 5 λεπτών το αποτρέπει πλήρως.
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

Επικυρώστε τις μεταφράσεις στο CI

Προσθέστε το i18n-validate στο pipeline CI για να εντοπίζετε αυτόματα ελλείποντα κλειδιά, κατεστραμμένα placeholders και προβλήματα πληθυντικού. Χρησιμοποιήστε το i18n-pseudo για να δημιουργείτε ψευδομεταφράσεις για δοκιμές οπτικής παλινδρόμησης.
5

Εντοπίστε και αντιμετωπίστε την απόκλιση των μεταφράσεων

Η απόκλιση μετάφρασης προκύπτει όταν αλλάζουν οι συμβολοσειρές-πηγές, αλλά οι μεταφράσεις δεν ενημερώνονται. Το αγγλικό κείμενο λέει «Save changes», αλλά το γερμανικό εξακολουθεί να εμφανίζει το παλιό κείμενο. Ο εντοπισμός απόκλισης συγκρίνει τις χρονικές σημάνσεις ή τα hash περιεχομένου των αρχείων προέλευσης και μετάφρασης.

Οι παρωχημένες μεταφράσεις είναι χειρότερες από τις ελλείπουσες. Μια ελλείπουσα μετάφραση είναι εμφανώς λανθασμένη — οι χρήστες βλέπουν ένα κλειδί ή την εφεδρική γλώσσα. Μια παρωχημένη μετάφραση αποδίδει πειστικά το λάθος νόημα, γεγονός που μπορεί να παραπλανήσει τους χρήστες ή να προκαλέσει προβλήματα υποστήριξης.
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

Επιλέξτε την προσέγγιση μετάφρασης

Δεν χρειάζεται όλο το περιεχόμενο την ίδια προσέγγιση μετάφρασης. Οι συμβολοσειρές και οι ετικέτες UI αποδίδονται εξαιρετικά με μετάφραση AI. Τα κείμενα μάρκετινγκ ωφελούνται από AI και ανθρώπινο έλεγχο. Τα νομικά κείμενα και τα κείμενα συμμόρφωσης πρέπει πάντα να ανατίθενται σε επαγγελματίες μεταφραστές.

Η μετάφραση AI αποδίδει σε ποιότητα παραγωγής πάνω από το 80% των συνηθισμένων συμβολοσειρών εφαρμογών. Κρατήστε τους ανθρώπινους μεταφραστές για νομικά κείμενα, την επικοινωνιακή ταυτότητα της επωνυμίας και πολιτισμικά ευαίσθητο περιεχόμενο, όπου οι λεπτές αποχρώσεις έχουν τη μεγαλύτερη σημασία.
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 για μεταφράσεις

Μεταφράστε στον κλάδο της λειτουργίας σας πριν από τη συγχώνευση, όχι μετά. Έτσι διασφαλίζετε ότι κάθε συγχώνευση στο main περιλαμβάνει ολοκληρωμένες μεταφράσεις. Προσθέστε έναν έλεγχο πριν από τη συγχώνευση, ο οποίος επαληθεύει την πληρότητα των μεταφράσεων για όλες τις υποστηριζόμενες γλώσσες.

Τα μεγάλα αρχεία γλώσσας JSON προκαλούν συχνές διενέξεις συγχώνευσης όταν τροποποιούνται ταυτόχρονα από πολλούς κλάδους. Ταξινομήστε τα κλειδιά αλφαβητικά και χρησιμοποιήστε ένα κλειδί ανά γραμμή, ώστε να περιορίσετε το μέγεθος των diff και να επιλύετε ευκολότερα τις διενέξεις.

Τα αρχεία μετάφρασης βρίσκονται στο αποθετήριό σας μαζί με τον κώδικα. Υπόκεινται σε έλεγχο εκδόσεων, μπορούν να ελεγχθούν σε pull requests και διατίθενται μέσω του ίδιου pipeline με όλα τα υπόλοιπα.
.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');
\""

Συνήθεις παγίδες

Αντιμετώπιση της τοπικής προσαρμογής ως μεταγενέστερου σταδίου ανάπτυξης

Το μεγαλύτερο λάθος είναι να περιμένετε να ολοκληρωθεί η ανάπτυξη πριν μεταφράσετε. Έτσι δημιουργούνται σημεία συμφόρησης, καθυστερούν οι εκδόσεις και η μετάφραση αντιμετωπίζεται ως εκ των υστέρων προσθήκη. Μεταφράζετε κατά την ανάπτυξη, όχι μετά.

Απουσία επικύρωσης μεταφράσεων σε επίπεδο CI

Χωρίς αυτοματοποιημένους ελέγχους, οι ελλείπουσες μεταφράσεις, τα κατεστραμμένα placeholders και οι μη έγκυρες μορφές φτάνουν στην παραγωγή. Προσθέστε ελέγχους πληρότητας και εγκυρότητας μορφής στο pipeline CI.

Υπερβολικά σύνθετη υλοποίηση με TMS

Ένα TMS σχεδιάστηκε για τη διαχείριση ροών εργασίας ανθρώπινων μεταφραστών. Αν χρησιμοποιείτε μετάφραση AI, ενδέχεται να μη χρειάζεστε την πρόσθετη πολυπλοκότητα ενός TMS. Ξεκινήστε απλά — μεταφράστε στο IDE ή στο CI/CD — και προσθέστε TMS μόνο αν χρειάζεστε διαχείριση ανθρώπινων μεταφραστών.

Παράλειψη παρακολούθησης της ενημερότητας των μεταφράσεων

Χωρίς παρακολούθηση της ενημερότητας, δεν γνωρίζετε ποιες μεταφράσεις είναι παρωχημένες. Οι συμβολοσειρές-πηγές αλλάζουν, αλλά οι παλιές μεταφράσεις παραμένουν. Ενσωματώστε τον εντοπισμό απόκλισης στη ροή εργασίας σας για να βρίσκετε το παρωχημένο περιεχόμενο.

Δοκιμάστε τώρα το i18n Agent

Αφήστε εδώ το αρχείο μετάφρασής σας

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

ή κάντε κλικ για να επιλέξετε αρχείο

Γλώσσες-στόχοι

Δεν απαιτείται εγγραφήΆμεση εκτίμηση

Συχνές ερωτήσεις