diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json
index e91b3527a..54f3daff5 100644
--- a/src/i18n/locales/en.json
+++ b/src/i18n/locales/en.json
@@ -147,6 +147,7 @@
"smartPlaylist": "smart $t(entity.playlist_one)",
"track_one": "track",
"track_other": "tracks",
+ "song_many": "{{ count }} songs",
"trackWithCount_one": "{{count}} track",
"trackWithCount_other": "{{count}} tracks"
},
@@ -315,6 +316,14 @@
"settings": "$t(common.setting_other)",
"version": "version {{version}}"
},
+ "manageServers": {
+ "title": "manage servers",
+ "serverDetails": "server details",
+ "url": "URL",
+ "username": "username",
+ "editServerDetailsTooltip": "edit server details",
+ "removeServer": "remove server"
+ },
"contextMenu": {
"addFavorite": "$t(action.addToFavorites)",
"addLast": "$t(player.addLast)",
@@ -345,6 +354,7 @@
"dynamicIsImage": "enable background image",
"followCurrentLyric": "follow current lyric",
"lyricAlignment": "lyric alignment",
+ "lyricOffset": "lyrics offset (ms)",
"lyricGap": "lyric gap",
"lyricSize": "lyric size",
"opacity": "opacity",
@@ -357,7 +367,8 @@
"lyrics": "lyrics",
"related": "related",
"upNext": "up next",
- "visualizer": "visualizer"
+ "visualizer": "visualizer",
+ "noLyrics": "no lyrics found"
},
"genreList": {
"showAlbums": "show $t(entity.genre_one) $t(entity.album_other)",
@@ -449,7 +460,8 @@
"stop": "stop",
"toggleFullscreenPlayer": "toggle fullscreen player",
"unfavorite": "unfavorite",
- "pause": "pause"
+ "pause": "pause",
+ "viewQueue": "view queue"
},
"setting": {
"accentColor": "accent color",
@@ -706,6 +718,7 @@
"config": {
"general": {
"autoFitColumns": "auto fit columns",
+ "followCurrentSong": "follow current song",
"displayType": "display type",
"gap": "$t(common.gap)",
"itemGap": "item gap (px)",
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json
index cb885f799..c1651b45c 100644
--- a/src/i18n/locales/ru.json
+++ b/src/i18n/locales/ru.json
@@ -7,8 +7,8 @@
"addToFavorites": "добавить в $t(entity.favorite_other)",
"addToPlaylist": "добавить в $t(entity.playlist_one)",
"createPlaylist": "создать $t(entity.playlist_one)",
- "removeFromPlaylist": "удалить из $t(entity.playlist_one)",
- "viewPlaylists": "просмотреть $t(entity.playlist_other)",
+ "removeFromPlaylist": "удалить из $t(entity.playlist_few)",
+ "viewPlaylists": "показать $t(entity.playlist_other)",
"refresh": "$t(common.refresh)",
"deletePlaylist": "удалить $t(entity.playlist_one)",
"removeFromQueue": "удалить из очереди",
@@ -16,7 +16,7 @@
"moveToBottom": "вниз",
"setRating": "оценить",
"toggleSmartPlaylistEditor": "вкл./откл. редактор $t(entity.smartPlaylist)",
- "removeFromFavorites": "удалить из $t(entity.favorite_other)",
+ "removeFromFavorites": "удалить из $t(entity.favorite_few)",
"openIn": {
"lastfm": "открыть на Last.fm",
"musicbrainz": "открыть на MusicBrainz"
@@ -38,15 +38,15 @@
"currentSong": "текущий $t(entity.track_one)",
"collapse": "закрыть",
"trackNumber": "трек",
- "descending": "убывание",
+ "descending": "по убыванию",
"add": "добавить",
"gap": "промежуток",
- "ascending": "возрастанию",
+ "ascending": "по возрастанию",
"dismiss": "отклонить",
"year": "год",
- "manage": "управлять",
+ "manage": "управление",
"limit": "ограничение",
- "minimize": "минимизировать",
+ "minimize": "свернуть",
"modified": "изменено",
"duration": "длительность",
"name": "имя",
@@ -66,6 +66,8 @@
"cancel": "отменить",
"forceRestartRequired": "перезапустите приложение, чтобы применить изменения... закройте уведомление для перезапуска",
"setting": "настройка",
+ "setting_one": "настройка",
+ "setting_other": "настройки",
"version": "версия",
"title": "название",
"filter_one": "фильтр",
@@ -78,11 +80,11 @@
"action_one": "действие",
"action_few": "действия",
"action_many": "действий",
- "playerMustBePaused": "воспроизведение должно быть остановлено",
+ "playerMustBePaused": "необходимо остановить воспроизведение",
"confirm": "подтвердить",
- "resetToDefault": "по умолчанию",
- "home": "главная страница",
- "comingSoon": "скоро будет…",
+ "resetToDefault": "сбросить настройки",
+ "home": "главная",
+ "comingSoon": "скоро...",
"reset": "сбросить",
"channel_one": "канал",
"channel_few": "канала",
@@ -92,14 +94,14 @@
"menu": "меню",
"restartRequired": "необходим перезапуск приложения",
"previousSong": "предыдущий $t(entity.track_one)",
- "noResultsFromQuery": "нет результатов",
+ "noResultsFromQuery": "ничего не найдено",
"quit": "выйти",
- "expand": "расширить",
+ "expand": "раскрыть",
"search": "поиск",
"saveAs": "сохранить как",
"disc": "диск",
"yes": "да",
- "random": "случайный",
+ "random": "случайно",
"size": "размер",
"biography": "биография",
"note": "заметка",
@@ -114,9 +116,11 @@
"entity": {
"album_one": "альбом",
"album_few": "альбома",
+ "album_other": "альбомы",
"album_many": "альбомов",
"genre_one": "жанр",
"genre_few": "жанра",
+ "genre_other": "жанры",
"genre_many": "жанров",
"playlistWithCount_one": "{{count}} плейлист",
"playlistWithCount_few": "{{count}} плейлиста",
@@ -124,18 +128,26 @@
"playlist_one": "плейлист",
"playlist_few": "плейлиста",
"playlist_many": "плейлистов",
+ "playlist_other": "плейлисты",
+ "play": "{{count}} прослушиваний",
+ "play_one": "{{count}} прослушивание",
+ "play_other": "{{count}} прослушиваний",
"artist_one": "автор",
"artist_few": "автора",
- "artist_many": "авторов",
+ "artist_other": "исполнители",
+ "artist_many": "исполнителей",
"folderWithCount_one": "{{count}} папка",
"folderWithCount_few": "{{count}} папки",
"folderWithCount_many": "{{count}} папок",
- "albumArtist_one": "автор альбома",
- "albumArtist_few": "автора альбома",
- "albumArtist_many": "авторов альбома",
+ "albumArtist_one": "исполнитель альбома",
+ "albumArtist_few": "исполнители альбома",
+ "albumArtist_other": "исполнители альбомов",
+ "albumArtist_many": "исполнителей альбома",
"track_one": "трек",
"track_few": "трека",
"track_many": "треков",
+ "track_other": "треки",
+ "song_many": "{{ count }} композиций",
"albumArtistCount_one": "{{count}} автор альбома",
"albumArtistCount_few": "{{count}} автора альбома",
"albumArtistCount_many": "{{count}} авторов альбома",
@@ -145,24 +157,27 @@
"favorite_one": "любимый",
"favorite_few": "любимых",
"favorite_many": "любимые",
+ "favorite_other": "любимые",
"artistWithCount_one": "{{count}} автор",
"artistWithCount_few": "{{count}} автора",
"artistWithCount_many": "{{count}} авторов",
"folder_one": "папка",
"folder_few": "папки",
"folder_many": "папок",
+ "folder_other": "папки",
"smartPlaylist": "умный $t(entity.playlist_one)",
"genreWithCount_one": "{{count}} жанр",
"genreWithCount_few": "{{count}} жанра",
"genreWithCount_many": "{{count}} жанров",
"trackWithCount_one": "{{count}} трек",
"trackWithCount_few": "{{count}} трека",
- "trackWithCount_many": "{{count}} треков"
+ "trackWithCount_many": "{{count}} треков",
+ "trackWithCount_other": "{{count}} треков"
},
"table": {
"config": {
"view": {
- "card": "карта",
+ "card": "карточки",
"table": "таблица",
"poster": "постер"
},
@@ -171,8 +186,9 @@
"gap": "$t(common.gap)",
"tableColumns": "столбцы таблицы",
"autoFitColumns": "автоматически расставить столбцы",
+ "followCurrentSong": "следовать за исполняемым треком",
"size": "$t(common.size)",
- "itemSize": "рамер элементов (px)",
+ "itemSize": "размер элементов (px)",
"itemGap": "отступ между элементами (px)"
},
"label": {
@@ -185,7 +201,7 @@
"bpm": "$t(common.bpm)",
"lastPlayed": "последний",
"trackNumber": "номер трека",
- "rowIndex": "индекс ряда",
+ "rowIndex": "номер строки",
"rating": "$t(common.rating)",
"artist": "$t(entity.artist_one)",
"album": "$t(entity.album_one)",
@@ -234,25 +250,25 @@
}
},
"error": {
- "remotePortWarning": "перезапустить сервер для применения нового порта",
+ "remotePortWarning": "необходимо перезапустить сервер для применения нового порта",
"systemFontError": "произошла ошибка при попытке получить системные шрифты",
- "playbackError": "произошла ошибка при попытке проиграть медиа",
+ "playbackError": "произошла ошибка при попытке проигрывания медиа",
"endpointNotImplementedError": "запрос {{endpoint}} не реализован для {{serverType}}",
"remotePortError": "произошла ошибка при попытке установить порт удаленного сервера",
- "serverRequired": "необходим сервер",
- "authenticationFailed": "авторизация завершилась с ошибкой",
+ "serverRequired": "сервер не выбран",
+ "authenticationFailed": "не удалось авторизироваться",
"apiRouteError": "невозможно выполнить запрос",
"genericError": "произошла ошибка",
- "credentialsRequired": "необходимы учётные данные",
+ "credentialsRequired": "введите данные для входа",
"sessionExpiredError": "ваш сеанс истёк",
- "remoteEnableError": "ошибка произошла при попытке $t(common.enable) удалённый сервер",
+ "remoteEnableError": "произошла ошибка при попытке $t(common.enable) удалённый сервер",
"localFontAccessDenied": "не получилось получить доступ к шрифтам",
"serverNotSelectedError": "не выбран сервер",
- "remoteDisableError": "ошибка произошла при попытке $t(common.disable) удалённый сервер",
+ "remoteDisableError": "произошла ошибка при попытке $t(common.disable) удалённый сервер",
"mpvRequired": "необходим MPV",
"audioDeviceFetchError": "произошла ошибка с аудиоустройством",
"invalidServer": "недействительный сервер",
- "loginRateError": "слишком много попыток входа, пожалуйста, попробуйте ещё раз через несколько секунд",
+ "loginRateError": "превышено максимальное количество попыток входа, пожалуйста, попробуйте ещё раз через несколько секунд",
"openError": "не удалось открыть файл",
"badAlbum": "вы видите эту страницу из-за того, что эта песня не входит в альбом. скорее всего, вы видите эту ошибку, так как песня находится в корневой директории папки с музыкой. jellyfin группирует треки только по папкам.",
"networkError": "возникла ошибка сети"
@@ -265,48 +281,49 @@
"communityRating": "рейтинг сообщества",
"favorited": "любимый",
"albumArtist": "$t(entity.albumArtist_one)",
- "isFavorited": "любимый",
+ "isFavorited": "любимые",
"bpm": "уд./мин.",
"disc": "диск",
"biography": "биография",
"artist": "$t(entity.artist_one)",
"duration": "длительность",
- "fromYear": "из года",
+ "fromYear": "год",
"criticRating": "рейтинг критиков",
- "mostPlayed": "самое воспроизводимое",
+ "mostPlayed": "слушают чаще всего",
"comment": "комментировать",
- "playCount": "кол-во воспроизведений",
- "recentlyUpdated": "недавно обновлено",
+ "playCount": "количество воспроизведений",
+ "recentlyUpdated": "обновленные недавно",
"channels": "$t(common.channel_other)",
- "recentlyPlayed": "недавно проиграно",
+ "recentlyPlayed": "проигрывались недавно",
"owner": "$t(common.owner)",
"title": "название",
"rating": "рейтинг",
"search": "поиск",
"genre": "$t(entity.genre_one)",
- "recentlyAdded": "недавно добавлено",
+ "recentlyAdded": "недавно добавленные",
"note": "заметка",
"name": "название",
"releaseDate": "дата выхода",
- "albumCount": "кол-во $t(entity.album_other)",
+ "albumCount": "количество $t(entity.album_many)",
"path": "путь",
- "isRecentlyPlayed": "недавно проигрывалась",
+ "isRecentlyPlayed": "недавно проигрывался",
"releaseYear": "год выхода",
"id": "№",
- "songCount": "кол-во песен",
+ "songCount": "количество песен",
"isPublic": "публичный",
- "random": "случайный",
+ "random": "случайно",
"lastPlayed": "последний раз проигрывалась",
"toYear": "до года",
"album": "$t(entity.album_one)",
"trackNumber": "трек"
},
"player": {
- "repeat_all": "повтор всех",
+ "repeat_all": "повторять все",
"stop": "остановить",
- "repeat": "повтор",
+ "repeat": "повторять текущий",
"queue_remove": "удалить выбранное",
- "playRandom": "случайные песни",
+ "playRandom": "играть случайные песни",
+ "playSimilarSongs": "играть похожие песни",
"skip": "пропустить",
"previous": "предыдущий",
"toggleFullscreenPlayer": "включить полноэкранный режим",
@@ -316,10 +333,10 @@
"shuffle": "перемешать",
"playbackFetchNoResults": "песни не найдены",
"playbackFetchInProgress": "загрузка песен..",
- "addNext": "добавить следующий",
+ "addNext": "воспроизвести следующим",
"playbackSpeed": "скорость воспроизведения",
- "playbackFetchCancel": "это занимает некоторое время... закрыть уведомление для отмены",
- "play": "прослушать",
+ "playbackFetchCancel": "пожалуйста, подождите немного... закройте уведомление для отмены",
+ "play": "играть",
"repeat_off": "повтор выключен",
"pause": "пауза",
"queue_clear": "очистить очередь",
@@ -328,13 +345,14 @@
"queue_moveToTop": "переместить выделенное вниз",
"queue_moveToBottom": "переместить выделенное вверх",
"shuffle_off": "перемешивание выключено",
- "addLast": "добавить последний",
+ "addLast": "воспроизвести после всех",
"mute": "отключить звук",
- "skip_forward": "вперёд"
+ "skip_forward": "вперёд",
+ "viewQueue": "показать очередь"
},
"page": {
"sidebar": {
- "nowPlaying": "Cейчас проигрывается",
+ "nowPlaying": "сейчас играет",
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)",
"tracks": "$t(entity.track_other)",
@@ -354,30 +372,41 @@
"followCurrentLyric": "следовать за текущими словами песни",
"opacity": "непрозрачность",
"lyricSize": "размер слов",
- "showLyricProvider": "показать провайдера слов",
- "unsynchronized": "несинхронизировано",
+ "showLyricProvider": "показать источник слов",
+ "unsynchronized": "не синхронизировано",
"lyricAlignment": "выравнивание слов песни",
+ "lyricOffset": "задержка слов (мсек)",
"useImageAspectRatio": "использовать соотношение сторон изображения",
"lyricGap": "пробел между словами",
"dynamicIsImage": "включить фоновое изображение",
"dynamicImageBlur": "сила размытия изображения"
},
- "upNext": "следующее",
- "lyrics": "слова песни",
- "related": "схожие"
+ "upNext": "играет",
+ "lyrics": "слова",
+ "related": "похожие",
+ "visualizer": "визуализатор",
+ "noLyrics": "слова для песни не найдены"
},
"appMenu": {
- "selectServer": "выбрать сервер",
+ "selectServer": "список серверов",
"version": "версия {{version}}",
"settings": "$t(common.setting_other)",
- "manageServers": "настроить список серверов",
- "expandSidebar": "развернуть",
+ "manageServers": "редактировать список серверов",
+ "expandSidebar": "развернуть боковую панель",
"collapseSidebar": "Скрыть боковую панель",
"openBrowserDevtools": "открыть инструменты разработчика",
"quit": "$t(common.quit)",
"goBack": "назад",
"goForward": "вперёд"
},
+ "manageServers": {
+ "title": "сервера",
+ "serverDetails": "информация о сервере",
+ "url": "адрес",
+ "username": "пользователь",
+ "editServerDetailsTooltip": "изменить настройки сервера",
+ "removeServer": "удалить сервер"
+ },
"contextMenu": {
"addToPlaylist": "$t(action.addToPlaylist)",
"addToFavorites": "$t(action.addToFavorites)",
@@ -390,6 +419,7 @@
"removeFromFavorites": "$t(action.removeFromFavorites)",
"addNext": "$t(player.addNext)",
"deselectAll": "$t(action.deselectAll)",
+ "download": "скачать",
"addLast": "$t(player.addLast)",
"addFavorite": "$t(action.addToFavorites)",
"play": "$t(player.play)",
@@ -399,11 +429,11 @@
"shareItem": "поделиться"
},
"home": {
- "mostPlayed": "наибольшее кол-во воспроизведений",
+ "mostPlayed": "слушают чаще всего",
"newlyAdded": "недавно добавленные релизы",
"title": "$t(common.home)",
- "explore": "изучите вашу медиатеку",
- "recentlyPlayed": "недавно прослушано"
+ "explore": "откройте новое",
+ "recentlyPlayed": "игралось недавно"
},
"albumDetail": {
"moreFromArtist": "больше от $t(entity.artist_one)",
@@ -420,8 +450,8 @@
},
"genreList": {
"title": "$t(entity.genre_other)",
- "showAlbums": "показать $t(entity.genre_one) $t(entity.album_other)",
- "showTracks": "показать $t(entity.genre_one) $t(entity.track_other)"
+ "showAlbums": "показать $t(entity.genre_one) $t(entity.album_many)",
+ "showTracks": "показать $t(entity.genre_one) $t(entity.track_many)"
},
"trackList": {
"title": "$t(entity.track_other)",
@@ -435,6 +465,9 @@
},
"title": "комманды"
},
+ "playlist": {
+ "reorder": "сортировка доступна только по ID"
+ },
"playlistList": {
"title": "$t(entity.playlist_other)"
},
@@ -448,7 +481,7 @@
"viewAll": "посмотреть всё",
"appearsOn": "появляется в",
"viewDiscography": "посмотреть дискографию",
- "relatedArtists": "похож на $t(entity.artist_other)",
+ "relatedArtists": "похож на $t(entity.artist_many)",
"viewAllTracks": "посмотреть все $t(entity.track_other)",
"recentReleases": "недавние релизы",
"about": "О {{artist}}",
@@ -464,7 +497,7 @@
"deletePlaylist": {
"title": "удалить $t(entity.playlist_one)",
"success": "$t(entity.playlist_one) успешно удалён",
- "input_confirm": "напишите название $t(entity.playlist_one)а для подтверждения"
+ "input_confirm": "напишите название $t(entity.playlist_few) для подтверждения"
},
"createPlaylist": {
"input_description": "$t(common.description)",
@@ -477,24 +510,24 @@
"addServer": {
"title": "добавить сервер",
"input_username": "пользователь",
- "input_url": "url",
+ "input_url": "адрес",
"input_password": "пароль",
"input_legacyAuthentication": "включить старую авторизацию",
"input_name": "название сервера",
- "success": "сервер добавлен успешно",
+ "success": "сервер успешно добавлен",
"input_savePassword": "сохранить пароль",
- "ignoreSsl": "игнорирование ssl ($t(common.restartRequired))",
- "ignoreCors": "игнорирование корсетов ($t(common.restartRequired))",
- "error_savePassword": "произошла ошибка во время попытки сохранения пароля"
+ "ignoreSsl": "игнорировать ssl ($t(common.restartRequired))",
+ "ignoreCors": "игнорировать CORS ($t(common.restartRequired))",
+ "error_savePassword": "произошла ошибка при сохранении пароля"
},
"addToPlaylist": {
"success": "добавлено: $t(entity.trackWithCount, {\"count\": {{message}} }) в $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "добавить в $t(entity.playlist_one)",
- "input_skipDuplicates": "пропустить дубликаты",
+ "input_skipDuplicates": "не добавлять дубликаты",
"input_playlists": "$t(entity.playlist_other)"
},
"updateServer": {
- "title": "обновить сервер",
+ "title": "обновление сервера",
"success": "сервер успешно обновлён"
},
"queryEditor": {
@@ -512,7 +545,7 @@
"shareItem": {
"success": "ссылка скопирована в буфер обмена (нажмите здесь, чтобы открыть)",
"expireInvalid": "время истечения срока действия должно быть в будущем",
- "createFailed": "не удалось создать ссылку для общего доступа (общий доступ включён?)",
+ "createFailed": "не удалось создать ссылку для общего доступа (проверьте, включен ли общий доступ?)",
"allowDownloading": "разрешить скачивание",
"setExpiration": "установить срок действия",
"description": "описание"
@@ -521,16 +554,22 @@
"setting": {
"accentColor": "цвет акцента",
"accentColor_description": "устанавливает цвет акцента для приложения",
+ "albumBackground": "фоновое изображение альбомов",
+ "albumBackground_description": "добавляет фоновое изображение для страниц альбомов, содержащих обложку",
+ "albumBackgroundBlur": "размытие фонового изображения альбома",
+ "albumBackgroundBlur_description": "определяет степень размытия фонового изображения на странице альбомов",
"applicationHotkeys": "горячие клавиши приложения",
"crossfadeStyle_description": "выберите вид эффекта crossfade для аудиоплеера",
+ "customCssEnable": "использовать кастомные css",
+ "customCssEnable_description": "разрешить использование кастомных css.",
"enableRemote_description": "включает сервер удалённого управления для управления воспроизведением с помощью других устройств",
"fontType_optionSystem": "системный",
"mpvExecutablePath_description": "укажите папку, в которой находится исполняющий файл аудиоплеера MPV. если оставить пустым, будет использоваться путь по умолчанию",
- "crossfadeStyle": "Вид эффекта crossfade",
+ "crossfadeStyle": "вид эффекта crossfade",
"fontType_optionBuiltIn": "встроенный",
- "disableLibraryUpdateOnStartup": "Отключить проверку новых версий при запуске приложения",
- "minimizeToTray_description": "Сворачивать приложение в панель уведомлений",
- "audioPlayer_description": "Укажите - какой аудиоплеер использовать для воспроизведения",
+ "disableLibraryUpdateOnStartup": "отключить проверку новых версий при запуске приложения",
+ "minimizeToTray_description": "сворачивать приложение в панель уведомлений",
+ "audioPlayer_description": "укажите, какой аудиоплеер использовать для воспроизведения",
"disableAutomaticUpdates": "отключить проверку обновлений",
"exitToTray_description": "При закрытии приложения - оно останется в панели уведомлений",
"fontType_optionCustom": "пользовательский",
@@ -544,7 +583,7 @@
"crossfadeDuration": "Длительность эффекта crossfade",
"audioPlayer": "Аудиоплеер",
"minimizeToTray": "сворачивать в панель уведомлений",
- "font_description": "Выберите - какой шрифт использовать в приложении",
+ "font_description": "Выберите, какой шрифт использовать в приложении",
"remoteUsername": "имя пользователя для доступа к серверу удалённого управления",
"buttonSize_description": "размер кнопок в панели управления воспроизведением",
"clearCache": "очистить кэш браузера",
@@ -554,11 +593,11 @@
"buttonSize": "размер кнопок панели управления воспроизведением",
"hotkey_volumeDown": "уменьшить громкость",
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
- "theme_description": "устанавливает тему, которая будет использоваться приложением",
+ "theme_description": "устанавливает тему, которая будет использоваться в приложении",
"passwordStore": "хранилище паролей/секретов",
"sidebarPlaylistList": "список плейлистов в боковой панели",
"windowBarStyle_description": "выберите стиль заголовка окна",
- "followLyric": "следовать тексту трека",
+ "followLyric": "следовать за текстом трека",
"volumeWheelStep": "шаг регулировки громкости колёсиком мыши",
"windowBarStyle": "стиль заголовка окна",
"hotkey_zoomOut": "уменьшить масштаб",
@@ -567,7 +606,7 @@
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"replayGainMode_optionNone": "$t(common.none)",
"replayGainMode_optionTrack": "$t(entity.track_one)",
- "clearQueryCache_description": "\"мягкая очистка\" feishin. при выполнении обновляются плейлисты, метаданные треков, но сохранённые тексты треков сбрасываются. настройки, учётные данные и кэшированные изображения сохраняются",
+ "clearQueryCache_description": "так называемая \"мягкая очистка\" feishin: обновляются плейлисты, метаданные треков, но сохранённые тексты треков сбрасываются. настройки, учётные данные и кэшированные изображения сохраняются",
"hotkey_favoriteCurrentSong": "добавить $t(common.currentSong) в избранное",
"genreBehavior": "поведения страницы жанров",
"globalMediaHotkeys": "глобальные мультимедийные горячие клавиши",
@@ -576,11 +615,11 @@
"hotkey_globalSearch": "глобальный поиск",
"hotkey_playbackNext": "следующий трек",
"hotkey_playbackPause": "пауза",
- "hotkey_playbackPlay": "прослушать",
- "hotkey_playbackPlayPause": "прослушать / пауза",
+ "hotkey_playbackPlay": "играть",
+ "hotkey_playbackPlayPause": "играть / пауза",
"hotkey_playbackPrevious": "предыдущий трек",
"hotkey_playbackStop": "остановить",
- "hotkey_rate0": "очистить оценку",
+ "hotkey_rate0": "убрать оценку",
"hotkey_rate1": "оценить в 1 звезду",
"hotkey_rate2": "оценить в 2 звезды",
"hotkey_rate3": "оценить в 3 звезды",
@@ -609,6 +648,8 @@
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"playButtonBehavior_optionPlay": "$t(player.play)",
"playerAlbumArtResolution_description": "разрешение большой версии обложки альбома в проигрывателе. при большем разрешении она выглядит более четкой, но может замедлить загрузку. по умолчанию равно 0 - устанавливает разрешение автоматически",
+ "playerbarOpenDrawer": "полноэкранный переключатель по панели проигрывателя",
+ "playerbarOpenDrawer_description": "позволяет перейти в полноэкранный режим воспроизведения нажатием на панель проигрывателя",
"remotePort": "порт сервера удалённого управления",
"remotePort_description": "устанавливает порт для сервера удалённого управления",
"replayGainClipping": "{{ReplayGain}} клиппинг",
@@ -622,11 +663,21 @@
"showSkipButtons": "показывать кнопки перемотки",
"showSkipButtons_description": "показывать или скрывать кнопки перемотки на панели управления воспроизведением",
"sidebarPlaylistList_description": "показать или скрыть список плейлистов на боковой панели",
+ "sidePlayQueueStyle": "вид отображения боковой очереди",
+ "sidePlayQueueStyle_description": "определяет вид отображения боковой очереди",
+ "sidePlayQueueStyle_optionAttached": "закрепленная",
+ "sidePlayQueueStyle_optionDetached": "плавающая",
"skipDuration": "время перемотки",
"skipDuration_description": "задает время перемотки при использовании кнопок перемотки на панели проигрывателя",
"useSystemTheme": "использовать тему системы",
"themeLight": "тема (светлая)",
"themeLight_description": "устанавливает светлую тему приложения",
+ "transcodeNote": "эффект применяется после 1 (для веб) - 2 (для mpv) песни",
+ "transcode": "включить транскодинг",
+ "transcode_description": "активирует транскодинг в другие форматы",
+ "transcodeBitrate": "битрейт транскодинга",
+ "transcodeBitrate_description": "выберите битрейт транскодинга. 0 - автоматическое определение сервером",
+ "transcodeFormat": "формат транкодинга",
"useSystemTheme_description": "использует тему, заданную в системе (светлую/тёмную)",
"zoom": "процент масштабирования",
"zoom_description": "устанавливает процент масштабирования приложения",
@@ -634,13 +685,15 @@
"genreBehavior_description": "определяет, что отобразится при открытии на жанр — список треков или альбомов",
"globalMediaHotkeys_description": "включить или отключить использование системных мультимедийных горячих клавиш для управления воспроизведением",
"homeConfiguration_description": "позволяет настроить видимость и порядок элементов на домашней странице",
+ "homeFeature": "улучшенная карусель на главной",
+ "homeFeature_description": "определяет, показывать ли улучшенную карусель на главной странице",
"hotkey_toggleQueue": "показать/скрыть очередь воспроизведения",
"imageAspectRatio": "использовать оригинальное соотношение сторон обложки",
"imageAspectRatio_description": "если эта опция включена, обложки будут отображаться в соответствии с их собственным соотношением сторон. для обложек не 1:1 оставшееся пространство будет пустым",
"minimumScrobblePercentage": "минимальное время для скробблинга (в процентах)",
"playbackStyle": "стиль воспроизведения",
"playerAlbumArtResolution": "разрешение обложки альбома",
- "remotePassword_description": "задает пароль для сервера удалённого управления. По умолчанию эти учетные данные передаются небезопасным способом, поэтому следует использовать уникальный пароль, который вам не важен",
+ "remotePassword_description": "задает пароль для сервера удалённого управления. По умолчанию эти учетные данные передаются небезопасным способом, поэтому следует использовать уникальный пароль, который вам неважен",
"replayGainClipping_description": "Предотвращение клиппинга, вызванного {{ReplayGain}}, путём автоматического снижения усиления",
"replayGainFallback_description": "усиление в db для применения, если у файла нет тегов {{ReplayGain}}",
"replayGainMode_description": "регулировать усиление громкости в соответствии со значениями {{ReplayGain}}, хранящимися в метаданных файла",
@@ -658,8 +711,10 @@
"startMinimized": "запуск в свёрнутом режиме",
"themeDark_description": "устанавливает тёмную тему приложения",
"hotkey_volumeMute": "отключить звук",
- "clearCache_description": "\"жесткая очистка\" feishin. кроме очистки кэша feishin, также очищает кэш браузера (сохранённые картинки и другие ресурсы). учётные данные и настройки сохраняются",
+ "clearCache_description": "\"жесткая очистка\" feishin: кроме очистки кэша feishin, также очищает кэш браузера (сохранённые картинки и другие ресурсы). учётные данные и настройки сохраняются",
"clearCacheSuccess": "кэш успешно удалён",
+ "contextMenu": "конфигурация контекстного меню (нажатие правой кнопкой мыши)",
+ "contextMenu_description": "позволяет скрыть элементы, отображаемые в меню, появляющемся при нажатии правой кнопки мыши на элемент. все, что не отмечено, будет скрыто",
"customFontPath": "путь к пользовательскому шрифту",
"customFontPath_description": "укажите путь к пользовательскому шрифту, который будет использоваться в приложении",
"externalLinks_description": "включает отображение внешних ссылок (Last.fm, MusicBrainz) на страницах альбомов и артистов",
@@ -681,6 +736,10 @@
"scrobble_description": "скробблинг треков на вашем медиасервере",
"startMinimized_description": "запуск приложения в области уведомлений",
"volumeWheelStep_description": "количество громкости, изменяемое при прокрутке колёсика мыши над ползунком громкости",
+ "volumeWidth": "ширина слайдера звука",
+ "volumeWidth_description": "ширина слайдера звука (в px)",
+ "webAudio": "использовать веб аудио",
+ "webAudio_description": "использование веб аудио. включение активирует продвинутые возможности (например, replaygain). отключите, если вам это не нужно",
"discordRichPresence": "состояние профиля {{discord}}",
"discordApplicationId": "{{discord}} application id",
"discordApplicationId_description": "application id приложения {{discord}} которое будет отображаться в статусе профиля (по умолчанию {{defaultId}})",
@@ -688,9 +747,13 @@
"discordIdleStatus_description": "если включено, то обновляет статус, когда пользователь бездействует",
"discordUpdateInterval": "интервал обновления статуса профиля {{discord}}",
"discordUpdateInterval_description": "время в секундах между каждым обновлением (минимум 15 секунд)",
+ "doubleClickBehavior": "добавить в очередь все найденные треки при двойном клике",
+ "doubleClickBehavior_description": "есть включено: все найденные в поиске треки будут добавлены в очередь при двойном клике (иначе - только выбранный)",
"lyricOffset_description": "Смещение появления текста треков на указанное количество миллисекунд",
- "skipPlaylistPage": "пропустить страницу плейлиста",
- "applicationHotkeys_description": "настройка горячих клавиш приложения. включите чекбокс, чтобы сделать горячую клавишу глобальной (только для ПК)",
+ "skipPlaylistPage": "пропускать страницу плейлиста",
+ "applicationHotkeys_description": "настройка горячих клавиш приложения. поставьте галочку, чтобы сделать горячую клавишу глобальной (только для ПК)",
+ "artistConfiguration": "конфигурация страницы альбомов исполнителей",
+ "artistConfiguration_description": "позволяет настроить видимость и порядок элементов на странице альбомов исполнителей",
"fontType_description": "встроенный позволяет выбрать один из шрифтов, предоставляемых Feishin. системный позволяет выбрать любой шрифт, предоставляемый вашей операционной системой. пользовательский позволяет выбрать свой собственный шрифт",
"discordRichPresence_description": "включить статус воспроизведения в статус профиля в {{discord}}. Ключи изображений: {{icon}}, {{playing}} и {{paused}} ",
"lyricOffset": "синхронизация текста треков (мс)"
diff --git a/src/renderer/components/feature-carousel/index.tsx b/src/renderer/components/feature-carousel/index.tsx
index ef19363d9..a06858837 100644
--- a/src/renderer/components/feature-carousel/index.tsx
+++ b/src/renderer/components/feature-carousel/index.tsx
@@ -207,7 +207,11 @@ export const FeatureCarousel = ({ data }: FeatureCarouselProps) => {
))}
{currentItem?.releaseYear}
- {currentItem?.songCount} tracks
+
+ {t('entity.trackWithCount', {
+ count: currentItem?.songCount || 0,
+ })}
+
- Display type
+
+ {t('table.config.general.displayType', { postProcess: 'sentenceCase' })}
+
}
onClick={handleRefresh}
>
- Refresh
+ {t('common.refresh', {
+ postProcess: 'titleCase',
+ })}
@@ -466,7 +468,9 @@ export const AlbumArtistListHeaderFilters = ({
- Display type
+
+ {t('table.config.general.displayType', { postProcess: 'sentenceCase' })}
+
{
},
],
id: 'setRating',
- label: 'Set rating',
+ label: t('action.setRating', { postProcess: 'sentenceCase' }),
leftIcon: ,
onClick: () => {},
rightIcon: ,
diff --git a/src/renderer/features/genres/components/genre-list-header-filters.tsx b/src/renderer/features/genres/components/genre-list-header-filters.tsx
index 40a7db159..de1d3eeb1 100644
--- a/src/renderer/features/genres/components/genre-list-header-filters.tsx
+++ b/src/renderer/features/genres/components/genre-list-header-filters.tsx
@@ -386,7 +386,7 @@ export const GenreListHeaderFilters = ({
- {t('table.config.general.displayType', { postProcess: 'titleCase' })}
+ {t('table.config.general.displayType', { postProcess: 'sentenceCase' })}
{isGrid && (
<>
- Item gap
+
+ {t('table.config.general.itemGap', {
+ postProcess: 'sentenceCase',
+ })}
+
{
const currentSong = useCurrentSong();
const lyricsSettings = useLyricsSettings();
+ const { t } = useTranslation();
const [index, setIndex] = useState(0);
const [translatedLyrics, setTranslatedLyrics] = useState(null);
const [showTranslation, setShowTranslation] = useState(false);
@@ -217,7 +219,9 @@ export const Lyrics = () => {
order={3}
weight={700}
>
- No lyrics found
+ {t('page.fullscreenPlayer.noLyrics', {
+ postProcess: 'sentenceCase',
+ })}
diff --git a/src/renderer/features/player/components/full-screen-player-queue.tsx b/src/renderer/features/player/components/full-screen-player-queue.tsx
index 16e072191..e053c8ba6 100644
--- a/src/renderer/features/player/components/full-screen-player-queue.tsx
+++ b/src/renderer/features/player/components/full-screen-player-queue.tsx
@@ -98,7 +98,7 @@ export const FullScreenPlayerQueue = () => {
items.push({
active: activeTab === 'visualizer',
icon: ,
- label: t('page.fullscreenPlayer.visualizer'),
+ label: t('page.fullscreenPlayer.visualizer', { postProcess: 'titleCase' }),
onClick: () => setStore({ activeTab: 'visualizer' }),
});
}
diff --git a/src/renderer/features/player/components/full-screen-player.tsx b/src/renderer/features/player/components/full-screen-player.tsx
index 2367568cb..9078e3834 100644
--- a/src/renderer/features/player/components/full-screen-player.tsx
+++ b/src/renderer/features/player/components/full-screen-player.tsx
@@ -382,7 +382,11 @@ const Controls = () => {
Lyrics offset (ms)
+
+ {t('page.fullscreenPlayer.config.lyricOffset', {
+ postProcess: 'sentenceCase',
+ })}
+
{
{!isMinWidth ? (
}
- tooltip={{ label: 'View queue', openDelay: 500 }}
+ tooltip={{
+ label: t('player.viewQueue', { postProcess: 'titleCase' }),
+ openDelay: 500,
+ }}
variant="secondary"
onClick={handleToggleQueue}
/>
diff --git a/src/renderer/features/playlists/components/playlist-detail-song-list-header-filters.tsx b/src/renderer/features/playlists/components/playlist-detail-song-list-header-filters.tsx
index 2d50d12a7..2293f9bd9 100644
--- a/src/renderer/features/playlists/components/playlist-detail-song-list-header-filters.tsx
+++ b/src/renderer/features/playlists/components/playlist-detail-song-list-header-filters.tsx
@@ -596,7 +596,9 @@ export const PlaylistDetailSongListHeaderFilters = ({
- Display type
+
+ {t('table.config.general.displayType', { postProcess: 'sentenceCase' })}
+
- {t('table.config.general.displayType', { postProcess: 'titleCase' })}
+ {t('table.config.general.displayType', { postProcess: 'sentenceCase' })}
{
+ const { t } = useTranslation();
const [edit, editHandlers] = useDisclosure(false);
const [savedPassword, setSavedPassword] = useState('');
const { deleteServer } = useAuthStoreActions();
@@ -54,7 +56,11 @@ export const ServerListItem = ({ server }: ServerListItemProps) => {
- Server details
+
+ {t('page.manageServers.serverDetails', {
+ postProcess: 'sentenceCase',
+ })}
+
}
>
@@ -68,8 +74,16 @@ export const ServerListItem = ({ server }: ServerListItemProps) => {
- URL
- Username
+
+ {t('page.manageServers.url', {
+ postProcess: 'sentenceCase',
+ })}
+
+
+ {t('page.manageServers.username', {
+ postProcess: 'sentenceCase',
+ })}
+
{server.url}
@@ -79,11 +93,15 @@ export const ServerListItem = ({ server }: ServerListItemProps) => {
}
- tooltip={{ label: 'Edit server details' }}
+ tooltip={{
+ label: t('page.manageServers.editServerDetailsTooltip', {
+ postProcess: 'sentenceCase',
+ }),
+ }}
variant="subtle"
onClick={() => handleEdit()}
>
- Edit
+ {t('common.edit')}
@@ -95,7 +113,7 @@ export const ServerListItem = ({ server }: ServerListItemProps) => {
timeoutProps={{ callback: handleDeleteServer, duration: 1000 }}
variant="subtle"
>
- Remove server
+ {t('page.manageServers.removeServer', { postProcess: 'sentenceCase' })}
);
diff --git a/src/renderer/features/shared/components/order-toggle-button.tsx b/src/renderer/features/shared/components/order-toggle-button.tsx
index 44fafd6cc..d223374bb 100644
--- a/src/renderer/features/shared/components/order-toggle-button.tsx
+++ b/src/renderer/features/shared/components/order-toggle-button.tsx
@@ -16,8 +16,8 @@ export const OrderToggleButton = ({ sortOrder, onToggle, buttonProps }: OrderTog
}
onClick={handleRefresh}
>
- Refresh
+ {t('common.refresh', { postProcess: 'titleCase' })}
diff --git a/src/renderer/features/titlebar/components/app-menu.tsx b/src/renderer/features/titlebar/components/app-menu.tsx
index 0eb15e13f..d145c1ea0 100644
--- a/src/renderer/features/titlebar/components/app-menu.tsx
+++ b/src/renderer/features/titlebar/components/app-menu.tsx
@@ -76,7 +76,7 @@ export const AppMenu = () => {
const handleManageServersModal = () => {
openModal({
children: ,
- title: 'Manage Servers',
+ title: t('page.manageServers.title', { postProcess: 'titleCase' }),
});
};