localize_it
A tiny, fast, and zero-dependency localization system with #![no_std] support.
This crate provides a macro-based API to define compile-time locales and localized expressions
without dynamic memory, hash maps, or external dependencies. All localized expressions
are stored as static arrays, allowing localization via simple indexing. You can manage the
locale manually (via init_locale!), or use the built-in AtomicUsize locale storage with
Relaxed ordering (via init_locale_with_storage!).
Example
A program that asks the user to choose a language, enter their name, and then greets them in the selected language:
use ;
use ;
// Define available locales
init_locale_with_storage!;
// Expressions can be any type allowed in compile-time context
expressions!;
// Input helper for the demonstration
Recommended Project Structure
A recommended way to organize your project is to create a dedicated locale module that handles locale
initialization and contains grouped expression modules. For example:
src/
├─ main.rs
└─ locale/
├─ mod.rs # Initialization locale here
├─ error.rs # First module with expressions
└─ ui.rs # Second module with expressions
Design Constraints
- Not possible to update or add the translations without recompiling
- No plans to add automatic gender agreement, numeral declension, etc
Usage
Add the following to your Cargo.toml:
[]
= "1.5.0"
License
This project is licensed under either of
at your option.