Internationalization
If your application supports multiple languages, the Dioxus SDK crate contains helpers to make working with translations in your application easier.
The full code for internationalization
src/i18n.rs
use dioxus::prelude::*;
use dioxus_std::i18n::*;
use dioxus_std::translate;
use std::str::FromStr;
fn main() {
dioxus_web::launch(app);
}
static EN_US: &str = r#"{
"id": "en-US",
"texts": {
"messages": {
"hello_world": "Hello World!"
},
"messages.hello": "Hello {name}"
}
}"#;
static ES_ES: &str = r#"{
"id": "es-ES",
"texts": {
"messages": {
"hello_world": "Hola Mundo!"
},
"messages.hello": "Hola {name}"
}
}"#;
#[allow(non_snake_case)]
fn Body(cx: Scope) -> Element {
let i18 = use_i18(cx);
let change_to_english = move |_| i18.set_language("en-US".parse().unwrap());
let change_to_spanish = move |_| i18.set_language("es-ES".parse().unwrap());
render!(
button {
onclick: change_to_english,
label {
"English"
}
}
button {
onclick: change_to_spanish,
label {
"Spanish"
}
}
p { translate!(i18, "messages.hello_world") }
p { translate!(i18, "messages.hello", name: "Dioxus") }
)
}
fn app(cx: Scope) -> Element {
use_init_i18n(
cx,
"en-US".parse().unwrap(),
"en-US".parse().unwrap(),
|| {
let en_us = Language::from_str(EN_US).unwrap();
let es_es = Language::from_str(ES_ES).unwrap();
vec![en_us, es_es]
},
);
render!(Body {})
}