Fixes 9 of 10 review findings (10th requires a manual Play Console step, no code change): 1. app.dart/banner_anuncio_superior.dart: move the top SafeArea inside BannerAnuncioSuperior so it only reserves status-bar height when an ad actually renders, restoring edge-to-edge layout for premium and free-unloaded users. 2. servicio_anuncios.dart: bound every interstitial await (load, presentation, and the injected implementation itself) with injectable timeouts so a callback that never fires can no longer hang a caller. 3. estado_entitlement.dart/hoja_premium.dart: expose a typed resultadoUsuario signal for purchase/restore failures and restore-found-nothing, with dedicated localized messages (compraError, restauracionSinCompras) across all 13 locales -- never the raw developer/exception string. 4. main.dart/servicio_consentimiento.dart: add a GDPR/UMP consent flow (ConsentInformation/ConsentForm) that gates Mobile Ads SDK init on canRequestAds(); premium users never see a consent form; failures degrade to no ads instead of crashing or blocking startup. 6. servicio_anuncios.dart: track real ad presentation (onAdShowedFullScreenContent) so a failed-to-show interstitial no longer consumes a session cap slot. 7. banner_anuncio_superior.dart: add an explicit load-attempted guard so repeated didChangeDependencies (e.g. entitlement notifyListeners during a purchase) can only ever trigger one banner load attempt. 8. servicio_anuncios.dart: make esPremium a required constructor parameter, matching the hardened contract already applied to EstadoAlarmas/EstadoGrabacion/EstadoRadio. 9. hoja_premium.dart: add a dedicated premiumActivo localized string instead of reusing the equalizer's equalizerActive translation, across all 13 locales. All fixes implemented RED-first (failing test before production code). Full suite: 1261 passed, 2 pre-existing skips, 0 failures. flutter analyze: 5 pre-existing issues only, 0 new. [version set]
1867 lines
52 KiB
Dart
1867 lines
52 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 => 'PluriWave';
|
|
|
|
@override
|
|
String get navHome => 'استماع';
|
|
|
|
@override
|
|
String get navSearch => 'بحث';
|
|
|
|
@override
|
|
String get navFavorites => 'المفضلة';
|
|
|
|
@override
|
|
String get navAlarms => 'المنبهات';
|
|
|
|
@override
|
|
String get navSettings => 'الإعدادات';
|
|
|
|
@override
|
|
String get actionOk => 'حسنًا';
|
|
|
|
@override
|
|
String get sleepTimer => 'مؤقّت النوم';
|
|
|
|
@override
|
|
String get sleepTimerDescription =>
|
|
'إيقاف الراديو بسلاسة مع عدّ تنازلي دقيق.';
|
|
|
|
@override
|
|
String get cancelTimer => 'إلغاء المؤقّت';
|
|
|
|
@override
|
|
String get optionOther => 'أخرى';
|
|
|
|
@override
|
|
String get customDurationTitle => 'مدة مخصّصة';
|
|
|
|
@override
|
|
String get durationGreaterThanZero => 'اختر مدة أكبر من الصفر.';
|
|
|
|
@override
|
|
String get hoursLabel => 'ساعات';
|
|
|
|
@override
|
|
String get minutesLabel => 'دقائق';
|
|
|
|
@override
|
|
String get secondsLabel => 'ثوانٍ';
|
|
|
|
@override
|
|
String durationHoursMinutesSeconds(
|
|
Object hours,
|
|
Object minutes,
|
|
Object seconds,
|
|
) {
|
|
return '$hours س $minutes د $seconds ث';
|
|
}
|
|
|
|
@override
|
|
String durationMinutesSeconds(Object minutes, Object seconds) {
|
|
return '$minutes د $seconds ث';
|
|
}
|
|
|
|
@override
|
|
String durationMinutesOnly(Object minutes) {
|
|
return '$minutes د';
|
|
}
|
|
|
|
@override
|
|
String durationSecondsOnly(Object seconds) {
|
|
return '$seconds ث';
|
|
}
|
|
|
|
@override
|
|
String get saveQuickAccess => 'حفظ كاختصار سريع';
|
|
|
|
@override
|
|
String get startTimer => 'بدء المؤقّت';
|
|
|
|
@override
|
|
String skipCurrentAlarmExecution(Object alarmName) {
|
|
return 'تم تخطي هذا التشغيل من $alarmName.';
|
|
}
|
|
|
|
@override
|
|
String get settingsTitle => 'الإعدادات';
|
|
|
|
@override
|
|
String get settingsSubtitle =>
|
|
'تحكم دقيق في الصوت والنسخ الاحتياطية والمحطات المخصصة.';
|
|
|
|
@override
|
|
String get settingsGroupAudioTitle => 'الصوت';
|
|
|
|
@override
|
|
String get settingsGroupStationsTitle => 'المحطات';
|
|
|
|
@override
|
|
String get settingsGroupRecordingsTitle => 'التسجيلات والموسيقى';
|
|
|
|
@override
|
|
String get settingsGroupApplicationTitle => 'التطبيق';
|
|
|
|
@override
|
|
String get infoSectionTitle => 'معلومات';
|
|
|
|
@override
|
|
String get languageSectionTitle => 'اللغة';
|
|
|
|
@override
|
|
String get languageSectionDescription => 'اختر كيفية عرض لغة التطبيق.';
|
|
|
|
@override
|
|
String get languageSystemDefault => 'النظام';
|
|
|
|
@override
|
|
String get languageSpanish => 'الإسبانية';
|
|
|
|
@override
|
|
String get languageEnglish => 'الإنجليزية';
|
|
|
|
@override
|
|
String languageUpdated(Object languageName) {
|
|
return 'تم تحديث اللغة: $languageName';
|
|
}
|
|
|
|
@override
|
|
String get languageUpdatedSystem => 'تم تحديث اللغة: النظام';
|
|
|
|
@override
|
|
String get timerSectionTitle => 'مؤقّت النوم';
|
|
|
|
@override
|
|
String get timerSectionAdd => 'إضافة';
|
|
|
|
@override
|
|
String get timerSectionDescription =>
|
|
'خصّص الاختصارات السريعة التي تظهر عند إيقاف الراديو تلقائيًا.';
|
|
|
|
@override
|
|
String get timerSectionRestoreRecommended => 'استعادة الأوقات الموصى بها';
|
|
|
|
@override
|
|
String get newQuickAccessTitle => 'اختصار سريع جديد';
|
|
|
|
@override
|
|
String get saveQuickAccessButton => 'حفظ الاختصار السريع';
|
|
|
|
@override
|
|
String get settingsSafeStatus => 'آمن';
|
|
|
|
@override
|
|
String get recordingsSectionTitle => 'التسجيلات';
|
|
|
|
@override
|
|
String get recordingsFolderDialogTitle => 'اختر مجلد التسجيلات';
|
|
|
|
@override
|
|
String get recordingsPathUpdated => 'تم تحديث مسار التسجيل';
|
|
|
|
@override
|
|
String recordingsPathSaveError(Object error) {
|
|
return 'تعذّر حفظ المسار: $error';
|
|
}
|
|
|
|
@override
|
|
String get recordingsDefaultFolderRestored =>
|
|
'سيتم استخدام المجلد الداخلي الافتراضي';
|
|
|
|
@override
|
|
String get recordingsFolderTitle => 'مجلد التسجيل';
|
|
|
|
@override
|
|
String get recordingsPathCalculating => 'جارٍ حساب المسار...';
|
|
|
|
@override
|
|
String get recordingsChangePath => 'تغيير المسار';
|
|
|
|
@override
|
|
String get recordingsUseDefaultPath => 'استخدام المسار الافتراضي';
|
|
|
|
@override
|
|
String get recordingsOriginalStreamHint =>
|
|
'يتم حفظ الراديو من البث الأصلي، دون إعادة ضغط.';
|
|
|
|
@override
|
|
String get equalizerActive => 'نشط';
|
|
|
|
@override
|
|
String get equalizerDisabled => 'معطّل';
|
|
|
|
@override
|
|
String get equalizerEnable => 'تفعيل المعادل';
|
|
|
|
@override
|
|
String get equalizerRealtimeSubtitle =>
|
|
'تُطبّق التغييرات فورًا على المحطة الحالية.';
|
|
|
|
@override
|
|
String get equalizerPendingSubtitle =>
|
|
'تُحفظ التغييرات وستُطبّق عندما يفعّل Android التأثير.';
|
|
|
|
@override
|
|
String get equalizerPerStationTitle => 'استخدام معادل خاص لهذه المفضلة';
|
|
|
|
@override
|
|
String equalizerPerStationActive(Object stationName) {
|
|
return 'نشط لـ $stationName';
|
|
}
|
|
|
|
@override
|
|
String equalizerPerStationMain(Object stationName) {
|
|
return 'استخدام المعادل الرئيسي لـ $stationName';
|
|
}
|
|
|
|
@override
|
|
String get equalizerBaseExplainer =>
|
|
'هذا هو المعادل الأساسي: يُطبَّق على كل محطة لا تملك إعدادًا خاصًا بها. يُحدَّد معادل محطة معينة من شاشة تشغيلها الخاصة، وله الأولوية على هذا المعادل.';
|
|
|
|
@override
|
|
String get equalizerActiveOutputLabel => 'المخرج النشط';
|
|
|
|
@override
|
|
String get equalizerActiveOutputDefault => 'مكبر صوت هذا الجهاز';
|
|
|
|
@override
|
|
String get equalizerStationsWithOwnEqTitle => 'محطات لديها معادل خاص';
|
|
|
|
@override
|
|
String get equalizerStationsWithOwnEqSubtitle => 'تتجاهل هذا المعادل الأساسي';
|
|
|
|
@override
|
|
String get equalizerStationsWithOwnEqEmpty =>
|
|
'لا توجد محطة لديها معادل خاص حتى الآن.';
|
|
|
|
@override
|
|
String get equalizerSaveAsPresetAction => 'حفظ كإعداد مسبق';
|
|
|
|
@override
|
|
String get equalizerResetToFlatAction => 'إعادة الضبط إلى مسطح';
|
|
|
|
@override
|
|
String get equalizerSavePresetDialogTitle => 'حفظ كإعداد مسبق';
|
|
|
|
@override
|
|
String get equalizerSavePresetNameLabel => 'اسم الإعداد المسبق';
|
|
|
|
@override
|
|
String get equalizerSavePresetEmptyNameError => 'أدخل اسمًا للإعداد المسبق.';
|
|
|
|
@override
|
|
String get equalizerSavePresetConfirm => 'حفظ';
|
|
|
|
@override
|
|
String get preferredStationTitle => 'المحطة المفضلة';
|
|
|
|
@override
|
|
String get preferredStationDescription =>
|
|
'يتم اختيارها مسبقًا عند إنشاء المنبهات ويمكن تشغيلها سريعًا.';
|
|
|
|
@override
|
|
String get preferredStationNoStationsTitle => 'لا توجد محطات متاحة بعد';
|
|
|
|
@override
|
|
String get preferredStationNoStationsSubtitle =>
|
|
'احفظ المفضلات أو حمّل محطات لاختيار محطة مفضلة.';
|
|
|
|
@override
|
|
String get preferredStationAutomaticFallback => 'بديل تلقائي';
|
|
|
|
@override
|
|
String get preferredStationDefaultFavorite => 'المفضلة الافتراضية';
|
|
|
|
@override
|
|
String preferredStationCurrent(Object stationName) {
|
|
return 'المفضلة الحالية: $stationName';
|
|
}
|
|
|
|
@override
|
|
String preferredStationAutoUsing(Object stationName) {
|
|
return 'لا توجد مفضلات: يتم استخدام $stationName تلقائيًا';
|
|
}
|
|
|
|
@override
|
|
String get preferredStationPlay => 'تشغيل المفضلة';
|
|
|
|
@override
|
|
String get customStationsTitle => 'محطات مخصصة';
|
|
|
|
@override
|
|
String get customStationsAdd => 'إضافة';
|
|
|
|
@override
|
|
String get customStationsEmpty => 'لا توجد محطات مخصصة.';
|
|
|
|
@override
|
|
String get playAction => 'تشغيل';
|
|
|
|
@override
|
|
String get deleteAction => 'حذف';
|
|
|
|
@override
|
|
String get addStationTitle => 'إضافة محطة';
|
|
|
|
@override
|
|
String get stationNameLabel => 'الاسم *';
|
|
|
|
@override
|
|
String get unnamedStation => 'محطة بدون اسم';
|
|
|
|
@override
|
|
String get requiredField => 'حقل مطلوب';
|
|
|
|
@override
|
|
String get streamUrlLabel => 'رابط البث *';
|
|
|
|
@override
|
|
String get invalidUrl => 'رابط غير صالح';
|
|
|
|
@override
|
|
String get countryOptionalLabel => 'البلد (اختياري)';
|
|
|
|
@override
|
|
String get saveStation => 'حفظ المحطة';
|
|
|
|
@override
|
|
String get backupSectionTitle => 'النسخ الاحتياطي';
|
|
|
|
@override
|
|
String get backupExportTitle => 'تصدير الإعدادات';
|
|
|
|
@override
|
|
String get backupExportSubtitle =>
|
|
'المفضلات والمحطات المخصصة وإعدادات المعادل المسبقة';
|
|
|
|
@override
|
|
String get backupImportTitle => 'استيراد الإعدادات';
|
|
|
|
@override
|
|
String get backupImportSubtitle => 'استعادة من ملف نسخة احتياطية';
|
|
|
|
@override
|
|
String get backupShareSubject => 'PluriWave — نسخة احتياطية';
|
|
|
|
@override
|
|
String backupShareText(Object date) {
|
|
return 'إعدادات PluriWave المصدّرة في $date';
|
|
}
|
|
|
|
@override
|
|
String backupExportError(Object error) {
|
|
return 'خطأ أثناء التصدير: $error';
|
|
}
|
|
|
|
@override
|
|
String get backupImportConfirmMessage =>
|
|
'سيضيف هذا المفضلات والمحطات وإعدادات المعادل من الملف. هل تريد المتابعة؟';
|
|
|
|
@override
|
|
String get backupImportSuccess => 'تم استيراد الإعدادات بنجاح';
|
|
|
|
@override
|
|
String backupImportError(Object error) {
|
|
return 'خطأ أثناء الاستيراد: $error';
|
|
}
|
|
|
|
@override
|
|
String get appVersionLoading => 'جارٍ تحميل الإصدار...';
|
|
|
|
@override
|
|
String appVersionSubtitle(Object version) {
|
|
return '$version - راديو عالمي';
|
|
}
|
|
|
|
@override
|
|
String get savedFavoritesTitle => 'المفضلات المحفوظة';
|
|
|
|
@override
|
|
String get stationFilterTitle => 'فلتر المحطات';
|
|
|
|
@override
|
|
String get stationFilterSubtitle => 'المحطات المؤكدة كنشطة فقط';
|
|
|
|
@override
|
|
String get backgroundAudioTitle => 'الصوت في الخلفية';
|
|
|
|
@override
|
|
String get backgroundAudioSubtitle => 'يستمر عند إطفاء الشاشة';
|
|
|
|
@override
|
|
String get dash => '—';
|
|
|
|
@override
|
|
String get cancelAction => 'إلغاء';
|
|
|
|
@override
|
|
String get equalizerTitle => 'المعادل';
|
|
|
|
@override
|
|
String get recordingsOpenFolder => 'فتح المجلد';
|
|
|
|
@override
|
|
String recordingsOpenFolderError(Object error) {
|
|
return 'تعذّر فتح المجلد: $error';
|
|
}
|
|
|
|
@override
|
|
String get recordingsMaxSizeTitle => 'الحد الأقصى لحجم التسجيل';
|
|
|
|
@override
|
|
String recordingsMaxSizeSubtitle(int size) {
|
|
return 'الحد الحالي: $size ميغابايت';
|
|
}
|
|
|
|
@override
|
|
String get recordingsMaxSizeDialogTitle => 'الحد الأقصى للحجم لكل تسجيل';
|
|
|
|
@override
|
|
String get recordingsMaxSizeMbLabel => 'الحد الأقصى بالميغابايت';
|
|
|
|
@override
|
|
String recordingsMaxSizeSaved(int size) {
|
|
return 'تم تحديث حد التسجيل إلى $size ميغابايت';
|
|
}
|
|
|
|
@override
|
|
String get recordingsLibraryTitle => 'تسجيلاتي';
|
|
|
|
@override
|
|
String recordingsLibraryStorageCaption(int usedMb, int totalMb) {
|
|
return 'تم استخدام $usedMb ميغابايت من أصل $totalMb ميغابايت';
|
|
}
|
|
|
|
@override
|
|
String get recordingsLibraryStorageFolderCaption =>
|
|
'Music/PluriWave · يتم حذف الأقدم عند بلوغ الحد';
|
|
|
|
@override
|
|
String get recordingsLibraryEmptyTitle => 'لا توجد تسجيلات بعد';
|
|
|
|
@override
|
|
String get recordingsLibraryEmptySubtitle =>
|
|
'التسجيلات التي تحفظها ستظهر هنا.';
|
|
|
|
@override
|
|
String get recordingActionRename => 'إعادة تسمية';
|
|
|
|
@override
|
|
String get recordingActionShare => 'مشاركة';
|
|
|
|
@override
|
|
String get recordingActionDelete => 'حذف';
|
|
|
|
@override
|
|
String get recordingRenameDialogTitle => 'إعادة تسمية التسجيل';
|
|
|
|
@override
|
|
String get recordingRenameLabel => 'الاسم';
|
|
|
|
@override
|
|
String get recordingRenameEmptyError => 'أدخل اسمًا';
|
|
|
|
@override
|
|
String get recordingDeleteConfirmTitle => 'هل تريد حذف التسجيل؟';
|
|
|
|
@override
|
|
String get recordingDeleteConfirmMessage => 'لا يمكن التراجع عن هذا الإجراء.';
|
|
|
|
@override
|
|
String get recordingsLibrarySettingsTooltip => 'إعدادات التسجيل';
|
|
|
|
@override
|
|
String get stationOrderTitle => 'ترتيب المحطات';
|
|
|
|
@override
|
|
String get stationOrderByName => 'حسب الاسم';
|
|
|
|
@override
|
|
String get stationOrderByQuality => 'حسب الجودة';
|
|
|
|
@override
|
|
String get stationOrderByPopularity => 'حسب الشهرة';
|
|
|
|
@override
|
|
String get stationOrderScopeDescription =>
|
|
'ينطبق على المفضلات وعمليات البحث والمحطات القريبة والقوائم السريعة.';
|
|
|
|
@override
|
|
String get favoriteGroupsTitle => 'قوائم المفضلة';
|
|
|
|
@override
|
|
String get favoriteGroupsDescription =>
|
|
'أنشئ قوائم قصيرة لتنظيم محطاتك المحفوظة.';
|
|
|
|
@override
|
|
String get favoriteGroupsAdd => 'إضافة قائمة';
|
|
|
|
@override
|
|
String get favoriteGroupsEdit => 'تعديل القائمة';
|
|
|
|
@override
|
|
String get favoriteGroupsDelete => 'حذف القائمة';
|
|
|
|
@override
|
|
String get favoriteGroupsNameLabel => 'اسم القائمة';
|
|
|
|
@override
|
|
String get favoriteGroupsNameTooLong => 'الحد الأقصى 28 حرفًا.';
|
|
|
|
@override
|
|
String get favoriteGroupsUnassigned => 'غير معيّنة';
|
|
|
|
@override
|
|
String get favoriteGroupsProtectedHint =>
|
|
'القائمة الافتراضية: لا يمكن تعديلها أو حذفها.';
|
|
|
|
@override
|
|
String get favoriteGroupsCreated => 'تم إنشاء القائمة';
|
|
|
|
@override
|
|
String get favoriteGroupsUpdated => 'تم تحديث القائمة';
|
|
|
|
@override
|
|
String get favoriteGroupsDeleted =>
|
|
'تم حذف القائمة؛ عادت محطاتها إلى غير معيّنة.';
|
|
|
|
@override
|
|
String get favoriteGroupsAssign => 'نقل إلى قائمة';
|
|
|
|
@override
|
|
String favoriteGroupsAssignSubtitle(Object groupName) {
|
|
return 'القائمة الحالية: $groupName';
|
|
}
|
|
|
|
@override
|
|
String favoriteGroupsAssigned(Object stationName, Object groupName) {
|
|
return 'تم نقل $stationName إلى $groupName';
|
|
}
|
|
|
|
@override
|
|
String get favoritesTitle => 'المفضلة';
|
|
|
|
@override
|
|
String get favoritesEmptyTitle => 'لا توجد مفضلات بعد';
|
|
|
|
@override
|
|
String get favoritesEmptySubtitle =>
|
|
'اضغط على القلب في أي محطة لحفظها في مجموعتك.';
|
|
|
|
@override
|
|
String get favoritesHeaderSubtitle =>
|
|
'نظّم مجموعتك في قوائم وأبقِ المحطات المهمة قريبة.';
|
|
|
|
@override
|
|
String get favoritesCollection => 'المجموعة';
|
|
|
|
@override
|
|
String favoritesSavedCount(int count) {
|
|
return '$count محفوظة';
|
|
}
|
|
|
|
@override
|
|
String get favoritesRemoveTooltip => 'إزالة من المفضلة';
|
|
|
|
@override
|
|
String favoritesRemovedMessage(Object stationName) {
|
|
return 'تمت إزالة $stationName من المفضلة';
|
|
}
|
|
|
|
@override
|
|
String get favoritesFilterAllLabel => 'الكل';
|
|
|
|
@override
|
|
String favoriteGroupsChipLabel(Object groupName, int count) {
|
|
return '$groupName · $count';
|
|
}
|
|
|
|
@override
|
|
String get favoriteGroupsManage => 'إدارة القوائم';
|
|
|
|
@override
|
|
String get customStationsAddCta => 'إضافة محطة مخصصة';
|
|
|
|
@override
|
|
String get alarmPostponedCurrentExecution => 'تم تأجيل المنبه لهذا التشغيل.';
|
|
|
|
@override
|
|
String get searchScreenTitle => 'البحث عن إشارة';
|
|
|
|
@override
|
|
String get searchScreenSubtitle =>
|
|
'اعثر على إذاعات حسب الاسم أو البلد أو اللغة باستخدام فلاتر سريعة وتباين عالٍ.';
|
|
|
|
@override
|
|
String get searchFiltersLabel => 'الفلاتر';
|
|
|
|
@override
|
|
String get searchHint => 'راديو هورايزن، جاز، أخبار...';
|
|
|
|
@override
|
|
String get searchCountryFilterLabel => 'البلد';
|
|
|
|
@override
|
|
String get searchLanguageFilterLabel => 'اللغة';
|
|
|
|
@override
|
|
String get searchMinQualityFilterLabel => 'الحد الأدنى للجودة';
|
|
|
|
@override
|
|
String get searchLoadingStationsLabel => 'جارٍ البحث عن محطات…';
|
|
|
|
@override
|
|
String get searchEmptyTitle => 'ابحث عن محطة';
|
|
|
|
@override
|
|
String get searchNoResultsTitle => 'لا توجد نتائج';
|
|
|
|
@override
|
|
String searchNoResultsForQueryTitle(Object query) {
|
|
return 'لا توجد نتائج لـ «$query»';
|
|
}
|
|
|
|
@override
|
|
String get searchEmptySubtitle =>
|
|
'استخدم الشريط العلوي أو الشرائح لاكتشاف إشارات من كل العالم.';
|
|
|
|
@override
|
|
String get searchNoResultsSubtitle =>
|
|
'جرّب إزالة الفلاتر أو كتابة اسم آخر للعثور على إشارة نشطة.';
|
|
|
|
@override
|
|
String searchResultsCount(num count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count نتيجة',
|
|
few: '$count نتائج',
|
|
two: 'نتيجتان',
|
|
one: 'نتيجة واحدة',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String searchClearFiltersAction(num count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'إزالة $count فلتر',
|
|
few: 'إزالة $count فلاتر',
|
|
two: 'إزالة الفلترين',
|
|
one: 'إزالة الفلتر',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get countriesScreenTitle => 'الدول';
|
|
|
|
@override
|
|
String get countriesSearchHint => 'الدولة أو الرمز...';
|
|
|
|
@override
|
|
String get countriesYourLanguagesTitle => 'لغاتك';
|
|
|
|
@override
|
|
String get countriesAllTitle => 'كل الدول';
|
|
|
|
@override
|
|
String get radioCountriesError => 'تعذّر تحميل الدول.';
|
|
|
|
@override
|
|
String get countrySpain => 'إسبانيا';
|
|
|
|
@override
|
|
String get countryUsa => 'الولايات المتحدة';
|
|
|
|
@override
|
|
String get countryMexico => 'المكسيك';
|
|
|
|
@override
|
|
String get countryArgentina => 'الأرجنتين';
|
|
|
|
@override
|
|
String get countryUk => 'المملكة المتحدة';
|
|
|
|
@override
|
|
String get countryFrance => 'فرنسا';
|
|
|
|
@override
|
|
String get countryGermany => 'ألمانيا';
|
|
|
|
@override
|
|
String get countryItaly => 'إيطاليا';
|
|
|
|
@override
|
|
String get countryBrazil => 'البرازيل';
|
|
|
|
@override
|
|
String get countryJapan => 'اليابان';
|
|
|
|
@override
|
|
String get languageNameSpanish => 'الإسبانية';
|
|
|
|
@override
|
|
String get languageNameEnglish => 'الإنجليزية';
|
|
|
|
@override
|
|
String get languageNameFrench => 'الفرنسية';
|
|
|
|
@override
|
|
String get languageNameGerman => 'الألمانية';
|
|
|
|
@override
|
|
String get languageNamePortuguese => 'البرتغالية';
|
|
|
|
@override
|
|
String get languageNameItalian => 'الإيطالية';
|
|
|
|
@override
|
|
String get languageNameJapanese => 'اليابانية';
|
|
|
|
@override
|
|
String get languageNameArabic => 'العربية';
|
|
|
|
@override
|
|
String get languageNameRussian => 'الروسية';
|
|
|
|
@override
|
|
String get homeScreenSubtitle =>
|
|
'راديو عالمي مباشر بإشارات نقية ومفضلات ذكية وتجربة بصرية بأسلوب المسابقات.';
|
|
|
|
@override
|
|
String get exploreStations => 'استكشاف المحطات';
|
|
|
|
@override
|
|
String stationsCount(int count) {
|
|
return '$count محطة راديو';
|
|
}
|
|
|
|
@override
|
|
String get qualityHd => 'جودة HD';
|
|
|
|
@override
|
|
String get yourStationsTitle => 'محطاتك';
|
|
|
|
@override
|
|
String get seeAllAction => 'عرض الكل';
|
|
|
|
@override
|
|
String get openFullPlayerTooltip => 'فتح المشغل الكامل';
|
|
|
|
@override
|
|
String get nowListeningLabel => 'الاستماع الآن';
|
|
|
|
@override
|
|
String get nothingPlayingTitle => 'لا تستمع إلى شيء بعد';
|
|
|
|
@override
|
|
String get nothingPlayingSubtitle =>
|
|
'اختر محطة من محطاتك أو ابحث عن واحدة للبدء.';
|
|
|
|
@override
|
|
String get nearYou => 'بالقرب منك';
|
|
|
|
@override
|
|
String nearYouInCountry(Object country) {
|
|
return 'بالقرب منك · $country';
|
|
}
|
|
|
|
@override
|
|
String get detectAction => 'اكتشاف';
|
|
|
|
@override
|
|
String get liveRadar => 'رادار مباشر';
|
|
|
|
@override
|
|
String get genresTitle => 'الأنواع';
|
|
|
|
@override
|
|
String get exploreByTitle => 'استكشاف حسب';
|
|
|
|
@override
|
|
String get exploreTrendingTitle => 'الرائجة';
|
|
|
|
@override
|
|
String get exploreTrendingSubtitle => 'اليوم';
|
|
|
|
@override
|
|
String get exploreNewTitle => 'جديد';
|
|
|
|
@override
|
|
String get exploreNewSubtitle => 'هذا الأسبوع';
|
|
|
|
@override
|
|
String get popularNowTitle => 'الأكثر شيوعًا الآن';
|
|
|
|
@override
|
|
String get offlineBannerTitle => 'لا يوجد اتصال';
|
|
|
|
@override
|
|
String get retryAction => 'إعادة المحاولة';
|
|
|
|
@override
|
|
String get noStationsAvailable => 'لا توجد محطات متاحة';
|
|
|
|
@override
|
|
String get noStationsAvailableSubtitle =>
|
|
'جرّب التحديث أو اختيار نوع آخر لالتقاط الإشارة من جديد.';
|
|
|
|
@override
|
|
String get genrePop => 'بوب';
|
|
|
|
@override
|
|
String get genreRock => 'روك';
|
|
|
|
@override
|
|
String get genreJazz => 'جاز';
|
|
|
|
@override
|
|
String get genreClassical => 'كلاسيكي';
|
|
|
|
@override
|
|
String get genreElectronic => 'إلكترونية';
|
|
|
|
@override
|
|
String get genreNews => 'أخبار';
|
|
|
|
@override
|
|
String get genreTalk => 'حوارات';
|
|
|
|
@override
|
|
String get genreHipHop => 'هيب هوب';
|
|
|
|
@override
|
|
String get genreCountry => 'كانتري';
|
|
|
|
@override
|
|
String get genreMetal => 'ميتال';
|
|
|
|
@override
|
|
String get genreReggae => 'ريغي';
|
|
|
|
@override
|
|
String get genreLatin => 'لاتينية';
|
|
|
|
@override
|
|
String get alarmScreenTitle => 'الاستيقاظ الموسيقي';
|
|
|
|
@override
|
|
String get alarmScreenSubtitle =>
|
|
'منبهات بالراديو وصوت آمن وإجازات ذكية والتنفيذ التالي ظاهر دائمًا.';
|
|
|
|
@override
|
|
String get createAlarmAction => 'إنشاء منبه';
|
|
|
|
@override
|
|
String alarmsCount(int count) {
|
|
return '$count منبهات';
|
|
}
|
|
|
|
@override
|
|
String get activeAlarmsWithoutNextTitle => 'منبهات نشطة بلا تشغيل قادم';
|
|
|
|
@override
|
|
String get noActiveAlarms => 'لا توجد منبهات نشطة';
|
|
|
|
@override
|
|
String get nextAlarmTitle => 'المنبه التالي';
|
|
|
|
@override
|
|
String activeAlarmsWithoutNextSubtitle(int count) {
|
|
return 'توجد $count منبهات نشطة، لكنها لا تملك حاليًا تاريخًا مستقبليًا صالحًا. راجع التاريخ والأيام والإجازات.';
|
|
}
|
|
|
|
@override
|
|
String get createAlarmHint =>
|
|
'أنشئ منبهًا وسيحسب PluriWave التشغيل التالي تلقائيًا.';
|
|
|
|
@override
|
|
String get alarmVacationPlay => 'يرن في الإجازات';
|
|
|
|
@override
|
|
String get alarmVacationPause => 'يتوقف في الإجازات';
|
|
|
|
@override
|
|
String alarmFadeInLabel(int seconds) {
|
|
return 'تدرّج الصوت $secondsث';
|
|
}
|
|
|
|
@override
|
|
String alarmNextExecution(Object date) {
|
|
return 'التشغيل التالي: $date';
|
|
}
|
|
|
|
@override
|
|
String get alarmNoNextExecution => 'لا يوجد تشغيل نشط قادم.';
|
|
|
|
@override
|
|
String alarmSkippedExecution(Object date) {
|
|
return 'تم تخطي تشغيل: $date.';
|
|
}
|
|
|
|
@override
|
|
String get editAction => 'تعديل';
|
|
|
|
@override
|
|
String get skipNextAction => 'تخطي التالي';
|
|
|
|
@override
|
|
String get deleteTooltip => 'حذف';
|
|
|
|
@override
|
|
String get alarmHeroSkipAction => 'تخطي';
|
|
|
|
@override
|
|
String get alarmDeleteConfirmTitle => 'هل تريد حذف المنبه؟';
|
|
|
|
@override
|
|
String get alarmDeleteConfirmMessage => 'لا يمكن التراجع عن هذا الإجراء.';
|
|
|
|
@override
|
|
String get alarmSkippedNoNextSnackbar =>
|
|
'تم تخطي المنبه. لا يوجد تشغيل قادم.';
|
|
|
|
@override
|
|
String alarmSkippedReturnsSnackbar(Object date) {
|
|
return 'تم تخطي المنبه. سيعود في $date.';
|
|
}
|
|
|
|
@override
|
|
String alarmVacationPausedNoNext(Object vacationName) {
|
|
return 'متوقف بسبب الإجازة ($vacationName) ولا يوجد تشغيل قادم.';
|
|
}
|
|
|
|
@override
|
|
String alarmVacationPausedReturns(Object vacationName, Object date) {
|
|
return 'متوقف بسبب الإجازة ($vacationName) وسيعود في $date.';
|
|
}
|
|
|
|
@override
|
|
String alarmVacationReturns(Object date) {
|
|
return 'مع تفعيل الإجازات، سيعود للرنين في $date.';
|
|
}
|
|
|
|
@override
|
|
String get defaultAlarmName => 'منبه موسيقي';
|
|
|
|
@override
|
|
String get newAlarmTitle => 'منبه جديد';
|
|
|
|
@override
|
|
String get editAlarmTitle => 'تعديل المنبه';
|
|
|
|
@override
|
|
String get nameField => 'الاسم';
|
|
|
|
@override
|
|
String get timeField => 'الوقت';
|
|
|
|
@override
|
|
String get dateField => 'التاريخ';
|
|
|
|
@override
|
|
String get onceOption => 'مرة واحدة';
|
|
|
|
@override
|
|
String get dailyOption => 'يومي';
|
|
|
|
@override
|
|
String get weekdaysOption => 'أيام';
|
|
|
|
@override
|
|
String get soundAndVolumeSection => 'الصوت ومستوى الصوت';
|
|
|
|
@override
|
|
String get alarmFadeInTitle => 'تدرّج صوت المنبه';
|
|
|
|
@override
|
|
String get alarmFadeInOff => '0 ث (بدون انتقال)';
|
|
|
|
@override
|
|
String alarmFadeInSummary(int seconds) {
|
|
return '$seconds ث (من 5% إلى مستوى الصوت المختار)';
|
|
}
|
|
|
|
@override
|
|
String get internalSafeSoundLabel => 'صوت داخلي آمن';
|
|
|
|
@override
|
|
String get soundWarmSunrise => 'شروق دافئ';
|
|
|
|
@override
|
|
String get soundSoftBell => 'جرس ناعم';
|
|
|
|
@override
|
|
String get soundDigitalPulse => 'نبضة رقمية';
|
|
|
|
@override
|
|
String get favoriteStationLabel => 'المحطة المفضلة';
|
|
|
|
@override
|
|
String get noStationUseInternalSound => 'بدون محطة: استخدام الصوت الداخلي';
|
|
|
|
@override
|
|
String get alarmFallbackStationLabel => 'محطة احتياطية';
|
|
|
|
@override
|
|
String get alarmStationPickerSearchHint => 'ابحث عن محطة بالاسم';
|
|
|
|
@override
|
|
String get alarmSnoozeDurationTitle => 'مدة الغفوة';
|
|
|
|
@override
|
|
String get snoozeAction => 'غفوة';
|
|
|
|
@override
|
|
String alarmSnoozeOptionLabel(int minutes) {
|
|
return '$minutes د';
|
|
}
|
|
|
|
@override
|
|
String get alarmSnoozeUsualLabel => 'المعتاد';
|
|
|
|
@override
|
|
String get saveFavoritesAlarmHint =>
|
|
'احفظ محطات في المفضلة لاستخدامها كمنبه موسيقي.';
|
|
|
|
@override
|
|
String get useCurrentStationAction => 'استخدام المحطة الحالية';
|
|
|
|
@override
|
|
String get playDuringVacations => 'الرنين أثناء الإجازات';
|
|
|
|
@override
|
|
String get playDuringVacationsHint =>
|
|
'إذا أوقفت ذلك، سيتخطى التشغيل التالي إلى أول يوم صالح.';
|
|
|
|
@override
|
|
String get saveAlarmAction => 'حفظ المنبه';
|
|
|
|
@override
|
|
String get chooseOneWeekdayError => 'اختر يومًا واحدًا على الأقل من الأسبوع.';
|
|
|
|
@override
|
|
String get androidReliabilityReview => 'مراجعة موثوقية Android';
|
|
|
|
@override
|
|
String get statusOk => 'حسنًا';
|
|
|
|
@override
|
|
String get statusPending => 'معلّق';
|
|
|
|
@override
|
|
String androidReliabilityStatus(
|
|
Object exact,
|
|
Object notifications,
|
|
Object screen,
|
|
) {
|
|
return 'الموثوقية: الدقيقة $exact · الإشعارات $notifications · الشاشة $screen';
|
|
}
|
|
|
|
@override
|
|
String get vacationRangesTitle => 'نطاقات الإجازات';
|
|
|
|
@override
|
|
String get addAction => 'إضافة';
|
|
|
|
@override
|
|
String get vacationRangesHint =>
|
|
'إذا كان المنبه لديه \"توقف في الإجازات\"، فسيتم تخطي هذه النطاقات تلقائيًا.';
|
|
|
|
@override
|
|
String get noVacationRangesLoaded => 'لا توجد نطاقات محمّلة.';
|
|
|
|
@override
|
|
String get deleteRangeTooltip => 'حذف النطاق';
|
|
|
|
@override
|
|
String vacationRangesCount(int count) {
|
|
return '$count فترة';
|
|
}
|
|
|
|
@override
|
|
String vacationSummaryActiveCountdown(int days) {
|
|
return 'جارٍ الآن · تبقّى $days يوم';
|
|
}
|
|
|
|
@override
|
|
String vacationSummaryUpcomingCountdown(int days) {
|
|
return 'الفترة التالية خلال $days يوم';
|
|
}
|
|
|
|
@override
|
|
String vacationImpactPausedLabel(Object times) {
|
|
return 'إيقاف مؤقت: $times';
|
|
}
|
|
|
|
@override
|
|
String vacationImpactContinuesLabel(Object times) {
|
|
return 'يستمر الرنين: $times';
|
|
}
|
|
|
|
@override
|
|
String get vacationUpcomingSectionTitle => 'المجدولة';
|
|
|
|
@override
|
|
String get vacationPastSectionTitle => 'الفترات السابقة';
|
|
|
|
@override
|
|
String get addVacationRangeCta => 'إضافة فترة';
|
|
|
|
@override
|
|
String get vacationExplainerBanner =>
|
|
'خلال هذه الفترات، لن تُصدر المنبهات المُعلَّمة بـ «إيقاف أثناء الإجازة» صوتًا. أما المُعلَّمة بـ «تشغيل دائمًا» فلن تتأثر.';
|
|
|
|
@override
|
|
String get vacationNoActiveRangeHint => 'لا توجد فترة إجازة نشطة الآن.';
|
|
|
|
@override
|
|
String get vacationsDefaultName => 'إجازات';
|
|
|
|
@override
|
|
String get newVacationRangeTitle => 'نطاق إجازة جديد';
|
|
|
|
@override
|
|
String get editVacationRangeTitle => 'تعديل نطاق الإجازة';
|
|
|
|
@override
|
|
String get vacationDeleteConfirmTitle => 'هل تريد حذف نطاق الإجازة؟';
|
|
|
|
@override
|
|
String get vacationDeleteConfirmMessage => 'لا يمكن التراجع عن هذا الإجراء.';
|
|
|
|
@override
|
|
String get startField => 'البداية';
|
|
|
|
@override
|
|
String get endField => 'النهاية';
|
|
|
|
@override
|
|
String get saveRangeAction => 'حفظ النطاق';
|
|
|
|
@override
|
|
String get noAlarmsYetTitle => 'لا توجد منبهات بعد.';
|
|
|
|
@override
|
|
String get noAlarmsYetSubtitle => 'أنشئ واحدًا لتصميم استيقاظك الموسيقي.';
|
|
|
|
@override
|
|
String get ringingInternalAudioActive => 'يرن باستخدام الصوت الداخلي الآمن.';
|
|
|
|
@override
|
|
String get ringingPreparingInternalAudio => 'جارٍ تجهيز الصوت الداخلي الآمن.';
|
|
|
|
@override
|
|
String get stopAlarmAction => 'إيقاف المنبه';
|
|
|
|
@override
|
|
String get alarmStopFailedMessage =>
|
|
'تعذّر التأكد من إيقاف المنبه. حاول مرة أخرى.';
|
|
|
|
@override
|
|
String get alarmForceStopAction => 'إيقاف قسري';
|
|
|
|
@override
|
|
String get alarmMissedNotificationTitle => 'منبه فائت';
|
|
|
|
@override
|
|
String alarmMissedNotificationText(Object name) {
|
|
return 'تم كتم $name تلقائيًا بعد 10 دقائق.';
|
|
}
|
|
|
|
@override
|
|
String get pauseAction => 'إيقاف مؤقت';
|
|
|
|
@override
|
|
String miniPlayerOpenLabel(Object stationName) {
|
|
return 'فتح المشغل لـ $stationName';
|
|
}
|
|
|
|
@override
|
|
String get playerIconLabel => 'المشغل';
|
|
|
|
@override
|
|
String get playbackStatusConnecting => 'جارٍ الاتصال...';
|
|
|
|
@override
|
|
String get playbackStatusLive => 'مباشر';
|
|
|
|
@override
|
|
String get playbackStatusPaused => 'متوقف مؤقتًا';
|
|
|
|
@override
|
|
String get playbackStatusReconnecting => 'جارٍ إعادة الاتصال...';
|
|
|
|
@override
|
|
String get playbackStatusConnectionError => 'خطأ في الاتصال';
|
|
|
|
@override
|
|
String get playbackStatusStopped => 'متوقف';
|
|
|
|
@override
|
|
String stationSemanticLabel(Object stationName) {
|
|
return 'محطة $stationName';
|
|
}
|
|
|
|
@override
|
|
String get favoritesAddTooltip => 'إضافة إلى المفضلة';
|
|
|
|
@override
|
|
String favoritesAddedMessage(Object stationName) {
|
|
return 'تمت إضافة $stationName إلى المفضلة';
|
|
}
|
|
|
|
@override
|
|
String get stationIconLabel => 'أيقونة المحطة';
|
|
|
|
@override
|
|
String get liveNow => 'مباشر الآن';
|
|
|
|
@override
|
|
String equalizerBandLabel(Object band) {
|
|
return 'النطاق $band';
|
|
}
|
|
|
|
@override
|
|
String equalizerBandValue(Object value) {
|
|
return '$value ديسيبل';
|
|
}
|
|
|
|
@override
|
|
String get equalizerPresetFlat => 'مسطح';
|
|
|
|
@override
|
|
String get equalizerPresetRock => 'روك';
|
|
|
|
@override
|
|
String get equalizerPresetPop => 'بوب';
|
|
|
|
@override
|
|
String get equalizerPresetBassBoost => 'تعزيز الجهير';
|
|
|
|
@override
|
|
String get equalizerPresetJazz => 'جاز';
|
|
|
|
@override
|
|
String get equalizerPresetVoice => 'صوت';
|
|
|
|
@override
|
|
String get equalizerPresetCustom => 'مخصص';
|
|
|
|
@override
|
|
String get onboardingTitle => 'مرحبًا بك في PluriWave';
|
|
|
|
@override
|
|
String get onboardingNewsTitle => 'المستجدات';
|
|
|
|
@override
|
|
String get onboardingStartAction => 'ابدأ';
|
|
|
|
@override
|
|
String get onboardingCloseTooltip => 'إغلاق';
|
|
|
|
@override
|
|
String radioRecordingError(Object error) {
|
|
return 'خطأ أثناء تسجيل الراديو: $error';
|
|
}
|
|
|
|
@override
|
|
String get radioApiConnectionError =>
|
|
'لا يوجد اتصال بواجهة برمجة تطبيقات الراديو';
|
|
|
|
@override
|
|
String get radioSearchError => 'خطأ في البحث. تحقق من اتصالك.';
|
|
|
|
@override
|
|
String get radioLoadMoreStationsError => 'تعذر تحميل المزيد من المحطات.';
|
|
|
|
@override
|
|
String get radioNearbyStationsError =>
|
|
'تعذر علينا اكتشاف محطات قريبة. استخدم عوامل التصفية حسب البلد.';
|
|
|
|
@override
|
|
String radioCannotPlayStation(Object stationName) {
|
|
return 'لا يمكن تشغيل \"$stationName\"';
|
|
}
|
|
|
|
@override
|
|
String get recordingSelectStationFirst => 'اختر محطة أولًا للتسجيل.';
|
|
|
|
@override
|
|
String recordingStartError(Object error) {
|
|
return 'تعذر بدء التسجيل: $error';
|
|
}
|
|
|
|
@override
|
|
String get unsupportedConfigVersion => 'إصدار الإعدادات غير مدعوم';
|
|
|
|
@override
|
|
String get audioErrorGeneric => 'خطأ في التشغيل';
|
|
|
|
@override
|
|
String get audioErrorNoInternet => 'لا يوجد اتصال بالإنترنت';
|
|
|
|
@override
|
|
String get audioErrorInvalidUrl => 'عنوان الراديو غير صالح';
|
|
|
|
@override
|
|
String get audioErrorNotFound => 'الراديو غير متاح (خطأ 404)';
|
|
|
|
@override
|
|
String get audioErrorTimeout => 'انتهت مهلة الاتصال';
|
|
|
|
@override
|
|
String get audioErrorCannotConnect => 'لا يمكن الاتصال بالراديو';
|
|
|
|
@override
|
|
String get audioErrorUnsupportedFormat => 'تنسيق البث غير مدعوم';
|
|
|
|
@override
|
|
String get audioErrorDecode => 'خطأ أثناء فك ترميز بث الصوت';
|
|
|
|
@override
|
|
String get audioErrorCleartext =>
|
|
'تستخدم هذه المحطة HTTP غير مشفّر، وهذا غير مسموح';
|
|
|
|
@override
|
|
String get audioErrorSsl => 'شهادة SSL غير صالحة في الراديو';
|
|
|
|
@override
|
|
String get audioErrorCannotPlay => 'لا يمكن تشغيل هذه المحطة';
|
|
|
|
@override
|
|
String get audioErrorUnexpectedPlayback => 'خطأ غير متوقع أثناء التشغيل';
|
|
|
|
@override
|
|
String get androidExactAlarmScheduleError =>
|
|
'تعذر على Android جدولة منبه دقيق. تحقق من إذن المنبهات الدقيقة.';
|
|
|
|
@override
|
|
String get recordingPathEmptyError => 'لا يمكن أن يكون مسار التسجيل فارغًا';
|
|
|
|
@override
|
|
String get recordingMaxSizeInvalidError =>
|
|
'يجب أن يكون الحجم الأقصى أكبر من الصفر';
|
|
|
|
@override
|
|
String get recordingAlreadyActiveError => 'يوجد تسجيل قيد التنفيذ بالفعل';
|
|
|
|
@override
|
|
String get alarmRingingFallbackActive =>
|
|
'يعمل الآن باستخدام الصوت الداخلي الآمن.';
|
|
|
|
@override
|
|
String get alarmRingingPreparingFallback => 'جارٍ تجهيز الصوت الداخلي الآمن.';
|
|
|
|
@override
|
|
String get alarmRingingTryingStation =>
|
|
'جارٍ محاولة تشغيل محطتك بأعلى جودة متاحة.';
|
|
|
|
@override
|
|
String get alarmScheduleDaily => 'كل صباح';
|
|
|
|
@override
|
|
String alarmScheduleOnce(Object date) {
|
|
return 'مرة واحدة · $date';
|
|
}
|
|
|
|
@override
|
|
String alarmScheduleWeekdays(Object days) {
|
|
return 'الأيام: $days';
|
|
}
|
|
|
|
@override
|
|
String get alarmRepeatSectionLabel => 'تكرار';
|
|
|
|
@override
|
|
String get alarmVolumeLabel => 'مستوى الصوت';
|
|
|
|
@override
|
|
String get androidReliabilityTitle => 'مراجعة موثوقية Android';
|
|
|
|
@override
|
|
String get closeAction => 'إغلاق';
|
|
|
|
@override
|
|
String get customOption => 'مخصص';
|
|
|
|
@override
|
|
String get endLabel => 'النهاية';
|
|
|
|
@override
|
|
String get equalizerDisable => 'تعطيل المعادل';
|
|
|
|
@override
|
|
String get helpTitle => 'المساعدة والشرح';
|
|
|
|
@override
|
|
String get helpSubtitle => '9 شاشات · شاهده مجددًا متى شئت';
|
|
|
|
@override
|
|
String get tutorialSkipAction => 'تخطي';
|
|
|
|
@override
|
|
String get tutorialNextAction => 'التالي';
|
|
|
|
@override
|
|
String get tutorialPage1Headline => 'احفظ محطاتك ونظّمها في مجموعات';
|
|
|
|
@override
|
|
String get tutorialPage1Body =>
|
|
'اضغط على أيقونة القلب لحفظ محطة. في «محطاتك» يمكنك إنشاء مجموعات مثل «كل صباح» أو «السيارة» وإعادة ترتيبها بالسحب.';
|
|
|
|
@override
|
|
String get tutorialPage2Headline => 'معادل صوت عام وآخر لكل محطة';
|
|
|
|
@override
|
|
String get tutorialPage2Body =>
|
|
'من الإعدادات تحدد المعادل الصوتي العام. ومن تشغيل محطة معينة يمكنك ضبط إعداد خاص بها، له الأولوية على الإعداد العام.';
|
|
|
|
@override
|
|
String get tutorialPage3Headline => 'سجّل ما تستمع إليه';
|
|
|
|
@override
|
|
String get tutorialPage3Body =>
|
|
'من شريط أدوات المشغل، يحفظ زر «تسجيل» البث الأصلي. ستجد تسجيلاتك في الإعدادات › التسجيلات.';
|
|
|
|
@override
|
|
String get tutorialPage4Headline => 'منبهات تتكيّف معك';
|
|
|
|
@override
|
|
String get tutorialPage4Body =>
|
|
'استيقظ على محطتك المفضلة، وأجّل المنبه 3 أو 5 أو 10 دقائق، وأضف فترات إجازة ليتخطى بعض المنبهات نفسه تلقائيًا.';
|
|
|
|
@override
|
|
String get tutorialPage5Headline => 'محطاتك المفضلة، في السيارة أيضًا';
|
|
|
|
@override
|
|
String get tutorialPage5Body =>
|
|
'اربط هاتفك بـ Android Auto لتجد المفضلة وجميع المحطات ومحطاتك والموسيقى المحلية، بأزرار كبيرة مصممة للقيادة.';
|
|
|
|
@override
|
|
String get tutorialPage6Headline => 'يعيد الاتصال تلقائيًا';
|
|
|
|
@override
|
|
String get tutorialPage6Body =>
|
|
'إذا انقطعت الإشارة، تعيد PluriWave المحاولة تلقائيًا وتستمر في عرض محطاتك المفضلة المحفوظة حتى بدون اتصال.';
|
|
|
|
@override
|
|
String get tutorialPage7Headline => 'اختر مدة التأجيل';
|
|
|
|
@override
|
|
String get tutorialPage7Body =>
|
|
'عند رنين المنبه، لا يوجد خيار تأجيل واحد فقط: تختار 3 أو 5 أو 10 دقائق حسب ما تحتاجه في تلك اللحظة.';
|
|
|
|
@override
|
|
String get tutorialPage8Headline => 'لم تجدها؟ أضفها بنفسك';
|
|
|
|
@override
|
|
String get tutorialPage8Body =>
|
|
'من «محطاتك» ← إضافة محطة مخصصة، الصق رابط بث محطة غير موجودة في نتائج البحث. تُحفظ في «محطاتك»، وتكون متاحة في السيارة أيضًا.';
|
|
|
|
@override
|
|
String get tutorialPage9Headline => 'تمّ، أصبحت تعرف الأساسيات';
|
|
|
|
@override
|
|
String get tutorialPage9BannerBody =>
|
|
'لمشاهدة هذا الشرح مرة أخرى في أي وقت: الإعدادات ← المعلومات ← المساعدة والشرح.';
|
|
|
|
@override
|
|
String get indefiniteOption => 'غير محدد';
|
|
|
|
@override
|
|
String get invalidNumber => 'رقم غير صالح';
|
|
|
|
@override
|
|
String get nameLabel => 'الاسم';
|
|
|
|
@override
|
|
String get notPlaying => 'لا يتم التشغيل';
|
|
|
|
@override
|
|
String get oneTimeOption => 'مرة واحدة';
|
|
|
|
@override
|
|
String get pausePlaybackTooltip => 'إيقاف مؤقت';
|
|
|
|
@override
|
|
String get playerQualityChangeAction => 'تغيير';
|
|
|
|
@override
|
|
String get playerToolEqLabel => 'معادل خاص';
|
|
|
|
@override
|
|
String qualityOriginal(Object quality) {
|
|
return 'الجودة الأصلية: $quality';
|
|
}
|
|
|
|
@override
|
|
String get qualityUnknown => 'الجودة غير مذكورة';
|
|
|
|
@override
|
|
String get recordAction => 'تسجيل';
|
|
|
|
@override
|
|
String get recordDurationTitle => 'مدة التسجيل';
|
|
|
|
@override
|
|
String get recordRadioSubtitle => 'اختر مدة التسجيل.';
|
|
|
|
@override
|
|
String get recordRadioTitle => 'تسجيل الراديو';
|
|
|
|
@override
|
|
String get recordingActiveTitle => 'جارٍ تسجيل الراديو';
|
|
|
|
@override
|
|
String get recordingDirectTitle => 'تسجيل مباشر';
|
|
|
|
@override
|
|
String get recordingsOpenFolderPlainError => 'تعذر فتح مجلد التسجيلات';
|
|
|
|
@override
|
|
String get recordingsOpenLatest => 'فتح آخر تسجيل';
|
|
|
|
@override
|
|
String get recordingsOpenLatestError => 'تعذر فتح آخر تسجيل';
|
|
|
|
@override
|
|
String get startLabel => 'البداية';
|
|
|
|
@override
|
|
String get startPlaybackTooltip => 'بدء التشغيل';
|
|
|
|
@override
|
|
String get stopAction => 'إيقاف';
|
|
|
|
@override
|
|
String get stopPlaybackTooltip => 'إيقاف التشغيل';
|
|
|
|
@override
|
|
String get weekdayShortMonday => 'الإثنين';
|
|
|
|
@override
|
|
String get weekdayShortTuesday => 'الثلاثاء';
|
|
|
|
@override
|
|
String get weekdayShortWednesday => 'الأربعاء';
|
|
|
|
@override
|
|
String get weekdayShortThursday => 'الخميس';
|
|
|
|
@override
|
|
String get weekdayShortFriday => 'الجمعة';
|
|
|
|
@override
|
|
String get weekdayShortSaturday => 'السبت';
|
|
|
|
@override
|
|
String get weekdayShortSunday => 'الأحد';
|
|
|
|
@override
|
|
String stationCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count محطة',
|
|
few: '$count محطات',
|
|
two: 'محطتان',
|
|
one: 'محطة واحدة',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get alarmIconLabel => 'منبه موسيقي';
|
|
|
|
@override
|
|
String get vacationIconLabel => 'وضع الإجازة';
|
|
|
|
@override
|
|
String get alarmAdvancedSectionTitle => 'متقدم';
|
|
|
|
@override
|
|
String get alarmInlineHourLabel => 'الساعة';
|
|
|
|
@override
|
|
String get alarmInlineMinuteLabel => 'الدقيقة';
|
|
|
|
@override
|
|
String get alarmVolumeRisingStatus => 'رفع مستوى الصوت تدريجيًا';
|
|
|
|
@override
|
|
String get streamUrlHint => 'https://stream.example.com:8000/radio';
|
|
|
|
@override
|
|
String get advancedEqSectionTitle => 'خيارات المعادلة الصوتية المتقدمة';
|
|
|
|
@override
|
|
String get advancedEqEnableToggle => 'تفعيل EQ لكل جهاز';
|
|
|
|
@override
|
|
String get advancedEqEnableToggleSubtitle =>
|
|
'تطبيق إعداد EQ مختلف تلقائيًا عند تغيير مخرج الصوت.';
|
|
|
|
@override
|
|
String get advancedEqKnownDevicesTitle => 'أجهزة الصوت المعروفة';
|
|
|
|
@override
|
|
String get advancedEqKnownDevicesEmpty =>
|
|
'لم يتم تسجيل أي جهاز صوتي بعد. قم بتوصيل جهاز للبدء.';
|
|
|
|
@override
|
|
String advancedEqDevicePresetLabel(Object presetName) {
|
|
return 'الإعداد المسبق: $presetName';
|
|
}
|
|
|
|
@override
|
|
String preNoticeCountdown(int minutes) {
|
|
return 'يبدأ خلال $minutes دقيقة';
|
|
}
|
|
|
|
@override
|
|
String snoozeCountdown(int minutes) {
|
|
return 'يرنّ خلال $minutes دقيقة';
|
|
}
|
|
|
|
@override
|
|
String get snoozeAgainAction => 'غفوة مرة أخرى';
|
|
|
|
@override
|
|
String get alarmRingingNotificationTitle => 'منبّه PluriWave';
|
|
|
|
@override
|
|
String get alarmFireChannelName => 'المنبّهات الرنّانة';
|
|
|
|
@override
|
|
String get alarmFireChannelDescription =>
|
|
'صوت وشاشة عاجلة عندما يجب أن يرنّ منبّه موسيقي';
|
|
|
|
@override
|
|
String get alarmPreNoticeChannelName => 'تنبيهات المنبّهات';
|
|
|
|
@override
|
|
String get alarmPreNoticeChannelDescription => 'إشعارات صامتة قبل المنبّه';
|
|
|
|
@override
|
|
String get openFolderChooserTitle => 'فتح المجلد';
|
|
|
|
@override
|
|
String get openRecordingChooserTitle => 'فتح التسجيل';
|
|
|
|
@override
|
|
String get eqDeviceEditTitle => 'تعديل الجهاز';
|
|
|
|
@override
|
|
String get eqDeviceNameLabel => 'اسم الجهاز';
|
|
|
|
@override
|
|
String get eqDeviceNameHint => 'مثال: مكبر صوت غرفة المعيشة';
|
|
|
|
@override
|
|
String get eqDeviceNameConfirm => 'حفظ';
|
|
|
|
@override
|
|
String get eqDeviceConnected => 'متصل';
|
|
|
|
@override
|
|
String get eqDeviceActiveOutput => 'يتم إخراج الصوت من هذا الجهاز';
|
|
|
|
@override
|
|
String get eqDeviceRemove => 'إزالة الجهاز';
|
|
|
|
@override
|
|
String eqDeviceRemoved(Object device) {
|
|
return 'تمت إزالة $device';
|
|
}
|
|
|
|
@override
|
|
String get localMusicSectionTitle => 'الموسيقى المحلية (Android Auto)';
|
|
|
|
@override
|
|
String get localMusicSectionDescription =>
|
|
'اختر مجلدًا على هذا الجهاز لتصفح ملفاته الصوتية وتشغيلها من السيارة.';
|
|
|
|
@override
|
|
String get localMusicFolderNotConfigured => 'لم يتم تحديد مجلد';
|
|
|
|
@override
|
|
String get localMusicFolderTitle => 'مجلد الموسيقى المحلية';
|
|
|
|
@override
|
|
String get localMusicChoosePath => 'اختيار مجلد';
|
|
|
|
@override
|
|
String get localMusicChangePath => 'تغيير المجلد';
|
|
|
|
@override
|
|
String get localMusicFolderUpdated => 'تم تحديث مجلد الموسيقى المحلية';
|
|
|
|
@override
|
|
String localMusicFolderSaveError(Object error) {
|
|
return 'تعذّر حفظ المجلد: $error';
|
|
}
|
|
|
|
@override
|
|
String get localMusicFolderGenericName => 'مجلد محدد';
|
|
|
|
@override
|
|
String get welcomeHeadline => 'عالمك، على الهواء مباشرة';
|
|
|
|
@override
|
|
String get welcomeBody =>
|
|
'53,412 محطة من 238 دولة. احفظ محطاتك المفضلة، خذها معك في السيارة، واستيقظ عليها.';
|
|
|
|
@override
|
|
String get welcomeBullet1Title => 'معادل لكل محطة';
|
|
|
|
@override
|
|
String get welcomeBullet1Subtitle => 'بالإضافة إلى إعداد مسبق لكل جهاز خرج';
|
|
|
|
@override
|
|
String get welcomeBullet2Title => 'Android Auto';
|
|
|
|
@override
|
|
String get welcomeBullet2Subtitle =>
|
|
'محطاتك المفضلة وموسيقاك المحلية في السيارة';
|
|
|
|
@override
|
|
String get welcomeBullet3Title => 'منبهات موسيقية';
|
|
|
|
@override
|
|
String get welcomeBullet3Subtitle => 'مع رفع تدريجي للصوت ووضع الإجازة';
|
|
|
|
@override
|
|
String get welcomeCtaLabel => 'ابدأ الاستماع';
|
|
|
|
@override
|
|
String get eqCustomActionEnableLabel => 'تفعيل الموازن';
|
|
|
|
@override
|
|
String get eqCustomActionDisableLabel => 'إيقاف الموازن';
|
|
|
|
@override
|
|
String eqCustomActionPresetLabel(String preset) {
|
|
return 'الإعداد المسبق: $preset';
|
|
}
|
|
|
|
@override
|
|
String get alarmCardVacationPausedBadge => 'متوقفة مؤقتًا بسبب الإجازة';
|
|
|
|
@override
|
|
String get alarmCardSchedulingFailedMessage =>
|
|
'لم يتم تسجيل هذا المنبه في النظام، لذا قد لا يرن.';
|
|
|
|
@override
|
|
String get alarmCardPreNoticeFailedMessage =>
|
|
'تمت جدولة هذا المنبه، لكن تعذّر ضبط تذكيره المسبق.';
|
|
|
|
@override
|
|
String get alarmDiagnosticsExactAlarmsTitle => 'جدولة المنبه بدقة';
|
|
|
|
@override
|
|
String get alarmDiagnosticsExactAlarmsHint =>
|
|
'يتيح رنين المنبه في الدقيقة المحددة تمامًا، حتى عندما يكون الهاتف في وضع السكون.';
|
|
|
|
@override
|
|
String get alarmDiagnosticsNotificationsTitle => 'الإشعارات';
|
|
|
|
@override
|
|
String get alarmDiagnosticsNotificationsHint =>
|
|
'ضرورية لعرض المنبه والتنبيه المسبق.';
|
|
|
|
@override
|
|
String get alarmDiagnosticsFullScreenTitle => 'عرض المنبه بملء الشاشة';
|
|
|
|
@override
|
|
String get alarmDiagnosticsFullScreenHint =>
|
|
'يتيح ظهور شاشة الرنين تلقائيًا، حتى عندما يكون الهاتف مقفلاً.';
|
|
|
|
@override
|
|
String get alarmDiagnosticsBatteryTitle => 'تحسين استهلاك البطارية';
|
|
|
|
@override
|
|
String get alarmDiagnosticsBatteryHint =>
|
|
'يمنع النظام من إغلاق PluriWave في الخلفية حتى يتمكن المنبه من الرنين.';
|
|
|
|
@override
|
|
String get alarmDiagnosticsNativeCountTitle =>
|
|
'المنبهات المسجَّلة لدى Android';
|
|
|
|
@override
|
|
String alarmDiagnosticsNativeCountValue(int count) {
|
|
return 'المسجَّل حاليًا: $count';
|
|
}
|
|
|
|
@override
|
|
String get alarmDiagnosticsNativeCountAttentionHint =>
|
|
'لديك منبه مفعَّل، لكن لا يوجد أي منبه مسجَّل في النظام بعد. أعد فتح PluriWave، أو عالج النقاط أعلاه أولاً.';
|
|
|
|
@override
|
|
String get alarmDiagnosticsManufacturerLabel => 'الشركة المصنِّعة';
|
|
|
|
@override
|
|
String get alarmDiagnosticsSdkLabel => 'إصدار Android (SDK)';
|
|
|
|
@override
|
|
String get alarmDiagnosticsNeedsAttentionStatus => 'يحتاج إلى انتباه';
|
|
|
|
@override
|
|
String get alarmDiagnosticsAutostartTitle =>
|
|
'خطوة يدوية إضافية على هذا الهاتف';
|
|
|
|
@override
|
|
String alarmDiagnosticsAutostartBody(String manufacturer) {
|
|
return 'غالبًا ما تُغلق هواتف $manufacturer التطبيقات العاملة في الخلفية لتوفير البطارية. لا يوجد إعداد يمكن لـ PluriWave تفعيله بنفسه — عليك أن تُفعِّل بنفسك خاصية التشغيل التلقائي (تُعرف أحيانًا باسم \"Autostart\" أو \"النشاط في الخلفية\") لتطبيق PluriWave. ابحث عنها في الإعدادات، ضمن التطبيقات أو البطارية، أو في تطبيق الأمان الخاص بالهاتف.';
|
|
}
|
|
|
|
@override
|
|
String get alarmDiagnosticsFixAction => 'إصلاح';
|
|
|
|
@override
|
|
String get alarmDiagnosticsIntentUnavailable =>
|
|
'تعذّر فتح شاشة الإعدادات هذه على هذا الهاتف. حاول البحث عنها يدويًا في الإعدادات.';
|
|
|
|
@override
|
|
String get alarmDiagnosticsUnavailableHint =>
|
|
'لم نتمكّن بعد من التحقق من إعدادات المنبه الخاصة بك.';
|
|
|
|
@override
|
|
String get autoEqDisableOption => 'تعطيل';
|
|
|
|
@override
|
|
String get funcionPremium => 'ميزة مميزة';
|
|
|
|
@override
|
|
String get limiteAlarmasAlcanzado =>
|
|
'لقد وصلت إلى الحد المجاني وهو 5 منبهات.';
|
|
|
|
@override
|
|
String get desbloquearPremium => 'فتح النسخة المميزة';
|
|
|
|
@override
|
|
String get restaurarCompras => 'استعادة المشتريات';
|
|
|
|
@override
|
|
String get compraError => 'تعذّر إتمام عملية الشراء. حاول مرة أخرى.';
|
|
|
|
@override
|
|
String get restauracionSinCompras =>
|
|
'لم نجد أي عملية شراء سابقة في هذا الحساب.';
|
|
|
|
@override
|
|
String get premiumActivo => 'النسخة المميزة مفعّلة';
|
|
}
|