diff --git a/src/app.rs b/src/app.rs index 4f6b8a0..2b18bf0 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,15 +1,15 @@ +use crate::locales::{init_locales, trl}; +use crate::pages::home_page::HomePage; +use crate::pages::settings::Settings; use leptos::*; use leptos_meta::*; use leptos_router::*; -use crate::locales::trl; -use crate::pages::home_page::HomePage; -use crate::pages::settings::Settings; #[component] pub fn App() -> impl IntoView { // Provides context that manages stylesheets, titles, meta tags, etc. provide_meta_context(); - //provide_context(DialogOpener::new()); + init_locales(); view! { impl IntoView { */ } } - - diff --git a/src/locales/catalogues.rs b/src/locales/catalogues.rs index 1a45b64..549d56b 100644 --- a/src/locales/catalogues.rs +++ b/src/locales/catalogues.rs @@ -1,6 +1,7 @@ use std::collections::HashMap; use lazy_static::lazy_static; use leptos::*; +use crate::locales::Locales; lazy_static! { static ref LANGUAGES: HashMap<&'static str, HashMap<&'static str, &'static str>> = { @@ -24,20 +25,8 @@ lazy_static! { }; } -fn get_locales() -> Vec> { - let (loc, set_loc) = create_signal(Vec::new()); - - create_effect(move |_| { - let js_locales = window().navigator().languages(); - set_loc.update(|l| *l = js_locales.into_iter().map(|val| val.as_string()).collect::>()); - }); - - loc.get_untracked() -} - pub fn get_dictionary() -> Option<&'static HashMap<&'static str, &'static str>> { - let locs = get_locales(); - + let locs = use_context::().unwrap_or(Locales(vec![])).0; for loc in locs { if let Some(key) = loc { if let Some(k) = key.split("-").collect::>().get(0) { diff --git a/src/locales/mod.rs b/src/locales/mod.rs index f4e8d9a..8e6b2f4 100644 --- a/src/locales/mod.rs +++ b/src/locales/mod.rs @@ -1,10 +1,27 @@ -use std::borrow::Cow; use std::ops::Deref; use leptos::*; use crate::locales::catalogues::get_dictionary; mod catalogues; +#[derive(Debug, Clone)] +pub struct Locales(pub Vec>); + +pub fn init_locales() { + #[cfg(not(feature = "ssr"))] + { + let loc = Locales( + window() + .navigator() + .languages() + .into_iter() + .map(|val| val.as_string()) + .collect::>(), + ); + provide_context(loc); + } +} + pub fn trl(phrase: &str) -> impl Fn() -> String { let mut translated = phrase; if let Some(dict) = get_dictionary() { diff --git a/src/main.rs b/src/main.rs index 8c85cdf..6bcca17 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,3 @@ -use actix_web::middleware::DefaultHeaders; -use sqlx::migrate; -use sqlx::postgres::PgPoolOptions; - #[cfg(feature = "ssr")] #[actix_web::main] async fn main() -> std::io::Result<()> { @@ -15,6 +11,8 @@ async fn main() -> std::io::Result<()> { use actix_session::SessionMiddleware; use actix_web::cookie::Key; use actix_web::web::Data; + use sqlx::migrate; + use sqlx::postgres::PgPoolOptions; let conf = get_configuration(None).await.unwrap(); let addr = conf.leptos_options.site_addr;