Skip to main content
Open Source CLI Tool

Walidator i18n

Sprawdzaj pliki tłumaczeń pod kątem brakujących kluczy, uszkodzonych symboli zastępczych i niespójności liczby mnogiej. Jedno polecenie. 9 kontroli. 32 formaty. Bez konfiguracji.

9 checks 32 formats Zero config Native Rust binary

Problem

Problemy z tłumaczeniami pozostają niewidoczne, dopóki nie natrafią na nie użytkownicy. Brakujący klucz wyświetla surową ścieżkę, taką jak „settings.billing.title”, zamiast właściwego tekstu. Uszkodzony symbol zastępczy pokazuje „{price}” jako zwykły tekst zamiast „39,99 zł”. Błędna forma liczby mnogiej powoduje awarię, gdy liczba wynosi zero. Takie błędy przechodzą przegląd kodu, ponieważ nikt nie porównuje ręcznie 15 plików językowych.

🔑

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

Większość walidatorów obsługuje tylko określony format — na przykład JSON albo YAML — i wymaga niestandardowego kodu testowego w każdym projekcie. Błędy tłumaczeń są często wykrywane dopiero podczas działania aplikacji, gdy użytkownicy widzą uszkodzony interfejs.

Rozwiązanie

i18n-validate skanuje wszystkie pliki tłumaczeń w jednym przebiegu. Automatycznie wykrywa układ katalogów i format pliku, porównuje każdy język z językiem referencyjnym oraz dokładnie wskazuje rodzaj i miejsce błędu. Bez wtyczek, konfiguracji i niestandardowego kodu testowego.

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

Instalacja

Zainstaluj narzędzie globalnie w CLI za pomocą wybranego menedżera pakietów. Pakiet npm zawiera natywny plik binarny Rust — kompilacja ani zależności środowiska uruchomieniowego nie są potrzebne.

Terminal
npm install -g @i18n-agent/i18n-validate
Pakiet npm zawiera wstępnie skompilowany natywny plik binarny dla systemów macOS, Linux i Windows. Zestaw narzędzi Rust nie jest potrzebny.

Użycie

Wskaż narzędziu katalog z plikami językowymi. Automatycznie wykryje język referencyjny, układ katalogów i format plików. W większości projektów nie jest wymagana żadna konfiguracja.

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

Integracja z CI/CD

Dodaj walidację tłumaczeń do pipeline pull requestów. Narzędzie tworzy wynik JUnit XML, który integruje się z modułami raportującymi testy GitHub Actions, artefaktami GitLab CI i każdym systemem CI obsługującym 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.

Obsługiwane formaty

Dzięki i18n-convert walidator od razu obsługuje 32 formaty plików i18n. Wtyczki ani konfiguracja dla poszczególnych formatów nie są potrzebne — narzędzie wykrywa format na podstawie rozszerzenia i zawartości pliku.

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

Konfiguracja

W większości projektów działa bez konfiguracji. Jeśli potrzebujesz większej kontroli — chcesz zmienić wagę kontroli, ustawić oczekiwane języki lub wykluczyć języki w toku — utwórz plik .i18n-validate.toml w katalogu głównym projektu.

.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

Wypróbuj i18n Agent

Upuść tutaj plik tłumaczenia

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

lub kliknij, aby go wybrać

Języki docelowe

Rejestracja nie jest wymaganaNatychmiastowa wycena

Najczęściej zadawane pytania