Skip to main content
Open Source CLI Tool

i18n-validator

Kontrollera översättningsfiler efter saknade nycklar, trasiga platshållare och inkonsekventa pluralformer. Ett kommando. 9 kontroller. 32 format. Ingen konfiguration.

9 checks 32 formats Zero config Native Rust binary

Problemet

Översättningsproblem syns inte förrän användarna stöter på dem. En saknad nyckel visar en rå sökväg som "settings.billing.title" i stället för riktig text. En trasig platshållare återger "{price}" som bokstavlig text i stället för "9,99 USD". En felaktig pluralform får appen att krascha när antalet är noll. De här felen slinker igenom kodgranskningen, eftersom ingen jämför 15 språkfiler manuellt.

🔑

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

De flesta valideringsverktyg är formatspecifika (endast JSON eller endast YAML) och kräver anpassad testkod för varje projekt. Översättningsfel upptäcks ofta först vid körning, när användarna ser ett trasigt gränssnitt.

Lösningen

i18n-validate går igenom alla dina översättningsfiler i ett svep. Verktyget identifierar automatiskt katalogstrukturen och filformatet, jämför varje språk med referensen och visar exakt vad som är fel och var. Inga insticksprogram, ingen konfiguration och ingen anpassad testkod.

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

Installation

Installera verktyget globalt för kommandoraden med den pakethanterare du föredrar. npm-paketet innehåller en systemspecifik binärfil skriven i Rust – ingen kompilering eller några körningsberoenden krävs.

Terminal
npm install -g @i18n-agent/i18n-validate
npm-paketet innehåller en förkompilerad systemspecifik binärfil för macOS, Linux och Windows. Ingen Rust-verktygskedja behövs.

Användning

Ange katalogen med dina språkfiler. Verktyget identifierar automatiskt referensspråket, katalogstrukturen och filformatet. För de flesta projekt krävs ingen konfiguration.

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-integrering

Lägg till översättningsvalidering i ditt arbetsflöde för pull requests. Verktyget genererar JUnit XML som kan integreras med testrapportering i GitHub Actions, artefakter i GitLab CI och alla CI-system som stöder 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.

Format som stöds

Med hjälp av i18n-convert stöder validatorn 32 i18n-filformat direkt. Inga formatspecifika insticksprogram eller någon konfiguration behövs – verktyget identifierar automatiskt formatet utifrån filändelser och innehåll.

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

Konfiguration

För de flesta projekt fungerar det utan konfiguration. När du behöver mer kontroll – till exempel ändra kontrollernas allvarlighetsgrad, ange förväntade språk eller utesluta pågående översättningar – skapar du filen .i18n-validate.toml i projektets rotkatalog.

.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

Prova i18n Agent nu

Släpp din översättningsfil här

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

eller klicka för att välja en fil

Målspråk

Ingen registrering krävsPrisuppskattning direkt

Vanliga frågor