Skip to main content
Open Source CLI Tool

Pengesah i18n

Lint fail terjemahan untuk mengesan kekunci hilang, ruang letak rosak, dan ketidaktekalan bentuk jamak. Satu perintah. 9 pemeriksaan. 32 format. Tanpa konfigurasi.

9 checks 32 formats Zero config Native Rust binary

Masalahnya

Masalah terjemahan tidak kelihatan sehingga dialami pengguna. Kekunci yang hilang memaparkan laluan mentah seperti "settings.billing.title", bukan teks sebenar. Ruang letak rosak memaparkan "{price}" sebagai teks harfiah, bukan "$9.99". Bentuk jamak tidak sah menyebabkan aplikasi terhenti apabila bilangannya sifar. Pepijat ini terlepas semakan kod kerana tiada sesiapa membandingkan 15 fail 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

Kebanyakan alat pengesahan hanya menyokong format tertentu (JSON sahaja atau YAML sahaja) dan memerlukan kod ujian tersuai untuk setiap projek. Pepijat terjemahan kerap hanya dikesan semasa masa jalan apabila pengguna melihat UI rosak.

Penyelesaiannya

i18n-validate mengimbas semua fail terjemahan dalam satu proses. Alat mengesan susun atur direktori dan format fail secara automatik, membandingkan setiap bahasa dengan rujukan, serta melaporkan masalah dan lokasinya dengan tepat. Tiada pemalam, konfigurasi, atau kod ujian tersuai.

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

Pemasangan

Pasang sebagai alat CLI global menggunakan pengurus pakej pilihan anda. Pakej npm menyertakan binari Rust natif—tiada kompilasi atau kebergantungan masa jalan diperlukan.

Terminal
npm install -g @i18n-agent/i18n-validate
Pakej npm menyertakan binari natif yang telah dikompilasi untuk macOS, Linux, dan Windows. Tiada rantai alat Rust diperlukan.

Penggunaan

Halakan alat kepada direktori bahasa. Alat mengesan bahasa rujukan, susun atur direktori, dan format fail secara automatik. Kebanyakan projek 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

Penyepaduan CI/CD

Tambahkan pengesahan terjemahan pada saluran permintaan tarik. Alat menghasilkan JUnit XML yang bersepadu dengan pelapor ujian GitHub Actions, artifak GitLab CI, dan sebarang sistem CI yang menyokong 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 Disokong

Dengan sokongan i18n-convert, pengesah mengendalikan 32 format fail i18n secara langsung. Tiada pemalam atau konfigurasi khusus format diperlukan—alat mengesan format secara automatik daripada sambungan fail dan kandungan.

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 mencukupi untuk kebanyakan projek. Apabila anda memerlukan kawalan—menggantikan tahap keterukan pemeriksaan, menetapkan bahasa yang dijangka, atau mengecualikan bahasa WIP—cipta fail .i18n-validate.toml pada akar projek.

.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

Cuba i18n Agent Sekarang

Lepaskan fail terjemahan anda di sini

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

atau klik untuk semak imbas

Bahasa sasaran

Tidak perlu mendaftarAnggaran serta-merta

Soalan Lazim