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: "Вкажіть URL сервера та модель у налаштуваннях.",
translation_failed: |e| format!("Помилка перекладу: {e}"),
sec_translation: "ШІ-переклад",
translation_base_url_lbl: "URL сервера (сумісний з 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: "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: "Джерело за замовчуванням для потоку та завантажень",
cookie_browser_lbl: "Cookies браузера (відео з віковим обмеженням)",
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!("Додано: {}", 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}…"),
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!("Додати {} до плейлиста", uk_tracks(n)),
ctx_add_to_queue_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)),
ctx_remove_from_recent_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: "Потокова передача та завантаження аудіо (обов'язково для 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 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} треків")
}
}