| Crates.io | i18n-gen |
| lib.rs | i18n-gen |
| version | 0.1.0 |
| created_at | 2025-09-22 10:43:54.155393+00 |
| updated_at | 2025-09-22 10:43:54.155393+00 |
| description | CLI tool that generates fast, type-safe Rust i18n code (MessageKey enum + PHF maps) from JSON schema and locales. |
| homepage | |
| repository | https://github.com/sumitsharansatsangi/i18n-runtime |
| max_upload_size | |
| id | 1849829 |
| size | 20,234 |
A CLI tool that generates fast, type-safe Rust code for translations.
Designed to work seamlessly with i18n-runtime.
messages.schema.json + locales/*.jsonMessageKey enum (type-safe keys)phf maps for O(1) lookupssrc/generated_i18n/i18n-runtime’s fallback logic (en-IN-BR → en-IN → en)cargo install i18n-gen
messages.schema.json:{
"keys": ["welcome", "login_success", "login_failed"]
}
locales/. Example locales/en.json:{
"welcome": "Welcome!",
"login_success": "You have logged in successfully.",
"login_failed": "Login failed. Please try again."
}
i18n-gen ./ ./src/generated_i18n
src/generated_i18n/generated_keys.rs # MessageKey enum
src/generated_i18n/locales/EN.rs # en.json → phf::Map
src/generated_i18n/locales/HI_IN.rs # hi-IN.json → phf::Map
src/generated_i18n/mod.rs # registry
In src/main.rs:
// include generated code
include!("generated_i18n/generated_keys.rs");
mod generated_i18n { include!("generated_i18n/mod.rs"); }
use i18n_runtime::{I18n, Locale};
fn main() {
let registry = generated_i18n::get_generated_registry();
let i18n = I18n::from_generated_registry(registry, "en");
let msg = i18n
.get_by_str_key(&Locale::new("en"), MessageKey::Welcome.as_str())
.unwrap();
println!("{}", msg); // Welcome!
}
locales/i18n-gen to regenerate Rust codeQ: Do I need this tool?
➡️ Only if you want compile-time PHF mode for maximum performance.
For dynamic translation loading, use i18n-runtime alone.
Q: Should I check in generated files to git? ➡️ Yes, recommended. Makes builds reproducible and avoids requiring the generator on every machine.
Q: Can I run it automatically in build.rs?
➡️ Yes! Just call i18n-gen from your build script. Or run it manually in CI.
MIT