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!("Добавлено: {}", ru_tracks(n)),
added_to: |n, to| format!("Добавлено: {} в {to}", ru_tracks(n)),
removed_n: |n| format!("Удалено: {}", ru_tracks(n)),
removed_from: |n, from| format!("Удалено: {} из {from}", ru_tracks(n)),
pasted_into: |n, into| format!("Вставлено: {} в {into}", ru_tracks(n)),
saved_title: |t| format!("«{t}» сохранено в библиотеку"),
playlist_created: |n| format!("Плейлист «{n}» создан"),
added_local: |n| format!("Добавлено: {} (выберите плейлист для упорядочивания)", ru_tracks(n)),
downloading_n: |n| format!("Загрузка {}…", ru_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!("Добавить {} в плейлист", ru_tracks(n)),
ctx_download_n: |n| format!("Скачать {}", ru_tracks(n)),
ctx_remove_from_queue_n: |n| format!("Убрать {} из очереди", ru_tracks(n)),
ctx_remove_from_playlist_n: |n| format!("Убрать {} из плейлиста", ru_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!("Импортировано {}", ru_tracks(n)),
import_imported_into: |n, into| format!("Импортировано {} в {into}", ru_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 ru_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} треков")
}
}