Skip to main content
Open Source CLI Tool

Εργαλείο επικύρωσης i18n

Ελέγξτε στατικά τα αρχεία μετάφρασης για ελλείποντα κλειδιά, κατεστραμμένα placeholders και ασυνέπειες πληθυντικού. Μία εντολή. 9 έλεγχοι. 32 μορφές. Χωρίς ρυθμίσεις.

9 checks 32 formats Zero config Native Rust binary

Το πρόβλημα

Τα προβλήματα μετάφρασης παραμένουν αόρατα μέχρι να τα συναντήσουν οι χρήστες. Ένα ελλείπον κλειδί εμφανίζει μια ανεπεξέργαστη διαδρομή όπως «settings.billing.title» αντί για πραγματικό κείμενο. Ένα κατεστραμμένο placeholder αποδίδει το «{price}» ως κυριολεκτικό κείμενο αντί για «9,99 $». Μια λανθασμένη μορφή πληθυντικού προκαλεί κατάρρευση όταν το πλήθος είναι μηδέν. Αυτά τα σφάλματα ξεφεύγουν από τον έλεγχο κώδικα, επειδή κανείς δεν συγκρίνει χειροκίνητα 15 αρχεία γλώσσας.

🔑

Missing keys

Blank text or key paths shown to users

🔗

Broken placeholders

{price} displays as literal text instead of $9.99

📁

Orphaned files

Outdated translations confuse the build system

💥

Malformed files

Runtime crashes when users switch languages

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

Η λύση

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

CheckSeverityWhat it catches
missing-keyserrorKey exists in reference but is absent in a translation
extra-keyserrorKey exists in translation but not in the reference
placeholderserror{price}, {{name}}, %s differ between languages
plural-structureerrorPlural forms are malformed or missing required categories
missing-languageserrorExpected language has no files or directory
orphaned-languageserrorLanguage files exist but are not in the expected list
parse-errorserrorFile fails to parse (broken JSON, XML, YAML, etc.)
empty-valueswarningKey is present but the translation is an empty string
untranslatedwarningTranslation is identical to the reference language
Terminal output
i18n-validate v0.1.0 — validating ./locales

  Reference: en (2 files: translation.json, apiTester.json)
  Languages: de, ja, fr, es, zh-Hans, pt-BR, ko (7 found, 7 expected)
  Layout   : directory (auto-detected)
  Formats  : i18next JSON (auto-detected)

────────────────────────────────────────────────

ERRORS (5)

  ✗ missing-keys │ translation.json
    Key "settings.billing.title"
      missing in: ja, ko

  ✗ placeholders │ translation.json
    Key "pricing.total" — expected: {price}, {currency}
      de:  found {price} only — missing {currency}

────────────────────────────────────────────────

WARNINGS (2)

  ⚠ empty-values │ translation.json
    Key "onboarding.step3.hint"
      empty in: de, fr

────────────────────────────────────────────────

  5 errors, 2 warnings across 7 languages
  ✗ Validation failed

Εγκατάσταση

Εγκαταστήστε το ως καθολικό εργαλείο CLI με τον διαχειριστή πακέτων της επιλογής σας. Το πακέτο npm περιλαμβάνει ένα εγγενές εκτελέσιμο αρχείο Rust — δεν απαιτείται μεταγλώττιση ούτε εξαρτήσεις χρόνου εκτέλεσης.

Terminal
npm install -g @i18n-agent/i18n-validate
Το πακέτο npm περιλαμβάνει ένα προμεταγλωττισμένο εγγενές εκτελέσιμο αρχείο για macOS, Linux και Windows. Δεν απαιτείται toolchain Rust.

Χρήση

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

Terminal
# Zero-config validation
i18n-validate ./locales

# JSON output for scripting
i18n-validate ./locales --format json | jq '.summary'

# CI/CD with JUnit XML
i18n-validate ./locales --format junit -o i18n-report.xml

Ενσωμάτωση CI/CD

Προσθέστε την επικύρωση μεταφράσεων στο pipeline των pull requests. Το εργαλείο παράγει JUnit XML που ενσωματώνεται με test reporters του GitHub Actions, artifacts του GitLab CI και οποιοδήποτε σύστημα CI υποστηρίζει JUnit.

.github/workflows/validate-i18n.yml
name: Validate Translations
on:
  pull_request:
    paths: ['locales/**', 'public/locales/**']

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

      - name: Validate translations
        run: npx @i18n-agent/i18n-validate ./locales --format junit -o i18n-report.xml

      - uses: dorny/test-reporter@v1
        if: always()
        with:
          name: i18n validation
          path: i18n-report.xml
          reporter: java-junit
The tool exits with code 1 when errors are found, so it naturally fails CI. Use --strict to also fail on warnings.

Υποστηριζόμενες μορφές

Με την υποστήριξη του i18n-convert, το εργαλείο επικύρωσης υποστηρίζει εξαρχής 32 μορφές αρχείων i18n. Δεν απαιτούνται πρόσθετα ή ρυθμίσεις για συγκεκριμένες μορφές — το εργαλείο εντοπίζει αυτόματα τη μορφή από τις επεκτάσεις και το περιεχόμενο των αρχείων.

Mobile & Desktop

Android XML, Xcode String Catalog, iOS Strings, iOS Stringsdict, Flutter ARB, Qt Linguist

Web & Frameworks

Structured JSON, i18next JSON, JSON5, HJSON, YAML (Rails), YAML (Plain), JavaScript, TypeScript, PHP/Laravel, NEON

Standards & Exchange

XLIFF 1.2, XLIFF 2.0, Gettext PO, TMX, .NET RESX, Java Properties

Data & Other

CSV, Excel (.xlsx), TOML, INI, SRT Subtitles, Markdown, Plain Text

Ρυθμίσεις

Για τα περισσότερα έργα δεν απαιτούνται ρυθμίσεις. Όταν χρειάζεστε περισσότερο έλεγχο — για να αλλάξετε το επίπεδο σοβαρότητας ενός ελέγχου, να ορίσετε τις αναμενόμενες γλώσσες ή να εξαιρέσετε γλώσσες WIP — δημιουργήστε ένα αρχείο .i18n-validate.toml στη ρίζα του έργου σας.

.i18n-validate.toml
# .i18n-validate.toml
ref = "en"
expect = ["de", "ja", "fr", "es", "zh-Hans", "pt-BR", "ko"]

[checks]
missing-keys = "error"
extra-keys = "error"
placeholders = "error"
empty-values = "warning"
untranslated = "warning"

[languages.ko]
missing-keys = "warning"    # Korean is WIP

[languages.ar]
skip = true                 # Exclude from validation

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

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

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

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

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

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

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