340 lines
24 KiB
TypeScript
340 lines
24 KiB
TypeScript
export const ru = {
|
||
// Header
|
||
myTube: "MyTube",
|
||
manage: "Управление",
|
||
settings: "Настройки",
|
||
logout: "Выйти",
|
||
pleaseEnterUrlOrSearchTerm: "Пожалуйста, введите URL видео или поисковый запрос",
|
||
unexpectedErrorOccurred: "Произошла непредвиденная ошибка. Пожалуйста, попробуйте снова.",
|
||
uploadVideo: "Загрузить видео",
|
||
enterUrlOrSearchTerm: "Введите URL YouTube/Bilibili или поисковый запрос",
|
||
manageVideos: "Управление видео",
|
||
|
||
// Home
|
||
pasteUrl: "Вставьте URL видео или коллекции",
|
||
download: "Скачать",
|
||
search: "Поиск",
|
||
recentDownloads: "Недавние загрузки",
|
||
noDownloads: "Загрузок пока нет",
|
||
downloadStarted: "Загрузка началась",
|
||
downloadFailed: "Ошибка загрузки",
|
||
loadingVideos: "Загрузка видео...",
|
||
searchResultsFor: "Результаты поиска для",
|
||
fromYourLibrary: "Из вашей библиотеки",
|
||
noMatchingVideos: "В вашей библиотеке нет подходящих видео.",
|
||
fromYouTube: "С YouTube",
|
||
loadingYouTubeResults: "Загрузка результатов YouTube...",
|
||
noYouTubeResults: "Результаты YouTube не найдены",
|
||
noVideosYet: "Видео пока нет. Отправьте URL YouTube, чтобы скачать ваше первое видео!",
|
||
views: "просмотров",
|
||
|
||
// Settings
|
||
general: "Общие",
|
||
security: "Безопасность",
|
||
videoDefaults: "Настройки плеера по умолчанию",
|
||
downloadSettings: "Настройки загрузки",
|
||
language: "Язык",
|
||
enableLogin: "Включить защиту входа",
|
||
password: "Пароль",
|
||
passwordHelper: "Оставьте пустым, чтобы сохранить текущий пароль, или введите новый для изменения",
|
||
passwordSetHelper: "Установите пароль для доступа к приложению",
|
||
autoPlay: "Автовоспроизведение видео",
|
||
autoLoop: "Автоповтор видео",
|
||
maxConcurrent: "Макс. одновременных загрузок",
|
||
saveSettings: "Сохранить настройки",
|
||
saving: "Сохранение...",
|
||
backToManage: "Назад к управлению",
|
||
settingsSaved: "Настройки успешно сохранены",
|
||
settingsFailed: "Не удалось сохранить настройки",
|
||
debugMode: "Режим отладки",
|
||
debugModeDescription: "Показать или скрыть сообщения консоли (требуется обновление)",
|
||
tagsManagement: "Управление тегами",
|
||
newTag: "Новый тег",
|
||
tags: "Теги",
|
||
tagsManagementNote: "Пожалуйста, не забудьте нажать «Сохранить настройки» после добавления или удаления тегов, чтобы применить изменения.",
|
||
|
||
// Database
|
||
database: "База данных",
|
||
migrateDataDescription: "Перенос данных из устаревших файлов JSON в новую базу данных SQLite. Это действие безопасно запускать несколько раз (дубликаты будут пропущены).",
|
||
migrateDataButton: "Перенести данные из JSON",
|
||
scanFiles: "Сканировать файлы",
|
||
scanFilesSuccess: "Сканирование завершено. Добавлено {count} новых видео.",
|
||
scanFilesFailed: "Сканирование не удалось",
|
||
scanFilesConfirmMessage: "Система просканирует корневую папку с видео, чтобы найти недовкументированные видеофайлы.",
|
||
scanning: "Сканирование...",
|
||
migrateConfirmation: "Вы уверены, что хотите перенести данные? Это может занять некоторое время.",
|
||
migrationResults: "Результаты миграции",
|
||
migrationReport: "Отчет о миграции",
|
||
migrationSuccess: "Миграция завершена. Подробности см. в оповещении.",
|
||
migrationNoData: "Миграция завершена, но данные не найдены.",
|
||
migrationFailed: "Ошибка миграции",
|
||
migrationWarnings: "ПРЕДУПРЕЖДЕНИЯ",
|
||
migrationErrors: "ОШИБКИ",
|
||
itemsMigrated: "элементов перенесено",
|
||
fileNotFound: "Файл не найден в",
|
||
noDataFilesFound: "Файлы данных для миграции не найдены. Пожалуйста, проверьте сопоставления томов.",
|
||
removeLegacyData: "Удалить устаревшие данные",
|
||
removeLegacyDataDescription: "Удалите старые файлы JSON (videos.json, collections.json и т.д.), чтобы освободить место на диске. Делайте это только после проверки успешной миграции ваших данных.",
|
||
removeLegacyDataConfirmTitle: "Удалить устаревшие данные?",
|
||
removeLegacyDataConfirmMessage: "Вы уверены, что хотите удалить устаревшие файлы данных JSON? Это действие нельзя отменить.",
|
||
legacyDataDeleted: "Устаревшие данные успешно удалены.",
|
||
deleteLegacyDataButton: "Удалить устаревшие данные",
|
||
cleanupTempFiles: "Очистить временные файлы",
|
||
cleanupTempFilesDescription: "Удалить все временные файлы загрузки (.ytdl, .part) из каталога загрузок. Это помогает освободить место на диске от незавершенных или отмененных загрузок.",
|
||
cleanupTempFilesConfirmTitle: "Очистить временные файлы?",
|
||
cleanupTempFilesConfirmMessage: "Это навсегда удалит все файлы .ytdl и .part в каталоге загрузок. Убедитесь, что нет активных загрузок перед продолжением.",
|
||
cleanupTempFilesActiveDownloads: "Невозможно очистить, пока активны загрузки. Пожалуйста, дождитесь завершения всех загрузок или сначала отмените их.",
|
||
cleanupTempFilesSuccess: "Успешно удалено {count} временных файлов.",
|
||
cleanupTempFilesFailed: "Не удалось очистить временные файлы",
|
||
|
||
// Cloud Drive
|
||
cloudDriveSettings: "Облачное хранилище (OpenList)",
|
||
enableAutoSave: "Включить автосохранение в облако",
|
||
apiUrl: "URL API",
|
||
apiUrlHelper: "напр. https://your-alist-instance.com/api/fs/put",
|
||
token: "Токен",
|
||
uploadPath: "Путь загрузки",
|
||
cloudDrivePathHelper: "Путь к каталогу в облаке, напр. /mytube-uploads",
|
||
|
||
// Manage
|
||
manageContent: "Управление контентом",
|
||
videos: "Видео",
|
||
collections: "Коллекции",
|
||
allVideos: "Все видео",
|
||
delete: "Удалить",
|
||
backToHome: "Назад на главную",
|
||
confirmDelete: "Вы уверены, что хотите удалить это?",
|
||
deleteSuccess: "Успешно удалено",
|
||
deleteFailed: "Не удалось удалить",
|
||
noVideos: "Видео не найдено",
|
||
noCollections: "Коллекции не найдены",
|
||
searchVideos: "Поиск видео...",
|
||
thumbnail: "Миниатюра",
|
||
title: "Название",
|
||
author: "Автор",
|
||
authors: "Авторы",
|
||
created: "Создано",
|
||
name: "Имя",
|
||
size: "Размер",
|
||
actions: "Действия",
|
||
deleteCollection: "Удалить коллекцию",
|
||
deleteVideo: "Удалить видео",
|
||
noVideosFoundMatching: "Видео, соответствующие вашему поиску, не найдены.",
|
||
|
||
// Video Player
|
||
playing: "Воспроизведение",
|
||
paused: "Пауза",
|
||
next: "Следующее",
|
||
previous: "Предыдущее",
|
||
loop: "Повтор",
|
||
autoPlayOn: "Автовоспроизведение вкл.",
|
||
autoPlayOff: "Автовоспроизведение выкл.",
|
||
videoNotFound: "Видео не найдено",
|
||
videoNotFoundOrLoaded: "Видео не найдено или не может быть загружено.",
|
||
deleting: "Удаление...",
|
||
addToCollection: "Добавить в коллекцию",
|
||
originalLink: "Оригинальная ссылка",
|
||
source: "Источник:",
|
||
addedDate: "Дата добавления:",
|
||
latestComments: "Последние комментарии",
|
||
noComments: "Комментарии недоступны.",
|
||
upNext: "Далее",
|
||
noOtherVideos: "Других видео нет",
|
||
currentlyIn: "Сейчас в:",
|
||
collectionWarning: "Добавление в другую коллекцию удалит его из текущей.",
|
||
addToExistingCollection: "Добавить в существующую коллекцию:",
|
||
selectCollection: "Выберите коллекцию",
|
||
add: "Добавить",
|
||
createNewCollection: "Создать новую коллекцию:",
|
||
collectionName: "Название коллекции",
|
||
create: "Создать",
|
||
removeFromCollection: "Удалить из коллекции",
|
||
confirmRemoveFromCollection: "Вы уверены, что хотите удалить это видео из коллекции?",
|
||
remove: "Удалить",
|
||
loadingVideo: "Загрузка видео...",
|
||
current: "(Текущее)",
|
||
rateThisVideo: "Оценить это видео",
|
||
enterFullscreen: "На весь экран",
|
||
exitFullscreen: "Выйти из полноэкранного режима",
|
||
editTitle: "Редактировать название",
|
||
titleUpdated: "Название успешно обновлено",
|
||
titleUpdateFailed: "Не удалось обновить название",
|
||
refreshThumbnail: "Обновить миниатюру",
|
||
thumbnailRefreshed: "Миниатюра успешно обновлена",
|
||
thumbnailRefreshFailed: "Не удалось обновить миниатюру",
|
||
videoUpdated: "Видео успешно обновлено",
|
||
videoUpdateFailed: "Не удалось обновить видео",
|
||
failedToLoadVideos: "Не удалось загрузить видео. Пожалуйста, попробуйте позже.",
|
||
videoRemovedSuccessfully: "Видео успешно удалено",
|
||
failedToDeleteVideo: "Не удалось удалить видео",
|
||
pleaseEnterSearchTerm: "Пожалуйста, введите поисковый запрос",
|
||
failedToSearch: "Поиск не удался. Пожалуйста, попробуйте снова.",
|
||
searchCancelled: "Поиск отменен",
|
||
|
||
// Login
|
||
signIn: "Войти",
|
||
verifying: "Проверка...",
|
||
incorrectPassword: "Неверный пароль",
|
||
loginFailed: "Ошибка проверки пароля",
|
||
defaultPasswordHint: "Пароль по умолчанию: 123",
|
||
|
||
// Collection Page
|
||
loadingCollection: "Загрузка коллекции...",
|
||
collectionNotFound: "Коллекция не найдена",
|
||
noVideosInCollection: "В этой коллекции нет видео.",
|
||
|
||
// Snackbar Messages
|
||
videoDownloading: "Видео скачивается",
|
||
downloadStartedSuccessfully: "Загрузка успешно началась",
|
||
collectionCreatedSuccessfully: "Коллекция успешно создана",
|
||
videoAddedToCollection: "Видео добавлено в коллекцию",
|
||
videoRemovedFromCollection: "Видео удалено из коллекции",
|
||
collectionDeletedSuccessfully: "Коллекция успешно удалена",
|
||
failedToDeleteCollection: "Не удалось удалить коллекцию",
|
||
back: "Назад",
|
||
|
||
// Author Videos
|
||
loadVideosError: "Не удалось загрузить видео. Пожалуйста, попробуйте позже.",
|
||
unknownAuthor: "Неизвестно",
|
||
noVideosForAuthor: "Видео этого автора не найдены.",
|
||
|
||
// Delete Collection Modal
|
||
deleteCollectionTitle: "Удалить коллекцию",
|
||
deleteCollectionConfirmation: "Вы уверены, что хотите удалить коллекцию",
|
||
collectionContains: "Эта коллекция содержит",
|
||
deleteCollectionOnly: "Удалить только коллекцию",
|
||
deleteCollectionAndVideos: "Удалить коллекцию и все видео",
|
||
|
||
// Common
|
||
loading: "Загрузка...",
|
||
error: "Ошибка",
|
||
success: "Успех",
|
||
cancel: "Отмена",
|
||
confirm: "Подтвердить",
|
||
save: "Сохранить",
|
||
on: "Вкл.",
|
||
off: "Выкл",
|
||
continue: "Продолжить",
|
||
|
||
// Video Card
|
||
unknownDate: "Неизвестная дата",
|
||
part: "Часть",
|
||
collection: "Коллекция",
|
||
|
||
// Upload Modal
|
||
selectVideoFile: "Выберите видеофайл",
|
||
pleaseSelectVideo: "Пожалуйста, выберите видеофайл",
|
||
uploadFailed: "Ошибка загрузки",
|
||
failedToUpload: "Не удалось загрузить видео",
|
||
uploading: "Загрузка...",
|
||
upload: "Загрузить",
|
||
|
||
// Bilibili Modal
|
||
bilibiliCollectionDetected: "Обнаружена коллекция Bilibili",
|
||
bilibiliSeriesDetected: "Обнаружена серия Bilibili",
|
||
multiPartVideoDetected: "Обнаружено многочастное видео",
|
||
collectionHasVideos: "В этой коллекции Bilibili {count} видео.",
|
||
seriesHasVideos: "В этой серии Bilibili {count} видео.",
|
||
videoHasParts: "В этом видео Bilibili {count} частей.",
|
||
downloadAllVideos: "Скачать все {count} видео",
|
||
downloadAllParts: "Скачать все {count} частей",
|
||
downloadThisVideoOnly: "Скачать только это видео",
|
||
downloadCurrentPartOnly: "Скачать только текущую часть",
|
||
processing: "Обработка...",
|
||
wouldYouLikeToDownloadAllParts: "Хотите скачать все части?",
|
||
wouldYouLikeToDownloadAllVideos: "Хотите скачать все видео?",
|
||
allPartsAddedToCollection: "Все части будут добавлены в эту коллекцию",
|
||
allVideosAddedToCollection: "Все видео будут добавлены в эту коллекцию",
|
||
queued: "В очереди",
|
||
waitingInQueue: "Ожидание в очереди",
|
||
// Downloads
|
||
downloads: "Загрузки",
|
||
activeDownloads: "Активные загрузки",
|
||
manageDownloads: "Управление загрузками",
|
||
queuedDownloads: "Загрузки в очереди",
|
||
downloadHistory: "История загрузок",
|
||
clearQueue: "Очистить очередь",
|
||
clearHistory: "Очистить историю",
|
||
noActiveDownloads: "Нет активных загрузок",
|
||
noQueuedDownloads: "Нет загрузок в очереди",
|
||
noDownloadHistory: "История загрузок пуста",
|
||
downloadCancelled: "Загрузка отменена",
|
||
queueCleared: "Очередь очищена",
|
||
historyCleared: "История очищена",
|
||
removedFromQueue: "Удалено из очереди",
|
||
removedFromHistory: "Удалено из истории",
|
||
status: "Статус",
|
||
progress: "Прогресс",
|
||
speed: "Скорость",
|
||
finishedAt: "Завершено в",
|
||
failed: "Ошибка",
|
||
|
||
// Batch Download
|
||
batchDownload: "Пакетная загрузка",
|
||
batchDownloadDescription: "Вставьте несколько URL ниже, по одному в строке.",
|
||
urls: "URL",
|
||
addToQueue: "Добавить в очередь",
|
||
batchTasksAdded: "Добавлено задач: {count}",
|
||
addBatchTasks: "Добавить пакетные задачи",
|
||
|
||
// Subscriptions
|
||
subscribeToAuthor: "Подписаться на автора",
|
||
subscribeConfirmationMessage: "Вы хотите подписаться на {author}?",
|
||
subscribeDescription: "Система будет автоматически проверять новые видео от этого автора и скачивать их.",
|
||
checkIntervalMinutes: "Интервал проверки (минуты)",
|
||
subscribe: "Подписаться",
|
||
subscriptions: "Подписки",
|
||
interval: "Интервал",
|
||
lastCheck: "Последняя проверка",
|
||
platform: "Платформа",
|
||
unsubscribe: "Отписаться",
|
||
confirmUnsubscribe: "Вы уверены, что хотите отписаться от {author}?",
|
||
subscribedSuccessfully: "Успешно подписаны",
|
||
unsubscribedSuccessfully: "Успешно отписаны",
|
||
subscriptionAlreadyExists: "Вы уже подписаны на этого автора.",
|
||
minutes: "минуты",
|
||
never: "Никогда",
|
||
// Instruction Page
|
||
instructionSection1Title: "1. Загрузка и управление задачами",
|
||
instructionSection1Desc: "Этот модуль включает функции получения видео, пакетных задач и импорта файлов.",
|
||
instructionSection1Sub1: "Загрузка по ссылке:",
|
||
instructionSection1Item1Label: "Базовая загрузка:",
|
||
instructionSection1Item1Text: "Вставьте ссылки с различных видеосайтов в поле ввода для прямой загрузки.",
|
||
instructionSection1Item2Label: "Разрешения:",
|
||
instructionSection1Item2Text: "Для сайтов, требующих членства или входа в систему, пожалуйста, сначала войдите в соответствующую учетную запись на новой вкладке браузера, чтобы получить разрешения на загрузку.",
|
||
instructionSection1Sub2: "Умное распознавание:",
|
||
instructionSection1Item3Label: "Подписка на автора YouTube:",
|
||
instructionSection1Item3Text: "Когда вставленная ссылка является каналом автора, система спросит, хотите ли вы подписаться. После подписки система может автоматически сканировать и загружать обновления автора через заданные интервалы.",
|
||
instructionSection1Item4Label: "Загрузка коллекции Bilibili:",
|
||
instructionSection1Item4Text: "Когда вставленная ссылка является избранным/коллекцией Bilibili, система спросит, хотите ли вы загрузить все содержимое коллекции.",
|
||
instructionSection1Sub3: "Расширенные инструменты (Страница управления загрузками):",
|
||
instructionSection1Item5Label: "Пакетное добавление задач:",
|
||
instructionSection1Item5Text: "Поддерживает вставку нескольких ссылок для загрузки одновременно (по одной в строке) для пакетного добавления.",
|
||
instructionSection1Item6Label: "Сканировать файлы:",
|
||
instructionSection1Item6Text: "Автоматически ищет все файлы в корневом каталоге хранения видео и папках первого уровня. Эта функция подходит для синхронизации файлов с системой после того, как администраторы вручную поместили их на сервер.",
|
||
instructionSection1Item7Label: "Загрузить видео:",
|
||
instructionSection1Item7Text: "Поддерживает загрузку локальных видеофайлов непосредственно с клиента на сервер.",
|
||
|
||
instructionSection2Title: "2. Управление видеотекой",
|
||
instructionSection2Desc: "Обслуживание и редактирование загруженных или импортированных видеоресурсов.",
|
||
instructionSection2Sub1: "Удаление коллекции/видео:",
|
||
instructionSection2Text1: "При удалении коллекции на странице управления система предлагает два варианта: удалить только элемент списка коллекции (сохранить файлы) или полностью удалить физические файлы внутри коллекции.",
|
||
instructionSection2Sub2: "Восстановление миниатюры:",
|
||
instructionSection2Text2: "Если у видео нет обложки после загрузки, нажмите кнопку обновления на миниатюре видео, и система повторно захватит первый кадр видео в качестве новой миниатюры.",
|
||
|
||
instructionSection3Title: "3. Настройки системы",
|
||
instructionSection3Desc: "Настройка параметров системы, обслуживание данных и расширение функций.",
|
||
instructionSection3Sub1: "Настройки безопасности:",
|
||
instructionSection3Text1: "Установите пароль для входа в систему (начальный пароль по умолчанию — 123, рекомендуется изменить после первого входа).",
|
||
instructionSection3Sub2: "Управление тегами:",
|
||
instructionSection3Text2: "Поддерживает добавление или удаление тегов классификации видео. Примечание: Вы должны нажать кнопку «Сохранить» внизу страницы, чтобы изменения вступили в силу.",
|
||
instructionSection3Sub3: "Обслуживание системы:",
|
||
instructionSection3Item1Label: "Очистить временные файлы:",
|
||
instructionSection3Item1Text: "Используется для очистки остаточных временных файлов загрузки, вызванных случайными сбоями бэкенда, для освобождения места.",
|
||
instructionSection3Item2Label: "Миграция базы данных:",
|
||
instructionSection3Item2Text: "Предназначено для пользователей ранних версий. Используйте эту функцию для миграции данных из JSON в новую базу данных SQLite. После успешной миграции нажмите кнопку удаления, чтобы очистить старые исторические данные.",
|
||
instructionSection3Sub4: "Расширенные сервисы:",
|
||
instructionSection3Item3Label: "Облачный диск OpenList:",
|
||
instructionSection3Item3Text: "(В разработке) Поддерживает подключение к развернутым пользователем сервисам OpenList. Добавьте конфигурацию здесь, чтобы включить интеграцию с облачным диском.",
|
||
};
|