Validator i18n
Lint file terjemahan untuk menemukan kunci hilang, placeholder rusak, dan inkonsistensi bentuk jamak. Satu perintah. 9 pemeriksaan. 32 format. Tanpa konfigurasi.
Masalahnya
Masalah terjemahan tidak terlihat hingga dialami pengguna. Kunci yang hilang menampilkan jalur mentah seperti "settings.billing.title", bukan teks sebenarnya. Placeholder rusak merender "{price}" sebagai teks literal, bukan "$9,99". Bentuk jamak tidak valid membuat aplikasi berhenti saat jumlahnya nol. Bug ini lolos peninjauan kode karena tidak ada yang membandingkan 15 file bahasa secara manual.
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
Solusinya
i18n-validate memindai semua file terjemahan dalam satu proses. Alat mendeteksi tata letak direktori dan format file secara otomatis, membandingkan setiap bahasa dengan referensi, serta melaporkan masalah dan lokasinya secara tepat. Tanpa plugin, konfigurasi, atau kode pengujian khusus.
| 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 failedInstalasi
Instal sebagai alat CLI global menggunakan pengelola paket pilihan Anda. Paket npm menyertakan binary Rust native—tidak diperlukan kompilasi atau dependensi runtime.
npm install -g @i18n-agent/i18n-validatePenggunaan
Arahkan alat ke direktori bahasa. Alat mendeteksi bahasa referensi, tata letak direktori, dan format file secara otomatis. Sebagian besar proyek tidak memerlukan konfigurasi.
# 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.xmlIntegrasi CI/CD
Tambahkan validasi terjemahan ke pipeline pull request. Alat menghasilkan JUnit XML yang terintegrasi dengan pelapor pengujian GitHub Actions, artefak GitLab CI, dan sistem CI apa pun yang mendukung 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.Format yang Didukung
Dengan dukungan i18n-convert, validator menangani 32 format file i18n secara langsung. Tidak diperlukan plugin atau konfigurasi spesifik format—alat mendeteksi format secara otomatis dari ekstensi file dan konten.
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
Konfigurasi
Tanpa konfigurasi sudah cukup untuk sebagian besar proyek. Saat Anda memerlukan kendali—mengganti tingkat keparahan pemeriksaan, mengatur bahasa yang diharapkan, atau mengecualikan bahasa WIP—buat file .i18n-validate.toml di root proyek.
# .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 validationCoba i18n Agent Sekarang
Lepaskan file terjemahan Anda di sini
JSON, YAML, PO, XML, CSV, Markdown, Properties
atau klik untuk menjelajahi
Bahasa target