Skip to main content
Open Source CLI Tool

i18n Validator

Provjerite nedostaju li u datotekama prijevoda ključevi, jesu li rezervirana mjesta oštećena i jesu li množine nedosljedne. Jedna naredba. 9 provjera. 32 formata. Bez konfiguracije.

9 checks 32 formats Zero config Native Rust binary

Problem

Problemi s prijevodom nevidljivi su dok korisnici ne naiđu na njih. Ključ koji nedostaje prikazuje neobrađenu putanju poput "settings.billing.title" umjesto stvarnog teksta. Oštećeno rezervirano mjesto prikazuje "{price}" kao doslovan tekst umjesto "$9.99". Neispravno oblikovana množina uzrokuje rušenje kada je broj jednak nuli. Te pogreške prolaze pregled koda jer nitko ručno ne uspoređuje 15 datoteka lokaliteta.

🔑

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

Većina alata za provjeru vezana je uz određeni format (samo JSON ili samo YAML) i zahtijeva prilagođeni testni kod za svaki projekt. Pogreške u prijevodu često se otkriju tek tijekom izvođenja, kada korisnici vide neispravno korisničko sučelje.

Rješenje

i18n-validate pregledava sve Vaše datoteke prijevoda u jednom prolazu. Automatski otkriva raspored direktorija i format datoteke, uspoređuje svaki jezik s referentnim te točno prijavljuje što nije u redu i gdje. Bez dodataka, konfiguracije i prilagođenog testnog koda.

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

Instalacija

Instalirajte ga kao globalni CLI alat putem željenog upravitelja paketa. npm paket uključuje nativnu binarnu datoteku napisanu u Rustu — nije potrebno prevođenje izvornog koda ni instaliranje ovisnosti izvođenja.

Terminal
npm install -g @i18n-agent/i18n-validate
npm paket uključuje unaprijed prevedenu nativnu binarnu datoteku za macOS, Linux i Windows. Rust toolchain nije potreban.

Upotreba

Usmjerite alat na direktorij lokaliteta. Automatski će otkriti referentni jezik, raspored direktorija i format datoteke. Za većinu projekata nije potrebna konfiguracija.

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 integracija

Dodajte provjeru prijevoda u proces za zahtjeve za povlačenje. Alat generira JUnit XML koji se integrira s izvjestiteljima o testovima za GitHub Actions, artefaktima GitLab CI-ja i svakim CI sustavom koji podržava 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.

Podržani formati

Zahvaljujući alatu i18n-convert, validator odmah podržava 32 formata i18n datoteka. Nisu potrebni dodaci ni zasebna konfiguracija formata — alat automatski otkriva format na temelju datotečnog nastavka i sadržaja.

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

Konfiguracija

Za većinu projekata radi bez konfiguracije. Kada Vam je potrebna veća kontrola — kako biste promijenili razinu ozbiljnosti provjere, postavili očekivane jezike ili izuzeli jezike na kojima se još radi — izradite datoteku .i18n-validate.toml u korijenu projekta.

.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

Isprobajte i18n Agent odmah

Povucite datoteku za prijevod ovdje

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

ili kliknite za odabir

Ciljni jezici

Registracija nije potrebnaProcjena odmah

Česta pitanja