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}