Files
farolero/lib/l10n/generated/app_localizations_ar.dart
T
FreeTLab 56f07364c2
Build & Deploy Farolero / Análisis de código (push) Successful in 13s
Build & Deploy Farolero / Build APK + AAB release (push) Successful in 1m22s
feat: confirm before leaving a game, and fix untranslated strings
Exit confirmation
- A dialog in the app's own style now guards every in-game screen. The safe
  action is the prominent one, so a stray tap keeps you in the game.
- Eleven screens covered, against both the system back gesture and the close
  buttons. The message adapts: a single-device game is lost, a host ends it
  for everyone, a client can rejoin.
- The two screens the host also opens from the manager take a flag so that
  back there just closes them instead of offering to quit.

Translations
- 21 keys were still holding the English text in Arabic, Basque, Hindi,
  Japanese, Korean, Dutch, Polish, Russian, Turkish and both Chinese
  variants: 231 strings, covering the whole multi-device flow, permissions
  and the mode picker. Nothing failed, the app just showed English.
- The permissions dialog was hardcoded in Spanish; it is localized now.
- Portuguese used Spanish gerunds where pt-PT takes "a + infinitive".

Checked what looked untranslated but is not: Animals and Notes are correct
Catalan, Configuration and Vibration correct French, Version correct German.
Those are whitelisted in the new test rather than silently rewritten.

l10n_cobertura_test guards all of it: no missing or orphan keys, no empty
values, no English left outside the whitelist, and placeholders preserved.
2026-07-25 23:59:57 +02:00

