i18n-audit 0.1.0

Rust i18n audit library and CLI for scanning translation usage, missing keys, and unused keys
Documentation

i18n-audit

Rust package/library for auditing translation usage in Rust codebases and comparing usage against translation repositories.

  • collect used translation keys from source code
  • identify dynamic/non-literal translation calls
  • load translation keys from locale repositories
  • compute missing and unused keys per locale
  • generate JSON and Tailwind HTML report (same dashboard-style structure)

Features

  • Scans Rust source usage for translation-like calls/macros:
    • t!(...), tr(...), gettext(...), dgettext(...), ngettext(...), fl!(...)
    • namespaced variants like rust_i18n::t!(...)
  • Detects:
    • literal translation keys
    • dynamic translation key expressions
  • Loads locale repositories from locales/ (configurable):
    • locales/{locale}.json|toml|yaml|yml
    • locales/{locale}/**/*.{json,toml,yaml,yml}
  • Reports:
    • missing keys per locale
    • unused keys per locale
    • dynamic warnings
    • used/missing key locations (file, line, column, char)
  • Outputs:
    • table output in terminal
    • JSON output
    • standalone Tailwind HTML dashboard output

Installation

Install CLI from crates.io:

cargo install i18n-audit

Use as a library in Cargo.toml:

[dependencies]

i18n-audit = "0.1"

Build from source:

cargo build

Usage

With .env defaults:

cargo run --bin i18n-audit-rust -- --env-file=.env

Table output:

cargo run --bin i18n-audit-rust -- --paths=src,examples,tests --lang-paths=locales

JSON output:

cargo run --bin i18n-audit-rust -- --format=json

Write JSON report to file:

cargo run --bin i18n-audit-rust -- --format=json --output=target/i18n-audit.json

Generate HTML dashboard:

cargo run --bin i18n-audit-rust -- --html --html-output=target/i18n-audit-latest.html

Fail CI when missing/unused keys exist:

cargo run --bin i18n-audit-rust -- --fail-on-missing --fail-on-unused

CLI Options

  • --locales=en,sr,de
  • --env-file=.env
  • --paths=src,examples,tests
  • --exclude=target,vendor,node_modules,.git
  • --format=table|json
  • --output=target/i18n-audit.json
  • --only-missing
  • --only-unused
  • --html
  • --html-output=target/i18n-audit-latest.html
  • --lang-paths=locales,translations
  • --lang-path=locales (legacy alias)
  • --follow-symlinks
  • --fail-on-missing
  • --fail-on-unused
  • --log-path=target/i18n-audit.log
  • --dashboard-url=http://localhost/i18n-audit/latest

Environment configuration

Rust package now supports .env configuration just like PHP/JS packages.

Supported keys:

  • I18N_AUDIT_LOCALES
  • I18N_AUDIT_SCAN_PATHS
  • I18N_AUDIT_EXCLUDE_PATHS
  • I18N_AUDIT_LANG_PATHS
  • I18N_AUDIT_FORMAT
  • I18N_AUDIT_HTML_OUTPUT_PATH
  • I18N_AUDIT_LOG_PATH
  • I18N_AUDIT_DASHBOARD_URL
  • I18N_AUDIT_FOLLOW_SYMLINKS

CSV values are split into arrays (for example I18N_AUDIT_SCAN_PATHS=src,examples,tests).

See .env.example for a ready-to-use template.

Library API

Main entry points:

  • AuditRunner
  • AuditOptions
  • Report
  • ReportHtmlRenderer

Testing

cargo test

CI

GitHub Actions workflow is included at .github/workflows/ci.yml and runs:

  • cargo fmt --check
  • cargo clippy --all-targets --all-features -- -D warnings
  • cargo test --all-targets --all-features