✨ (locale): Refactoriza el sistema de localización
- Modulariza la lógica de localización. - Actualiza la estructura de `Locale` para mejorar la resolución y gestión de idiomas. - Introduce `RequestLocale` para manejar la negociación de idioma basada en las peticiones HTTP. - Mejora `L10n` para ofrecer una gestión más flexible de traducciones con argumentos dinámicos. - Actualiza la implementación de `LangId` en `Page` para garantizar una identificación de idioma coherente. - Elimina código obsoleto y simplifica la gestión de identificadores de idioma.
This commit is contained in:
parent
9297f51b42
commit
7b340a19f3
15 changed files with 789 additions and 465 deletions
27
src/locale/languages.rs
Normal file
27
src/locale/languages.rs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
use crate::util;
|
||||
|
||||
use super::{langid, LanguageIdentifier};
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::sync::LazyLock;
|
||||
|
||||
/// Tabla de idiomas soportados por PageTop.
|
||||
///
|
||||
/// Cada entrada asocia un código de idioma en minúsculas (por ejemplo, `"en"` o `"es-es"`) con:
|
||||
///
|
||||
/// - Su [`LanguageIdentifier`] canónico.
|
||||
/// - La clave de traducción definida en `src/locale/{lang}/languages.ftl` para mostrar su nombre en
|
||||
/// el idioma activo.
|
||||
///
|
||||
/// Esto permite admitir alias de idioma como `"en"` o `"es"` y, al mismo tiempo, mantener un
|
||||
/// identificador de idioma canónico (por ejemplo, `langid!("en-US")` o `langid!("es-ES")`).
|
||||
pub(crate) static LANGUAGES: LazyLock<HashMap<&str, (LanguageIdentifier, &str)>> =
|
||||
LazyLock::new(|| {
|
||||
util::kv![
|
||||
"en" => ( langid!("en-US"), "english" ),
|
||||
"en-gb" => ( langid!("en-GB"), "english_british" ),
|
||||
"en-us" => ( langid!("en-US"), "english_united_states" ),
|
||||
"es" => ( langid!("es-ES"), "spanish" ),
|
||||
"es-es" => ( langid!("es-ES"), "spanish_spain" ),
|
||||
]
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue