ferro-lang
Localization crate for the Ferro web framework.
Provides JSON-based translation loading with per-request locale detection, string interpolation, and pluralization. Integrates directly with Ferro's request lifecycle via middleware.
Features
- JSON translation files — one file per locale (
en.json,fr.json, etc.) - Per-request locale detection —
Accept-Languageheader, query param (?lang=fr), or session value - String interpolation —
:namesyntax for named placeholders - Pluralization — locale-aware plural forms (
one | otherrules) - Validation message localization — translate Ferro validation error messages automatically
- Middleware —
LocaleMiddlewaresets the active locale on every request
Usage
use ;
// Load translations at startup
let lang = from_dir // loads en.json, fr.json, etc.
.default_locale
.build?;
// In middleware or handler
let greeting = lang.t;
// en.json: { "messages": { "welcome": "Hello, :name!" } }
// => "Hello, World!"
// Pluralization
let message = lang.t_count;
// en.json: { "items": { "count": "one item | :count items" } }
// => "1 item" or "5 items"
Documentation
Full documentation at docs.ferro-rs.dev.
License
MIT