0.4.1 - This version may not be safe as it has not been updated for a long time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform
Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.
GPL-3.0 - GNU General Public License v3.0 onlyA 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.
First add it to your Cargo.toml:
[dependencies]
rocket_i18n = "0.4"
gettext-macros = "0.1" # Provides proc-macros to manage translationsThen, 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 strings that may have a plural form, just add the plural and the number of element to the arguments
i18n!(i18n.catalog, "One new message", "{0} new messages", 42);Any extra argument, after a ;, will be used for formatting.
let user_name = "Alex";
i18n!(i18n.catalog, "Hello {0}!"; user_name);When using it with plural, {0} will be the number of elements, and other arguments will start
at {1}.
Because of its design, rocket_i18n is only compatible with askama, ructe or compiled templates
in general.
You can use the t macro in your templates, as long as they have a field called catalog to
store your catalog.
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();
}