Skip to main content
Open Source CLI Tool

Validator i18n

Lint file terjemahan untuk menemukan kunci hilang, placeholder rusak, dan inkonsistensi bentuk jamak. Satu perintah. 9 pemeriksaan. 32 format. Tanpa konfigurasi.

9 checks 32 formats Zero config Native Rust binary

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

Sebagian besar alat validasi hanya mendukung format tertentu (hanya JSON atau YAML) dan memerlukan kode pengujian khusus untuk setiap proyek. Bug terjemahan sering baru ditemukan saat runtime ketika pengguna melihat UI rusak.

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.

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

Instalasi

Instal sebagai alat CLI global menggunakan pengelola paket pilihan Anda. Paket npm menyertakan binary Rust native—tidak diperlukan kompilasi atau dependensi runtime.

Terminal
npm install -g @i18n-agent/i18n-validate
Paket npm menyertakan binary native yang telah dikompilasi untuk macOS, Linux, dan Windows. Tidak diperlukan toolchain Rust.

Penggunaan

Arahkan alat ke direktori bahasa. Alat mendeteksi bahasa referensi, tata letak direktori, dan format file secara otomatis. Sebagian besar proyek tidak memerlukan konfigurasi.

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

Integrasi 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.

.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 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
# .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

Coba i18n Agent Sekarang

Lepaskan file terjemahan Anda di sini

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

atau klik untuk menjelajahi

Bahasa target

Tidak perlu mendaftarEstimasi instan

Pertanyaan yang Sering Diajukan