Skip to main content

Επικύρωση μεταφράσεων στο CI: Αυτοματοποιήστε τους ελέγχους i18n στο pipeline σας

Τα σφάλματα μετάφρασης δεν φαίνονται στην ανασκόπηση κώδικα. Ένα κλειδί που λείπει, ένα λανθασμένο placeholder, ένας μη έγκυρος τύπος πληθυντικού — τίποτα από αυτά δεν εμφανίζεται σε ένα diff. Η επικύρωση σε επίπεδο CI τα εντοπίζει πριν φτάσουν στην παραγωγή.

1

Γιατί τα σφάλματα μετάφρασης διαφεύγουν από την ανασκόπηση κώδικα

Ένας προγραμματιστής προσθέτει 10 νέα κλειδιά στο en.json και ενημερώνει τον κώδικα της λειτουργίας. Το άτομο που εξετάζει το PR ελέγχει τον κώδικα, επαληθεύει τα αγγλικά κείμενα και το εγκρίνει. Κανείς δεν συγκρίνει τα αρχεία των άλλων 14 γλωσσών. Τρία σφάλματα φτάνουν στην παραγωγή: από το de.json λείπουν 2 κλειδιά (οι γερμανόφωνοι χρήστες βλέπουν ανεπεξέργαστες διαδρομές κλειδιών), το fr.json περιέχει λανθασμένο placeholder {count} (οι γαλλόφωνοι χρήστες βλέπουν το κυριολεκτικό {count}) και το ja.json περιέχει μη έγκυρη έκφραση πληθυντικού ICU (η εφαρμογή καταρρέει για τους ιαπωνόφωνους χρήστες). Όλα αυτά μπορούν να αποτραπούν με έναν έλεγχο CI διάρκειας 30 δευτερολέπτων.

Τα σφάλματα μετάφρασης έχουν μια μοναδική ιδιότητα: δεν είναι ορατά ούτε στον προγραμματιστή ούτε στο άτομο που εξετάζει τον κώδικα και γίνονται αντιληπτά μόνο από τους χρήστες ενός συγκεκριμένου locale. Η επικύρωση στο CI είναι ο μόνος αξιόπιστος τρόπος να τα εντοπίσετε πριν από την παραγωγή.
2

Εγκατάσταση του i18n-validate

Προσθέστε το i18n-validate στο έργο σας ως dev dependency. Υποστηρίζει εξαρχής τις μορφές JSON, YAML, PO, XLIFF και ARB — δεν απαιτείται διαμόρφωση για τη βασική χρήση.

Terminal
npm install --save-dev @anthropic/i18n-validate
3

Ενσωμάτωση με το GitHub Actions

Προσθέστε το i18n-validate ως βήμα στη ροή εργασίας των pull request. Το εργαλείο τερματίζεται με κωδικό 1 όταν εντοπίζονται σφάλματα, προκαλώντας αποτυχία του ελέγχου του PR. Χρησιμοποιήστε έξοδο JUnit XML μαζί με ένα test reporter action, ώστε να λαμβάνετε ενσωματωμένες επισημάνσεις απευθείας στο diff του PR.

.github/workflows/i18n-validate.yml
# .github/workflows/i18n-validate.yml
name: Validate Translations

on:
  pull_request:
    paths:
      - 'src/locales/**'
      - 'public/locales/**'

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install dependencies
        run: npm ci

      - name: Validate translation files
        run: npx i18n-validate \
          --source src/locales/en.json \
          --targets 'src/locales/*.json' \
          --check-missing \
          --check-unused \
          --check-placeholders \
          --check-plurals \
          --min-coverage 95 \
          --junit-output reports/i18n.xml

      - name: Upload report
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: i18n-validation-report
          path: reports/i18n.xml
Καθορίστε συγκεκριμένη έκδοση του i18n-validate στη ροή εργασίας σας, για να αποφύγετε απροσδόκητες αστοχίες από νέους κανόνες επικύρωσης. Χρησιμοποιείτε το @latest μόνο κατά την ανάπτυξη.
4

