- Random.secure() para selección de impostores (no predecible) - Random.secure() también en desempate de votación - Nueva PantallaGestorHost para coordinación multi-device - Navegación: host va a gestor tras iniciar, no a pantalla de palabra - PantallaPalabraCliente: cada jugador ve su palabra en su móvil - PantallaDebateCliente: debate con timer y botón solicitar votación - PantallaVotacionCliente: voto desde el móvil del cliente - PantallaUnirse: listener que reacciona a partidaInicio y cambia de fase - Protocolo: listo/voto/solicitoVotacion via Nearby hacia el host - Nuevas cadenas l10n ES
583 lines
16 KiB
Dart
583 lines
16 KiB
Dart
// ignore: unused_import
|
|
import 'package:intl/intl.dart' as intl;
|
|
import 'app_localizations.dart';
|
|
|
|
// ignore_for_file: type=lint
|
|
|
|
/// The translations for Arabic (`ar`).
|
|
class AppLocalizationsAr extends AppLocalizations {
|
|
AppLocalizationsAr([String locale = 'ar']) : 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• أجهزة متعددة: كل لاعب يستخدم جهازه الخاص. يتم الاتصال عبر بلوتوث/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 الذي يعرضه المضيف للاتصال باللعبة عبر بلوتوث/WiFi Direct.';
|
|
|
|
@override
|
|
String get comingSoon => 'قريبًا';
|
|
|
|
@override
|
|
String get nearbyNotAvailable =>
|
|
'اتصال الأجهزة المتعددة عبر Nearby Connections يتطلب أجهزة أندرويد فعلية.\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';
|
|
}
|