diff --git a/src/locales/mod.rs b/src/locales/mod.rs index df41e81..e084c83 100644 --- a/src/locales/mod.rs +++ b/src/locales/mod.rs @@ -21,6 +21,32 @@ pub fn init_locales() { ); provide_context(loc); } + + #[cfg(feature = "ssr")] + { + use actix_web::HttpRequest; + use leptos::provide_context; + + let req = use_context::(); + if let Some(r) = req { + if r.query_string().contains("lang") { + let languages = r.query_string() + .split("&") + .map(|qc| { + let mut it = qc.split("=").take(2); (it.next().unwrap_or(""), it.next().unwrap_or("")) + }) + .filter(|l| l.0 == "lang") + .map(|l| l.1) + .collect::>(); + if !languages.is_empty() { + provide_context(Locales(vec![Some(languages.get(0).unwrap().to_string())])); + } + } else if let Some(al) = r.head().headers.get("accept-language") { + let loc = Locales(al.to_str().unwrap_or("").split(",").map(|l| Some(l.to_string())).collect()); + provide_context(loc); + } + } + } } pub fn trl(phrase: &str) -> impl Fn() -> String {