v0.2.0: i18n 18 idiomas + pantalla ajustes + bancos multiidioma

Internacionalización completa:
- 18 ficheros .arb: es, en, fr, pt, de, it, ru, ja, ko, zh, zh_TW, ar, hi, tr, pl, nl, ca, eu
- Todos los strings extraídos de todas las pantallas
- Detección automática de idioma del sistema
- Selector manual en pantalla de ajustes

Pantalla de ajustes nueva:
- Selector de idioma con banderas emoji
- Vibración ON/OFF
- Acerca de (versión, desarrollador)

Bancos de palabras multiidioma:
- palabras.json (castellano, 1000 palabras)
- palabras_en.json (inglés, 1000 palabras)
- palabras_fr.json (francés, 1000 palabras)
- Fallback a castellano si no hay banco del idioma

13138 líneas Dart, 39 ficheros, 0 issues en flutter analyze
This commit is contained in:
ShanaiaBot
2026-04-04 01:18:09 +02:00
parent de2c8ffa18
commit 1bca50af1d
56 changed files with 14389 additions and 201 deletions

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:el_impostor/l10n/generated/app_localizations.dart';
import '../tema/tema_app.dart';
class PantallaUnirse extends StatelessWidget {
@@ -6,8 +7,10 @@ class PantallaUnirse extends StatelessWidget {
@override
Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context)!;
return Scaffold(
appBar: AppBar(title: const Text('Unirse a partida')),
appBar: AppBar(title: Text(l10n.joinGameTitle)),
body: Center(
child: Padding(
padding: const EdgeInsets.all(32),
@@ -17,13 +20,12 @@ class PantallaUnirse extends StatelessWidget {
const Text('📱', style: TextStyle(fontSize: 64)),
const SizedBox(height: 24),
Text(
'Modo multimóvil',
l10n.multiDeviceMode,
style: Theme.of(context).textTheme.headlineMedium,
),
const SizedBox(height: 16),
Text(
'Escanea el código QR que muestra el host '
'para conectarte a la partida vía Bluetooth/WiFi Direct.',
l10n.scanQrDescription,
style: Theme.of(context).textTheme.bodyLarge,
textAlign: TextAlign.center,
),
@@ -41,17 +43,14 @@ class PantallaUnirse extends StatelessWidget {
const Text('🚧', style: TextStyle(fontSize: 32)),
const SizedBox(height: 8),
Text(
'Próximamente',
l10n.comingSoon,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: TemaApp.colorNaranja,
),
),
const SizedBox(height: 8),
Text(
'La conexión multimóvil con Nearby Connections '
'requiere dispositivos Android físicos.\n\n'
'Por ahora, usa el modo "Un solo móvil" '
'para jugar en un dispositivo compartido.',
l10n.nearbyNotAvailable,
style: Theme.of(context).textTheme.bodyMedium,
textAlign: TextAlign.center,
),
@@ -64,7 +63,7 @@ class PantallaUnirse extends StatelessWidget {
child: OutlinedButton.icon(
onPressed: () => Navigator.pop(context),
icon: const Icon(Icons.arrow_back),
label: const Text('Volver'),
label: Text(l10n.back),
),
),
],