diff --git a/android/app/src/main/play-store-icon.png b/android/app/src/main/play-store-icon.png index bc9606e..bfeb9be 100644 Binary files a/android/app/src/main/play-store-icon.png and b/android/app/src/main/play-store-icon.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index 09a5ee0..aa1b565 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png index c6b756d..f69e4eb 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png index 09a5ee0..aa1b565 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index a48dbb7..845113d 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png index 462bc16..9195b3b 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png index a48dbb7..845113d 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 7d25922..973f1da 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png index 4d6039f..e018bfb 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png index 7d25922..973f1da 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 1521a6f..5819292 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png index 8ddf570..f0c91a9 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png index 1521a6f..5819292 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index d6f4c43..df0c3b3 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png index d2e5dfb..719f7d0 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png index d6f4c43..df0c3b3 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/values/ic_launcher_background.xml b/android/app/src/main/res/values/ic_launcher_background.xml index 5df8ebe..398421c 100644 --- a/android/app/src/main/res/values/ic_launcher_background.xml +++ b/android/app/src/main/res/values/ic_launcher_background.xml @@ -1,4 +1,4 @@ - #1A1040 + #05080D diff --git a/assets/app_icon/farolero_app_icon.png b/assets/app_icon/farolero_app_icon.png new file mode 100644 index 0000000..84467c7 Binary files /dev/null and b/assets/app_icon/farolero_app_icon.png differ diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index d222122..b38575f 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -271,5 +271,30 @@ "profileName": "الاسم", "profileNick": "اللقب", "save": "حفظ", - "automaticLanguage": "تلقائي" + "automaticLanguage": "تلقائي", + "noSavedGames": "لا توجد مباريات محفوظة بعد.", + "errorNoGame": "خطأ: لا توجد مباراة", + "disconnectedPlayersWarning": "يوجد لاعبون بأجهزة غير متصلة.", + "assumeOnThisPhone": "تولّي على هذا الهاتف", + "noResult": "لا توجد نتيجة", + "historyGameSummary": "$players لاعبون • $impostors محتالون • $rounds جولات\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_ca.arb b/lib/l10n/app_ca.arb index f026378..a45c019 100644 --- a/lib/l10n/app_ca.arb +++ b/lib/l10n/app_ca.arb @@ -271,5 +271,30 @@ "profileName": "Nom", "profileNick": "Àlies", "save": "Desa", - "automaticLanguage": "Automàtic" + "automaticLanguage": "Automàtic", + "noSavedGames": "Encara no hi ha partides desades.", + "errorNoGame": "Error: no hi ha partida", + "disconnectedPlayersWarning": "Hi ha jugadors amb el dispositiu desconnectat.", + "assumeOnThisPhone": "Assumir en aquest mòbil", + "noResult": "Sense resultat", + "historyGameSummary": "$players jugadors • $impostors impostor(s) • $rounds ronda(es)\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index ebd85b5..c320f28 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -271,5 +271,30 @@ "profileName": "Name", "profileNick": "Nickname", "save": "Speichern", - "automaticLanguage": "Automatisch" + "automaticLanguage": "Automatisch", + "noSavedGames": "Es gibt noch keine gespeicherten Partien.", + "errorNoGame": "Fehler: Keine Partie", + "disconnectedPlayersWarning": "Einige Spieler haben ein getrenntes Gerät.", + "assumeOnThisPhone": "Auf diesem Handy übernehmen", + "noResult": "Kein Ergebnis", + "historyGameSummary": "$players Spieler • $impostors Verräter • $rounds Runden\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index cc42346..32a3762 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -303,5 +303,30 @@ "profileName": "Name", "profileNick": "Nick", "save": "Save", - "automaticLanguage": "Automatic" + "automaticLanguage": "Automatic", + "noSavedGames": "No saved games yet.", + "errorNoGame": "Error: no game", + "disconnectedPlayersWarning": "Some players have a disconnected device.", + "assumeOnThisPhone": "Take over on this phone", + "noResult": "No result", + "historyGameSummary": "$players players • $impostors impostor(s) • $rounds round(s)\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 74b1532..0399bc4 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -339,5 +339,30 @@ "profileName": "Nombre", "profileNick": "Nick", "save": "Guardar", - "automaticLanguage": "Automático" + "automaticLanguage": "Automático", + "noSavedGames": "Todavía no hay partidas guardadas.", + "errorNoGame": "Error: sin partida", + "disconnectedPlayersWarning": "Hay jugadores con el dispositivo desconectado.", + "assumeOnThisPhone": "Asumir en este móvil", + "noResult": "Sin resultado", + "historyGameSummary": "$players jugadores • $impostors impostor(es) • $rounds ronda(s)\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_eu.arb b/lib/l10n/app_eu.arb index 5b5b638..68c708a 100644 --- a/lib/l10n/app_eu.arb +++ b/lib/l10n/app_eu.arb @@ -271,5 +271,30 @@ "profileName": "Izena", "profileNick": "Ezizena", "save": "Gorde", - "automaticLanguage": "Automatikoa" + "automaticLanguage": "Automatikoa", + "noSavedGames": "Oraindik ez dago gordetako partidarik.", + "errorNoGame": "Errorea: partidarik ez", + "disconnectedPlayersWarning": "Jokalari batzuek gailua deskonektatuta dute.", + "assumeOnThisPhone": "Hartu mugikor honetan", + "noResult": "Emaitzarik ez", + "historyGameSummary": "$players jokalari • $impostors inpostore • $rounds txanda\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 28c1acd..d6bed28 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -271,5 +271,30 @@ "profileName": "Nom", "profileNick": "Pseudo", "save": "Enregistrer", - "automaticLanguage": "Automatique" + "automaticLanguage": "Automatique", + "noSavedGames": "Aucune partie enregistrée pour le moment.", + "errorNoGame": "Erreur : aucune partie", + "disconnectedPlayersWarning": "Des joueurs ont un appareil déconnecté.", + "assumeOnThisPhone": "Reprendre sur ce mobile", + "noResult": "Aucun résultat", + "historyGameSummary": "$players joueurs • $impostors imposteur(s) • $rounds manche(s)\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb index 29ce798..79f87b8 100644 --- a/lib/l10n/app_hi.arb +++ b/lib/l10n/app_hi.arb @@ -271,5 +271,30 @@ "profileName": "नाम", "profileNick": "निकनेम", "save": "सहेजें", - "automaticLanguage": "स्वचालित" + "automaticLanguage": "स्वचालित", + "noSavedGames": "अभी तक कोई गेम सेव नहीं है।", + "errorNoGame": "त्रुटि: कोई गेम नहीं", + "disconnectedPlayersWarning": "कुछ खिलाड़ियों का डिवाइस डिसकनेक्ट है।", + "assumeOnThisPhone": "इस फ़ोन पर संभालें", + "noResult": "कोई परिणाम नहीं", + "historyGameSummary": "$players खिलाड़ी • $impostors इम्पोस्टर • $rounds राउंड\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index 99d015e..5904e77 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -271,5 +271,30 @@ "profileName": "Nome", "profileNick": "Nick", "save": "Salva", - "automaticLanguage": "Automatico" + "automaticLanguage": "Automatico", + "noSavedGames": "Non ci sono ancora partite salvate.", + "errorNoGame": "Errore: nessuna partita", + "disconnectedPlayersWarning": "Alcuni giocatori hanno il dispositivo disconnesso.", + "assumeOnThisPhone": "Assumi su questo telefono", + "noResult": "Nessun risultato", + "historyGameSummary": "$players giocatori • $impostors impostore/i • $rounds round\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb index 62dc607..4c64326 100644 --- a/lib/l10n/app_ja.arb +++ b/lib/l10n/app_ja.arb @@ -271,5 +271,30 @@ "profileName": "名前", "profileNick": "ニックネーム", "save": "保存", - "automaticLanguage": "自動" + "automaticLanguage": "自動", + "noSavedGames": "保存されたゲームはまだありません。", + "errorNoGame": "エラー: ゲームがありません", + "disconnectedPlayersWarning": "接続が切れた端末のプレイヤーがいます。", + "assumeOnThisPhone": "このスマホで引き継ぐ", + "noResult": "結果なし", + "historyGameSummary": "$players人 • インポスター$impostors人 • $roundsラウンド\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb index 0ea8edc..bf8ed6d 100644 --- a/lib/l10n/app_ko.arb +++ b/lib/l10n/app_ko.arb @@ -271,5 +271,30 @@ "profileName": "이름", "profileNick": "닉네임", "save": "저장", - "automaticLanguage": "자동" + "automaticLanguage": "자동", + "noSavedGames": "아직 저장된 게임이 없습니다.", + "errorNoGame": "오류: 게임 없음", + "disconnectedPlayersWarning": "기기가 연결 해제된 플레이어가 있습니다.", + "assumeOnThisPhone": "이 휴대폰에서 맡기", + "noResult": "결과 없음", + "historyGameSummary": "플레이어 $players명 • 임포스터 $impostors명 • $rounds라운드\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index 4b90e39..170cc0e 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -271,5 +271,30 @@ "profileName": "Naam", "profileNick": "Nickname", "save": "Opslaan", - "automaticLanguage": "Automatisch" + "automaticLanguage": "Automatisch", + "noSavedGames": "Er zijn nog geen opgeslagen spellen.", + "errorNoGame": "Fout: geen spel", + "disconnectedPlayersWarning": "Sommige spelers hebben een losgekoppeld apparaat.", + "assumeOnThisPhone": "Overnemen op deze mobiel", + "noResult": "Geen resultaat", + "historyGameSummary": "$players spelers • $impostors impostor(s) • $rounds ronde(s)\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb index 967b1df..b8c91ba 100644 --- a/lib/l10n/app_pl.arb +++ b/lib/l10n/app_pl.arb @@ -271,5 +271,30 @@ "profileName": "Nazwa", "profileNick": "Nick", "save": "Zapisz", - "automaticLanguage": "Automatycznie" + "automaticLanguage": "Automatycznie", + "noSavedGames": "Nie ma jeszcze zapisanych gier.", + "errorNoGame": "Błąd: brak gry", + "disconnectedPlayersWarning": "Niektórzy gracze mają rozłączone urządzenie.", + "assumeOnThisPhone": "Przejmij na tym telefonie", + "noResult": "Brak wyniku", + "historyGameSummary": "$players graczy • $impostors impostor(ów) • $rounds rund\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 180a380..51e09fb 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -271,5 +271,30 @@ "profileName": "Nome", "profileNick": "Nick", "save": "Guardar", - "automaticLanguage": "Automático" + "automaticLanguage": "Automático", + "noSavedGames": "Ainda não há partidas guardadas.", + "errorNoGame": "Erro: sem partida", + "disconnectedPlayersWarning": "Há jogadores com o dispositivo desligado.", + "assumeOnThisPhone": "Assumir neste telemóvel", + "noResult": "Sem resultado", + "historyGameSummary": "$players jogadores • $impostors impostor(es) • $rounds ronda(s)\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 15434cf..22589a7 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -271,5 +271,30 @@ "profileName": "Имя", "profileNick": "Ник", "save": "Сохранить", - "automaticLanguage": "Автоматически" + "automaticLanguage": "Автоматически", + "noSavedGames": "Сохранённых игр пока нет.", + "errorNoGame": "Ошибка: нет игры", + "disconnectedPlayersWarning": "У некоторых игроков устройство отключено.", + "assumeOnThisPhone": "Взять на этом телефоне", + "noResult": "Нет результата", + "historyGameSummary": "$players игроков • $impostors самозванцев • $rounds раундов\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb index 7a23faa..d73ad9b 100644 --- a/lib/l10n/app_tr.arb +++ b/lib/l10n/app_tr.arb @@ -271,5 +271,30 @@ "profileName": "Ad", "profileNick": "Takma ad", "save": "Kaydet", - "automaticLanguage": "Otomatik" + "automaticLanguage": "Otomatik", + "noSavedGames": "Henüz kaydedilmiş oyun yok.", + "errorNoGame": "Hata: oyun yok", + "disconnectedPlayersWarning": "Bazı oyuncuların cihazı bağlantısız.", + "assumeOnThisPhone": "Bu telefonda devral", + "noResult": "Sonuç yok", + "historyGameSummary": "$players oyuncu • $impostors sahtekar • $rounds tur\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 47ff5a9..6e08acc 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -271,5 +271,30 @@ "profileName": "名称", "profileNick": "昵称", "save": "保存", - "automaticLanguage": "自动" + "automaticLanguage": "自动", + "noSavedGames": "还没有保存的游戏。", + "errorNoGame": "错误:没有游戏", + "disconnectedPlayersWarning": "有玩家的设备已断开连接。", + "assumeOnThisPhone": "在此手机上接管", + "noResult": "无结果", + "historyGameSummary": "$players 名玩家 • $impostors 名冒牌者 • $rounds 回合\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/app_zh_TW.arb b/lib/l10n/app_zh_TW.arb index 83ad0ce..126086b 100644 --- a/lib/l10n/app_zh_TW.arb +++ b/lib/l10n/app_zh_TW.arb @@ -271,5 +271,30 @@ "profileName": "名稱", "profileNick": "暱稱", "save": "儲存", - "automaticLanguage": "自動" + "automaticLanguage": "自動", + "noSavedGames": "尚未有已儲存的遊戲。", + "errorNoGame": "錯誤:沒有遊戲", + "disconnectedPlayersWarning": "有玩家的裝置已中斷連線。", + "assumeOnThisPhone": "在此手機上接管", + "noResult": "無結果", + "historyGameSummary": "$players 位玩家 • $impostors 位冒牌者 • $rounds 回合\n$word • $category", + "@historyGameSummary": { + "placeholders": { + "players": { + "type": "int" + }, + "impostors": { + "type": "int" + }, + "rounds": { + "type": "int" + }, + "word": { + "type": "String" + }, + "category": { + "type": "String" + } + } + } } diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index 78e23c7..403cb3f 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -1409,4 +1409,16 @@ AppLocalizations lookupAppLocalizations(Locale locale) { String get save; String get automaticLanguage; + + String get noSavedGames; + + String get errorNoGame; + + String get disconnectedPlayersWarning; + + String get assumeOnThisPhone; + + String get noResult; + + String historyGameSummary(int players, int impostors, int rounds, String word, String category); } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_ar.dart b/lib/l10n/generated/app_localizations_ar.dart index 28cb503..c5805f7 100644 --- a/lib/l10n/generated/app_localizations_ar.dart +++ b/lib/l10n/generated/app_localizations_ar.dart @@ -727,4 +727,24 @@ class AppLocalizationsAr extends AppLocalizations { @override String get automaticLanguage => 'تلقائي'; + @override + String get noSavedGames => 'لا توجد مباريات محفوظة بعد.'; + + @override + String get errorNoGame => 'خطأ: لا توجد مباراة'; + + @override + String get disconnectedPlayersWarning => 'يوجد لاعبون بأجهزة غير متصلة.'; + + @override + String get assumeOnThisPhone => 'تولّي على هذا الهاتف'; + + @override + String get noResult => 'لا توجد نتيجة'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players لاعبون • $impostors محتالون • $rounds جولات\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_ca.dart b/lib/l10n/generated/app_localizations_ca.dart index 49de744..de73bd8 100644 --- a/lib/l10n/generated/app_localizations_ca.dart +++ b/lib/l10n/generated/app_localizations_ca.dart @@ -730,4 +730,24 @@ class AppLocalizationsCa extends AppLocalizations { @override String get automaticLanguage => 'Automàtic'; + @override + String get noSavedGames => 'Encara no hi ha partides desades.'; + + @override + String get errorNoGame => 'Error: no hi ha partida'; + + @override + String get disconnectedPlayersWarning => 'Hi ha jugadors amb el dispositiu desconnectat.'; + + @override + String get assumeOnThisPhone => 'Assumir en aquest mòbil'; + + @override + String get noResult => 'Sense resultat'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players jugadors • $impostors impostor(s) • $rounds ronda(es)\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index 5e8a1e2..9310100 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -733,4 +733,24 @@ class AppLocalizationsDe extends AppLocalizations { @override String get automaticLanguage => 'Automatisch'; + @override + String get noSavedGames => 'Es gibt noch keine gespeicherten Partien.'; + + @override + String get errorNoGame => 'Fehler: Keine Partie'; + + @override + String get disconnectedPlayersWarning => 'Einige Spieler haben ein getrenntes Gerät.'; + + @override + String get assumeOnThisPhone => 'Auf diesem Handy übernehmen'; + + @override + String get noResult => 'Kein Ergebnis'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players Spieler • $impostors Verräter • $rounds Runden\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index 07665de..9e7cf19 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -727,4 +727,24 @@ class AppLocalizationsEn extends AppLocalizations { @override String get automaticLanguage => 'Automatic'; + @override + String get noSavedGames => 'No saved games yet.'; + + @override + String get errorNoGame => 'Error: no game'; + + @override + String get disconnectedPlayersWarning => 'Some players have a disconnected device.'; + + @override + String get assumeOnThisPhone => 'Take over on this phone'; + + @override + String get noResult => 'No result'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players players • $impostors impostor(s) • $rounds round(s)\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_es.dart b/lib/l10n/generated/app_localizations_es.dart index e15f807..83de2a1 100644 --- a/lib/l10n/generated/app_localizations_es.dart +++ b/lib/l10n/generated/app_localizations_es.dart @@ -729,4 +729,24 @@ class AppLocalizationsEs extends AppLocalizations { @override String get automaticLanguage => 'Automático'; + @override + String get noSavedGames => 'Todavía no hay partidas guardadas.'; + + @override + String get errorNoGame => 'Error: sin partida'; + + @override + String get disconnectedPlayersWarning => 'Hay jugadores con el dispositivo desconectado.'; + + @override + String get assumeOnThisPhone => 'Asumir en este móvil'; + + @override + String get noResult => 'Sin resultado'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players jugadores • $impostors impostor(es) • $rounds ronda(s)\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_eu.dart b/lib/l10n/generated/app_localizations_eu.dart index 603f14c..58f5714 100644 --- a/lib/l10n/generated/app_localizations_eu.dart +++ b/lib/l10n/generated/app_localizations_eu.dart @@ -732,4 +732,24 @@ class AppLocalizationsEu extends AppLocalizations { @override String get automaticLanguage => 'Automatikoa'; + @override + String get noSavedGames => 'Oraindik ez dago gordetako partidarik.'; + + @override + String get errorNoGame => 'Errorea: partidarik ez'; + + @override + String get disconnectedPlayersWarning => 'Jokalari batzuek gailua deskonektatuta dute.'; + + @override + String get assumeOnThisPhone => 'Hartu mugikor honetan'; + + @override + String get noResult => 'Emaitzarik ez'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players jokalari • $impostors inpostore • $rounds txanda\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_fr.dart b/lib/l10n/generated/app_localizations_fr.dart index 4105e84..cf57073 100644 --- a/lib/l10n/generated/app_localizations_fr.dart +++ b/lib/l10n/generated/app_localizations_fr.dart @@ -730,4 +730,24 @@ class AppLocalizationsFr extends AppLocalizations { @override String get automaticLanguage => 'Automatique'; + @override + String get noSavedGames => 'Aucune partie enregistrée pour le moment.'; + + @override + String get errorNoGame => 'Erreur : aucune partie'; + + @override + String get disconnectedPlayersWarning => 'Des joueurs ont un appareil déconnecté.'; + + @override + String get assumeOnThisPhone => 'Reprendre sur ce mobile'; + + @override + String get noResult => 'Aucun résultat'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players joueurs • $impostors imposteur(s) • $rounds manche(s)\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_hi.dart b/lib/l10n/generated/app_localizations_hi.dart index 8c2401d..dee6572 100644 --- a/lib/l10n/generated/app_localizations_hi.dart +++ b/lib/l10n/generated/app_localizations_hi.dart @@ -729,4 +729,24 @@ class AppLocalizationsHi extends AppLocalizations { @override String get automaticLanguage => 'स्वचालित'; + @override + String get noSavedGames => 'अभी तक कोई गेम सेव नहीं है।'; + + @override + String get errorNoGame => 'त्रुटि: कोई गेम नहीं'; + + @override + String get disconnectedPlayersWarning => 'कुछ खिलाड़ियों का डिवाइस डिसकनेक्ट है।'; + + @override + String get assumeOnThisPhone => 'इस फ़ोन पर संभालें'; + + @override + String get noResult => 'कोई परिणाम नहीं'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players खिलाड़ी • $impostors इम्पोस्टर • $rounds राउंड\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart index 69bec03..6efff8b 100644 --- a/lib/l10n/generated/app_localizations_it.dart +++ b/lib/l10n/generated/app_localizations_it.dart @@ -730,4 +730,24 @@ class AppLocalizationsIt extends AppLocalizations { @override String get automaticLanguage => 'Automatico'; + @override + String get noSavedGames => 'Non ci sono ancora partite salvate.'; + + @override + String get errorNoGame => 'Errore: nessuna partita'; + + @override + String get disconnectedPlayersWarning => 'Alcuni giocatori hanno il dispositivo disconnesso.'; + + @override + String get assumeOnThisPhone => 'Assumi su questo telefono'; + + @override + String get noResult => 'Nessun risultato'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players giocatori • $impostors impostore/i • $rounds round\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_ja.dart b/lib/l10n/generated/app_localizations_ja.dart index 9d8c63a..69eea5a 100644 --- a/lib/l10n/generated/app_localizations_ja.dart +++ b/lib/l10n/generated/app_localizations_ja.dart @@ -727,4 +727,24 @@ class AppLocalizationsJa extends AppLocalizations { @override String get automaticLanguage => '自動'; + @override + String get noSavedGames => '保存されたゲームはまだありません。'; + + @override + String get errorNoGame => 'エラー: ゲームがありません'; + + @override + String get disconnectedPlayersWarning => '接続が切れた端末のプレイヤーがいます。'; + + @override + String get assumeOnThisPhone => 'このスマホで引き継ぐ'; + + @override + String get noResult => '結果なし'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players人 • インポスター$impostors人 • $roundsラウンド\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_ko.dart b/lib/l10n/generated/app_localizations_ko.dart index 2c56b69..e3d427d 100644 --- a/lib/l10n/generated/app_localizations_ko.dart +++ b/lib/l10n/generated/app_localizations_ko.dart @@ -727,4 +727,24 @@ class AppLocalizationsKo extends AppLocalizations { @override String get automaticLanguage => '자동'; + @override + String get noSavedGames => '아직 저장된 게임이 없습니다.'; + + @override + String get errorNoGame => '오류: 게임 없음'; + + @override + String get disconnectedPlayersWarning => '기기가 연결 해제된 플레이어가 있습니다.'; + + @override + String get assumeOnThisPhone => '이 휴대폰에서 맡기'; + + @override + String get noResult => '결과 없음'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '플레이어 $players명 • 임포스터 $impostors명 • $rounds라운드\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_nl.dart b/lib/l10n/generated/app_localizations_nl.dart index dc13f2f..a9c9e3a 100644 --- a/lib/l10n/generated/app_localizations_nl.dart +++ b/lib/l10n/generated/app_localizations_nl.dart @@ -730,4 +730,24 @@ class AppLocalizationsNl extends AppLocalizations { @override String get automaticLanguage => 'Automatisch'; + @override + String get noSavedGames => 'Er zijn nog geen opgeslagen spellen.'; + + @override + String get errorNoGame => 'Fout: geen spel'; + + @override + String get disconnectedPlayersWarning => 'Sommige spelers hebben een losgekoppeld apparaat.'; + + @override + String get assumeOnThisPhone => 'Overnemen op deze mobiel'; + + @override + String get noResult => 'Geen resultaat'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players spelers • $impostors impostor(s) • $rounds ronde(s)\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_pl.dart b/lib/l10n/generated/app_localizations_pl.dart index 08263cd..25c0e60 100644 --- a/lib/l10n/generated/app_localizations_pl.dart +++ b/lib/l10n/generated/app_localizations_pl.dart @@ -730,4 +730,24 @@ class AppLocalizationsPl extends AppLocalizations { @override String get automaticLanguage => 'Automatycznie'; + @override + String get noSavedGames => 'Nie ma jeszcze zapisanych gier.'; + + @override + String get errorNoGame => 'Błąd: brak gry'; + + @override + String get disconnectedPlayersWarning => 'Niektórzy gracze mają rozłączone urządzenie.'; + + @override + String get assumeOnThisPhone => 'Przejmij na tym telefonie'; + + @override + String get noResult => 'Brak wyniku'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players graczy • $impostors impostor(ów) • $rounds rund\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart index ff9d988..7e4e297 100644 --- a/lib/l10n/generated/app_localizations_pt.dart +++ b/lib/l10n/generated/app_localizations_pt.dart @@ -731,4 +731,24 @@ class AppLocalizationsPt extends AppLocalizations { @override String get automaticLanguage => 'Automático'; + @override + String get noSavedGames => 'Ainda não há partidas guardadas.'; + + @override + String get errorNoGame => 'Erro: sem partida'; + + @override + String get disconnectedPlayersWarning => 'Há jogadores com o dispositivo desligado.'; + + @override + String get assumeOnThisPhone => 'Assumir neste telemóvel'; + + @override + String get noResult => 'Sem resultado'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players jogadores • $impostors impostor(es) • $rounds ronda(s)\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart index 844cd91..9a68ae4 100644 --- a/lib/l10n/generated/app_localizations_ru.dart +++ b/lib/l10n/generated/app_localizations_ru.dart @@ -730,4 +730,24 @@ class AppLocalizationsRu extends AppLocalizations { @override String get automaticLanguage => 'Автоматически'; + @override + String get noSavedGames => 'Сохранённых игр пока нет.'; + + @override + String get errorNoGame => 'Ошибка: нет игры'; + + @override + String get disconnectedPlayersWarning => 'У некоторых игроков устройство отключено.'; + + @override + String get assumeOnThisPhone => 'Взять на этом телефоне'; + + @override + String get noResult => 'Нет результата'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players игроков • $impostors самозванцев • $rounds раундов\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_tr.dart b/lib/l10n/generated/app_localizations_tr.dart index 17edf60..9dfab03 100644 --- a/lib/l10n/generated/app_localizations_tr.dart +++ b/lib/l10n/generated/app_localizations_tr.dart @@ -729,4 +729,24 @@ class AppLocalizationsTr extends AppLocalizations { @override String get automaticLanguage => 'Otomatik'; + @override + String get noSavedGames => 'Henüz kaydedilmiş oyun yok.'; + + @override + String get errorNoGame => 'Hata: oyun yok'; + + @override + String get disconnectedPlayersWarning => 'Bazı oyuncuların cihazı bağlantısız.'; + + @override + String get assumeOnThisPhone => 'Bu telefonda devral'; + + @override + String get noResult => 'Sonuç yok'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players oyuncu • $impostors sahtekar • $rounds tur\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/l10n/generated/app_localizations_zh.dart b/lib/l10n/generated/app_localizations_zh.dart index 8cc1cfb..0e52930 100644 --- a/lib/l10n/generated/app_localizations_zh.dart +++ b/lib/l10n/generated/app_localizations_zh.dart @@ -726,6 +726,26 @@ class AppLocalizationsZh extends AppLocalizations { @override String get automaticLanguage => '自动'; + @override + String get noSavedGames => '还没有保存的游戏。'; + + @override + String get errorNoGame => '错误:没有游戏'; + + @override + String get disconnectedPlayersWarning => '有玩家的设备已断开连接。'; + + @override + String get assumeOnThisPhone => '在此手机上接管'; + + @override + String get noResult => '无结果'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players 名玩家 • $impostors 名冒牌者 • $rounds 回合\n$word • $category'; + } + } /// The translations for Chinese, as used in Taiwan (`zh_TW`). @@ -1322,4 +1342,24 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { @override String get automaticLanguage => '自動'; + @override + String get noSavedGames => '尚未有已儲存的遊戲。'; + + @override + String get errorNoGame => '錯誤:沒有遊戲'; + + @override + String get disconnectedPlayersWarning => '有玩家的裝置已中斷連線。'; + + @override + String get assumeOnThisPhone => '在此手機上接管'; + + @override + String get noResult => '無結果'; + + @override + String historyGameSummary(int players, int impostors, int rounds, String word, String category) { + return '$players 位玩家 • $impostors 位冒牌者 • $rounds 回合\n$word • $category'; + } + } \ No newline at end of file diff --git a/lib/pantallas/pantalla_gestor_host.dart b/lib/pantallas/pantalla_gestor_host.dart index 8ea1258..37b2639 100644 --- a/lib/pantallas/pantalla_gestor_host.dart +++ b/lib/pantallas/pantalla_gestor_host.dart @@ -94,6 +94,7 @@ class _PantallaGestorHostState extends State { void _avanzarAFase(FaseJuego fase) { final estado = context.read(); final nearby = context.read(); + final l10n = AppLocalizations.of(context)!; switch (fase) { case FaseJuego.debate: @@ -122,7 +123,7 @@ class _PantallaGestorHostState extends State { _snapshot( fase: 'resultado', resultadoActual: resultado, - mensaje: _mensajeSiguienteAccion(estado, resultado), + mensaje: _mensajeSiguienteAccion(estado, resultado, l10n), ).toJson(), ); } @@ -142,7 +143,10 @@ class _PantallaGestorHostState extends State { if (partida == null) { return Scaffold( appBar: AppBar(title: Text(l10n.hostGame)), - body: const Center(child: Text('Error: Sin partida')), + body: FondoFarolero( + intenso: true, + child: Center(child: Text(l10n.errorNoGame)), + ), ); } @@ -259,7 +263,7 @@ class _PantallaGestorHostState extends State { const SizedBox(width: 8), Expanded( child: Text( - 'Hay jugadores con el dispositivo desconectado.', + AppLocalizations.of(context)!.disconnectedPlayersWarning, style: Theme.of(context).textTheme.titleSmall, ), ), @@ -276,7 +280,7 @@ class _PantallaGestorHostState extends State { child: OutlinedButton.icon( onPressed: () => nearby.asumirUsuariosDesconectados(), icon: const Icon(Icons.person_add_alt_1), - label: const Text('Asumir en este móvil'), + label: Text(AppLocalizations.of(context)!.assumeOnThisPhone), ), ), ], @@ -347,7 +351,7 @@ class _PantallaGestorHostState extends State { case FaseJuego.finPartida: return _buildFaseFinOnline(context, l10n); default: - return const Center(child: Text('Fin de la partida')); + return Center(child: Text(l10n.gameOver)); } } @@ -374,15 +378,16 @@ class _PantallaGestorHostState extends State { String _mensajeSiguienteAccion( EstadoJuego estado, ResultadoVotacion resultado, + AppLocalizations l10n, ) { final partida = estado.partida; if (partida != null && _hayFinTrasVotacion(partida)) { - return 'La partida ha terminado.'; + return l10n.gameOver; } if (resultado.eraImpostor) { - return 'El impostor eliminado puede intentar adivinar la palabra.'; + return l10n.impostorCanGuess.replaceAll('\n', ' '); } - return 'La partida continúa en la siguiente ronda.'; + return l10n.gameContinues; } bool _hayFinTrasVotacion(Partida partida) { @@ -750,7 +755,7 @@ class _PantallaGestorHostState extends State { ? partida!.historialVotaciones.last : null; if (partida == null || resultado == null) { - return const Center(child: Text('Sin resultado')); + return Center(child: Text(l10n.noResult)); } final conteo = {}; diff --git a/lib/pantallas/pantalla_historial.dart b/lib/pantallas/pantalla_historial.dart index c5dedca..2762518 100644 --- a/lib/pantallas/pantalla_historial.dart +++ b/lib/pantallas/pantalla_historial.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:farolero/l10n/generated/app_localizations.dart'; import '../servicios/servicio_historial_partidas.dart'; import '../tema/componentes_farolero.dart'; @@ -10,52 +11,98 @@ class PantallaHistorial extends StatelessWidget { @override Widget build(BuildContext context) { + final l10n = AppLocalizations.of(context)!; final historial = context.watch(); final partidas = historial.partidas; return Scaffold( - appBar: AppBar(title: const Text('Historial')), + appBar: AppBar(title: Text(l10n.history)), body: FondoFarolero( intenso: true, child: partidas.isEmpty - ? const Center(child: Text('Todavía no hay partidas guardadas.')) - : ListView.builder( - padding: const EdgeInsets.all(16), - itemCount: partidas.length, - itemBuilder: (context, index) { - final partida = partidas[index]; - final ganaronJugadores = partida.ganador == 'jugadores'; - final dia = - partida.fecha.day.toString().padLeft(2, '0'); - final mes = - partida.fecha.month.toString().padLeft(2, '0'); - return Card( - child: ListTile( - leading: CircleAvatar( - backgroundColor: ganaronJugadores - ? TemaApp.colorVerde - : TemaApp.colorAcento, - child: Icon( - ganaronJugadores ? Icons.groups : Icons.theater_comedy, - color: Colors.white, - ), + ? Center( + child: Padding( + padding: const EdgeInsets.all(20), + child: EstadoVacioFarolero( + icono: Icons.history_rounded, + titulo: l10n.history, + subtitulo: l10n.noSavedGames, + ), + ), + ) + : SafeArea( + top: false, + child: ListView.separated( + padding: const EdgeInsets.fromLTRB(16, 12, 16, 24), + itemCount: partidas.length, + separatorBuilder: (_, __) => const SizedBox(height: 12), + itemBuilder: (context, index) { + final partida = partidas[index]; + final ganaronJugadores = partida.ganador == 'jugadores'; + final color = ganaronJugadores + ? TemaApp.colorVerde + : TemaApp.colorAcento; + final dia = partida.fecha.day.toString().padLeft(2, '0'); + final mes = partida.fecha.month.toString().padLeft(2, '0'); + return PanelFarolero( + padding: const EdgeInsets.all(14), + borderColor: color.withValues(alpha: 0.48), + child: Row( + children: [ + Container( + width: 52, + height: 52, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: color.withValues(alpha: 0.18), + border: Border.all(color: color), + ), + child: Icon( + ganaronJugadores + ? Icons.groups_rounded + : Icons.theater_comedy_rounded, + color: color, + ), + ), + const SizedBox(width: 12), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + ganaronJugadores + ? l10n.playersWin + : l10n.impostorsWin, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: Theme.of(context).textTheme.titleMedium, + ), + const SizedBox(height: 4), + Text( + l10n.historyGameSummary( + partida.jugadores, + partida.impostores, + partida.rondas, + partida.palabra, + partida.categoria, + ), + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: Theme.of(context).textTheme.bodyMedium, + ), + ], + ), + ), + const SizedBox(width: 12), + Text( + '$dia/$mes', + style: Theme.of(context).textTheme.bodySmall, + ), + ], ), - title: Text( - ganaronJugadores - ? 'Ganaron los jugadores' - : 'Ganaron los impostores', - ), - subtitle: Text( - '${partida.jugadores} jugadores · ${partida.impostores} impostor(es) · ${partida.rondas} ronda(s)\n${partida.palabra} · ${partida.categoria}', - ), - isThreeLine: true, - trailing: Text( - '$dia/$mes', - style: Theme.of(context).textTheme.bodySmall, - ), - ), - ); - }, + ); + }, + ), ), ), ); diff --git a/lib/pantallas/pantalla_reglas.dart b/lib/pantallas/pantalla_reglas.dart index 671735b..d31f9a8 100644 --- a/lib/pantallas/pantalla_reglas.dart +++ b/lib/pantallas/pantalla_reglas.dart @@ -14,82 +14,54 @@ class PantallaReglas extends StatelessWidget { appBar: AppBar(title: Text(l10n.rulesTitle)), body: FondoFarolero( intenso: true, - child: SingleChildScrollView( - padding: const EdgeInsets.all(16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _seccion( - context, - 1, - Icons.person_search, - l10n.rulesWhatIsTitle, - l10n.rulesWhatIsBody, + child: SafeArea( + top: false, + child: SingleChildScrollView( + padding: const EdgeInsets.fromLTRB(16, 12, 16, 28), + child: Center( + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 620), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + EncabezadoFarolero( + icono: Icons.menu_book_rounded, + titulo: l10n.rulesTitle, + subtitulo: l10n.rulesWhatIsBody, + ), + const SizedBox(height: 16), + _seccion(context, 1, Icons.person_search, l10n.rulesWhatIsTitle, l10n.rulesWhatIsBody), + _seccion(context, 2, Icons.chat_bubble, l10n.rulesHowToPlayTitle, l10n.rulesHowToPlayBody), + _seccion(context, 3, Icons.how_to_vote, l10n.rulesWhoWinsTitle, l10n.rulesWhoWinsBody), + _seccion(context, 4, Icons.lightbulb, l10n.rulesTipsPlayersTitle, l10n.rulesTipsPlayersBody), + _seccion(context, 5, Icons.theater_comedy, l10n.rulesTipsImpostorTitle, l10n.rulesTipsImpostorBody), + _seccion(context, 6, Icons.devices, l10n.rulesModesTitle, l10n.rulesModesBody), + _ejemplo(context, l10n.rulesExampleTitle, l10n.rulesExampleBody), + ], + ), + ), ), - _seccion( - context, - 2, - Icons.chat_bubble, - l10n.rulesHowToPlayTitle, - l10n.rulesHowToPlayBody, - ), - _seccion( - context, - 3, - Icons.how_to_vote, - l10n.rulesWhoWinsTitle, - l10n.rulesWhoWinsBody, - ), - _seccion( - context, - 4, - Icons.lightbulb, - l10n.rulesTipsPlayersTitle, - l10n.rulesTipsPlayersBody, - ), - _seccion( - context, - 5, - Icons.theater_comedy, - l10n.rulesTipsImpostorTitle, - l10n.rulesTipsImpostorBody, - ), - _seccion( - context, - 6, - Icons.devices, - l10n.rulesModesTitle, - l10n.rulesModesBody, - ), - _ejemplo(context, l10n.rulesExampleTitle, l10n.rulesExampleBody), - const SizedBox(height: 32), - ], ), ), ), ); } - Widget _seccion( - BuildContext context, - int numero, - IconData icono, - String titulo, - String contenido, - ) { + Widget _seccion(BuildContext context, int numero, IconData icono, String titulo, String contenido) { return Padding( - padding: const EdgeInsets.only(bottom: 16), + padding: const EdgeInsets.only(bottom: 14), child: PanelFarolero( - padding: const EdgeInsets.all(12), + padding: const EdgeInsets.fromLTRB(14, 14, 14, 16), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: 54, height: 54, + alignment: Alignment.center, decoration: BoxDecoration( color: TemaApp.colorNaranja.withValues(alpha: 0.16), - borderRadius: BorderRadius.circular(8), + borderRadius: BorderRadius.circular(16), border: Border.all(color: TemaApp.colorNaranja), ), child: Icon(icono, color: TemaApp.colorNaranja, size: 30), @@ -97,23 +69,25 @@ class PantallaReglas extends StatelessWidget { const SizedBox(width: 12), Expanded( child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ + crossAxisAlignment: CrossAxisAlignment.start, + children: [ Text( '$numero. ${titulo.toUpperCase()}', + maxLines: 2, + overflow: TextOverflow.ellipsis, style: Theme.of(context).textTheme.titleLarge, ), - const SizedBox(height: 8), - Text(contenido, - style: Theme.of(context).textTheme.bodyLarge?.copyWith( - height: 1.5, - )), - ], + const SizedBox(height: 8), + Text( + contenido, + style: Theme.of(context).textTheme.bodyLarge?.copyWith(height: 1.45), + ), + ], ), ), ], - ), ), + ), ); } @@ -123,19 +97,20 @@ class PantallaReglas extends StatelessWidget { child: PanelFarolero( color: TemaApp.colorNaranja.withValues(alpha: 0.15), borderColor: TemaApp.colorNaranja, + padding: const EdgeInsets.fromLTRB(18, 18, 18, 20), child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(titulo, - style: Theme.of(context).textTheme.titleLarge?.copyWith( - color: TemaApp.colorNaranja, - )), - const SizedBox(height: 8), - Text(contenido, - style: Theme.of(context).textTheme.bodyLarge?.copyWith( - height: 1.5, - )), - ], + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + titulo, + style: Theme.of(context).textTheme.titleLarge?.copyWith(color: TemaApp.colorNaranja), + ), + const SizedBox(height: 8), + Text( + contenido, + style: Theme.of(context).textTheme.bodyLarge?.copyWith(height: 1.45), + ), + ], ), ), ); diff --git a/lib/pantallas/pantalla_votacion_cliente.dart b/lib/pantallas/pantalla_votacion_cliente.dart index 448d0ef..40cd101 100644 --- a/lib/pantallas/pantalla_votacion_cliente.dart +++ b/lib/pantallas/pantalla_votacion_cliente.dart @@ -213,7 +213,7 @@ class _PantallaVotacionClienteState extends State { return Scaffold( backgroundColor: TemaApp.colorFondo, appBar: AppBar( - title: const Text('Resultado'), + title: Text(l10n.result), automaticallyImplyLeading: false, backgroundColor: Colors.transparent, elevation: 0,