Skip to main content
Open Source CLI Tool

i18n tikrintuvas

Tikrinkite vertimo failus dėl trūkstamų raktų, sugadintų vietos rezervavimo ženklų ir daugiskaitos neatitikimų. Viena komanda. 9 patikros. 32 formatai. Jokios konfigūracijos.

9 checks 32 formats Zero config Native Rust binary

Problema

Vertimo problemos nematomos, kol su jomis nesusiduria naudotojai. Dėl trūkstamo rakto vietoje tikro teksto rodomas neapdorotas kelias, pavyzdžiui, „settings.billing.title“. Dėl sugadinto vietos rezervavimo ženklo „{price}“ rodomas kaip paprastas tekstas, o ne „9,99 USD“. Netinkamai suformuota daugiskaita nulaužia programą, kai skaičius lygus nuliui. Šios klaidos praslysta pro kodo peržiūrą, nes niekas rankomis nelygina 15 lokalės failų.

🔑

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

Dauguma tikrinimo įrankių skirti konkrečiam formatui (tik JSON ar tik YAML) ir kiekvienam projektui reikia pasirinktinio testų kodo. Vertimo klaidos dažnai aptinkamos tik vykdymo metu, kai naudotojai pamato sugadintą UI.

Sprendimas

i18n-validate vienu kartu nuskaito visus vertimo failus. Jis automatiškai aptinka katalogų išdėstymą ir failų formatą, palygina kiekvieną kalbą su etalonu ir tiksliai nurodo, kas ir kur netinkama. Jokių papildinių, konfigūracijos ar pasirinktinio testų kodo.

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

Diegimas

Įdiekite kaip visuotinį CLI įrankį naudodami pageidaujamą paketų tvarkytuvę. npm pakete yra savasis Rust dvejetainis failas, todėl nereikia kompiliuoti ar diegti vykdymo priklausomybių.

Terminal
npm install -g @i18n-agent/i18n-validate
npm pakete yra iš anksto sukompiliuotas savasis dvejetainis failas, skirtas macOS, Linux ir Windows. Rust įrankių grandinės nereikia.

Naudojimas

Nurodykite įrankiui lokalių katalogą. Jis automatiškai aptinka etaloninę kalbą, katalogų išdėstymą ir failų formatą. Daugumoje projektų konfigūruoti nereikia.

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

CI/CD integracija

Pridėkite vertimų tikrinimą prie sujungimo užklausų konvejerio. Įrankis pateikia JUnit XML išvestį, kuri integruojama su GitHub Actions testų ataskaitomis, GitLab CI artefaktais ir bet kuria JUnit palaikančia CI sistema.

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

Palaikomi formatai

i18n-convert pagrįstas tikrintuvas iškart palaiko 32 i18n failų formatus. Nereikia konkretiems formatams skirtų papildinių ar konfigūracijos – įrankis automatiškai aptinka formatą pagal failo plėtinį ir turinį.

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

Konfigūracija

Daugumoje projektų viskas veikia be konfigūracijos. Kai reikia daugiau kontrolės – pakeisti patikros svarbą, nustatyti numatomas kalbas ar neįtraukti kuriamų kalbų – projekto šaknyje sukurkite .i18n-validate.toml failą.

.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

Išbandykite i18n Agent dabar

Nuvilkite vertimo failą čia

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

arba spustelėkite norėdami pasirinkti

Tikslinės kalbos

Registruotis nereikiaMomentinis įvertis

Dažnai užduodami klausimai