880 lines
24 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 matchRewards => 'مكافآت المباراة';
@override
String get newMedals => 'ميداليات جديدة';
@override
String get noNewMedalsKeepFire =>
'لا توجد ميداليات جديدة هذه المرة. واصل إشعال حماسك.';
@override
String get calculatingRewards => 'جارٍ حساب المكافآت...';
@override
String get fireLabel => 'النار';
@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 => '🗣️ نقاش';
@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 => 'امسح رمز QR للانضمام';
@override
String get connectedPlayers => 'اللاعبون المتصلون';
@override
String get hostGame => 'إدارة الجولة';
@override
String get waitingPlayersSeeWord => 'بانتظار أن يرى الجميع كلمتهم...';
@override
String get activePlayers => 'اللاعبون النشطون';
@override
String get playersVoted => 'صوّتوا';
@override
String get waitingVoting => 'بانتظار الأصوات...';
@override
String get waitingForPlayers => 'بانتظار اللاعبين...';
@override
String needMorePlayers(int count) {
return 'يلزم $count لاعبين إضافيين';
}
@override
String get starting => 'جارٍ البدء...';
@override
String get enterNameAndScan => 'اكتب اسمك وامسح رمز QR الخاص بالمضيف';
@override
String get yourName => 'اسمك';
@override
String get nameRequired => 'اكتب اسمك';
@override
String get connectingTo => 'جارٍ الاتصال بـ';
@override
String get scanQR => 'مسح رمز QR';
@override
String get scanHostQR => 'وجّه الكاميرا إلى رمز QR للمضيف';
@override
String get connectedWaiting => 'تم الاتصال!';
@override
String get waitingForHost => 'بانتظار أن يبدأ المضيف الجولة...';
@override
String get enterNameToSearch => 'اكتب اسمك للبحث عن جولات قريبة';
@override
String get searchGames => 'البحث عن جولات';
@override
String get searchingGames => 'جارٍ البحث عن جولات قريبة...';
@override
String get noGamesFound => 'لم يتم العثور على جولات';
@override
String get noGamesFoundHint => 'تأكد من أن المضيف قد فتح الغرفة وأنكم قريبون';
@override
String get orScanQR => 'لا تظهر؟ امسح رمز QR للمضيف';
@override
String get iveSeenIt => 'لقد رأيتها';
@override
String clueIs(String category) {
return 'التلميح: $category';
}
@override
String get debatePhaseActive => 'مرحلة النقاش جارية';
@override
String get debateInstructions =>
'تحدثوا فيما بينكم وقولوا من تظنون أنه المحتال. عندما تكونون جاهزين، اطلبوا التصويت.';
@override
String get solicitarVotacion => 'طلب التصويت';
@override
String get votacionSolicitada => 'تم طلب التصويت';
@override
String get whoDoYouThinkIsTheImpostor => 'من هو المحتال؟';
@override
String get selectOnePlayer => 'اختر لاعبًا للتصويت';
@override
String get votar => 'تصويت';
@override
String get selectYourProfile => 'ملفك الشخصي';
@override
String get selectProfile => 'اختر ملفًا شخصيًا';
@override
String get createNewUser => 'إنشاء مستخدم جديد';
@override
String get userNameRequired => 'لا يمكن ترك الاسم فارغًا';
@override
String get profileSelected => 'تم اختيار الملف الشخصي';
@override
String get availableProfiles => 'الملفات الشخصية المتاحة';
@override
String get scanThisCodeFromAnotherPhone => 'امسح هذا الرمز من هاتف آخر';
@override
String get gameUsers => 'مستخدمو اللعبة';
@override
String get selectedPlayers => 'اللاعبون المحددون';
@override
String get connectedPhones => 'الهواتف المتصلة';
@override
String get selectedOnThisPhone => 'محدد على هذا الهاتف';
@override
String get selectedByAnotherDevice => 'محدد على جهاز آخر';
@override
String get available => 'متاح';
@override
String get notAvailable => 'غير متاح';
@override
String get release => 'تحرير';
@override
String get select => 'اختيار';
@override
String get delete => 'حذف';
@override
String get selectAtLeastThreeUsersToStart =>
'اختر 3 مستخدمين على الأقل للبدء.';
@override
String get hostPhoneMustSelectUser =>
'يجب أن يختار هاتف المضيف مستخدمًا واحدًا على الأقل.';
@override
String get roomNoLongerInLobby => 'لم تعد الغرفة في ردهة الانتظار.';
@override
String get completeUserSelectionToStart => 'أكمل اختيار المستخدمين للبدء.';
@override
String get preparingSecureRoom => 'جارٍ تجهيز الغرفة الآمنة';
@override
String get searchingNearbyBluetoothGames =>
'البحث عن جولات قريبة عبر البلوتوث';
@override
String get tapToJoin => 'اضغط للانضمام';
@override
String get bluetoothLocationPermissionsRequired =>
'يلزم إذنا البلوتوث والموقع للبحث عن جولات.';
@override
String get bluetoothLocationPermissionsShort => 'يلزم إذنا البلوتوث والموقع';
@override
String get couldNotStartSearch =>
'تعذّر بدء البحث. تحقق من البلوتوث والموقع.';
@override
String couldNotConnectToHost(String host) {
return 'تعذّر الاتصال بـ $host';
}
@override
String get room => 'غرفة';
@override
String get singleDeviceSubtitle => 'اللعب على هذا الجهاز';
@override
String get singleDeviceDescription =>
'مثالي للعب معًا بتمرير الهاتف. إعداد سريع ومباشر.';
@override
String get multiDeviceSubtitle => 'كل لاعب على هاتفه';
@override
String get multiDeviceDescription =>
'أنشئ غرفة مميزة، وشارك رمز QR، وأدر المستخدمين من ردهة الانتظار.';
@override
String get singleDeviceGameLabel => 'اللعب على هذا الجهاز';
@override
String get multiDeviceGameLabel => 'لعب متعدد الأجهزة';
@override
String get mainDeviceUser => 'المستخدم الرئيسي للجهاز';
@override
String get couldNotCreateRoom => 'تعذّر إنشاء الغرفة. تحقق من البلوتوث.';
@override
String cannotStartWithReason(String reason) {
return 'تعذّر البدء: $reason';
}
@override
String get invalidRoom => 'غرفة غير صالحة';
@override
String get defaultPlayerName => 'لاعب';
@override
String get play => 'العب';
@override
String get history => 'السجل';
@override
String get mainTagline => 'اكتشف المنتحل قبل فوات الأوان';
@override
String get deviceProfile => 'الملف الشخصي للجهاز';
@override
String get profileName => 'الاسم';
@override
String get profileNick => 'اللقب';
@override
String get save => 'حفظ';
@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';
}
@override
String voteOf(String name) {
return 'تصويت $name';
}
@override
String firstTurnInstruction(String name) {
return 'يبدأ $name بقول كلمته.';
}
@override
String get impostorsKnowEachOther => '🎭 المحتالون يعرفون بعضهم';
@override
String get impostorsKnowEachOtherDescription => 'سيرى كل محتال أسماء الآخرين';
@override
String get impostorsKnowEachOtherNeedsTwo =>
'ينطبق فقط عند وجود محتالَين أو أكثر';
@override
String otherImpostorsTitle(num count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: 'المحتالون الآخرون',
one: 'المحتال الآخر',
);
return '$_temp0';
}
@override
String get youAreTheOnlyImpostor => 'أنت المحتال الوحيد';
@override
String impostorsAdjusted(int count) {
return 'تم ضبط عدد المحتالين إلى $count حسب عدد اللاعبين';
}
@override
String get eliminatedCannotVote => 'لقد خرجت: لم تعد تصوّت';
@override
String get reconnecting => 'جارٍ إعادة الاتصال...';
@override
String get reconnectingHint =>
'انقطع الاتصال بالمضيف. مكانك في الجولة محفوظ.';
@override
String get leaveGame => 'مغادرة الجولة';
@override
String playerRejoined(String name) {
return 'عاد $name إلى الجولة';
}
@override
String get leaveGameTitle => 'هل تريد مغادرة الجولة؟';
@override
String get leaveGameSingleDevice =>
'ستفقد الجولة الجارية ولن يمكن استعادتها.';
@override
String get leaveGameHost =>
'أنت المضيف: إذا غادرت ستنتهي الجولة لجميع اللاعبين.';
@override
String get leaveGameClient =>
'ستغادر الجولة. يمكنك العودة ما دام المضيف يبقيها مفتوحة.';
@override
String get stayInGame => 'متابعة اللعب';
@override
String get permissionsNeededTitle => 'أذونات مطلوبة';
@override
String get permissionsNeededBody => 'لوضع اللعب الجماعي نحتاج إلى:';
@override
String get openAppSettingsQuestion => 'هل تريد فتح إعدادات التطبيق؟';
@override
String get openSettings => 'فتح الإعدادات';
@override
String get permissionLocation => 'الموقع';
@override
String get permissionBluetoothAdvertise => 'بلوتوث (الإعلان)';
@override
String get permissionBluetoothConnect => 'بلوتوث (الاتصال)';
@override
String get permissionBluetoothScan => 'بلوتوث (المسح)';
@override
String get permissionNearbyWifi => 'واي فاي قريب';
}