goosemusic 1.2.0

A music player with YouTube search, local playback, and OS media controls
use super::Strings;
use crate::providers::ProviderId;

pub const STRINGS: Strings = Strings {
    search: "بحث",
    downloads: "التنزيلات",
    settings: "الإعدادات",
    library: "المكتبة",
    nothing_saved_yet: "لا يوجد ما تم حفظه بعد",
    new_playlist_name: "اسم قائمة التشغيل الجديدة",

    queue: "قائمة الانتظار",
    recently_played: "تم تشغيلها مؤخراً",
    now_playing_from: "يتم تشغيله من",
    now_playing: "قيد التشغيل",
    up_next: "التالي",
    no_track_playing: "لا يتم تشغيل أي أغنية",
    no_more_tracks_in_queue: "لا مزيد من الأغاني في قائمة الانتظار",
    no_recently_played_tracks: "لا توجد أغانٍ تم تشغيلها مؤخراً",

    not_playing: "لا شيء قيد التشغيل",
    no_tracks_found: "لم يتم العثور على أغانٍ",

    searching: "جارٍ البحث…",
    loading: "جارٍ التحميل…",
    load_more: "تحميل المزيد",
    no_results_found: "لا توجد نتائج",
    no_recent_searches: "لا عمليات بحث حديثة",
    generating_radio: "جارٍ إنشاء الراديو…",

    not_an_artist_page: "ليست صفحة فنان",
    provided_by: "مقدمة بواسطة",
    retry: "إعادة المحاولة",
    nothing_here: "لا يوجد شيء هنا",
    most_popular_songs: "الأغاني الأكثر شعبية",
    albums: "الألبومات",
    playlists: "قوائم التشغيل",
    fans_also_like: "المعجبون يحبون أيضاً",

    looking_up_lyrics: "جارٍ البحث عن الكلمات…",
    play_a_track_for_lyrics: "شغّل أغنية لعرض كلماتها.",
    lyrics_selectable: "قابلة للتحديد",
    lyrics_synced: "متزامنة",
    lyrics_plain: "عادية",

    playlist_not_found: "لم يتم العثور على قائمة التشغيل",
    add_local: "إضافة محلية",
    downloaded_tracks: "الأغاني التي تم تنزيلها",
    no_downloaded_tracks: "لا توجد أغانٍ تم تنزيلها",

    ctx_play: "تشغيل",
    ctx_play_local: "تشغيل محلي",
    ctx_edit: "تعديل",
    ctx_go_to_artist: "الذهاب إلى الفنان",
    ctx_add_to_playlist: "إضافة إلى قائمة التشغيل",
    ctx_download: "تنزيل",
    ctx_song_radio: "راديو الأغنية",
    ctx_artist_radio: "راديو الفنان",
    ctx_remove_from_queue: "إزالة من قائمة الانتظار",
    ctx_remove_from_playlist: "إزالة من قائمة التشغيل",
    sub_play_via: "تشغيل عبر",
    sub_download_from: "تنزيل من",
    sub_via: "عبر",
    sub_on: "على",
    via_search_suffix: "(بحث)",

    current: "(الحالية)",
    select: "تحديد",
    find: "بحث",
    finding: "جارٍ البحث…",
    found_on: |p| format!("تم العثور عليها على {p}"),
    not_linked: "غير مرتبطة",
    providers: "المزودون",
    no_provider_data: "لا تحتوي هذه الأغنية على بيانات مزود.",
    save: "حفظ",
    cancel: "إلغاء",
    edit_track: "تعديل الأغنية",
    lbl_title: "العنوان",
    lbl_artist: "الفنان",
    ph_track_title: "عنوان الأغنية",
    ph_track_artist: "فنان الأغنية",
    delete: "حذف",
    delete_playlist_q: "حذف قائمة التشغيل؟",
    tracks_wont_be_deleted: "لن يتم حذف الأغاني.",
    lbl_id: "المعرّف",
    lbl_url: "الرابط",
    lbl_artist_id: "معرّف الفنان",
    lbl_duration_secs: "المدة (بالثواني)",
    lbl_thumbnail: "الصورة المصغرة",
    lbl_album: "الألبوم",

    sec_playback: "التشغيل",
    sec_storage: "التخزين",
    sec_history: "السجل",
    sec_appearance: "المظهر",
    sec_dependencies: "الاعتماديات",
    theme_lbl: "السمة",
    language_lbl: "اللغة",
    default_provider_lbl: "مزود البث والتنزيل الافتراضي",
    normalize_volume_lbl: "تطبيع مستوى الصوت بين الأغاني",
    download_dir_lbl: "مجلد التنزيل",
    cache_size_lbl: "أقصى حجم لذاكرة البث المؤقتة (ميغابايت)",
    hist_rows_lbl: "صفوف سجل البحث المعروضة",
    hist_entries_lbl: "مدخلات سجل البحث المحفوظة",
    recent_kept_lbl: "الأغاني التي تم تشغيلها مؤخراً والمحفوظة",
    reset_defaults: "استعادة الافتراضي",

    find_in_list: "بحث في القائمة…",
    scope_songs: "أغاني",
    scope_videos: "فيديوهات",
    scope_artists: "فنانون",
    scope_albums: "ألبومات",
    scope_playlists: "قوائم التشغيل",
    radio_word_song: "أغنية",
    radio_word_artist: "فنان",

    lyrics_copied: "تم نسخ الكلمات إلى الحافظة",
    saved_to_library: "تم الحفظ في المكتبة",
    removed_from_library: "تمت الإزالة من المكتبة",
    no_lyrics_found: "لم يتم العثور على كلمات لهذه الأغنية.",
    select_playlist_drop: "اختر قائمة تشغيل لإفلات الأغاني فيها",
    reordered_playlist: "تم إعادة ترتيب قائمة التشغيل",

    n_saved: |n| format!("{n} محفوظة"),
    n_plays: |n| format!("{} تشغيل", crate::util::format_count(n)),
    search_placeholder: |p| match p {
        ProviderId::YouTube => "ابحث في YouTube Music…".into(),
        ProviderId::Local => "ابحث…".into(),
        other => format!("ابحث في {}", other.label()),
    },
    added: |n| format!("تمت إضافة {}", ar_tracks(n)),
    added_to: |n, to| format!("تمت إضافة {} إلى {to}", ar_tracks(n)),
    removed_n: |n| format!("تمت إزالة {}", ar_tracks(n)),
    removed_from: |n, from| format!("تمت إزالة {} من {from}", ar_tracks(n)),
    pasted_into: |n, into| format!("تم لصق {} في {into}", ar_tracks(n)),
    saved_title: |t| format!("تم حفظ \"{t}\" في المكتبة"),
    playlist_created: |n| format!("تم إنشاء قائمة التشغيل \"{n}\""),
    added_local: |n| format!("تمت إضافة {} (اختر قائمة تشغيل لتنظيمها)", ar_tracks(n)),
    downloading_n: |n| format!("جارٍ تنزيل {}", ar_tracks(n)),
    resolving_on: |title, p| format!("جارٍ حل \"{title}\" على {p}"),
    provider_no_radio: |p| format!("{p} لا يدعم الراديو"),
    generating_radio_for: |w, name| format!("جارٍ إنشاء راديو لـ {w}: {name}"),
    could_not_find_on: |name, p| format!("تعذّر العثور على \"{name}\" على {p}"),
    opening: |l| format!("جارٍ الفتح: {l}"),
    opening_artist: |name| format!("جارٍ فتح الفنان: {name}"),
    download_complete: |path| format!("اكتمل التنزيل! تم الحفظ في {path}"),
    failed_resolve_on: |title, p, e| format!("فشل حل \"{title}\" على {p}: {e}"),
    couldnt_load: |e| format!("تعذّر التحميل: {e}"),
    couldnt_load_lyrics: |e| format!("تعذّر تحميل الكلمات: {e}"),
    search_failed: |e| format!("فشل البحث: {e}"),
    radio_label: |w, name| format!("راديو ({w}): {name}"),
    ctx_add_to_playlist_n: |n| format!("إضافة {} إلى قائمة التشغيل", ar_tracks(n)),
    ctx_download_n: |n| format!("تنزيل {}", ar_tracks(n)),
    ctx_remove_from_queue_n: |n| format!("إزالة {} من قائمة الانتظار", ar_tracks(n)),
    ctx_remove_from_playlist_n: |n| format!("إزالة {} من قائمة التشغيل", ar_tracks(n)),

    import_playlist: "استيراد قائمة تشغيل",
    import_method_native: "أصلية",
    import_method_filelist: "قائمة ملفات",
    import_method_csv: "CSV",
    import_native_hint: "يستورد قوائم التشغيل من ملف playlists.json.",
    import_csv_name_col: "عمود الاسم",
    import_csv_artist_col: "عمود الفنان",
    import_csv_album_col: "عمود الألبوم",
    import_csv_preset: "إعداد مسبق",
    import_csv_preset_default: "افتراضي",
    import_csv_preset_exportify: "Exportify",
    import_csv_exportify_note: "يدعم قوائم تشغيل Spotify المصدّرة من https://exportify.net/.",
    import_pattern_lbl: "نمط اسم الملف",
    import_playlist_name: "اسم قائمة التشغيل",
    import_add_pattern: "إضافة نمط",
    import_select_file: "اختيار ملف",
    import_select_folder: "اختيار مجلد",
    import_pattern_conflict: |a, b| {
        format!(
            "قد يتطابق النمطان \"{a}\" و\"{b}\" مع نفس الملف مع حقول متعارضة. أزل أحدهما أو صححه."
        )
    },
    import_playlists_imported: |n| format!("تم استيراد {}", ar_tracks(n)),
    import_imported_into: |n, into| format!("تم استيراد {} إلى {into}", ar_tracks(n)),
    import_no_tracks: "لم يتم العثور على أغانٍ للاستيراد.",
    import_no_match: "لا يوجد ملف يطابق الأنماط.",
    import_bad_file: "تعذّرت قراءة الملف المحدد.",

    deps_title: "اعتماديات مفقودة",
    deps_intro: "بعض الأدوات التي يستخدمها التطبيق مفقودة. اختر ما تريد تثبيته أو تجاهل للمتابعة (قد لا يعمل البحث والبث حتى تتوفر).",
    deps_install: "تثبيت",
    deps_install_selected: "تثبيت المحدد",
    deps_discard: "تجاهل",
    deps_installing: "جارٍ التثبيت…",
    deps_installed: "تم التثبيت",
    deps_failed: "فشل",
    deps_installed_toast: "تم تثبيت الاعتماديات المحددة.",
    deps_yt_dlp_desc: "يبث ويُنزّل الصوت (مطلوب)",
    deps_ytmusicapi_desc: "بحث YouTube Music (اختياري، يعود إلى yt-dlp)",
    deps_python3_desc: "مطلوب من قِبل ytmusicapi (بحث YouTube Music)",
    deps_ytmusicapi_requires_python: "يتطلب Python 3 (ثبّته أولاً)",
    deps_play_requires_yt_dlp: "التشغيل يتطلب yt-dlp — ثبّته من نافذة البدء لتشغيل هذا.",
    deps_source_not_playable: "لا يمكن تشغيل هذا المصدر.",
    deps_found_section_title: "موجودة في نظامك",
    deps_found_section_intro: "هذه متاحة بالفعل. حدد أيّاً منها لتثبيت نسخة يديرها التطبيق (نسخة التطبيق لها الأولوية على نسخة النظام).",
    deps_found_on_system: "موجودة في نظامك",
    deps_managed_by_app: "مثبّتة (يديرها التطبيق)",
    deps_not_installed: "غير مثبّتة",
    deps_delete: "حذف",
    deps_deleting: "جارٍ الحذف…",
    deps_deleted: "تم الحذف",
    deps_delete_failed: "فشل الحذف",

    sec_updates: "التحديثات",
    check_for_updates: "تحقق من التحديثات",
    checking_for_updates: "جارٍ التحقق من التحديثات…",
    up_to_date: "محدث",
    current_version: |v| format!("الإصدار {v}"),
    update_available: |v| format!("الإصدار {v} متاح. اذهب إلى الإعدادات للتحديث."),
    update_now: "تحديث الآن",
    updating: "جارٍ التحديث…",
    update_applied: |v| format!("تم التحديث إلى {v}. جارٍ إعادة التشغيل…"),
    package_managed: "لا يمكن التحديث التلقائي (عدم وجود إذن بالكتابة في دليل التطبيق). إذا تم تثبيته عبر مدير حزم، استخدمه للتحديث.",
    update_failed: |e| format!("فشل التحديث: {e}"),
};

fn ar_tracks(n: usize) -> String {
    let form = if n == 0 {
        0
    } else if n == 2 {
        2
    } else if (3..=10).contains(&n) {
        3
    } else if (11..=99).contains(&n) {
        4
    } else {
        let m = n % 100;
        if m == 0 {
            4
        } else if m == 2 {
            2
        } else if (3..=10).contains(&m) {
            3
        } else {
            4
        }
    };
    match form {
        0 => String::from("0 أغنية"),
        2 => format!("{n} أغنيتان"),
        3 => format!("{n} أغاني"),
        _ => format!("{n} أغنية"),
    }
}