mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-21 23:05:46 +00:00
feat(i18n): Russian locale — missing strings (#1181)
This commit is contained in:
@@ -147,6 +147,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
* **Settings → Personalisation** gains a **Queue Settings** category that brings the queue display mode, the queue toolbar customizer, and the **Preserve "Play Next" order** toggle (moved here from Audio) together in one place.
|
* **Settings → Personalisation** gains a **Queue Settings** category that brings the queue display mode, the queue toolbar customizer, and the **Preserve "Play Next" order** toggle (moved here from Audio) together in one place.
|
||||||
* On macOS, the **Audio Output Device** category is now hidden rather than showing a notice — playback there always follows the system output device.
|
* On macOS, the **Audio Output Device** category is now hidden rather than showing a notice — playback there always follows the system output device.
|
||||||
|
|
||||||
|
### Russian locale — missing strings and phrasing cleanup
|
||||||
|
|
||||||
|
**By [@kilyabin](https://github.com/kilyabin), PR [#1181](https://github.com/Psychotoxical/psysonic/pull/1181)**
|
||||||
|
|
||||||
|
* Fifty strings that still fell back to English in the Russian UI are now translated — macOS in-place updater, device sync file migration, fullscreen lyrics, and statistics share-image export.
|
||||||
|
* User-facing descriptions in Russian and English no longer mention WebKitGTK or Fisher–Yates internals; several Russian labels and section titles read more naturally (settings casing, smart playlists, track transitions, and home rails).
|
||||||
|
|
||||||
|
|
||||||
## Fixed
|
## Fixed
|
||||||
|
|
||||||
|
|||||||
@@ -196,6 +196,7 @@ const CONTRIBUTOR_ENTRIES = [
|
|||||||
'Golos Text and Unbounded fonts with Cyrillic support (PR #206)',
|
'Golos Text and Unbounded fonts with Cyrillic support (PR #206)',
|
||||||
'Fullscreen & sidebar lyrics: duration-based ease-out scroll animator replacing spring physics; bottom fade for plain lyrics (PR #214)',
|
'Fullscreen & sidebar lyrics: duration-based ease-out scroll animator replacing spring physics; bottom fade for plain lyrics (PR #214)',
|
||||||
'Sidebar lyrics: YouLy+ source strings render in a single line (PR #215)',
|
'Sidebar lyrics: YouLy+ source strings render in a single line (PR #215)',
|
||||||
|
'Russian locale — 50 missing strings and ru/en phrasing cleanup (PR #1181)',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ export const orbit = {
|
|||||||
settingAutoApprove: 'Auto-approve suggestions',
|
settingAutoApprove: 'Auto-approve suggestions',
|
||||||
settingAutoApproveHint: "Guest suggestions land in your queue instantly. Off: they stay in the session list for you to review later.",
|
settingAutoApproveHint: "Guest suggestions land in your queue instantly. Off: they stay in the session list for you to review later.",
|
||||||
settingAutoShuffle: 'Automatic reshuffle',
|
settingAutoShuffle: 'Automatic reshuffle',
|
||||||
settingAutoShuffleHint: "Periodic Fisher–Yates shuffle of the upcoming queue. Off: order only changes when you rearrange it.",
|
settingAutoShuffleHint: "Periodically reshuffles the upcoming queue. Off: order only changes when you rearrange it manually.",
|
||||||
settingShuffleInterval: 'Reshuffle every',
|
settingShuffleInterval: 'Reshuffle every',
|
||||||
settingShuffleIntervalHint: 'How often the upcoming queue gets reshuffled while the session runs.',
|
settingShuffleIntervalHint: 'How often the upcoming queue gets reshuffled while the session runs.',
|
||||||
suggestBlockedMuted: 'The host muted you for this session — suggestions are off.',
|
suggestBlockedMuted: 'The host muted you for this session — suggestions are off.',
|
||||||
|
|||||||
@@ -278,10 +278,10 @@ export const settings = {
|
|||||||
linuxWebkitSmoothScroll: 'Smooth wheel (Linux)',
|
linuxWebkitSmoothScroll: 'Smooth wheel (Linux)',
|
||||||
linuxWebkitSmoothScrollDesc: 'On: inertial scroll. Off: line-by-line, GTK-style.',
|
linuxWebkitSmoothScrollDesc: 'On: inertial scroll. Off: line-by-line, GTK-style.',
|
||||||
linuxWebkitInputForceRepaint: 'Repaint inputs on focus (Linux)',
|
linuxWebkitInputForceRepaint: 'Repaint inputs on focus (Linux)',
|
||||||
linuxWebkitInputForceRepaintDesc: 'Workaround for WebKitGTK 2.50.x where text fields freeze when clicked. Search icons flicker briefly on focus.',
|
linuxWebkitInputForceRepaintDesc: 'Fixes text fields that freeze when clicked. Search icons may flicker briefly on focus.',
|
||||||
linuxWaylandTextRender: 'Wayland text rendering (Linux)',
|
linuxWaylandTextRender: 'Wayland text rendering (Linux)',
|
||||||
linuxWaylandTextRenderDesc:
|
linuxWaylandTextRenderDesc:
|
||||||
'Font smoothing in the UI updates immediately. WebKit hardware acceleration (sharp / GPU presets) is saved and applied on the next app start — changing it live can freeze WebKitGTK on some setups.',
|
'Font smoothing updates immediately. The acceleration preset (Sharp / GPU) takes effect after restarting the app.',
|
||||||
linuxWaylandTextRenderBalanced: 'Balanced',
|
linuxWaylandTextRenderBalanced: 'Balanced',
|
||||||
linuxWaylandTextRenderSharp: 'Sharp (CPU-friendly)',
|
linuxWaylandTextRenderSharp: 'Sharp (CPU-friendly)',
|
||||||
linuxWaylandTextRenderGpu: 'GPU-first',
|
linuxWaylandTextRenderGpu: 'GPU-first',
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ export const common = {
|
|||||||
downloadZip: 'Скачать (ZIP)',
|
downloadZip: 'Скачать (ZIP)',
|
||||||
back: 'Назад',
|
back: 'Назад',
|
||||||
backToTop: 'Наверх',
|
backToTop: 'Наверх',
|
||||||
|
close: 'Закрыть',
|
||||||
cancel: 'Отмена',
|
cancel: 'Отмена',
|
||||||
save: 'Сохранить',
|
save: 'Сохранить',
|
||||||
delete: 'Удалить',
|
delete: 'Удалить',
|
||||||
@@ -49,6 +50,15 @@ export const common = {
|
|||||||
updaterAurHint: 'Установить обновление через AUR:',
|
updaterAurHint: 'Установить обновление через AUR:',
|
||||||
updaterErrorMsg: 'Ошибка загрузки',
|
updaterErrorMsg: 'Ошибка загрузки',
|
||||||
updaterRetryBtn: 'Повторить',
|
updaterRetryBtn: 'Повторить',
|
||||||
|
updaterInstallNow: 'Установить сейчас',
|
||||||
|
updaterMacReadyTitle: 'Готово к установке',
|
||||||
|
updaterMacReady: 'Обновление загружается, проверяется и применяется автоматически — DMG не нужен. После завершения приложение перезапустится само.',
|
||||||
|
updaterTrustNotarized: 'Нотаризовано Apple',
|
||||||
|
updaterTrustSignature: 'Подпись проверена',
|
||||||
|
updaterMacDoneTitle: 'Обновление установлено',
|
||||||
|
updaterRestartingIn: 'Перезапуск через {{n}} с…',
|
||||||
|
updaterRestarting: 'Перезапуск…',
|
||||||
|
updaterRestartNow: 'Перезапустить сейчас',
|
||||||
durationHoursMinutes: '{{hours}}ч {{minutes}}мин',
|
durationHoursMinutes: '{{hours}}ч {{minutes}}мин',
|
||||||
durationMinutesOnly: '{{minutes}}мин',
|
durationMinutesOnly: '{{minutes}}мин',
|
||||||
updaterOpenGitHub: 'Открыть на GitHub',
|
updaterOpenGitHub: 'Открыть на GitHub',
|
||||||
|
|||||||
@@ -9,8 +9,25 @@ export const deviceSync = {
|
|||||||
free: 'свободно',
|
free: 'свободно',
|
||||||
notMountedVolume: 'Цель не находится на смонтированном томе. Диск мог быть отключён.',
|
notMountedVolume: 'Цель не находится на смонтированном томе. Диск мог быть отключён.',
|
||||||
chooseFolder: 'Выбрать…',
|
chooseFolder: 'Выбрать…',
|
||||||
filenameTemplate: 'Шаблон имени файла',
|
|
||||||
targetDevice: 'Целевое устройство',
|
targetDevice: 'Целевое устройство',
|
||||||
|
schemaLabel: 'Схема именования',
|
||||||
|
schemaHint: 'Фиксированная схема для надёжной синхронизации между ОС. Плейлисты сохраняются как .m3u8 со ссылками на треки альбома — дубликатов на устройстве не будет.',
|
||||||
|
migrateButton: 'Реорганизовать существующие файлы…',
|
||||||
|
migrateTooltip: 'Переименовать существующие файлы на устройстве по новой схеме (со старого шаблона имён).',
|
||||||
|
migrateTitle: 'Реорганизация существующих файлов',
|
||||||
|
migrateLoading: 'Анализ существующих файлов…',
|
||||||
|
migrateNothingToDo: 'Все файлы уже соответствуют новой схеме — делать нечего.',
|
||||||
|
migrateNoTemplate: 'На устройстве не найден старый шаблон имён. Миграция применяется только если устройство синхронизировалось версией Psysonic с поддержкой пользовательских шаблонов.',
|
||||||
|
migrateFilesToRename: 'файлов будет переименовано',
|
||||||
|
migrateUnchanged: '{{n}} файлов уже находятся по правильному пути',
|
||||||
|
migrateCollisions: '{{n}} файлов невозможно переименовать автоматически (несколько треков ведут к одному пути). Они останутся нетронутыми — следующая синхронизация скачает их в нужное место.',
|
||||||
|
migratePreviewNote: 'Старый шаблон: {{tpl}}',
|
||||||
|
migrateExecuting: 'Переименование файлов…',
|
||||||
|
migrateSuccess: '{{n}} файлов успешно переименовано',
|
||||||
|
migrateFailed: '{{n}} переименований завершились ошибкой',
|
||||||
|
migrateShowErrors: 'Показать ошибки',
|
||||||
|
migrateStart: 'Начать переименование',
|
||||||
|
scanningDevice: 'Сканирование устройства…',
|
||||||
templateHint: 'Переменные: {artist}, {album}, {title}, {track_number}, {disc_number}, {year}',
|
templateHint: 'Переменные: {artist}, {album}, {title}, {track_number}, {disc_number}, {year}',
|
||||||
cleanupButton: 'Удалить файлы вне выборки',
|
cleanupButton: 'Удалить файлы вне выборки',
|
||||||
cleanupNothingToDelete: 'Нечего удалять — устройство уже синхронизировано.',
|
cleanupNothingToDelete: 'Нечего удалять — устройство уже синхронизировано.',
|
||||||
|
|||||||
@@ -5,13 +5,13 @@ export const home = {
|
|||||||
recentlyPlayed: 'Недавно проиграно',
|
recentlyPlayed: 'Недавно проиграно',
|
||||||
losslessAlbums: 'Lossless-альбомы',
|
losslessAlbums: 'Lossless-альбомы',
|
||||||
discover: 'Обзор',
|
discover: 'Обзор',
|
||||||
discoverSongs: 'Открыть треки',
|
discoverSongs: 'Откройте для себя',
|
||||||
loadMore: 'Ещё',
|
loadMore: 'Ещё',
|
||||||
discoverMore: 'Смотреть ещё',
|
discoverMore: 'Смотреть ещё',
|
||||||
discoverArtists: 'Исполнители',
|
discoverArtists: 'Исполнители',
|
||||||
discoverArtistsMore: 'Все исполнители',
|
discoverArtistsMore: 'Все исполнители',
|
||||||
becauseYouLike: 'Потому что вы слушали…',
|
becauseYouLike: 'Поскольку вы слушали…',
|
||||||
becauseYouLikeFor: 'Потому что вы слушали {{artist}}',
|
becauseYouLikeFor: 'Поскольку вы слушали {{artist}}',
|
||||||
similarTo: 'Похоже на {{artist}}',
|
similarTo: 'Похоже на {{artist}}',
|
||||||
becauseYouLikeTracks_one: '{{count}} трек',
|
becauseYouLikeTracks_one: '{{count}} трек',
|
||||||
becauseYouLikeTracks_few: '{{count}} трека',
|
becauseYouLikeTracks_few: '{{count}} трека',
|
||||||
@@ -19,5 +19,5 @@ export const home = {
|
|||||||
becauseYouLikeTracks_other: '{{count}} треков',
|
becauseYouLikeTracks_other: '{{count}} треков',
|
||||||
mainstageEmptyTitle: 'Раздел «Для вас» пуст',
|
mainstageEmptyTitle: 'Раздел «Для вас» пуст',
|
||||||
mainstageEmptyBody: 'Все разделы отключены. Включите разделы снова или скройте «Для вас» из боковой панели.',
|
mainstageEmptyBody: 'Все разделы отключены. Включите разделы снова или скройте «Для вас» из боковой панели.',
|
||||||
mainstageEmptyCta: 'Открыть Персонализацию',
|
mainstageEmptyCta: 'Открыть персонализацию',
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ export const orbit = {
|
|||||||
btnStarting: 'Запуск…',
|
btnStarting: 'Запуск…',
|
||||||
btnStart: 'Запустить Orbit',
|
btnStart: 'Запустить Orbit',
|
||||||
btnCopyAndStart: 'Копировать ссылку и запустить',
|
btnCopyAndStart: 'Копировать ссылку и запустить',
|
||||||
errNameRequired: 'Пожалуйста, дай сессии название.',
|
errNameRequired: 'Пожалуйста, дай название сессии.',
|
||||||
errStartFailed: 'Не удалось запустить.',
|
errStartFailed: 'Не удалось запустить.',
|
||||||
hostLabel: 'Хост: {{name}}',
|
hostLabel: 'Хост: {{name}}',
|
||||||
participantsTooltip: 'Участники',
|
participantsTooltip: 'Участники',
|
||||||
@@ -134,7 +134,7 @@ export const orbit = {
|
|||||||
settingAutoApprove: 'Автоматически принимать предложения',
|
settingAutoApprove: 'Автоматически принимать предложения',
|
||||||
settingAutoApproveHint: 'Предложения гостей сразу попадают в твою очередь. Выкл.: они остаются в списке сессии для последующего просмотра.',
|
settingAutoApproveHint: 'Предложения гостей сразу попадают в твою очередь. Выкл.: они остаются в списке сессии для последующего просмотра.',
|
||||||
settingAutoShuffle: 'Автоперемешивание',
|
settingAutoShuffle: 'Автоперемешивание',
|
||||||
settingAutoShuffleHint: 'Периодическое Fisher-Yates перемешивание предстоящей очереди. Выкл.: порядок меняется только при ручной перестановке.',
|
settingAutoShuffleHint: 'Периодически перемешивает предстоящую очередь. Выкл.: порядок меняется только при ручной перестановке.',
|
||||||
settingShuffleInterval: 'Перемешивать каждые',
|
settingShuffleInterval: 'Перемешивать каждые',
|
||||||
settingShuffleIntervalHint: 'Как часто предстоящая очередь перемешивается во время сессии.',
|
settingShuffleIntervalHint: 'Как часто предстоящая очередь перемешивается во время сессии.',
|
||||||
suggestBlockedMuted: 'Хост отключил тебе предложение треков на этой сессии.',
|
suggestBlockedMuted: 'Хост отключил тебе предложение треков на этой сессии.',
|
||||||
|
|||||||
@@ -59,8 +59,11 @@ export const player = {
|
|||||||
lyricsLoading: 'Загрузка текста…',
|
lyricsLoading: 'Загрузка текста…',
|
||||||
lyricsNotFound: 'Текст не найден',
|
lyricsNotFound: 'Текст не найден',
|
||||||
lyricsNoSources: 'Источники текста не выбраны — включите их в Настройки → Текст',
|
lyricsNoSources: 'Источники текста не выбраны — включите их в Настройки → Текст',
|
||||||
|
lyricsSourceServer: 'Источник: Сервер',
|
||||||
|
lyricsSourceLrclib: 'Источник: LRCLIB',
|
||||||
lyricsSourceNetease: 'Источник: Netease',
|
lyricsSourceNetease: 'Источник: Netease',
|
||||||
lyricsSourceLyricsplus: 'Источник: YouLyPlus',
|
lyricsSourceLyricsplus: 'Источник: YouLyPlus',
|
||||||
|
fsLyricsToggle: 'Текст в полноэкранном режиме',
|
||||||
showDuration: 'Показать длительность',
|
showDuration: 'Показать длительность',
|
||||||
showRemainingTime: 'Показать оставшееся время',
|
showRemainingTime: 'Показать оставшееся время',
|
||||||
};
|
};
|
||||||
|
|||||||
+15
-15
@@ -43,7 +43,7 @@ export const settings = {
|
|||||||
serverUsername: 'Логин',
|
serverUsername: 'Логин',
|
||||||
serverPassword: 'Пароль',
|
serverPassword: 'Пароль',
|
||||||
customHeadersTitle: 'Пользовательские HTTP-заголовки',
|
customHeadersTitle: 'Пользовательские HTTP-заголовки',
|
||||||
customHeadersHelp: 'Для reverse-proxy (Pangolin, Cloudflare Access). Отправляются только на ваш сервер — не сторонним сервисам.',
|
customHeadersHelp: 'Используются для reverse-proxy (Pangolin, Cloudflare Access). Отправляются только на ваш сервер — не сторонним сервисам.',
|
||||||
customHeadersNamePlaceholder: 'Имя заголовка',
|
customHeadersNamePlaceholder: 'Имя заголовка',
|
||||||
customHeadersValuePlaceholder: 'Значение заголовка',
|
customHeadersValuePlaceholder: 'Значение заголовка',
|
||||||
customHeadersAddRow: 'Добавить заголовок',
|
customHeadersAddRow: 'Добавить заголовок',
|
||||||
@@ -239,7 +239,7 @@ export const settings = {
|
|||||||
hiResTitle: 'Нативное воспроизведение Hi-Res',
|
hiResTitle: 'Нативное воспроизведение Hi-Res',
|
||||||
hiResEnabled: 'Включить нативное Hi-Res воспроизведение',
|
hiResEnabled: 'Включить нативное Hi-Res воспроизведение',
|
||||||
hiResDesc: "Воспроизводит каждый трек с его исходной частотой дискретизации вместо передискретизации всего в 44,1 кГц, переключая устройство вывода под частоту файла (88,2 кГц и выше). Включайте только если оборудование и сеть надёжно справляются с высокими частотами.",
|
hiResDesc: "Воспроизводит каждый трек с его исходной частотой дискретизации вместо передискретизации всего в 44,1 кГц, переключая устройство вывода под частоту файла (88,2 кГц и выше). Включайте только если оборудование и сеть надёжно справляются с высокими частотами.",
|
||||||
hiResCrossfadeResampleTitle: 'Частота сведения Crossfade / AutoDJ / Gapless',
|
hiResCrossfadeResampleTitle: 'Частота сведения при переходах',
|
||||||
hiResCrossfadeResampleDesc: 'Когда соседние треки имеют разную частоту дискретизации, обе стороны передискретизируются на эту частоту во время кроссфейда, AutoDJ и gapless-переходов.',
|
hiResCrossfadeResampleDesc: 'Когда соседние треки имеют разную частоту дискретизации, обе стороны передискретизируются на эту частоту во время кроссфейда, AutoDJ и gapless-переходов.',
|
||||||
hiResCrossfadeResample44: '44,1 кГц',
|
hiResCrossfadeResample44: '44,1 кГц',
|
||||||
hiResCrossfadeResample88: '88,2 кГц',
|
hiResCrossfadeResample88: '88,2 кГц',
|
||||||
@@ -277,10 +277,10 @@ export const settings = {
|
|||||||
linuxWebkitSmoothScroll: 'Плавное колесо (Linux)',
|
linuxWebkitSmoothScroll: 'Плавное колесо (Linux)',
|
||||||
linuxWebkitSmoothScrollDesc: 'Вкл — инерция. Выкл — по шагам, как в GTK.',
|
linuxWebkitSmoothScrollDesc: 'Вкл — инерция. Выкл — по шагам, как в GTK.',
|
||||||
linuxWebkitInputForceRepaint: 'Перерисовывать поля ввода при фокусе (Linux)',
|
linuxWebkitInputForceRepaint: 'Перерисовывать поля ввода при фокусе (Linux)',
|
||||||
linuxWebkitInputForceRepaintDesc: 'Обход проблемы WebKitGTK 2.50.x, когда текстовые поля зависают при клике. Иконки поиска кратко мигают при фокусе.',
|
linuxWebkitInputForceRepaintDesc: 'Исправляет зависание текстовых полей при клике. Иконки поиска могут кратко мигать при фокусе.',
|
||||||
linuxWaylandTextRender: 'Рендеринг текста Wayland (Linux)',
|
linuxWaylandTextRender: 'Рендеринг текста Wayland (Linux)',
|
||||||
linuxWaylandTextRenderDesc:
|
linuxWaylandTextRenderDesc:
|
||||||
'Сглаживание в интерфейсе меняется сразу. Политику ускорения WebKit (чёткий / GPU) сохраняем и применяем при следующем запуске — переключение на лету на части сборок зависает в WebKitGTK.',
|
'Сглаживание меняется сразу. Пресет ускорения (Чёткий / GPU) применяется после перезапуска приложения.',
|
||||||
linuxWaylandTextRenderBalanced: 'Сбалансированный',
|
linuxWaylandTextRenderBalanced: 'Сбалансированный',
|
||||||
linuxWaylandTextRenderSharp: 'Чёткий (меньше GPU)',
|
linuxWaylandTextRenderSharp: 'Чёткий (меньше GPU)',
|
||||||
linuxWaylandTextRenderGpu: 'С приоритетом GPU',
|
linuxWaylandTextRenderGpu: 'С приоритетом GPU',
|
||||||
@@ -417,7 +417,7 @@ export const settings = {
|
|||||||
analyticsStrategyClearError: 'Не удалось очистить анализ для удалённого сервера.',
|
analyticsStrategyClearError: 'Не удалось очистить анализ для удалённого сервера.',
|
||||||
analyticsStrategyProgressEmptyAfterFailed: '100% (0/0, треки помечены как проблемные)',
|
analyticsStrategyProgressEmptyAfterFailed: '100% (0/0, треки помечены как проблемные)',
|
||||||
analyticsFailedTracksOpenTitle: 'Проблемных треков: {{count}}',
|
analyticsFailedTracksOpenTitle: 'Проблемных треков: {{count}}',
|
||||||
analyticsFailedTracksTitle: 'Проблемные треки анализа — {{server}}',
|
analyticsFailedTracksTitle: 'Проблемные треки при анализе — {{server}}',
|
||||||
analyticsFailedTracksDesc: 'Эти треки многократно падали на decode/enrichment и исключены из фонового автоанализа.',
|
analyticsFailedTracksDesc: 'Эти треки многократно падали на decode/enrichment и исключены из фонового автоанализа.',
|
||||||
analyticsFailedTracksLoading: 'Загрузка списка проблемных треков…',
|
analyticsFailedTracksLoading: 'Загрузка списка проблемных треков…',
|
||||||
analyticsFailedTracksEmpty: 'Для этого сервера проблемных треков нет.',
|
analyticsFailedTracksEmpty: 'Для этого сервера проблемных треков нет.',
|
||||||
@@ -425,9 +425,9 @@ export const settings = {
|
|||||||
analyticsFailedTracksExport: 'Экспорт списка',
|
analyticsFailedTracksExport: 'Экспорт списка',
|
||||||
analyticsFailedTracksExportSuccess: 'Список проблемных треков экспортирован ({{count}}).',
|
analyticsFailedTracksExportSuccess: 'Список проблемных треков экспортирован ({{count}}).',
|
||||||
analyticsFailedTracksExportError: 'Не удалось экспортировать список проблемных треков.',
|
analyticsFailedTracksExportError: 'Не удалось экспортировать список проблемных треков.',
|
||||||
analyticsFailedTracksRescan: 'Рескан проблемных треков',
|
analyticsFailedTracksRescan: 'Повторное сканирование проблемных треков',
|
||||||
analyticsFailedTracksRescanSuccess: 'Рескан запланирован для {{count}} проблемных треков.',
|
analyticsFailedTracksRescanSuccess: 'Повторное сканирование запланировано для {{count}} проблемных треков.',
|
||||||
analyticsFailedTracksRescanError: 'Не удалось запустить рескан проблемных треков.',
|
analyticsFailedTracksRescanError: 'Не удалось запустить повторное сканирование проблемных треков.',
|
||||||
analyticsFailedTracksLoadError: 'Не удалось загрузить список проблемных треков.',
|
analyticsFailedTracksLoadError: 'Не удалось загрузить список проблемных треков.',
|
||||||
randomMixTitle: 'Чёрный список случайного микса',
|
randomMixTitle: 'Чёрный список случайного микса',
|
||||||
luckyMixMenuTitle: 'Показывать «Мне повезёт» в меню',
|
luckyMixMenuTitle: 'Показывать «Мне повезёт» в меню',
|
||||||
@@ -579,7 +579,7 @@ export const settings = {
|
|||||||
tabUsers: 'Пользователи',
|
tabUsers: 'Пользователи',
|
||||||
tabSystem: 'Система',
|
tabSystem: 'Система',
|
||||||
loggingTitle: 'Логирование',
|
loggingTitle: 'Логирование',
|
||||||
loggingModeDesc: 'Управляет подробностью логов backend в терминале.',
|
loggingModeDesc: 'Управляет подробностью логов бэкенда в терминале.',
|
||||||
loggingModeOff: 'Выключено',
|
loggingModeOff: 'Выключено',
|
||||||
loggingModeNormal: 'Обычное',
|
loggingModeNormal: 'Обычное',
|
||||||
loggingModeDebug: 'Дебаг',
|
loggingModeDebug: 'Дебаг',
|
||||||
@@ -701,7 +701,7 @@ export const settings = {
|
|||||||
autodjOverlapCapAuto: 'Авто',
|
autodjOverlapCapAuto: 'Авто',
|
||||||
autodjOverlapCapLimit: 'Лимит',
|
autodjOverlapCapLimit: 'Лимит',
|
||||||
autodjOverlapCapSecs: '{{n}} с',
|
autodjOverlapCapSecs: '{{n}} с',
|
||||||
gapless: 'Без пауз между треками',
|
gapless: 'Без пауз',
|
||||||
transitionsTitle: 'Переходы между треками',
|
transitionsTitle: 'Переходы между треками',
|
||||||
transitionsDesc: 'Как соединяются идущие подряд треки. Одновременно может быть активен только один режим.',
|
transitionsDesc: 'Как соединяются идущие подряд треки. Одновременно может быть активен только один режим.',
|
||||||
transitionOff: 'Выкл.',
|
transitionOff: 'Выкл.',
|
||||||
@@ -724,7 +724,7 @@ export const settings = {
|
|||||||
trackPreviewLocation_playlists: 'В плейлистах',
|
trackPreviewLocation_playlists: 'В плейлистах',
|
||||||
trackPreviewLocation_favorites: 'В избранном',
|
trackPreviewLocation_favorites: 'В избранном',
|
||||||
trackPreviewLocation_artist: 'В топ-треках исполнителя',
|
trackPreviewLocation_artist: 'В топ-треках исполнителя',
|
||||||
trackPreviewLocation_randomMix: 'В Random Mix',
|
trackPreviewLocation_randomMix: 'В случайном миксе',
|
||||||
nextTrackBufferingTitle: 'Буферизация',
|
nextTrackBufferingTitle: 'Буферизация',
|
||||||
infiniteQueue: 'Бесконечная очередь',
|
infiniteQueue: 'Бесконечная очередь',
|
||||||
infiniteQueueDesc: 'Подмешивать случайные треки, когда очередь закончится',
|
infiniteQueueDesc: 'Подмешивать случайные треки, когда очередь закончится',
|
||||||
@@ -766,12 +766,12 @@ export const settings = {
|
|||||||
themeSchedulerLightTheme: 'Светлая тема',
|
themeSchedulerLightTheme: 'Светлая тема',
|
||||||
themeSchedulerDarkTheme: 'Тёмная тема',
|
themeSchedulerDarkTheme: 'Тёмная тема',
|
||||||
themeSchedulerSystemRestartHint: 'Изменение светлой/тёмной настройки системы вступит в силу после перезапуска приложения.',
|
themeSchedulerSystemRestartHint: 'Изменение светлой/тёмной настройки системы вступит в силу после перезапуска приложения.',
|
||||||
visualOptionsTitle: 'Визуальные Настройки',
|
visualOptionsTitle: 'Визуальные настройки',
|
||||||
coverArtBackground: 'Фон Обложки',
|
coverArtBackground: 'Фон обложки',
|
||||||
coverArtBackgroundSub: 'Показывать размытую обложку как фон в заголовках альбомов и плейлистов',
|
coverArtBackgroundSub: 'Показывать размытую обложку как фон в заголовках альбомов и плейлистов',
|
||||||
playlistCoverPhoto: 'Обложка Плейлиста',
|
playlistCoverPhoto: 'Обложка плейлиста',
|
||||||
playlistCoverPhotoSub: 'Показывать сетку обложек в детальном виде плейлиста',
|
playlistCoverPhotoSub: 'Показывать сетку обложек в детальном виде плейлиста',
|
||||||
showBitrate: 'Показывать Битрейт',
|
showBitrate: 'Показывать битрейт',
|
||||||
showBitrateSub: 'Отображать битрейт аудио в списках треков',
|
showBitrateSub: 'Отображать битрейт аудио в списках треков',
|
||||||
floatingPlayerBar: 'Плавающая панель плеера',
|
floatingPlayerBar: 'Плавающая панель плеера',
|
||||||
floatingPlayerBarSub: 'Держать панель плеера плавающей над содержимым',
|
floatingPlayerBarSub: 'Держать панель плеера плавающей над содержимым',
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export const sidebar = {
|
|||||||
genres: 'Жанры',
|
genres: 'Жанры',
|
||||||
tracks: 'Треки',
|
tracks: 'Треки',
|
||||||
playlists: 'Плейлисты',
|
playlists: 'Плейлисты',
|
||||||
smartPlaylists: 'Смарт-плейлисты',
|
smartPlaylists: 'Умные плейлисты',
|
||||||
mostPlayed: 'Популярное',
|
mostPlayed: 'Популярное',
|
||||||
losslessAlbums: 'Lossless',
|
losslessAlbums: 'Lossless',
|
||||||
radio: 'Онлайн-радио',
|
radio: 'Онлайн-радио',
|
||||||
|
|||||||
@@ -84,4 +84,22 @@ export const statistics = {
|
|||||||
playerListenedMinDecimal: '{{minutes}} мин',
|
playerListenedMinDecimal: '{{minutes}} мин',
|
||||||
completionFull: 'Прослушано',
|
completionFull: 'Прослушано',
|
||||||
completionPartial: 'Частично',
|
completionPartial: 'Частично',
|
||||||
|
exportShare: 'Поделиться',
|
||||||
|
exportTitle: 'Поделиться топ-альбомами',
|
||||||
|
exportSubtitle: 'Создайте изображение с вашими самыми прослушиваемыми альбомами.',
|
||||||
|
exportFormat: 'Формат',
|
||||||
|
exportFormatStory: 'История',
|
||||||
|
exportFormatSquare: 'Квадрат',
|
||||||
|
exportFormatTwitter: 'Twitter Card',
|
||||||
|
exportGrid: 'Сетка',
|
||||||
|
exportGridLabel: '{{n}}×{{n}}',
|
||||||
|
exportPreview: 'Предпросмотр',
|
||||||
|
exportGenerate: 'Создать',
|
||||||
|
exportSave: 'Сохранить изображение…',
|
||||||
|
exportCancel: 'Отмена',
|
||||||
|
exportFooterLabel: 'Топ альбомов',
|
||||||
|
exportNotEnough: 'Нужно не менее {{count}} альбомов в библиотеке для сетки {{n}}×{{n}}.',
|
||||||
|
exportSaving: 'Сохранение…',
|
||||||
|
exportSaved: 'Сохранено.',
|
||||||
|
exportSaveFailed: 'Не удалось сохранить изображение.',
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
export const tracks = {
|
export const tracks = {
|
||||||
title: 'Треки',
|
title: 'Треки',
|
||||||
subtitle: 'Листать. Искать. Открывать.',
|
subtitle: 'Листай. Ищи. Открывай.',
|
||||||
heroEyebrow: 'Трек момента',
|
heroEyebrow: 'Рекомендуем',
|
||||||
heroReroll: 'Выбрать другой',
|
heroReroll: 'Выбрать другой',
|
||||||
playSong: 'Воспроизвести',
|
playSong: 'Воспроизвести',
|
||||||
enqueueSong: 'В очередь',
|
enqueueSong: 'В очередь',
|
||||||
|
|||||||
Reference in New Issue
Block a user