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.
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
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.
| Check | Severity | What it catches |
|---|---|---|
| missing-keys | error | Key exists in reference but is absent in a translation |
| extra-keys | error | Key exists in translation but not in the reference |
| placeholders | error | {price}, {{name}}, %s differ between languages |
| plural-structure | error | Plural forms are malformed or missing required categories |
| missing-languages | error | Expected language has no files or directory |
| orphaned-languages | error | Language files exist but are not in the expected list |
| parse-errors | error | File fails to parse (broken JSON, XML, YAML, etc.) |
| empty-values | warning | Key is present but the translation is an empty string |
| untranslated | warning | Translation is identical to the reference language |
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 failedInstalacja
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.
npm install -g @i18n-agent/i18n-validateUż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.
# 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.xmlIntegracja 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.
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--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
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 validationWypróbuj i18n Agent
Upuść tutaj plik tłumaczenia
JSON, YAML, PO, XML, CSV, Markdown, Properties
lub kliknij, aby go wybrać
Języki docelowe