Skip to main content
Open Source CLI Tool

i18n-validator

Kontrollér oversættelsesfiler for manglende nøgler, ødelagte pladsholdere og uoverensstemmelser i flertalsformer. Én kommando. 9 kontroller. 32 formater. Ingen konfiguration.

9 checks 32 formats Zero config Native Rust binary

Problemet

Oversættelsesproblemer er usynlige, indtil brugerne støder på dem. En manglende nøgle viser en rå sti som "settings.billing.title" i stedet for rigtig tekst. En ødelagt pladsholder gengiver "{price}" som bogstavelig tekst i stedet for "99,99 kr.". En ugyldig flertalsform får systemet til at gå ned, når antallet er nul. Disse fejl slipper gennem kodegennemgangen, fordi ingen manuelt sammenligner 15 landestandardfiler.

🔑

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 fleste valideringsværktøjer er formatspecifikke (kun JSON eller kun YAML) og kræver tilpasset testkode til hvert projekt. Oversættelsesfejl opdages ofte først under kørsel, når brugerne ser en fejlbehæftet brugerflade.

Løsningen

i18n-validate scanner alle dine oversættelsesfiler i én arbejdsgang. Værktøjet registrerer automatisk dit mappelayout og filformat, sammenligner hvert sprog med referencen og rapporterer præcist, hvad der er galt og hvor. Ingen plugins, ingen konfiguration og ingen tilpasset testkode.

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

Installer værktøjet som et globalt CLI-værktøj med din foretrukne pakkehåndtering. npm-pakken indeholder en oprindelig binær Rust-fil — der kræves ingen kompilering eller kørselstidsafhængigheder.

Terminal
npm install -g @i18n-agent/i18n-validate
npm-pakken indeholder en prækompileret oprindelig binær fil til macOS, Linux og Windows. Der kræves ingen Rust-værktøjskæde.

Brug

Peg værktøjet på din mappe med landestandarder. Det registrerer automatisk referencesproget, mappelayoutet og filformatet. De fleste projekter kræver 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-integration

Føj oversættelsesvalidering til din pull request-pipeline. Værktøjet genererer JUnit XML, som kan integreres med testrapporter i GitHub Actions, GitLab CI-artefakter og alle CI-systemer, der understøtter 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.

Understøttede formater

Validatoren drives af i18n-convert og understøtter 32 i18n-filformater direkte. Der kræves ingen formatspecifikke plugins eller konfiguration — værktøjet registrerer automatisk formatet ud fra filtypenavne og indhold.

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

De fleste projekter fungerer uden konfiguration. Når du har brug for mere kontrol — tilsidesættelse af kontrolniveauer, angivelse af forventede sprog eller udelukkelse af igangværende sprog — skal du oprette en .i18n-validate.toml-fil i projektets rodmappe.

.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

Prøv i18n Agent nu

Slip din oversættelsesfil her

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

eller klik for at vælge en fil

Målsprog

Kræver ingen tilmeldingEstimat med det samme

Ofte stillede spørgsmål