From 95b476f9b4f34fbff98a10dff18851c833f7e817 Mon Sep 17 00:00:00 2001 From: arctic_hen7 Date: Wed, 8 Sep 2021 09:22:24 +1000 Subject: [PATCH] =?UTF-8?q?feat(i18n):=20=E2=9C=A8=20removed=20concept=20o?= =?UTF-8?q?f=20common=20locales?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All locales are now built together for simplicity. BREAKING CHANGE: common locales no longer exist --- .vscode/settings.json | 3 +++ examples/cli/src/lib.rs | 1 - examples/i18n/src/lib.rs | 3 +-- packages/perseus/src/build.rs | 8 ++++---- packages/perseus/src/macros.rs | 6 +----- packages/perseus/src/serve.rs | 1 + packages/perseus/src/translator.rs | 14 ++------------ 7 files changed, 12 insertions(+), 24 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..55ea5d575e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "conventionalCommits.scopes": ["i18n"] +} diff --git a/examples/cli/src/lib.rs b/examples/cli/src/lib.rs index b998a16c3d..ad4023d324 100644 --- a/examples/cli/src/lib.rs +++ b/examples/cli/src/lib.rs @@ -34,7 +34,6 @@ define_app! { ], locales: { default: "en-US", - common: [], other: [] } // config_manager: perseus::FsConfigManager::new() diff --git a/examples/i18n/src/lib.rs b/examples/i18n/src/lib.rs index c11dafd73c..47817708a9 100644 --- a/examples/i18n/src/lib.rs +++ b/examples/i18n/src/lib.rs @@ -35,7 +35,6 @@ define_app! { ], locales: { default: "en-US", - common: ["en-US", "fr-FR"], - other: ["es-ES"] + other: ["fr-FR", "es-ES"] } } diff --git a/packages/perseus/src/build.rs b/packages/perseus/src/build.rs index ebf875bfc9..dab14415f5 100644 --- a/packages/perseus/src/build.rs +++ b/packages/perseus/src/build.rs @@ -178,18 +178,18 @@ async fn build_templates_and_translator_for_locale( Ok(()) } -/// Runs the build process of building many templates for the given locales data, building directly for the default and common locales. -/// Any other locales should be built on demand. +/// Runs the build process of building many templates for the given locales data, building directly for all supported locales. This is +/// fine because of how ridiculously fast builds are. pub async fn build_app( templates: Vec>, locales: &Locales, config_manager: &impl ConfigManager, translations_manager: &impl TranslationsManager, ) -> Result<()> { - let locales_to_build = locales.get_default_and_common(); + let locales = locales.get_all(); let mut futs = Vec::new(); - for locale in locales_to_build { + for locale in locales { futs.push(build_templates_and_translator_for_locale( &templates, locale.to_string(), diff --git a/packages/perseus/src/macros.rs b/packages/perseus/src/macros.rs index c49b058b00..30f108672d 100644 --- a/packages/perseus/src/macros.rs +++ b/packages/perseus/src/macros.rs @@ -56,8 +56,7 @@ macro_rules! define_app { // This deliberately enforces verbose i18n definition, and forces developers to consider i18n as integral locales: { default: $default_locale:literal, - // The user doesn't have to define any common/other locales - common: [$($common_locale:literal),*], + // The user doesn't have to define any other locales other: [$($other_locale:literal),*] } $(,config_manager: $config_manager:expr)? @@ -82,9 +81,6 @@ macro_rules! define_app { pub fn get_locales() -> $crate::Locales { $crate::Locales { default: $default_locale.to_string(), - common: vec![ - $($common_locale.to_string()),* - ], other: vec![ $($other_locale.to_string()),* ] diff --git a/packages/perseus/src/serve.rs b/packages/perseus/src/serve.rs index 55ad9a9b64..9b65f47518 100644 --- a/packages/perseus/src/serve.rs +++ b/packages/perseus/src/serve.rs @@ -159,6 +159,7 @@ async fn revalidate( /// at request-time will **always** replace anything generated at build-time, incrementally, revalidated, etc. // TODO possible further optimizations on this for futures? pub async fn get_page( + // This must not contain the locale path: &str, locale: &str, req: Request, diff --git a/packages/perseus/src/translator.rs b/packages/perseus/src/translator.rs index af6fee4c44..068db59fd9 100644 --- a/packages/perseus/src/translator.rs +++ b/packages/perseus/src/translator.rs @@ -7,27 +7,17 @@ use std::collections::HashMap; pub struct Locales { /// The default locale, which will be used as a fallback if the user's locale can't be extracted. This will be built for at build-time. pub default: String, - /// Common locales that should be built for at build-time. - pub common: Vec, - /// All other supported locales, which won't be built unless requested at request-time. + /// All other supported locales, which will all be built at build time. pub other: Vec, } impl Locales { - /// Gets all the supported locales by combining the default, common, and other. + /// Gets all the supported locales by combining the default, and other. pub fn get_all(&self) -> Vec<&String> { let mut vec: Vec<&String> = vec![&self.default]; - vec.extend(&self.common); vec.extend(&self.other); vec } - /// Gets the locales that should be built at build time, the default and common. - pub fn get_default_and_common(&self) -> Vec<&String> { - let mut vec: Vec<&String> = vec![&self.default]; - vec.extend(&self.common); - - vec - } /// Checks if the given locale is supported. pub fn is_supported(&self, locale: &str) -> bool { let locales = self.get_all();