Ενσωμάτωση με το GitLab CI

Προσθέστε μια εργασία επικύρωσης μεταφράσεων στο pipeline του .gitlab-ci.yml. Το GitLab υποστηρίζει εγγενώς artifacts JUnit XML — μεταφορτώστε την αναφορά επικύρωσης και τα σφάλματα θα εμφανιστούν στην καρτέλα Test του merge request.

.gitlab-ci.yml
# .gitlab-ci.yml
i18n-validate:
  stage: test
  image: node:20
  script:
    - npm ci
    - npx i18n-validate \
        --source src/locales/en.json \
        --targets 'src/locales/*.json' \
        --check-missing \
        --check-unused \
        --check-placeholders \
        --min-coverage 95 \
        --junit-output reports/i18n.xml
  artifacts:
    reports:
      junit: reports/i18n.xml
  only:
    changes:
      - src/locales/**/*
5

Pre-Commit Hook

Για ταχύτερη ανατροφοδότηση, εκτελέστε την επικύρωση ως pre-commit hook. Έτσι, τα προβλήματα εντοπίζονται προτού καν φτάσουν στο CI, εξοικονομώντας χρόνο στο pipeline και συντομεύοντας τους κύκλους ανατροφοδότησης. Χρησιμοποιήστε το Husky (JS) ή το pre-commit (Python) για τη διαχείριση των hooks.

.husky/pre-commit
# .husky/pre-commit
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

# Only validate if translation files changed
CHANGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '(locales|i18n|translations)/')

if [ -n "$CHANGED_FILES" ]; then
  echo "Translation files changed, validating..."
  npx i18n-validate \
    --source src/locales/en.json \
    --targets 'src/locales/*.json' \
    --check-missing \
    --check-placeholders
fi
Τα pre-commit hooks εκτελούνται σε κάθε commit, γι’ αυτό πρέπει να παραμένουν γρήγορα. Χρησιμοποιήστε τη σημαία --locales, ώστε να επικυρώνονται μόνο τα locale που άλλαξαν στο τρέχον commit και όχι όλα τα locale. Έτσι, η εκτέλεση του hook διαρκεί λιγότερο από 2 δευτερόλεπτα στα περισσότερα έργα.
6

Διαμόρφωση και επίπεδα σοβαρότητας

Προσαρμόστε τη συμπεριφορά της επικύρωσης με ένα αρχείο διαμόρφωσης .i18n-validate.toml. Ορίστε τη σοβαρότητα του ελέγχου (error, warning, off) ανά κανόνα, καθορίστε τις αναμενόμενες γλώσσες, εξαιρέστε γλώσσες των οποίων η μετάφραση βρίσκεται σε εξέλιξη (WIP) και διαμορφώστε τη μορφή εξόδου. Στο CI, μόνο τα errors προκαλούν αποτυχία του pipeline — τα warnings εμφανίζονται στην αναφορά, αλλά δεν εμποδίζουν τη διαδικασία.

i18n-validate.config.json
// i18n-validate.config.json
{
  "source": "src/locales/en.json",
  "targets": "src/locales/*.json",
  "checks": {
    "missing": true,         // Keys in source missing from target
    "unused": true,          // Keys in target not in source
    "placeholders": true,    // Mismatched {variables}
    "plurals": true,         // Missing CLDR plural forms
    "icu": true,             // ICU syntax validation
    "emptyValues": true,     // Empty string values
    "duplicateValues": false // Same value as source (untranslated)
  },
  "minCoverage": 95,
  "exclude": [
    "src/locales/pseudo.json"
  ],
  "junitOutput": "reports/i18n.xml",
  "format": "json"          // json | yaml | po | xliff
}

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

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

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

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

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

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

Συχνές ερωτήσεις για την επικύρωση μεταφράσεων στο CI