From f7dad0bd0aed46a64e63abcc9e32bd207821837d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Tue, 10 Sep 2024 16:11:29 +0200 Subject: [PATCH] feat: create a module for internationalization --- src/internationalization/cs_cz.json | 19 ++++++++++++++++ src/internationalization/en_us.json | 19 ++++++++++++++++ src/internationalization/mod.rs | 34 +++++++++++++++++++++++++++++ src/main.rs | 1 + 4 files changed, 73 insertions(+) create mode 100644 src/internationalization/cs_cz.json create mode 100644 src/internationalization/en_us.json create mode 100644 src/internationalization/mod.rs diff --git a/src/internationalization/cs_cz.json b/src/internationalization/cs_cz.json new file mode 100644 index 0000000..0687f79 --- /dev/null +++ b/src/internationalization/cs_cz.json @@ -0,0 +1,19 @@ +{ + "id": "cs-CZ", + "texts": { + "none": "žádný", + "long_term": "dlouhodobé", + "yesterday": "včera", + "today": "dnes", + "tomorrow": "zítra", + "overdue": "zpožděné", + "formats": { + "date_format": "%-d. %B", + "date_year_format": "%-d. %B %Y", + "date_weekday_format": "%A %-d. %B", + "date_weekday_year_format": "%A %-d. %B %Y", + "weekday_lowercase_first": "true", + "time_format": "%-H:%M" + } + } +} diff --git a/src/internationalization/en_us.json b/src/internationalization/en_us.json new file mode 100644 index 0000000..e3a6a74 --- /dev/null +++ b/src/internationalization/en_us.json @@ -0,0 +1,19 @@ +{ + "id": "en-US", + "texts": { + "none": "none", + "long_term": "long-term", + "yesterday": "yesterday", + "today": "today", + "tomorrow": "tomorrow", + "overdue": "overdue", + "formats": { + "date_format": "%B %-d", + "date_year_format": "%B %-d, %Y", + "date_weekday_format": "%A, %B %-d", + "date_weekday_year_format": "%A, %B %-d, %Y", + "weekday_lowercase_first": "false", + "time_format": "%-I:%M %P" + } + } +} diff --git a/src/internationalization/mod.rs b/src/internationalization/mod.rs new file mode 100644 index 0000000..cc2560c --- /dev/null +++ b/src/internationalization/mod.rs @@ -0,0 +1,34 @@ +use std::ops::Deref; +use std::str::FromStr; +use chrono::Locale; +use dioxus_sdk::i18n::Language; +use unic_langid_impl::LanguageIdentifier; + +const EN_US: &str = include_str!("en_us.json"); +const CS_CZ: &str = include_str!("cs_cz.json"); + +pub(crate) fn get_languages() -> Vec { + Vec::from([EN_US, CS_CZ]).into_iter().map(|texts| Language::from_str(texts).unwrap()).collect() +} + +pub(crate) struct LocaleFromLanguageIdentifier<'a>(&'a LanguageIdentifier); + +impl<'a> Deref for LocaleFromLanguageIdentifier<'a> { + type Target = LanguageIdentifier; + + fn deref(&self) -> &Self::Target { + self.0 + } +} + +impl<'a> From> for Locale { + fn from(language_identifier: LocaleFromLanguageIdentifier) -> Self { + language_identifier.to_string().replace("-", "_").parse().unwrap() + } +} + +impl<'a> From<&'a LanguageIdentifier> for LocaleFromLanguageIdentifier<'a> { + fn from(language_identifier: &'a LanguageIdentifier) -> Self { + LocaleFromLanguageIdentifier(language_identifier) + } +} diff --git a/src/main.rs b/src/main.rs index 31ce965..7324db6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ mod schema; mod server; mod query; mod utils; +mod internationalization; use components::app::App; use dioxus::prelude::*;