Валідатор i18n
Перевіряйте файли перекладу на відсутні ключі, пошкоджені заповнювачі та неузгоджені форми множини. Одна команда, 9 перевірок, 32 формати й жодних налаштувань.
Проблема
Проблеми з перекладом непомітні, доки з ними не зіткнуться користувачі. Через відсутній ключ замість справжнього тексту показується необроблений шлях на кшталт «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
Рішення
i18n-validate за один прохід сканує всі Ваші файли перекладу. Інструмент автоматично визначає структуру каталогів і формат файлів, порівнює кожну мову з еталонною та точно повідомляє, що й де не так. Не потрібні ні плагіни, ні налаштування, ні спеціальний код для тестування.
| Check | Severity | What it catches |
|---|---|---|
| missing-keys | error | Key exists in reference but is absent in a translation |
| extra-keys | error | Key exists in translation but not in the reference |
| placeholders | error | {price}, {{name}}, %s differ between languages |
| plural-structure | error | Plural forms are malformed or missing required categories |
| missing-languages | error | Expected language has no files or directory |
| orphaned-languages | error | Language files exist but are not in the expected list |
| parse-errors | error | File fails to parse (broken JSON, XML, YAML, etc.) |
| empty-values | warning | Key is present but the translation is an empty string |
| untranslated | warning | Translation is identical to the reference language |
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, тому компіляція та залежності середовища виконання не потрібні.
npm install -g @i18n-agent/i18n-validateВикористання
Укажіть інструменту каталог із локалями. Він автоматично визначить еталонну мову, структуру каталогів і формат файлів. Для більшості проєктів налаштування не потрібні.
# 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.
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--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
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
або натисніть, щоб вибрати
Цільові мови