🍻 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 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.
|
||||
// *************************************************************************************************
|
||||
|
|
|
|||
|
|
@ -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<String, FluentValue<'a>>),
|
||||
Lang(&'a Locales, &'a LanguageIdentifier),
|
||||
Using(
|
||||
&'a Locales,
|
||||
&'a LanguageIdentifier,
|
||||
&'a Locales,
|
||||
&'a HashMap<String, FluentValue<'a>>,
|
||||
),
|
||||
}
|
||||
|
||||
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())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 ) => {{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue