5 unstable releases
Uses old Rust 2015
0.4.1 | Jun 15, 2019 |
---|---|
0.4.0 | Jan 20, 2019 |
0.3.1 | Nov 30, 2018 |
0.3.0 | Nov 29, 2018 |
0.1.0 | Jun 17, 2018 |
#123 in Internationalization (i18n)
35 downloads per month
16KB
115 lines
Rocket I18N
A crate to help you internationalize your Rocket or Actix Web applications.
It just selects the correct locale for each request, and return the corresponding gettext::Catalog
.
Usage
First add it to your Cargo.toml
:
[dependencies]
rocket_i18n = "0.4"
gettext-macros = "0.1" # Provides proc-macros to manage translations
Then, in your main.rs
:
# use rocket;
use gettext_macros::{compile_i18n, include_i18n, init_i18n};
init_i18n!("my_web_app", en, eo, it, pl);
fn main() {
rocket::ignite()
// Make Rocket manage your translations.
.manage(include_i18n!());
// Register routes, etc
}
compile_i18n!();
Then in all your requests you'll be able to use the i18n
macro to translate anything.
It takes a gettext::Catalog
and a string to translate as argument.
use gettext_macros::i18n;
use rocket_i18n::I18n;
#[get("/")]
fn route(i18n: I18n) -> &str {
i18n!(i18n.catalog, "Hello, world!")
}
For a detailed explanation about i18n!
, see its documentation.
You can also use the t
macro in your templates, as long as they have a field called catalog
to
store your catalog. This is especially useful for Askama templates.
Using with Actix Web
First, disable the default features so it doesn't pull in all of Rocket.
[dependencies.rocket_i18n]
version = "0.4"
default-features = false
features = ["actix-web"]
Then add it to your application.
use gettext_macros::*;
use rocket_i18n::{I18n, Internationalized, Translations};
fn route_handler(i18n: I18n) -> &str {
i18n!(i18n.catalog, "Hello, world!")
}
#[derive(Clone)]
struct MyState {
translations: Translations,
}
impl Internationalized for MyState {
fn get(&self) -> Translations {
self.translations.clone()
}
}
fn main() {
let state = MyState {
translations: rocket_i18n::i18n("your-domain", vec![ "en", "fr", "de", "ja" ]);
};
App::with_state(state)
.resource("", |r| r.with(route_handler))
.finish();
}
Dependencies
~11–16MB
~301K SLoC