From 88d6ce2a728fedf0f16aa42f56b711a14ca71b33 Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Sat, 27 May 2023 20:43:35 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8D=BB=20Segunda=20revista=20a=20las=20tr?= =?UTF-8?q?aducciones=20por=20contexto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pagetop/src/lib.rs | 10 +++------ pagetop/src/locale.rs | 49 +++++++++++++------------------------------ pagetop/src/util.rs | 19 +++++++++++++++++ 3 files changed, 37 insertions(+), 41 deletions(-) diff --git a/pagetop/src/lib.rs b/pagetop/src/lib.rs index 1a509744..8b7e54d9 100644 --- a/pagetop/src/lib.rs +++ b/pagetop/src/lib.rs @@ -46,19 +46,15 @@ pub use paste::paste; pub use static_files::Resource as StaticResource; pub use tracing_unwrap::ResultExt; +#[allow(unused_imports)] +pub(crate) use futures::executor::block_on as run_now; + pub use pagetop_macros::fn_builder; pub type HashMapResources = std::collections::HashMap<&'static str, StaticResource>; pub type Handle = u64; -// ************************************************************************************************* -// LOCAL. -// ************************************************************************************************* - -#[allow(unused_imports)] -pub(crate) use futures::executor::block_on as run_now; - // ************************************************************************************************* // APIs PÚBLICAS. // ************************************************************************************************* diff --git a/pagetop/src/locale.rs b/pagetop/src/locale.rs index 13961e39..da6b498c 100644 --- a/pagetop/src/locale.rs +++ b/pagetop/src/locale.rs @@ -136,49 +136,30 @@ pub static LANGID: LazyStatic<&LanguageIdentifier> = }, ); -#[macro_export] -/// Define un conjunto de elementos de localización y funciones locales de traducción. -macro_rules! define_locale { - ( $LOCALES:ident, $dir_locales:literal $(, $core_locales:literal)? ) => { - use $crate::locale::*; - - static_locale! { - pub static $LOCALES = { - locales: $dir_locales, - $( core_locales: $core_locales, )? - fallback_language: "en-US", - - // Elimina las marcas Unicode que delimitan los argumentos. - customise: |bundle| bundle.set_use_isolating(false), - }; - } - }; -} - pub enum Locale<'a> { From(&'a Locales), With(&'a Locales, &'a HashMap>), - Lang(&'a Locales, &'a LanguageIdentifier), Using( - &'a Locales, &'a LanguageIdentifier, + &'a Locales, &'a HashMap>, ), } -pub fn _t(key: &str, locale: Locale) -> String { - match locale { - Locale::From(locales) => locales.lookup(&LANGID, key).unwrap_or(key.to_string()), - Locale::With(locales, args) => locales - .lookup_with_args(&LANGID, key, args) - .unwrap_or(key.to_string()), - Locale::Lang(locales, langid) => locales.lookup(langid, key).unwrap_or(key.to_string()), - Locale::Using(locales, langid, args) => locales - .lookup_with_args(langid, key, args) - .unwrap_or(key.to_string()), - } +pub fn t(key: &str, locale: Locale) -> String { + translate(key, locale) } -pub fn _e(key: &str, locale: Locale) -> Markup { - PreEscaped(_t(key, locale)) +pub fn e(key: &str, locale: Locale) -> Markup { + PreEscaped(translate(key, locale)) +} + +#[inline] +pub(crate) fn translate(key: &str, locale: Locale) -> String { + match locale { + Locale::From(locales) => locales.lookup(&LANGID, key), + Locale::With(locales, args) => locales.lookup_with_args(&LANGID, key, args), + Locale::Using(langid, locales, args) => locales.lookup_with_args(langid, key, args), + } + .unwrap_or(key.to_string()) } diff --git a/pagetop/src/util.rs b/pagetop/src/util.rs index 9f58bc99..fef23386 100644 --- a/pagetop/src/util.rs +++ b/pagetop/src/util.rs @@ -87,6 +87,25 @@ macro_rules! define_handle { }; } +#[macro_export] +/// Define un conjunto de elementos de localización y funciones locales de traducción. +macro_rules! define_locale { + ( $LOCALES:ident, $dir_locales:literal $(, $core_locales:literal)? ) => { + use $crate::locale::*; + + static_locale! { + pub static $LOCALES = { + locales: $dir_locales, + $( core_locales: $core_locales, )? + fallback_language: "en-US", + + // Elimina las marcas Unicode que delimitan los argumentos. + customise: |bundle| bundle.set_use_isolating(false), + }; + } + }; +} + #[macro_export] macro_rules! serve_static_files { ( $cfg:ident, $dir:expr, $embed:ident ) => {{