Gestión de usuarios y avatares en la aplicación. Gestión de traducciones de las palabras.

This commit is contained in:
2026-05-04 20:58:02 +02:00
parent 7dd6c7bd74
commit 957b42ea0c
58 changed files with 22603 additions and 21 deletions
+45
View File
@@ -95,3 +95,48 @@ class BancoPalabras {
return nombres[clave] ?? clave;
}
}
class EntradaPalabraTraducida {
final String palabra;
final Map<String, String> traducciones;
const EntradaPalabraTraducida({
required this.palabra,
required this.traducciones,
});
}
class BancoPalabrasTraducidas {
final Map<String, List<EntradaPalabraTraducida>> categorias;
const BancoPalabrasTraducidas(this.categorias);
static BancoPalabrasTraducidas? _instancia;
static Future<BancoPalabrasTraducidas> cargar() async {
if (_instancia != null) return _instancia!;
final jsonStr = await rootBundle.loadString('assets/palabras_i18n.json');
final data = json.decode(jsonStr) as Map<String, dynamic>;
final cats = data['categorias'] as Map<String, dynamic>;
final mapa = <String, List<EntradaPalabraTraducida>>{};
for (final categoria in cats.entries) {
final entradas = categoria.value as List<dynamic>;
mapa[categoria.key] = entradas.map((entradaRaw) {
final entrada = entradaRaw as Map<String, dynamic>;
final traduccionesRaw =
entrada['traducciones'] as Map<String, dynamic>? ?? {};
return EntradaPalabraTraducida(
palabra: entrada['es'] as String,
traducciones: traduccionesRaw.map(
(idioma, valor) => MapEntry(idioma, valor?.toString() ?? ''),
)..removeWhere((_, valor) => valor.isEmpty),
);
}).toList();
}
_instancia = BancoPalabrasTraducidas(mapa);
return _instancia!;
}
}