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,