🍻 Segunda revista a las traducciones por contexto
This commit is contained in:
parent
0de26a4737
commit
88d6ce2a72
3 changed files with 37 additions and 41 deletions
|
|
@ -46,19 +46,15 @@ pub use paste::paste;
|
||||||
pub use static_files::Resource as StaticResource;
|
pub use static_files::Resource as StaticResource;
|
||||||
pub use tracing_unwrap::ResultExt;
|
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 use pagetop_macros::fn_builder;
|
||||||
|
|
||||||
pub type HashMapResources = std::collections::HashMap<&'static str, StaticResource>;
|
pub type HashMapResources = std::collections::HashMap<&'static str, StaticResource>;
|
||||||
|
|
||||||
pub type Handle = u64;
|
pub type Handle = u64;
|
||||||
|
|
||||||
// *************************************************************************************************
|
|
||||||
// LOCAL.
|
|
||||||
// *************************************************************************************************
|
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
pub(crate) use futures::executor::block_on as run_now;
|
|
||||||
|
|
||||||
// *************************************************************************************************
|
// *************************************************************************************************
|
||||||
// APIs PÚBLICAS.
|
// APIs PÚBLICAS.
|
||||||
// *************************************************************************************************
|
// *************************************************************************************************
|
||||||
|
|
|
||||||
|
|
@ -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> {
|
pub enum Locale<'a> {
|
||||||
From(&'a Locales),
|
From(&'a Locales),
|
||||||
With(&'a Locales, &'a HashMap<String, FluentValue<'a>>),
|
With(&'a Locales, &'a HashMap<String, FluentValue<'a>>),
|
||||||
Lang(&'a Locales, &'a LanguageIdentifier),
|
|
||||||
Using(
|
Using(
|
||||||
&'a Locales,
|
|
||||||
&'a LanguageIdentifier,
|
&'a LanguageIdentifier,
|
||||||
|
&'a Locales,
|
||||||
&'a HashMap<String, FluentValue<'a>>,
|
&'a HashMap<String, FluentValue<'a>>,
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn _t(key: &str, locale: Locale) -> String {
|
pub fn t(key: &str, locale: Locale) -> String {
|
||||||
match locale {
|
translate(key, 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 _e(key: &str, locale: Locale) -> Markup {
|
pub fn e(key: &str, locale: Locale) -> Markup {
|
||||||
PreEscaped(_t(key, locale))
|
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())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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_export]
|
||||||
macro_rules! serve_static_files {
|
macro_rules! serve_static_files {
|
||||||
( $cfg:ident, $dir:expr, $embed:ident ) => {{
|
( $cfg:ident, $dir:expr, $embed:ident ) => {{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue