- Añadido modelo Usuario con pool de usuarios sincronizado - El host ahora recibe palabra y rol como cualquier jugador - UI de selección de perfil en pantallas de lobby - Los clientes pueden ver usuarios del servidor o crear nuevos - El juego no inicia hasta que el host selecciona perfil
604 lines
18 KiB
Dart
604 lines
18 KiB
Dart
// ignore: unused_import
|
||
import 'package:intl/intl.dart' as intl;
|
||
import 'app_localizations.dart';
|
||
|
||
// ignore_for_file: type=lint
|
||
|
||
/// The translations for Russian (`ru`).
|
||
class AppLocalizationsRu extends AppLocalizations {
|
||
AppLocalizationsRu([String locale = 'ru']) : super(locale);
|
||
|
||
@override
|
||
String get appTitle => 'Самозванец';
|
||
|
||
@override
|
||
String get subtitle => 'Социальная игра на дедукцию';
|
||
|
||
@override
|
||
String get loadingWords => 'Загрузка слов...';
|
||
|
||
@override
|
||
String get playersRange => '3-20 игроков • Без интернета';
|
||
|
||
@override
|
||
String get createGame => 'Создать игру';
|
||
|
||
@override
|
||
String get joinGame => 'Присоединиться к игре';
|
||
|
||
@override
|
||
String get howToPlay => 'Как играть';
|
||
|
||
@override
|
||
String get settings => 'Настройки';
|
||
|
||
@override
|
||
String get gameMode => 'Режим игры';
|
||
|
||
@override
|
||
String get singleDevice => 'Одно устройство';
|
||
|
||
@override
|
||
String get multiDevice => 'Несколько устройств';
|
||
|
||
@override
|
||
String get category => 'Категория';
|
||
|
||
@override
|
||
String get categoryAll => 'Все';
|
||
|
||
@override
|
||
String get categoryAnimals => 'Животные';
|
||
|
||
@override
|
||
String get categoryFood => 'Еда';
|
||
|
||
@override
|
||
String get categoryCountries => 'Страны';
|
||
|
||
@override
|
||
String get categorySports => 'Спорт';
|
||
|
||
@override
|
||
String get categoryProfessions => 'Профессии';
|
||
|
||
@override
|
||
String get categoryObjects => 'Предметы';
|
||
|
||
@override
|
||
String get categoryPlaces => 'Места';
|
||
|
||
@override
|
||
String get categoryMovies => 'Фильмы';
|
||
|
||
@override
|
||
String get categoryMusic => 'Музыка';
|
||
|
||
@override
|
||
String get categoryTechnology => 'Технологии';
|
||
|
||
@override
|
||
String playersCount(int count) {
|
||
return 'Игроки ($count)';
|
||
}
|
||
|
||
@override
|
||
String get playersRangeHint => '3-20';
|
||
|
||
@override
|
||
String get playerNameHint => 'Имя игрока';
|
||
|
||
@override
|
||
String get playerAlreadyExists => 'Игрок с таким именем уже существует';
|
||
|
||
@override
|
||
String get maxPlayersReached => 'Максимум 20 игроков';
|
||
|
||
@override
|
||
String get minPlayersRequired => 'Нужно минимум 3 игрока';
|
||
|
||
@override
|
||
String get configuration => 'Конфигурация';
|
||
|
||
@override
|
||
String get impostors => '🎭 Самозванцы';
|
||
|
||
@override
|
||
String get impostorClue => '🔍 Подсказка для самозванца';
|
||
|
||
@override
|
||
String get impostorClueDescription => 'Самозванец знает категорию';
|
||
|
||
@override
|
||
String get debate => '🗣️ Debate';
|
||
|
||
@override
|
||
String get debateTime => '⏱️ Время обсуждения';
|
||
|
||
@override
|
||
String get noLimit => 'Без ограничений';
|
||
|
||
@override
|
||
String get oneMin => '1 мин';
|
||
|
||
@override
|
||
String get twoMin => '2 мин';
|
||
|
||
@override
|
||
String get threeMin => '3 мин';
|
||
|
||
@override
|
||
String get fiveMin => '5 мин';
|
||
|
||
@override
|
||
String get startGame => 'Начать игру';
|
||
|
||
@override
|
||
String get seeYourWord => 'Посмотри своё слово';
|
||
|
||
@override
|
||
String get eachPlayerMustSee =>
|
||
'Каждый игрок должен тайно посмотреть своё слово';
|
||
|
||
@override
|
||
String roundNumber(int round) {
|
||
return 'Раунд $round';
|
||
}
|
||
|
||
@override
|
||
String get alreadySeen => 'Уже видел своё слово';
|
||
|
||
@override
|
||
String get tapToSee => 'Нажми, чтобы увидеть';
|
||
|
||
@override
|
||
String get allSeenStartDebate => 'Все увидели → Начать обсуждение';
|
||
|
||
@override
|
||
String playersRemaining(int count) {
|
||
return 'Осталось $count игроков';
|
||
}
|
||
|
||
@override
|
||
String get youAreImpostor => 'Ты самозванец!';
|
||
|
||
@override
|
||
String get yourWordIs => 'Твоё слово:';
|
||
|
||
@override
|
||
String clueCategory(String category) {
|
||
return 'Подсказка: $category';
|
||
}
|
||
|
||
@override
|
||
String get holdToSeeWord => 'Удерживай, чтобы увидеть своё слово';
|
||
|
||
@override
|
||
String get makeSureNoOneLooks => 'Убедись, что никто не подсматривает';
|
||
|
||
@override
|
||
String get showingWord => '👁️ Показываю...';
|
||
|
||
@override
|
||
String get holdToSee => '👆 Удерживай, чтобы увидеть';
|
||
|
||
@override
|
||
String get seenMyWord => 'Я увидел своё слово';
|
||
|
||
@override
|
||
String debateRound(int round) {
|
||
return 'Обсуждение - Раунд $round';
|
||
}
|
||
|
||
@override
|
||
String get timeUp => '⏰ Время вышло!';
|
||
|
||
@override
|
||
String get timeRemaining => '⏱️ Оставшееся время';
|
||
|
||
@override
|
||
String get playersInDebate => 'Игроки в обсуждении';
|
||
|
||
@override
|
||
String activePlayersInfo(int active, int impostors) {
|
||
return '$active активных • $impostors скрытый(-х) самозванец(-ев)';
|
||
}
|
||
|
||
@override
|
||
String get eliminated => 'Выбыл';
|
||
|
||
@override
|
||
String get notes => 'Заметки';
|
||
|
||
@override
|
||
String get goToVoting => 'Перейти к голосованию';
|
||
|
||
@override
|
||
String get voting => '🗳️ Голосование';
|
||
|
||
@override
|
||
String get turnToVote => 'Твоя очередь голосовать:';
|
||
|
||
@override
|
||
String votesProgress(int current, int total) {
|
||
return 'Голоса: $current/$total';
|
||
}
|
||
|
||
@override
|
||
String get whoIsImpostor => 'Кто, по-твоему, самозванец?';
|
||
|
||
@override
|
||
String get confirmVote => 'Подтвердить голос';
|
||
|
||
@override
|
||
String get votingComplete => '🗳️ Голосование завершено';
|
||
|
||
@override
|
||
String get allVoted => 'Все проголосовали!';
|
||
|
||
@override
|
||
String get tapToReveal => 'Нажми, чтобы узнать результат';
|
||
|
||
@override
|
||
String get revealResult => 'Показать результат';
|
||
|
||
@override
|
||
String get result => 'Результат';
|
||
|
||
@override
|
||
String get revealing => 'Раскрываем...';
|
||
|
||
@override
|
||
String get wasImpostor => 'Был САМОЗВАНЦЕМ! 🎉';
|
||
|
||
@override
|
||
String get wasInnocent => 'Был НЕВИНОВЕН 😱';
|
||
|
||
@override
|
||
String get votesThisRound => 'Голоса этого раунда';
|
||
|
||
@override
|
||
String get seeEndResult => 'Увидеть итоговый результат';
|
||
|
||
@override
|
||
String get impostorGuessWord => 'Самозванец угадает слово?';
|
||
|
||
@override
|
||
String get nextRound => 'Следующий раунд';
|
||
|
||
@override
|
||
String get impostorGuessTitle => '🎯 Догадка самозванца';
|
||
|
||
@override
|
||
String get impostorCanGuess =>
|
||
'Выбывший самозванец может\nпопытаться угадать слово';
|
||
|
||
@override
|
||
String get ifCorrectImpostorsWin => 'Если угадает — самозванцы побеждают!';
|
||
|
||
@override
|
||
String get guessWordHint => 'Как ты думаешь, какое слово?';
|
||
|
||
@override
|
||
String get dontGuess => 'Не пытаться';
|
||
|
||
@override
|
||
String get guess => 'Угадать';
|
||
|
||
@override
|
||
String get correctGuess => 'Угадал!';
|
||
|
||
@override
|
||
String theWordWas(String word) {
|
||
return 'Слово было: $word';
|
||
}
|
||
|
||
@override
|
||
String get impostorsWin => 'Самозванцы побеждают!';
|
||
|
||
@override
|
||
String get wrongGuess => 'Не угадал!';
|
||
|
||
@override
|
||
String get gameContinues => 'Игра продолжается...';
|
||
|
||
@override
|
||
String get gameOver => 'Конец игры';
|
||
|
||
@override
|
||
String get playersWin => 'Игроки побеждают!';
|
||
|
||
@override
|
||
String get theSecretWordWas => '🔍 Загаданное слово:';
|
||
|
||
@override
|
||
String categoryLabel(String category) {
|
||
return 'Категория: $category';
|
||
}
|
||
|
||
@override
|
||
String get theImpostorWas => '🎭 Самозванцем был:';
|
||
|
||
@override
|
||
String get theImpostorsWere => '🎭 Самозванцами были:';
|
||
|
||
@override
|
||
String get votingHistory => '📊 История голосований';
|
||
|
||
@override
|
||
String roundElimination(int round, String name) {
|
||
return 'Раунд $round: $name';
|
||
}
|
||
|
||
@override
|
||
String get rematch => 'Реванш';
|
||
|
||
@override
|
||
String get mainMenu => 'Главное меню';
|
||
|
||
@override
|
||
String get notesTitle => '📝 Заметки';
|
||
|
||
@override
|
||
String get notesSaved => 'Заметки сохранены';
|
||
|
||
@override
|
||
String get whoAreYou => 'Кто ты?';
|
||
|
||
@override
|
||
String get selectYourName =>
|
||
'Выбери своё имя, чтобы увидеть свои личные заметки';
|
||
|
||
@override
|
||
String notesOf(String name) {
|
||
return 'Заметки $name';
|
||
}
|
||
|
||
@override
|
||
String get notesAboutPlayers => 'Записи о каждом игроке';
|
||
|
||
@override
|
||
String get playerNoteHint => 'Что он сказал? Подозрительно?';
|
||
|
||
@override
|
||
String get freeNote => 'Свободная заметка';
|
||
|
||
@override
|
||
String get freeNoteHint => 'Личные записи...';
|
||
|
||
@override
|
||
String get rulesTitle => '📖 Как играть';
|
||
|
||
@override
|
||
String get rulesWhatIsTitle => '🎭 Что такое «Самозванец»?';
|
||
|
||
@override
|
||
String get rulesWhatIsBody =>
|
||
'Социальная игра на дедукцию для 3-20 игроков. Все получают секретное слово... кроме самозванца! Твоя задача: вычислить, кто притворяется.';
|
||
|
||
@override
|
||
String get rulesHowToPlayTitle => '🔍 Как играть?';
|
||
|
||
@override
|
||
String get rulesHowToPlayBody =>
|
||
'1. Раздача ролей: все получают одно и то же слово, кроме самозванца(-ев).\n\n2. Обсуждение: по очереди каждый игрок описывает слово, НЕ называя его напрямую. Самозванец должен притворяться, что знает его.\n\n3. Голосование: после обсуждения все голосуют за того, кого считают самозванцем.\n\n4. Исключение: игрок, набравший больше всего голосов, выбывает, и выясняется, был ли он самозванцем.\n\n5. Если это был самозванец, он может попытаться угадать слово. Если угадает — самозванцы побеждают!';
|
||
|
||
@override
|
||
String get rulesWhoWinsTitle => '🏆 Кто побеждает?';
|
||
|
||
@override
|
||
String get rulesWhoWinsBody =>
|
||
'• Игроки: побеждают, если вычислят ВСЕХ самозванцев.\n• Самозванцы: побеждают, если остаются нераскрытыми, пока обычных игроков не станет столько же или меньше, чем самозванцев, или если угадают слово при выбывании.';
|
||
|
||
@override
|
||
String get rulesTipsPlayersTitle => '💡 Советы для игроков';
|
||
|
||
@override
|
||
String get rulesTipsPlayersBody =>
|
||
'• Давай тонкие подсказки, доказывающие, что ты знаешь слово, но не настолько очевидные, чтобы самозванец мог ими воспользоваться.\n• Следи за тем, кто даёт расплывчатые или общие ответы.\n• Используй заметки, чтобы записывать сказанное каждым.\n• Не называй слово напрямую — это поможет самозванцу!';
|
||
|
||
@override
|
||
String get rulesTipsImpostorTitle => '🎭 Советы для самозванца';
|
||
|
||
@override
|
||
String get rulesTipsImpostorBody =>
|
||
'• Внимательно слушай подсказки остальных.\n• Попытайся вычислить слово, чтобы давать правдоподобные подсказки.\n• Не говори первым, если не уверен.\n• Если тебе дали категорию как подсказку, используй это в свою пользу.\n• Обвиняй других, чтобы отвлечь внимание.';
|
||
|
||
@override
|
||
String get rulesModesTitle => '📱 Режимы игры';
|
||
|
||
@override
|
||
String get rulesModesBody =>
|
||
'• Одно устройство: все передают телефон по кругу. Каждый игрок видит своё слово, нажав и удерживая кнопку.\n\n• Несколько устройств: каждый игрок использует собственное устройство. Подключение через Bluetooth/WiFi Direct без интернета.';
|
||
|
||
@override
|
||
String get rulesExampleTitle => '✏️ Пример раунда';
|
||
|
||
@override
|
||
String get rulesExampleBody =>
|
||
'Секретное слово: «Пицца»\n\n• Аня: «Её едят горячей» ✓\n• Кирилл: «Приходит в коробке» ✓\n• Лена (самозванец): «Очень популярная» 🤔\n• Дима: «С сыром» ✓\n\nЛена дала слишком общий ответ... Подозрительно!';
|
||
|
||
@override
|
||
String get joinGameTitle => 'Присоединиться к игре';
|
||
|
||
@override
|
||
String get multiDeviceMode => 'Режим нескольких устройств';
|
||
|
||
@override
|
||
String get scanQrDescription =>
|
||
'Отсканируй QR-код, который показывает хост, чтобы подключиться к игре через Bluetooth/WiFi Direct.';
|
||
|
||
@override
|
||
String get comingSoon => 'Скоро';
|
||
|
||
@override
|
||
String get nearbyNotAvailable =>
|
||
'Подключение нескольких устройств через Nearby Connections требует физических Android-устройств.\n\nПока что используй режим «Одно устройство» для игры на общем телефоне.';
|
||
|
||
@override
|
||
String get back => 'Назад';
|
||
|
||
@override
|
||
String get yes => 'Да';
|
||
|
||
@override
|
||
String get no => 'Нет';
|
||
|
||
@override
|
||
String get cancel => 'Отмена';
|
||
|
||
@override
|
||
String get accept => 'Принять';
|
||
|
||
@override
|
||
String get next => 'Далее';
|
||
|
||
@override
|
||
String get settingsTitle => 'Настройки';
|
||
|
||
@override
|
||
String get language => 'Язык';
|
||
|
||
@override
|
||
String get soundVolume => 'Громкость эффектов';
|
||
|
||
@override
|
||
String get vibration => 'Вибрация';
|
||
|
||
@override
|
||
String get about => 'О приложении';
|
||
|
||
@override
|
||
String get version => 'Версия';
|
||
|
||
@override
|
||
String get developer => 'Разработчик';
|
||
|
||
@override
|
||
String get licenses => 'Лицензии';
|
||
|
||
@override
|
||
String get scanToJoin => 'Escanea el QR para unirte';
|
||
|
||
@override
|
||
String get connectedPlayers => 'Jugadores conectados';
|
||
|
||
@override
|
||
String get hostGame => 'Gestor de partida';
|
||
|
||
@override
|
||
String get waitingPlayersSeeWord => 'Esperando que todos vean su palabra...';
|
||
|
||
@override
|
||
String get activePlayers => 'Jugadores activos';
|
||
|
||
@override
|
||
String get playersVoted => 'Han votado';
|
||
|
||
@override
|
||
String get waitingVoting => 'Esperando que voten...';
|
||
|
||
@override
|
||
String get waitingForPlayers => 'Esperando jugadores...';
|
||
|
||
@override
|
||
String needMorePlayers(int count) {
|
||
return 'Faltan $count jugadores más';
|
||
}
|
||
|
||
@override
|
||
String get starting => 'Iniciando...';
|
||
|
||
@override
|
||
String get enterNameAndScan => 'Escribe tu nombre y escanea el QR del host';
|
||
|
||
@override
|
||
String get yourName => 'Tu nombre';
|
||
|
||
@override
|
||
String get nameRequired => 'Escribe tu nombre';
|
||
|
||
@override
|
||
String get connectingTo => 'Conectando a';
|
||
|
||
@override
|
||
String get scanQR => 'Escanear QR';
|
||
|
||
@override
|
||
String get scanHostQR => 'Apunta al QR del host';
|
||
|
||
@override
|
||
String get connectedWaiting => '¡Conectado!';
|
||
|
||
@override
|
||
String get waitingForHost => 'Esperando a que el host inicie la partida...';
|
||
|
||
@override
|
||
String get enterNameToSearch =>
|
||
'Escribe tu nombre para buscar partidas cercanas';
|
||
|
||
@override
|
||
String get searchGames => 'Buscar partidas';
|
||
|
||
@override
|
||
String get searchingGames => 'Buscando partidas cercanas...';
|
||
|
||
@override
|
||
String get noGamesFound => 'No se encontraron partidas';
|
||
|
||
@override
|
||
String get noGamesFoundHint =>
|
||
'Asegúrate de que el host tiene la sala abierta y estáis cerca';
|
||
|
||
@override
|
||
String get orScanQR => '¿No aparece? Escanea el QR del host';
|
||
|
||
@override
|
||
String get iveSeenIt => 'Ya la he visto';
|
||
|
||
@override
|
||
String clueIs(String category) {
|
||
return 'La pista es: $category';
|
||
}
|
||
|
||
@override
|
||
String get debatePhaseActive => 'Fase de debate activa';
|
||
|
||
@override
|
||
String get debateInstructions =>
|
||
'Hablad entre vosotros y decid quién creéis que es el impostor. Cuando estéis listos, solicitad la votación.';
|
||
|
||
@override
|
||
String get solicitarVotacion => 'Solicitar votación';
|
||
|
||
@override
|
||
String get votacionSolicitada => 'Votación solicitada';
|
||
|
||
@override
|
||
String get whoDoYouThinkIsTheImpostor => '¿Quién es el impostor?';
|
||
|
||
@override
|
||
String get selectOnePlayer => 'Selecciona a un jugador para votar';
|
||
|
||
@override
|
||
String get votar => 'Votar';
|
||
|
||
@override
|
||
String get selectYourProfile => 'Tu perfil';
|
||
|
||
@override
|
||
String get selectProfile => 'Selecciona un perfil';
|
||
|
||
@override
|
||
String get createNewUser => 'Crear nuevo usuario';
|
||
|
||
@override
|
||
String get userNameRequired => 'El nombre no puede estar vacio';
|
||
|
||
@override
|
||
String get profileSelected => 'Perfil seleccionado';
|
||
|
||
@override
|
||
String get availableProfiles => 'Perfiles disponibles';
|
||
}
|