dioxus_translate/
lib.rs

1pub use dioxus_translate_macro::*;
2pub use dioxus_translate_types::Translator;
3
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6
7pub fn translate<T: Translator>(lang: &Language) -> T {
8    match lang {
9        #[cfg(feature = "ko")]
10        Language::Ko => T::ko(),
11        Language::En => T::en(),
12    }
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Copy, JsonSchema)]
16pub enum Language {
17    #[cfg(feature = "ko")]
18    #[serde(rename = "ko")]
19    Ko,
20    #[serde(rename = "en")]
21    En,
22}
23
24impl Default for Language {
25    fn default() -> Self {
26        #[cfg(feature = "web")]
27        {
28            use std::str::FromStr;
29
30            let w = web_sys::window().unwrap();
31            let loc = w.location().pathname().unwrap_or_default().clone();
32            let paths: Vec<_> = loc.split("/").collect();
33            if paths.len() > 1 {
34                return Language::from_str(paths[1]).unwrap();
35            }
36        }
37        Language::En
38    }
39}
40
41impl std::fmt::Display for Language {
42    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
43        match self {
44            #[cfg(feature = "ko")]
45            Language::Ko => write!(f, "ko"),
46            Language::En => write!(f, "en"),
47        }
48    }
49}
50
51impl std::str::FromStr for Language {
52    type Err = String;
53
54    fn from_str(s: &str) -> Result<Self, Self::Err> {
55        match s {
56            #[cfg(feature = "ko")]
57            "ko" => Ok(Language::Ko),
58            "en" => Ok(Language::En),
59            _ => Ok(Language::En),
60        }
61    }
62}
63
64impl Language {
65    pub fn to_string(&self) -> String {
66        match self {
67            #[cfg(feature = "ko")]
68            Language::Ko => "ko".to_string(),
69            Language::En => "en".to_string(),
70        }
71    }
72}