
Επικύρωση μεταφράσεων στο CI: Αυτοματοποιήστε τους ελέγχους i18n στο pipeline σας
Τα σφάλματα μετάφρασης δεν φαίνονται στην ανασκόπηση κώδικα. Ένα κλειδί που λείπει, ένα λανθασμένο placeholder, ένας μη έγκυρος τύπος πληθυντικού — τίποτα από αυτά δεν εμφανίζεται σε ένα diff. Η επικύρωση σε επίπεδο CI τα εντοπίζει πριν φτάσουν στην παραγωγή.
Γιατί τα σφάλματα μετάφρασης διαφεύγουν από την ανασκόπηση κώδικα
Ένας προγραμματιστής προσθέτει 10 νέα κλειδιά στο en.json και ενημερώνει τον κώδικα της λειτουργίας. Το άτομο που εξετάζει το PR ελέγχει τον κώδικα, επαληθεύει τα αγγλικά κείμενα και το εγκρίνει. Κανείς δεν συγκρίνει τα αρχεία των άλλων 14 γλωσσών. Τρία σφάλματα φτάνουν στην παραγωγή: από το de.json λείπουν 2 κλειδιά (οι γερμανόφωνοι χρήστες βλέπουν ανεπεξέργαστες διαδρομές κλειδιών), το fr.json περιέχει λανθασμένο placeholder {count} (οι γαλλόφωνοι χρήστες βλέπουν το κυριολεκτικό {count}) και το ja.json περιέχει μη έγκυρη έκφραση πληθυντικού ICU (η εφαρμογή καταρρέει για τους ιαπωνόφωνους χρήστες). Όλα αυτά μπορούν να αποτραπούν με έναν έλεγχο CI διάρκειας 30 δευτερολέπτων.
Εγκατάσταση του i18n-validate
Προσθέστε το i18n-validate στο έργο σας ως dev dependency. Υποστηρίζει εξαρχής τις μορφές JSON, YAML, PO, XLIFF και ARB — δεν απαιτείται διαμόρφωση για τη βασική χρήση.
npm install --save-dev @anthropic/i18n-validateΕνσωμάτωση με το GitHub Actions
Προσθέστε το i18n-validate ως βήμα στη ροή εργασίας των pull request. Το εργαλείο τερματίζεται με κωδικό 1 όταν εντοπίζονται σφάλματα, προκαλώντας αποτυχία του ελέγχου του PR. Χρησιμοποιήστε έξοδο JUnit XML μαζί με ένα test reporter action, ώστε να λαμβάνετε ενσωματωμένες επισημάνσεις απευθείας στο diff του PR.
# .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Ενσωμάτωση με το GitLab CI
Προσθέστε μια εργασία επικύρωσης μεταφράσεων στο pipeline του .gitlab-ci.yml. Το GitLab υποστηρίζει εγγενώς artifacts JUnit XML — μεταφορτώστε την αναφορά επικύρωσης και τα σφάλματα θα εμφανιστούν στην καρτέλα Test του merge request.
# .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/**/*Pre-Commit Hook
Για ταχύτερη ανατροφοδότηση, εκτελέστε την επικύρωση ως pre-commit hook. Έτσι, τα προβλήματα εντοπίζονται προτού καν φτάσουν στο CI, εξοικονομώντας χρόνο στο pipeline και συντομεύοντας τους κύκλους ανατροφοδότησης. Χρησιμοποιήστε το Husky (JS) ή το pre-commit (Python) για τη διαχείριση των hooks.
# .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Διαμόρφωση και επίπεδα σοβαρότητας
Προσαρμόστε τη συμπεριφορά της επικύρωσης με ένα αρχείο διαμόρφωσης .i18n-validate.toml. Ορίστε τη σοβαρότητα του ελέγχου (error, warning, off) ανά κανόνα, καθορίστε τις αναμενόμενες γλώσσες, εξαιρέστε γλώσσες των οποίων η μετάφραση βρίσκεται σε εξέλιξη (WIP) και διαμορφώστε τη μορφή εξόδου. Στο CI, μόνο τα errors προκαλούν αποτυχία του pipeline — τα warnings εμφανίζονται στην αναφορά, αλλά δεν εμποδίζουν τη διαδικασία.
// 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
ή κάντε κλικ για να επιλέξετε αρχείο
Γλώσσες-στόχοι