Skip to main content
Open Source CLI Tool

Валідатор i18n

Перевіряйте файли перекладу на відсутні ключі, пошкоджені заповнювачі та неузгоджені форми множини. Одна команда, 9 перевірок, 32 формати й жодних налаштувань.

9 checks 32 formats Zero config Native Rust binary

Проблема

Проблеми з перекладом непомітні, доки з ними не зіткнуться користувачі. Через відсутній ключ замість справжнього тексту показується необроблений шлях на кшталт «settings.billing.title». Пошкоджений заповнювач відображає «{price}» як звичайний текст замість «$9.99». Неправильно сформована множина спричиняє збій, коли кількість дорівнює нулю. Такі помилки залишаються непоміченими під час перевірки коду, адже ніхто вручну не порівнює 15 файлів локалей.

🔑

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

Більшість засобів перевірки підтримують лише окремі формати (тільки JSON або тільки YAML) і потребують спеціального коду тестування для кожного проєкту. Помилки перекладу часто виявляються лише під час виконання, коли користувачі бачать пошкоджений інтерфейс.

Рішення

i18n-validate за один прохід сканує всі Ваші файли перекладу. Інструмент автоматично визначає структуру каталогів і формат файлів, порівнює кожну мову з еталонною та точно повідомляє, що й де не так. Не потрібні ні плагіни, ні налаштування, ні спеціальний код для тестування.

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

Встановлення

Встановіть інструмент як глобальний CLI за допомогою бажаного менеджера пакетів. Пакет npm містить нативний виконуваний файл Rust, тому компіляція та залежності середовища виконання не потрібні.

Terminal
npm install -g @i18n-agent/i18n-validate
Пакет npm містить попередньо скомпільований нативний виконуваний файл для macOS, Linux і Windows. Набір інструментів Rust не потрібен.

Використання

Укажіть інструменту каталог із локалями. Він автоматично визначить еталонну мову, структуру каталогів і формат файлів. Для більшості проєктів налаштування не потрібні.

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

Додайте перевірку перекладів до процесу опрацювання pull request. Інструмент створює JUnit XML, сумісний зі звітами про тестування GitHub Actions, артефактами GitLab CI та будь-якою системою CI з підтримкою 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.

Підтримувані формати

Завдяки i18n-convert валідатор одразу підтримує 32 формати файлів i18n. Спеціальні плагіни чи налаштування для окремих форматів не потрібні — інструмент автоматично визначає формат за розширенням і вмістом файлу.

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

Налаштування

Для більшості проєктів стандартні параметри працюють без додаткових налаштувань. Якщо Вам потрібен більший контроль — змініть рівень серйозності перевірок, задайте очікувані мови або виключіть незавершені мови — створіть файл .i18n-validate.toml у корені проєкту.

.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

Спробуйте i18n Agent зараз

Перетягніть сюди файл для перекладу

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

або натисніть, щоб вибрати

Цільові мови

Реєстрація не потрібнаМиттєвий розрахунок

Поширені запитання