Skip to main content
Open Source CLI Tool

i18n Validator

I-lint ang mga translation file para sa nawawalang keys, sirang placeholders, at plural inconsistencies. Isang utos. 9 na check. 32 na format. Zero config.

9 checks 32 formats Zero config Native Rust binary

Ang Suliranin

Hindi nakikita ang mga isyu sa pagsasalin hangga't hindi ito nararanasan ng mga user. Ang nawawalang key ay nagpapakita ng raw path tulad ng "settings.billing.title" sa halip na totoong teksto. Ang sirang placeholder ay nagre-render ng "{price}" bilang literal na teksto sa halip na "$9.99". Ang malformed na plural ay nagka-crash kapag zero ang count. Nakakalusot ang mga bug na ito sa code review dahil walang nagma-manual diff ng 15 locale file.

🔑

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

Karamihan sa mga validation tool ay format-specific (JSON-only, YAML-only) at nangangailangan ng custom test code para sa bawat proyekto. Madalas nahuhuli ang mga bug sa pagsasalin sa runtime lang, kapag nakakita na ang mga user ng sirang UI.

Ang Solusyon

Sini-scan ng i18n-validate ang lahat ng inyong translation file sa isang pasada. Awtomatiko nitong nade-detect ang directory layout at file format, ikinukumpara ang bawat wika laban sa reference, at ini-uulat nang eksakto kung ano ang mali at kung saan. Walang plugin, walang configuration, walang custom test code.

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

Pag-install

I-install ito bilang global CLI tool gamit ang inyong paboritong package manager. Nagba-bundle ang npm package ng native Rust binary—walang kailangang compilation o runtime dependencies.

Terminal
npm install -g @i18n-agent/i18n-validate
Nagba-bundle ang npm package ng pre-compiled native binary para sa macOS, Linux, at Windows. Hindi kailangan ang Rust toolchain.

Paggamit

Ituro ang tool sa inyong locales directory. Awtomatiko nitong nade-detect ang reference language, directory layout, at file format. Hindi kailangan ng configuration sa karamihan ng mga proyekto.

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

Integrasyon sa CI/CD

Idagdag ang translation validation sa inyong pull request pipeline. Nag-o-output ang tool ng JUnit XML na nai-integrate sa GitHub Actions test reporters, GitLab CI artifacts, at anumang CI system na sumusuporta sa 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.

Mga Sinusuportahang Format

Pinapagana ng i18n-convert, sinusuportahan ng validator ang 32 i18n file format out of the box. Walang kailangang format-specific na plugin o configuration—awtomatikong nade-detect ng tool ang format mula sa file extensions at nilalaman.

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

Pag-configure

Para sa karamihan ng mga proyekto, gumagana ang zero config. Kapag kailangan ninyo ng kontrol—i-override ang check severity, itakda ang inaasahang mga wika, o i-exclude ang WIP na mga wika—gumawa ng .i18n-validate.toml file sa project root.

.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

Subukan ang i18n Agent Ngayon

I-drop dito ang inyong translation file

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

o i-click para mag-browse

Mga target language

Hindi kailangan ang signupInstant na estimate

Mga Madalas Itanong