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: "Id",
    lbl_url: "Url",
    lbl_artist_id: "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!("Додано: {}", uk_tracks(n)),
    added_to: |n, to| format!("Додано: {} до {to}", uk_tracks(n)),
    removed_n: |n| format!("Видалено: {}", uk_tracks(n)),
    removed_from: |n, from| format!("Видалено: {} з {from}", uk_tracks(n)),
    pasted_into: |n, into| format!("Вставлено: {} до {into}", uk_tracks(n)),
    saved_title: |t| format!("«{t}» збережено до бібліотеки"),
    playlist_created: |n| format!("Плейлист «{n}» створено"),
    added_local: |n| format!("Додано: {} (оберіть плейлист для впорядкування)", uk_tracks(n)),
    downloading_n: |n| format!("Завантаження {}", uk_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!("Додати {} до плейлиста", uk_tracks(n)),
    ctx_download_n: |n| format!("Завантажити {}", uk_tracks(n)),
    ctx_remove_from_queue_n: |n| format!("Видалити {} з черги", uk_tracks(n)),
    ctx_remove_from_playlist_n: |n| format!("Видалити {} з плейлиста", uk_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!("Імпортовано {}", uk_tracks(n)),
    import_imported_into: |n, into| format!("Імпортовано {} до {into}", uk_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 uk_tracks(n: usize) -> String {
    let m10 = n % 10;
    let m100 = n % 100;
    if m10 == 1 && m100 != 11 {
        format!("{n} трек")
    } else if (2..=4).contains(&m10) && !(12..=14).contains(&m100) {
        format!("{n} треки")
    } else {
        format!("{n} треків")
    }
}