goosemusic 1.3.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: "عادية",
    add_custom: "إضافة كلمات",
    lyrics_name: "الاسم",
    translate_with_ai: "ترجم بالذكاء الاصطناعي",
    translate_title: "ترجم الكلمات بالذكاء الاصطناعي",
    translate_language_lbl: "اللغة المستهدفة",
    translate_prompt_lbl: "التعليمات",
    translate_submit: "ترجم",
    translate_reset: "إعادة تعيين التعليمات",
    translating: "جارٍ الترجمة…",
    translation_ready: "الترجمة جاهزة — راجعها واحفظها",
    translation_language_empty: "أدخل اللغة المستهدفة",
    no_lyrics_to_translate: "لا توجد كلمات لترجمتها لهذه الأغنية.",
    translation_not_configured: "حدد رابط الخادم والنموذج في الإعدادات.",
    translation_failed: |e| format!("فشلت الترجمة: {e}"),
    sec_translation: "الترجمة بالذكاء الاصطناعي",
    translation_base_url_lbl: "رابط الخادم (متوافق مع OpenAI)",
    translation_api_key_lbl: "مفتاح API (فارغ للخوادم المحلية)",
    translation_model_lbl: "النموذج",
    translation_refresh_models: "طلب قائمة النماذج",
    translation_no_models: "لم يتم العثور على نماذج في هذا الخادم.",
    translation_models_failed: |e| format!("تعذر تحميل قائمة النماذج: {e}"),
    edit_lyrics: "تعديل الكلمات",
    lyrics_editor_hint: "سطر واحد لكل بيت. أضف [mm:ss.xx] في البداية للكلمات المتزامنة، أو اتركها عادية. أضف سطر `# note` تحت أي سطر لعرض ملاحظة أسفل الكلمات.",

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

    ctx_play: "تشغيل",
    ctx_play_local: "تشغيل محلي",
    ctx_edit: "تعديل",
    ctx_go_to_artist: "الذهاب إلى الفنان",
    ctx_add_to_queue: "أضف إلى قائمة الانتظار",
    ctx_add_to_playlist: "إضافة إلى قائمة التشغيل",
    ctx_download: "تنزيل",
    ctx_song_radio: "راديو الأغنية",
    ctx_artist_radio: "راديو الفنان",
    ctx_remove_from_queue: "إزالة من قائمة الانتظار",
    ctx_remove_from_playlist: "إزالة من قائمة التشغيل",
    ctx_remove_from_recent: "إزالة من الأخيرة",
    ctx_clear_cache: "مسح ذاكرة التخزين المؤقت",
    sub_play_via: "تشغيل عبر",
    sub_download_from: "تنزيل من",
    sub_via: "عبر",
    sub_on: "على",
    sub_clear_cache_from: "مسح من",
    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: "مزود البث والتنزيل الافتراضي",
    cookie_browser_lbl: "ملفات تعريف ارتباط المتصفّح (لمقاطع المقيّدة عمريًا)",
    cookies_off: "إيقاف",
    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: "لم يتم العثور على كلمات لهذه الأغنية.",
    lyrics_saved: "تم حفظ الكلمات المخصصة",
    lyrics_deleted: "تم حذف الكلمات المخصصة",
    lyrics_empty: "لا يمكن أن تكون الكلمات فارغة",
    lyrics_name_empty: "أعطِ كلماتك اسمًا",
    select_playlist_drop: "اختر قائمة تشغيل لإفلات الأغاني فيها",
    reordered_playlist: "تم إعادة ترتيب قائمة التشغيل",
    max_panes_reached: "تم الوصول إلى الحد الأقصى لعدد الأجزاء",

    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}…"),
    resolving_player_client: "جارٍ حل عميل المشغّل المتوافق…",
    resolved_player_client: |c| format!("تم حل عميل المشغّل: {c}"),
    player_client_unavailable: "لم يتم العثور على عميل متوافق، يتم استخدام الافتراضي…",
    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}"),
    cache_cleared_for: |p| format!("تم مسح ذاكرة التخزين المؤقت لـ {p}"),
    radio_label: |w, name| format!("راديو ({w}): {name}"),
    ctx_add_to_playlist_n: |n| format!("إضافة {} إلى قائمة التشغيل", ar_tracks(n)),
    ctx_add_to_queue_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)),
    ctx_remove_from_recent_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: "يبث ويُنزّل الصوت (مطلوب لـ YouTube و SoundCloud)",
    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}"),
    percent: |pct| format!("{pct}%"),
    list_match_pos: |pos, total| format!("{pos}/{total}"),
    sub_menu_label: |base, provider, suffix| format!("{base} {provider} {suffix}"),
    deps_failed_detail: |e| format!("Failed: {e}"),
    deps_delete_failed_detail: |e| format!("Delete failed: {e}"),

    sc_title: "اختصارات لوحة المفاتيح",
    sc_sec_list: "قائمة الأغاني",
    sc_move: "التنقل في القائمة (يلتف حول الأطراف)",
    sc_focus_panel: "التركيز على قائمة الانتظار أو قائمة الأغاني",
    sc_first_last: "الصف الأول / الأخير",
    sc_page: "صفحة / نصف صفحة",
    sc_play: "تشغيل الأغنية المحددة",
    sc_sec_select: "التحديد والتحرير",
    sc_extend: "توسيع التحديد",
    sc_toggle_sel: "تبديل تحديد الصف",
    sc_select_all: "تحديد الكل في القائمة",
    sc_copy_paste: "نسخ / لصق الأغاني المحددة",
    sc_delete: "حذف الأغاني المحددة",
    sc_esc: "إغلاق النافذة، ثم مسح التحديد، ثم العودة إلى البحث",
    sc_sec_search: "البحث",
    sc_focus_search: "التركيز على البحث",
    sc_stage_provider: "تجهيز مزود البحث (معلق)",
    sc_stage_scope: "تجهيز نطاق البحث (معلق)",
    sc_run_search: "تنفيذ البحث المجهز",
    sc_find_list: "بحث تقريبي في القائمة (التنقل بين النتائج)",
    sc_sec_playlists: "قوائم التشغيل والسجل",
    sc_prev_next_pl: "قائمة التشغيل السابقة / التالية",
    sc_jump: "منتقي قوائم التشغيل (Enter للفتح، Shift+Enter للتشغيل)",
    sc_back_fwd: "رجوع / تقدم في الجزء",
    sc_sec_playback: "التشغيل",
    sc_play_pause: "تشغيل / إيقاف مؤقت",
    sc_next_prev: "الأغنية التالية / السابقة",
    sc_mute: "كتم الصوت",
    sc_volume: "خفض / رفع الصوت",
    sc_seek: "إرجاع / تقديم 5 ثوانٍ (Shift: 10 ثوانٍ)",
    sc_toggles: "قائمة الانتظار / التكرار / الكلمات / تبويب الانتظار",
    sc_sec_panes: "الأجزاء",
    sc_split: "تقسيم جنبًا إلى جنب / رأسيًا",
    sc_close_pane: "إغلاق الجزء",
    sc_adj_pane: "التركيز على الجزء المجاور",
    sc_cycle_pane: "التنقل بين الأجزاء / القفز إليها",
    sc_sec_menu: "قائمة السياق",
    sc_open_menu: "فتح للأغنية المحددة",
    sc_nav_menu: "التنقل في القائمة",
};

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} أغنية"),
    }
}