mirror of
https://github.com/jeffvli/feishin.git
synced 2026-07-13 22:20:13 +02:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 49c0ab45f6 | |||
| 8b913595da | |||
| 4e5867e8af | |||
| 7dd6d32710 | |||
| ac7dc37fd0 | |||
| 46b94a83f1 | |||
| 40a1d1438d | |||
| 905088cae7 | |||
| 705b375dab | |||
| 0b537b07ee | |||
| dfa6198bdd |
@@ -63,7 +63,7 @@ linux:
|
||||
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||
|
||||
toolsets:
|
||||
appimage: '1.0.2'
|
||||
appimage: '1.0.3'
|
||||
|
||||
npmRebuild: false
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ linux:
|
||||
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||
|
||||
toolsets:
|
||||
appimage: '1.0.2'
|
||||
appimage: '1.0.3'
|
||||
|
||||
npmRebuild: false
|
||||
publish:
|
||||
|
||||
@@ -63,7 +63,7 @@ linux:
|
||||
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||
|
||||
toolsets:
|
||||
appimage: '1.0.2'
|
||||
appimage: '1.0.3'
|
||||
|
||||
npmRebuild: false
|
||||
afterAllArtifactBuild: scripts/after-all-artifact-build.mjs
|
||||
|
||||
+41
-42
@@ -69,79 +69,78 @@
|
||||
"postversion": "node ./scripts/update-app-stream.mjs"
|
||||
},
|
||||
"resolutions": {
|
||||
"react-router": "7.14.0",
|
||||
"xml2js": "0.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@atlaskit/pragmatic-drag-and-drop": "1.7.7",
|
||||
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.5",
|
||||
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
|
||||
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.2.0",
|
||||
"@electron-toolkit/preload": "^3.0.2",
|
||||
"@electron-toolkit/utils": "^4.0.0",
|
||||
"@mantine/colors-generator": "^9.1.1",
|
||||
"@mantine/core": "^9.1.1",
|
||||
"@mantine/dates": "^9.1.1",
|
||||
"@mantine/form": "^9.1.1",
|
||||
"@mantine/hooks": "^9.1.1",
|
||||
"@mantine/modals": "^9.1.1",
|
||||
"@mantine/notifications": "^9.1.1",
|
||||
"@radix-ui/react-context-menu": "^2.2.16",
|
||||
"@tanstack/react-query": "^5.96.2",
|
||||
"@tanstack/react-query-devtools": "^5.96.2",
|
||||
"@tanstack/react-query-persist-client": "^5.96.2",
|
||||
"@mantine/colors-generator": "^9.3.0",
|
||||
"@mantine/core": "^9.3.0",
|
||||
"@mantine/dates": "^9.3.0",
|
||||
"@mantine/form": "^9.3.0",
|
||||
"@mantine/hooks": "^9.3.0",
|
||||
"@mantine/modals": "^9.3.0",
|
||||
"@mantine/notifications": "^9.3.0",
|
||||
"@radix-ui/react-context-menu": "^2.3.0",
|
||||
"@tanstack/react-query": "5.96.2",
|
||||
"@tanstack/react-query-devtools": "5.96.2",
|
||||
"@tanstack/react-query-persist-client": "5.96.2",
|
||||
"@ts-rest/core": "^3.52.1",
|
||||
"@wavesurfer/react": "^1.0.12",
|
||||
"@xhayper/discord-rpc": "^1.3.3",
|
||||
"@xhayper/discord-rpc": "^1.3.4",
|
||||
"audiomotion-analyzer": "^4.5.4",
|
||||
"axios": "^1.14.0",
|
||||
"axios": "^1.17.0",
|
||||
"butterchurn": "3.0.0-beta.5",
|
||||
"butterchurn-presets": "3.0.0-beta.4",
|
||||
"cheerio": "^1.2.0",
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "^1.1.1",
|
||||
"dayjs": "^1.11.20",
|
||||
"dompurify": "^3.3.3",
|
||||
"dayjs": "^1.11.21",
|
||||
"dompurify": "^3.4.8",
|
||||
"electron-debug": "^3.2.0",
|
||||
"electron-localshortcut": "^3.2.1",
|
||||
"electron-log": "^5.4.3",
|
||||
"electron-log": "^5.4.4",
|
||||
"electron-store": "^8.2.0",
|
||||
"electron-updater": "^6.8.3",
|
||||
"electron-updater": "^6.8.9",
|
||||
"fast-average-color": "9.5.0",
|
||||
"fast-xml-parser": "^5.5.10",
|
||||
"fast-xml-parser": "^5.8.0",
|
||||
"format-duration": "^3.0.2",
|
||||
"fuse.js": "^7.2.0",
|
||||
"fuse.js": "^7.4.2",
|
||||
"i18next": "^25.10.10",
|
||||
"icecast-metadata-stats": "^0.1.12",
|
||||
"idb-keyval": "^6.2.2",
|
||||
"idb-keyval": "^6.2.5",
|
||||
"immer": "^10.2.0",
|
||||
"is-electron": "^2.2.2",
|
||||
"lodash": "^4.18.1",
|
||||
"md5": "^2.3.0",
|
||||
"motion": "^12.38.0",
|
||||
"motion": "^12.40.0",
|
||||
"mpris-service": "^2.1.2",
|
||||
"nanoid": "^3.3.11",
|
||||
"nanoid": "^3.3.12",
|
||||
"node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f",
|
||||
"overlayscrollbars": "^2.14.0",
|
||||
"overlayscrollbars": "^2.16.0",
|
||||
"overlayscrollbars-react": "^0.5.6",
|
||||
"qs": "^6.15.0",
|
||||
"react": "^19.2.4",
|
||||
"qs": "^6.15.2",
|
||||
"react": "^19.2.7",
|
||||
"react-call": "^1.8.2",
|
||||
"react-dom": "^19.2.4",
|
||||
"react-dom": "^19.2.7",
|
||||
"react-error-boundary": "^5.0.0",
|
||||
"react-i18next": "^16.6.6",
|
||||
"react-icons": "^5.6.0",
|
||||
"react-player": "^2.16.1",
|
||||
"react-router": "^7.14.0",
|
||||
"react-router": "^7.17.0",
|
||||
"react-split-pane": "^3.2.0",
|
||||
"react-virtualized-auto-sizer": "^1.0.26",
|
||||
"react-window": "1.8.11",
|
||||
"react-window-v2": "npm:react-window@^2.2.7",
|
||||
"semver": "^7.7.4",
|
||||
"semver": "^7.8.2",
|
||||
"string-to-color": "^2.2.2",
|
||||
"wavesurfer.js": "^7.12.5",
|
||||
"ws": "^8.20.0",
|
||||
"wavesurfer.js": "^7.12.7",
|
||||
"ws": "^8.21.0",
|
||||
"zod": "^3.25.76",
|
||||
"zustand": "^5.0.12"
|
||||
"zustand": "^5.0.14"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@electron-toolkit/eslint-config-prettier": "^3.0.0",
|
||||
@@ -150,8 +149,8 @@
|
||||
"@types/electron-localshortcut": "^3.1.3",
|
||||
"@types/lodash": "^4.17.24",
|
||||
"@types/md5": "^2.3.6",
|
||||
"@types/node": "^24.12.2",
|
||||
"@types/react": "^19.2.14",
|
||||
"@types/node": "^24.13.1",
|
||||
"@types/react": "^19.2.17",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@types/react-window": "^1.8.8",
|
||||
"@types/source-map-support": "^0.5.10",
|
||||
@@ -160,31 +159,31 @@
|
||||
"babel-plugin-react-compiler": "^1.0.0",
|
||||
"concurrently": "^9.2.1",
|
||||
"cross-env": "^10.1.0",
|
||||
"electron": "^41.7.0",
|
||||
"electron-builder": "^26.8.2",
|
||||
"electron": "^41.7.1",
|
||||
"electron-builder": "^26.15.0",
|
||||
"electron-devtools-installer": "^4.0.0",
|
||||
"electron-vite": "^4.0.1",
|
||||
"eslint": "^9.39.4",
|
||||
"eslint-plugin-perfectionist": "^4.15.1",
|
||||
"eslint-plugin-prettier": "^5.5.5",
|
||||
"eslint-plugin-prettier": "^5.5.6",
|
||||
"eslint-plugin-react": "^7.37.5",
|
||||
"eslint-plugin-react-hooks": "^7.0.1",
|
||||
"eslint-plugin-react-hooks": "^7.1.1",
|
||||
"eslint-plugin-react-refresh": "^0.4.26",
|
||||
"i18next-parser": "^9.4.0",
|
||||
"postcss-preset-mantine": "^1.18.0",
|
||||
"postcss-simple-vars": "^7.0.1",
|
||||
"prettier": "^3.8.1",
|
||||
"prettier": "^3.8.3",
|
||||
"prettier-plugin-packagejson": "^2.5.22",
|
||||
"stylelint": "^16.26.1",
|
||||
"stylelint-config-css-modules": "^4.6.0",
|
||||
"stylelint-config-recess-order": "^7.7.0",
|
||||
"stylelint-config-standard": "^39.0.1",
|
||||
"typescript": "^5.9.3",
|
||||
"vite": "^7.3.1",
|
||||
"vite": "^7.3.5",
|
||||
"vite-plugin-conditional-import": "^0.1.7",
|
||||
"vite-plugin-dynamic-import": "^1.6.0",
|
||||
"vite-plugin-ejs": "^1.7.0",
|
||||
"vite-plugin-pwa": "^1.2.0"
|
||||
"vite-plugin-pwa": "^1.3.0"
|
||||
},
|
||||
"pnpm": {
|
||||
"onlyBuiltDependencies": [
|
||||
|
||||
Generated
+2199
-2129
File diff suppressed because it is too large
Load Diff
@@ -49,7 +49,8 @@
|
||||
"sleepTimer_setCustom": "Nastavit časovač",
|
||||
"sleepTimer_cancel": "Zrušit časovač",
|
||||
"albumRadio": "Rádio alba",
|
||||
"scrobbleForceSubmit": "Vynutit scrobble"
|
||||
"scrobbleForceSubmit": "Vynutit scrobble",
|
||||
"sleepTimer_endOfAlbum": "Konec aktuálního alba"
|
||||
},
|
||||
"setting": {
|
||||
"crossfadeStyle_description": "Vyberte způsob prolnutí u přehrávače zvuku",
|
||||
@@ -1169,7 +1170,7 @@
|
||||
"playlist_few": "playlisty",
|
||||
"playlist_other": "Playlisty",
|
||||
"artist_one": "Umělec",
|
||||
"artist_few": "umělci",
|
||||
"artist_few": "Umělci",
|
||||
"artist_other": "Umělci",
|
||||
"folderWithCount_one": "{{count}} složka",
|
||||
"folderWithCount_few": "{{count}} složky",
|
||||
@@ -1187,7 +1188,7 @@
|
||||
"albumWithCount_few": "{{count}} alba",
|
||||
"albumWithCount_other": "{{count}} alb",
|
||||
"favorite_one": "Oblíbený",
|
||||
"favorite_few": "oblíbené",
|
||||
"favorite_few": "Oblíbené",
|
||||
"favorite_other": "Oblíbené",
|
||||
"artistWithCount_one": "{{count}} umělec",
|
||||
"artistWithCount_few": "{{count}} umělci",
|
||||
@@ -1197,7 +1198,7 @@
|
||||
"folder_other": "Složky",
|
||||
"smartPlaylist": "Chytrý $t(entity.playlist, {\"count\": 1})",
|
||||
"album_one": "Album",
|
||||
"album_few": "alba",
|
||||
"album_few": "Alba",
|
||||
"album_other": "Alba",
|
||||
"genreWithCount_one": "{{count}} žánr",
|
||||
"genreWithCount_few": "{{count}} žánry",
|
||||
|
||||
@@ -49,7 +49,8 @@
|
||||
"sleepTimer_endOfSong": "Fin de la canción actual",
|
||||
"sleepTimer": "Temporizador de apagado",
|
||||
"albumRadio": "Radio del álbum",
|
||||
"scrobbleForceSubmit": "Forzar scrobble"
|
||||
"scrobbleForceSubmit": "Forzar scrobble",
|
||||
"sleepTimer_endOfAlbum": "Fin del álbum actual"
|
||||
},
|
||||
"setting": {
|
||||
"crossfadeStyle_description": "Selecciona el estilo de crossfade a usar por el reproductor de audio",
|
||||
|
||||
+649
-2
@@ -292,7 +292,8 @@
|
||||
"explicitStatus": "$t(common.explicitStatus)",
|
||||
"title": "Pealkiri",
|
||||
"sortName": "Sortimisnimi",
|
||||
"trackNumber": "Lugu"
|
||||
"trackNumber": "Lugu",
|
||||
"toYear": "Aastasse"
|
||||
},
|
||||
"filterOperator": {
|
||||
"contains": "Sisaldab",
|
||||
@@ -311,6 +312,652 @@
|
||||
"before": "On enne",
|
||||
"afterDate": "On pärast (kuupäeva)",
|
||||
"after": "On pärast",
|
||||
"notInPlaylist": "Ei ole"
|
||||
"notInPlaylist": "Ei ole",
|
||||
"startsWith": "Algab",
|
||||
"notInTheLast": "Pole viimase"
|
||||
},
|
||||
"form": {
|
||||
"addServer": {
|
||||
"input_legacyAuthentication": "Luba pärandautentimine",
|
||||
"input_name": "Serveri nimi",
|
||||
"input_password": "Parool",
|
||||
"input_preferInstantMix": "Eelista kiirmiksi",
|
||||
"input_preferInstantMixDescription": "Kasuta kiirmiksi ainult sarnaste lugude saamiseks. Kasulik, kui on pluginaid, mis seda käitumist muudavad",
|
||||
"input_preferRemoteUrl": "Eelista avalikku URL-i",
|
||||
"input_remoteUrl": "Avalik URL",
|
||||
"input_remoteUrlPlaceholder": "Valikuline: avalik URL väliste funktsioonide jaoks",
|
||||
"input_savePassword": "Salvesta parool",
|
||||
"input_url": "URL",
|
||||
"input_username": "Kasutajanimi",
|
||||
"success": "Serveri lisamine õnnestus",
|
||||
"title": "Lisa server",
|
||||
"error_savePassword": "Parooli salvestamisel ilmnes viga",
|
||||
"ignoreCors": "Eira CORS-i ($t(common.restartRequired))",
|
||||
"ignoreSsl": "Eira SSL-i ($t(common.restartRequired))"
|
||||
},
|
||||
"largeFetchConfirmation": {
|
||||
"title": "Lisa üksused järjekorda",
|
||||
"description": "See toiming lisab kõik praeguse filtreeritud vaate üksused"
|
||||
},
|
||||
"addToPlaylist": {
|
||||
"create": "Loo $t(entity.playlist, {\"count\": 1}) {{playlist}}",
|
||||
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||
"noneAdded": "$t(entity.playlist, {\"count\": 1}) '{{playlist}}' ei lisatud ühtegi lugu",
|
||||
"input_skipDuplicates": "Jäta duplikaadid vahele",
|
||||
"searchOrCreate": "Otsi $t(entity.playlist, {\"count\": 2}) või kirjuta uue loomiseks",
|
||||
"success": "$t(entity.trackWithCount, {\"count\": {{message}} }) lisati $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
|
||||
"title": "Lisa esitusloendisse $t(entity.playlist, {\"count\": 1})"
|
||||
},
|
||||
"createPlaylist": {
|
||||
"input_description": "$t(common.description)",
|
||||
"input_name": "$t(common.name)",
|
||||
"input_owner": "$t(common.owner)",
|
||||
"input_public": "Avalik",
|
||||
"success": "$t(entity.playlist, {\"count\": 1}) loodi edukalt",
|
||||
"title": "Loo $t(entity.playlist, {\"count\": 1})"
|
||||
},
|
||||
"createRadioStation": {
|
||||
"success": "Raadiojaam loodi edukalt",
|
||||
"title": "Loo raadiojaam",
|
||||
"input_homepageUrl": "Avalehe URL",
|
||||
"input_name": "Nimi",
|
||||
"input_streamUrl": "Voo URL"
|
||||
},
|
||||
"editRadioStation": {
|
||||
"success": "Raadiojaam on edukalt uuendatud"
|
||||
},
|
||||
"deletePlaylist": {
|
||||
"input_confirm": "Kinnitamiseks sisesta $t(entity.playlist, {\"count\": 1}) nimi",
|
||||
"success": "$t(entity.playlist, {\"count\": 1}) edukalt kustutatud",
|
||||
"title": "Kustuta $t(entity.playlist, {\"count\": 1})"
|
||||
},
|
||||
"editPlaylist": {
|
||||
"success": "$t(entity.playlist, {\"count\": 1}) edukalt uuendatud",
|
||||
"title": "Muuda $t(entity.playlist, {\"count\": 1})",
|
||||
"publicJellyfinNote": "Jellyfin ei kuva mingil põhjusel, kas esitusloend on avalik või mitte. Kui soovid, et see jääks avalikuks, veendu, et järgmine valik oleks aktiivne"
|
||||
},
|
||||
"lyricsExport": {
|
||||
"export": "Ekspordi laulusõnad",
|
||||
"input_synced": "Ekspordi sünkroonitud laulusõnad",
|
||||
"input_offset": "$t(setting.lyricOffset)"
|
||||
},
|
||||
"lyricSearch": {
|
||||
"input_artist": "$t(entity.artist, {\"count\": 1})",
|
||||
"input_name": "$t(common.name)",
|
||||
"title": "Laulusõnade otsing"
|
||||
},
|
||||
"queryEditor": {
|
||||
"title": "Päringuredaktor",
|
||||
"input_optionMatchAll": "Vasta kõigile",
|
||||
"input_optionMatchAny": "Vasta mõnele",
|
||||
"addRuleGroup": "Lisa reeglite grupp",
|
||||
"removeRuleGroup": "Eemalda reeglite grupp",
|
||||
"resetToDefault": "Taasta vaikeväärtused",
|
||||
"clearFilters": "Tühjenda filtrid"
|
||||
},
|
||||
"saveQueue": {
|
||||
"success": "Esitusjärjekord salvestati serverisse"
|
||||
},
|
||||
"shareItem": {
|
||||
"allowDownloading": "Luba allalaadimine",
|
||||
"copyToClipboard": "Kopeeri lõikelauale: Ctrl+C, enter",
|
||||
"description": "Kirjeldus",
|
||||
"setExpiration": "Määra aegumisaeg",
|
||||
"success": "Jagamislink kopeeriti lõikelauale (või klõpsa avamiseks siia)",
|
||||
"successMustClick": "Jagamine on edukalt loodud. Klõpsa avamiseks siia",
|
||||
"expireInvalid": "Aegumisaeg peab olema tulevikus",
|
||||
"createFailed": "Jagamise loomine nurjus (kas jagamine on lubatud?)"
|
||||
},
|
||||
"shuffleAll": {
|
||||
"title": "Juhuesitus",
|
||||
"input_kind_albums": "Albumid",
|
||||
"input_kind_songs": "Lood",
|
||||
"input_kind": "Juhuvalikud",
|
||||
"input_limit_albums": "Mitu albumit?",
|
||||
"input_limit_songs": "Mitu lugu?",
|
||||
"input_genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"input_limit": "Mitu lugu?",
|
||||
"input_minYear": "Aastast",
|
||||
"input_maxYear": "Aastani",
|
||||
"input_played": "Esita filter",
|
||||
"input_played_optionAll": "Kõik lood",
|
||||
"input_played_optionUnplayed": "Ainult esitamata lood",
|
||||
"input_played_optionPlayed": "Ainult esitatud lood"
|
||||
},
|
||||
"updateServer": {
|
||||
"success": "Serveri värskendamine õnnestus",
|
||||
"title": "Värskenda serverit"
|
||||
},
|
||||
"privateMode": {
|
||||
"enabled": "Privaatne režiim lülitati sisse, esituse olek on nüüd väliste allikate eest peidetud",
|
||||
"disabled": "Privaatne režiim lülitati välja, esituse olek on nüüd väliste allikate jaoks nähtav",
|
||||
"title": "Privaatne režiim"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"albumArtistDetail": {
|
||||
"about": "{{artist}} teave",
|
||||
"appearsOn": "Osaleb",
|
||||
"favoriteSongs": "Lemmiklood",
|
||||
"groupingTypeAll": "Kõik väljaande tüübid",
|
||||
"groupingTypePrimary": "Peamised väljaande tüübid",
|
||||
"recentReleases": "Hiljutised väljaanded",
|
||||
"viewDiscography": "Vaata diskograafiat",
|
||||
"relatedArtists": "Seotud $t(entity.artist, {\"count\": 2})",
|
||||
"topSongs": "Populaarseimad lood",
|
||||
"topSongsCommunity": "Kogukond",
|
||||
"topSongsFrom": "Populaarseimad lood: {{title}}",
|
||||
"topSongsPersonal": "Isiklik",
|
||||
"favoriteSongsFrom": "Lemmiklood: {{title}}",
|
||||
"viewAll": "Kuva kõik",
|
||||
"viewAllTracks": "Kuva kõik $t(entity.track, {\"count\": 2})"
|
||||
},
|
||||
"albumArtistList": {
|
||||
"title": "$t(entity.albumArtist, {\"count\": 2})"
|
||||
},
|
||||
"albumDetail": {
|
||||
"moreFromArtist": "Veel esitajalt $t(entity.artist, {\"count\": 1})",
|
||||
"moreFromGeneric": "Veel: {{item}}",
|
||||
"released": "Avaldatud"
|
||||
},
|
||||
"albumList": {
|
||||
"artistAlbums": "{{artist}} albumid",
|
||||
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})",
|
||||
"title": "$t(entity.album, {\"count\": 2})"
|
||||
},
|
||||
"radioList": {
|
||||
"title": "Raadiojaamad"
|
||||
},
|
||||
"releasenotes": {
|
||||
"commitsSinceStable": "Muudatused alates {{stable}}",
|
||||
"noNewCommits": "Selles vahemikus pole uusi muudatusi",
|
||||
"noStableReleaseToCompare": "Võrdlemiseks pole saadaval ühtegi stabiilset versiooni"
|
||||
},
|
||||
"favorites": {
|
||||
"title": "$t(entity.favorite, {\"count\": 2})"
|
||||
},
|
||||
"windowBar": {
|
||||
"paused": "(Peatatud) ",
|
||||
"privateMode": "(Privaatne režiim)"
|
||||
},
|
||||
"appMenu": {
|
||||
"collapseSidebar": "Ahenda külgriba",
|
||||
"commandPalette": "Ava käsupalett",
|
||||
"expandSidebar": "Laienda külgriba",
|
||||
"goBack": "Mine tagasi",
|
||||
"goForward": "Mine edasi",
|
||||
"manageServers": "Halda servereid",
|
||||
"privateModeOff": "Lülita privaatne režiim välja",
|
||||
"privateModeOn": "Lülita privaatne režiim sisse",
|
||||
"openBrowserDevtools": "Ava brauseri arendajatööriistad",
|
||||
"quit": "$t(common.quit)",
|
||||
"selectServer": "Vali server",
|
||||
"selectMusicFolder": "Vali muusikakaust",
|
||||
"noMusicFolder": "Muusikakausta pole valitud",
|
||||
"multipleMusicFolders": "{{count}} muusikakausta valitud",
|
||||
"settings": "$t(common.setting, {\"count\": 2})",
|
||||
"version": "Versioon {{version}}"
|
||||
},
|
||||
"manageServers": {
|
||||
"title": "Halda servereid",
|
||||
"serverDetails": "Serveri üksikasjad",
|
||||
"url": "URL",
|
||||
"username": "Kasutajanimi",
|
||||
"editServerDetailsTooltip": "Muuda serveri üksikasju",
|
||||
"removeServer": "Eemalda server"
|
||||
},
|
||||
"contextMenu": {
|
||||
"addFavorite": "$t(action.addToFavorites)",
|
||||
"addLast": "$t(player.addLast)",
|
||||
"addNext": "$t(player.addNext)",
|
||||
"addToFavorites": "$t(action.addToFavorites)",
|
||||
"addToPlaylist": "$t(action.addToPlaylist)",
|
||||
"createPlaylist": "$t(action.createPlaylist)",
|
||||
"deletePlaylist": "$t(action.deletePlaylist)",
|
||||
"deselectAll": "$t(action.deselectAll)",
|
||||
"download": "Laadi alla",
|
||||
"moveItems": "$t(action.moveItems)",
|
||||
"moveToNext": "$t(action.moveToNext)",
|
||||
"moveToBottom": "$t(action.moveToBottom)",
|
||||
"moveToTop": "$t(action.moveToTop)",
|
||||
"numberSelected": "{{count}} valitud",
|
||||
"play": "$t(player.play)",
|
||||
"playSimilarSongs": "$t(player.playSimilarSongs)",
|
||||
"removeFromFavorites": "$t(action.removeFromFavorites)",
|
||||
"removeFromPlaylist": "$t(action.removeFromPlaylist)",
|
||||
"removeFromQueue": "$t(action.removeFromQueue)",
|
||||
"setRating": "$t(action.setRating)",
|
||||
"playShuffled": "$t(player.shuffle)",
|
||||
"shareItem": "Jaga üksust",
|
||||
"goTo": "Mine",
|
||||
"goToAlbum": "Mine: $t(entity.album, {\"count\": 1})",
|
||||
"goToAlbumArtist": "Mine: $t(entity.albumArtist, {\"count\": 1})",
|
||||
"showDetails": "Hangi teavet"
|
||||
},
|
||||
"fullscreenPlayer": {
|
||||
"config": {
|
||||
"dynamicBackground": "Dünaamiline taust",
|
||||
"dynamicImageBlur": "Pildi hägustamise suurus",
|
||||
"dynamicIsImage": "Luba taustapilt",
|
||||
"followCurrentLyric": "Jälgi esitatavat rida",
|
||||
"lyricAlignment": "Laulusõnade joondus",
|
||||
"lyricOffset": "Laulusõnade nihe (ms)",
|
||||
"lyricGap": "Ridade vahe",
|
||||
"lyricSize": "Teksti suurus",
|
||||
"lyricOpacityNonActive": "Mitteaktiivse rea läbipaistmatus",
|
||||
"lyricScaleNonActive": "Mitteaktiivse rea suurus",
|
||||
"opacity": "Läbipaistmatus",
|
||||
"showLyricMatch": "Kuva leitud vasted",
|
||||
"showLyricProvider": "Kuva laulusõnade allikas",
|
||||
"synchronized": "Sünkroniseeritud",
|
||||
"unsynchronized": "Sünkroniseerimata",
|
||||
"useImageAspectRatio": "Kasuta pildi kuvasuhet"
|
||||
},
|
||||
"lyrics": "Laulusõnad",
|
||||
"related": "Seotud",
|
||||
"upNext": "Järgmiseks",
|
||||
"visualizer": "Visuaal",
|
||||
"noLyrics": "Laulusõnu ei leitud"
|
||||
},
|
||||
"genreList": {
|
||||
"showAlbums": "Kuva $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
|
||||
"showTracks": "Kuva $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})",
|
||||
"title": "$t(entity.genre, {\"count\": 2})"
|
||||
},
|
||||
"folderList": {
|
||||
"title": "$t(entity.folder, {\"count\": 2})"
|
||||
},
|
||||
"globalSearch": {
|
||||
"commands": {
|
||||
"goToPage": "Mine lehele",
|
||||
"searchFor": "Otsi {{query}}",
|
||||
"serverCommands": "Serveri käsud"
|
||||
},
|
||||
"title": "Käsud"
|
||||
},
|
||||
"home": {
|
||||
"explore": "Avasta oma kogust",
|
||||
"genres": "$t(entity.genre, {\"count\": 2})",
|
||||
"mostPlayed": "Enim esitatud",
|
||||
"newlyAdded": "Hiljuti lisatud väljaanded",
|
||||
"recentlyPlayed": "Hiljuti esitatud",
|
||||
"recentlyReleased": "Hiljuti avaldatud",
|
||||
"title": "$t(common.home)"
|
||||
},
|
||||
"itemDetail": {
|
||||
"copyPath": "Kopeeri tee lõikelauale",
|
||||
"copiedPath": "Tee kopeeriti edukalt",
|
||||
"openFile": "Kuva lugu failihalduris"
|
||||
},
|
||||
"playlist": {
|
||||
"reorder": "Ümberreastamine on lubatud vaid ID järgi sorteerimisel"
|
||||
},
|
||||
"playlistList": {
|
||||
"title": "$t(entity.playlist, {\"count\": 2})"
|
||||
},
|
||||
"collections": {
|
||||
"overrideExisting": "Asenda olemasolev",
|
||||
"saveAsCollection": "Salvesta kogumikuna"
|
||||
},
|
||||
"setting": {
|
||||
"advanced": "Täpsem",
|
||||
"analytics": "Analüütika",
|
||||
"generalTab": "Üldine",
|
||||
"hotkeysTab": "Kiirklahvid",
|
||||
"playbackTab": "Taasesitus",
|
||||
"windowTab": "Aken",
|
||||
"updates": "Uuenda",
|
||||
"cache": "Vahemälu",
|
||||
"application": "Rakendus",
|
||||
"queryBuilder": "Päringu koostaja",
|
||||
"theme": "Teema",
|
||||
"controls": "Juhtnupud",
|
||||
"sidebar": "Külgriba",
|
||||
"exportImport": "Import/eksport",
|
||||
"scrobble": "Kraasi",
|
||||
"audio": "Heli",
|
||||
"lyrics": "Laulusõnad",
|
||||
"lyricsDisplay": "Laulusõnade kuvamine",
|
||||
"transcoding": "Transkoodimine",
|
||||
"discord": "Discord",
|
||||
"logger": "Logija",
|
||||
"playerFilters": "Mängija filtrid",
|
||||
"remote": "Kaugjuhtimine"
|
||||
},
|
||||
"sidebar": {
|
||||
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
|
||||
"albums": "$t(entity.album, {\"count\": 2})",
|
||||
"collections": "Kogumikud",
|
||||
"artists": "$t(entity.artist, {\"count\": 2})",
|
||||
"favorites": "$t(entity.favorite, {\"count\": 2})",
|
||||
"folders": "$t(entity.folder, {\"count\": 2})",
|
||||
"genres": "$t(entity.genre, {\"count\": 2})",
|
||||
"home": "$t(common.home)",
|
||||
"radio": "$t(entity.radioStation, {\"count\": 2})",
|
||||
"myLibrary": "Muusikakogu",
|
||||
"nowPlaying": "Esitamisel",
|
||||
"playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||
"search": "$t(common.search)",
|
||||
"settings": "$t(common.setting, {\"count\": 2})",
|
||||
"shared": "Shared $t(entity.playlist, {\"count\": 2})",
|
||||
"tracks": "$t(entity.track, {\"count\": 2})"
|
||||
},
|
||||
"trackList": {
|
||||
"artistTracks": "{{artist}} lood",
|
||||
"genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})",
|
||||
"title": "$t(entity.track, {\"count\": 2})"
|
||||
}
|
||||
},
|
||||
"player": {
|
||||
"addLast": "Viimane",
|
||||
"addNext": "Järgmine",
|
||||
"addLastShuffled": "Viimane (juhuesitus)",
|
||||
"addNextShuffled": "Järgmine (juhuesitus)",
|
||||
"albumRadio": "Albumi raadio",
|
||||
"artistRadio": "Esitaja raadio",
|
||||
"holdToShuffle": "Hoia all segamiseks",
|
||||
"favorite": "Lemmik",
|
||||
"lyrics": "Laulusõnad",
|
||||
"mute": "Vaigista",
|
||||
"muted": "Vaigistatud",
|
||||
"next": "Järgmine",
|
||||
"play": "Esita",
|
||||
"playbackFetchCancel": "See võtab veidi aega… tühistamiseks sulge teavitus",
|
||||
"playbackFetchInProgress": "Lugude laadimine…",
|
||||
"playbackFetchNoResults": "Ühtegi lugu ei leitud",
|
||||
"playbackSpeed": "Taasesituse kiirus",
|
||||
"playRandom": "Esita juhuslikult",
|
||||
"playSimilarSongs": "Esita sarnaseid lugusid",
|
||||
"previous": "Eelmine",
|
||||
"queue_clear": "Tühjenda järjekord",
|
||||
"queue_moveToBottom": "Liiguta valitud lõppu",
|
||||
"queue_moveToTop": "Liiguta valitud algusesse",
|
||||
"queue_remove": "Eemalda valitud",
|
||||
"repeat": "Korda",
|
||||
"repeat_all": "Korda kõiki",
|
||||
"repeat_off": "Kordus keelatud",
|
||||
"restoreQueueFromServer": "Taasta järjekord serverist",
|
||||
"saveQueueToServer": "Salvesta järjekord serverisse",
|
||||
"shuffle": "Esita (juhuesitus)",
|
||||
"shuffle_off": "Juhuesitus keelatud",
|
||||
"skip": "Jäta vahele",
|
||||
"skip_back": "Hüppa tagasi",
|
||||
"skip_forward": "Hüppa edasi",
|
||||
"stop": "Peata",
|
||||
"toggleFullscreenPlayer": "Täisekraani lüliti",
|
||||
"trackRadio": "Pala raadio",
|
||||
"unfavorite": "Eemalda lemmikutest",
|
||||
"pause": "Paus",
|
||||
"viewQueue": "Kuva järjekord",
|
||||
"sleepTimer": "Unetaimer",
|
||||
"sleepTimer_endOfSong": "Praeguse loo lõpp",
|
||||
"sleepTimer_endOfAlbum": "Praeguse albumi lõpp",
|
||||
"sleepTimer_minutes": "{{count}} min",
|
||||
"sleepTimer_hours": "{{count}} t",
|
||||
"sleepTimer_custom": "Kohandatud",
|
||||
"sleepTimer_off": "Väljas",
|
||||
"sleepTimer_timeRemaining": "{{time}} jäänud",
|
||||
"sleepTimer_setCustom": "Sea taimer",
|
||||
"sleepTimer_cancel": "Tühista taimer",
|
||||
"scrobbleForceSubmit": "Sunnitud kraasimine"
|
||||
},
|
||||
"queryBuilder": {
|
||||
"standardTags": "Standardsildid",
|
||||
"customTags": "Kohandatud sildid"
|
||||
},
|
||||
"releaseType": {
|
||||
"primary": {
|
||||
"album": "$t(entity.album, {\"count\": 1})",
|
||||
"broadcast": "Saade",
|
||||
"ep": "EP",
|
||||
"other": "Muu",
|
||||
"single": "Singel"
|
||||
},
|
||||
"secondary": {
|
||||
"audiobook": "Heliraamat",
|
||||
"audioDrama": "Kuuldemäng",
|
||||
"compilation": "Kogumik",
|
||||
"djMix": "DJ miks",
|
||||
"demo": "Demo",
|
||||
"fieldRecording": "Välisalvestis",
|
||||
"interview": "Intervjuu",
|
||||
"live": "Live",
|
||||
"mixtape": "Mixtape",
|
||||
"remix": "Remiks",
|
||||
"soundtrack": "Filmimuusika",
|
||||
"spokenWord": "Luule ja kõne"
|
||||
}
|
||||
},
|
||||
"setting": {
|
||||
"autoDJ": "Automaatne DJ",
|
||||
"autoDJ_itemCount": "Üksuste arv",
|
||||
"autoDJ_itemCount_description": "Järjekorda lisatavate üksuste arv",
|
||||
"autoDJ_timing": "Ajastus",
|
||||
"autoDJ_timing_description": "Lugude arv järjekorras enne automaatse DJ käivitumist",
|
||||
"autoDJ_mode": "Režiim",
|
||||
"autoDJ_mode_albums": "Albumid",
|
||||
"autoDJ_mode_description": "Vali, kas lisada järjekorda üksikud lood või terved albumid",
|
||||
"autoDJ_mode_songs": "Lood",
|
||||
"autoDJ_enabled": "Luba automaatne DJ",
|
||||
"autoDJ_albumStrategy": "Albumi valiku režiim",
|
||||
"autoDJ_songStrategy": "Laulu valiku režiim",
|
||||
"autoDJ_strategy_option_library_random": "Juhuslik",
|
||||
"autoDJ_strategy_option_similar": "Sarnased",
|
||||
"autosave": "Salvesta esitusjärjekord automaatselt",
|
||||
"autosave_description": "Luba järjekorra automaatne salvestamine serverisse. See on võimalik ainult Navidrome/Subsonic serveri puhul ning esitusjärjekorras ei tohi olla erinevatest allikatest pärit lugusid.",
|
||||
"autosaveCount": "Järjekorra automaatse salvestamise sagedus",
|
||||
"autosaveCount_description": "Mitu loo vahetust tehakse enne järjekorra salvestamist. 1 (miinimum) tähendab, et salvestatakse igal loo vahetusel",
|
||||
"accentColor_description": "Määrab rakenduse rõhuvärvi",
|
||||
"accentColor": "Rõhuvärv",
|
||||
"useThemeAccentColor": "Kasuta teema rõhuvärvi",
|
||||
"useThemeAccentColor_description": "Kasuta kohandatud rõhuvärvi asemel valitud teema põhivärvi",
|
||||
"useThemePrimaryShade": "Kasuta teema põhitooni",
|
||||
"useThemePrimaryShade_description": "Kasuta valitud teemas määratletud põhitooni põhivärvi variantide jaoks",
|
||||
"primaryShade": "Põhitoon",
|
||||
"primaryShade_description": "Alista nuppude, linkide ja muude põhivärvi elementide jaoks kasutatud põhitoon (0–9)",
|
||||
"albumBackground_description": "Lisab albumi lehtedele albumikujundusega taustapildi",
|
||||
"albumBackground": "Albumi taustapilt",
|
||||
"albumBackgroundBlur_description": "Reguleerib albumi taustapildi hägustamise määra",
|
||||
"albumBackgroundBlur": "Albumi tausta hägustuse määr",
|
||||
"analyticsDisable": "Keeldu kasutusstatistika kogumisest",
|
||||
"analyticsDisable_description": "Arendajale saadetakse anonüümseid kasutusandmeid, et aidata rakendust paremaks muuta",
|
||||
"analyticsEnable": "Jaga kasutusstatistikat",
|
||||
"analyticsEnable_description": "Arendajale saadetakse anonüümseid kasutusandmeid, et aidata rakendust paremaks muuta",
|
||||
"applicationHotkeys_description": "Seadista rakenduse kiirklahve. Vali märkeruut, et määrata see globaalseks kiirklahviks (ainult töölaual)",
|
||||
"applicationHotkeys": "Rakenduse kiirklahvid",
|
||||
"artistBackground": "Esitaja taustapilt",
|
||||
"artistBackground_description": "Lisab esitaja lehtede taustaks esitaja pildi",
|
||||
"artistBackgroundBlur": "Esitaja taustapildi hägususe määr",
|
||||
"artistBackgroundBlur_description": "Reguleerib esitaja taustapildi hägususe määra",
|
||||
"customCss_description": "Kohandatud CSS-i sisu. Märkus: atribuudid 'content' ja välised lingid pole lubatud. Sisu eelvaade on kuvatud allpool. Täiendavad väljad, mida sa ei määranud, on lisatud koodi puhastamise tõttu. Töölaud: Feishin loeb ja kirjutab faili 'custom.css' rakenduse seadistuste kaustas ning laadib selle uuesti, kui fail muutub",
|
||||
"artistConfiguration": "Albumi esitaja lehe seadistamine",
|
||||
"artistConfiguration_description": "Seadista, milliseid elemente albumi esitaja lehel kuvatakse ja mis järjekorras",
|
||||
"artistReleaseTypeConfiguration": "Esitaja väljaandetüüpide seadistamine",
|
||||
"artistReleaseTypeConfiguration_description": "Seadista, milliseid väljaandetüüpe albumi esitaja lehel kuvatakse ja mis järjekorras",
|
||||
"audioDevice_description": "Vali taasesituseks kasutatav heliseade",
|
||||
"audioDevice": "Heliseade",
|
||||
"audioExclusiveMode_description": "Lülita sisse eksklusiivne väljundrežiim. Selles režiimis on süsteemi muud helid tavaliselt blokeeritud ja heli suudab edastada ainult mpv. Kui see on sisse lülitatud, siis visuaaliseerija helihõive ei tööta",
|
||||
"audioExclusiveMode": "Eksklusiivne helirežiim",
|
||||
"audioPlayer_description": "Vali taasesituseks kasutatav pleier",
|
||||
"audioPlayer": "Pleier",
|
||||
"buttonSize_description": "Juhtpaneeli nuppude suurus",
|
||||
"buttonSize": "Mängijariba nuppude suurus",
|
||||
"clearCache_description": "Feishini täielik puhastus. Lisaks Feishini vahemälule tühjendatakse ka brauseri vahemälu (salvestatud pildid ja muud failid). Serveri sisselogimisandmed ja seaded säilitatakse",
|
||||
"clearCache": "Tühjenda brauseri vahemälu",
|
||||
"clearCacheSuccess": "Vahemälu tühjendati edukalt",
|
||||
"clearQueryCache_description": "Feishini tavapuhastus. See värskendab esitusloendid ja lugude metaandmed ning lähtestab salvestatud laulusõnad. Seaded, serveri sisselogimisandmed ja vahemällu salvestatud pildid säilitatakse",
|
||||
"clearQueryCache": "Tühjenda Feishini vahemälu",
|
||||
"contextMenu_description": "Võimaldab peita elemente, mida kuvatakse menüüs, kui teed mistahes elemendil paremklõpsu. Märkimata elemendid peidetakse",
|
||||
"contextMenu": "Kontekstimenüü (paremklõps) seadistamine",
|
||||
"crossfadeDuration_description": "Määrab sujuva ülemineku kestuse",
|
||||
"crossfadeDuration": "Sujuva ülemineku kestus",
|
||||
"crossfadeStyle": "Sujuva ülemineku stiil",
|
||||
"crossfadeStyle_description": "Vali pleieri sujuva ülemineku stiil",
|
||||
"customCss": "Kohandatud CSS",
|
||||
"customCssEnable_description": "Luba kohandatud CSS-i kirjutamine",
|
||||
"customCssEnable": "Luba kohandatud CSS",
|
||||
"customCssNotice": "Hoiatus: kuigi sisendit kontrollitakse (funktsioonid URL() ja 'content:' pole lubatud), võib kohandatud CSS-i kasutamine liidese muutmise tõttu siiski riske kaasa tuua",
|
||||
"customFontPath_description": "Määrab rakenduses kasutatava kohandatud fondi asukoha",
|
||||
"customFontPath": "Kohandatud fondi asukoht",
|
||||
"automaticUpdates": "Automaatsed uuendused",
|
||||
"automaticUpdates_description": "Otsi ja paigalda uuendusi automaatselt",
|
||||
"releaseChannel_optionAlpha": "Alfa (öine)",
|
||||
"releaseChannel_optionBeta": "Beeta",
|
||||
"releaseChannel_optionLatest": "Uusim",
|
||||
"releaseChannel": "Uuenduskanal",
|
||||
"releaseChannel_description": "Vali automaatsete uuenduste jaoks stabiilne, beeta- või alfaversioon (öised versioonid)",
|
||||
"disableLibraryUpdateOnStartup": "Keela uuenduste otsimine rakenduse käivitumisel",
|
||||
"discordApplicationId_description": "Rakenduse ID {{discord}} olekuteabe (rich presence) jaoks (vaikimisi {{defaultId}})",
|
||||
"discordApplicationId": "{{discord}} rakenduse ID",
|
||||
"discordDisplayType_artistname": "Esitaja nimi",
|
||||
"discordDisplayType_description": "Muudab sinu olekus seda, mida sa parajasti kuulad",
|
||||
"discordDisplayType_songname": "Loo nimi",
|
||||
"discordDisplayType": "{{discord}} kohaloleku kuvamise tüüp",
|
||||
"discordIdleStatus_description": "Kui see on lubatud, uuendatakse olekut siis, kui pleier on tegevuseta",
|
||||
"discordIdleStatus": "Kuva tegevuseta olekut",
|
||||
"discordLinkType_description": "Lisab platvormide {{lastfm}} või {{musicbrainz}} välised lingid laulu ja esitaja väljadele keskkonnas {{discord}}. {{musicbrainz}} on kõige täpsem, kuid nõuab siltide olemasolu ega paku esitajate linke, samas kui {{lastfm}} peaks lingi alati tagama. Ei tee täiendavaid võrgupäringuid",
|
||||
"discordLinkType_mbz_lastfm": "{{musicbrainz}}, vajadusel varulahendusena {{lastfm}}",
|
||||
"discordLinkType_none": "$t(common.none)",
|
||||
"discordLinkType": "{{discord}} olekuteabe lingid",
|
||||
"discordListening_description": "Kuva olekuks „kuulab“, mitte „mängib“",
|
||||
"discordListening": "Kuva olekuks „kuulab\"",
|
||||
"discordPausedStatus_description": "Kui see on lubatud, kuvatakse olekut ka siis, kui pleier on pausil",
|
||||
"discordPausedStatus": "Kuva olekut pausi ajal",
|
||||
"discordRichPresence": "{{discord}} olekuteave",
|
||||
"discordRichPresence_description": "Luba esituse oleku kuvamine {{discord}} olekuteabes. Pildi võtmed on: {{icon}}, {{playing}} ja {{paused}}",
|
||||
"discordServeImage": "Laadi {{discord}} pildid serverist",
|
||||
"discordServeImage_description": "Jaga {{discord}} olekuteabe jaoks albumikaane pilte otse serverist endast; see funktsioon on saadaval ainult Jellyfini ja Navidrome puhul. {{discord}} kasutab piltide hankimiseks botti, mis tähendab, et sinu server peab olema avalikust internetist ligipääsetav",
|
||||
"discordStateIcon": "Kuva esituse ikoon",
|
||||
"discordStateIcon_description": "Näita olekuteabes väikest mängimise ikooni. Pausiikooni kuvatakse alati, kui funktsioon „Kuva olekut pausi ajal“ on sisse lülitatud",
|
||||
"discordUpdateInterval": "{{discord}} oleku uuendamise sagedus",
|
||||
"discordUpdateInterval_description": "Aeg sekundites iga värskenduse vahel (vähemalt 15 sekundit)",
|
||||
"enableAutoTranslation_description": "Tõlgi laulusõnad laadimisel automaatselt",
|
||||
"enableAutoTranslation": "Luba automaatne tõlge",
|
||||
"enableRemote_description": "Lülitab sisse kaugjuhtimisserveri, mis võimaldab teistel seadmetel seda rakendust juhtida",
|
||||
"enableRemote": "Luba kaugjuhtimisserver",
|
||||
"exitToTray_description": "Sulge rakendus süsteemisalve",
|
||||
"exitToTray": "Välju salve",
|
||||
"exportImportSettings_control_description": "Ekspordi ja impordi seaded JSON-failina",
|
||||
"exportImportSettings_control_exportText": "Ekspordi seaded",
|
||||
"exportImportSettings_control_importText": "Impordi seaded",
|
||||
"exportImportSettings_control_title": "Impordi / ekspordi seadeid",
|
||||
"exportImportSettings_destructiveWarning": "Seadete importimine kirjutab praegused andmed üle. Palun vaata ülalolev info üle enne, kui klõpsad allolevale nupule „Impordi“!",
|
||||
"exportImportSettings_importBtn": "Impordi seaded",
|
||||
"exportImportSettings_importModalTitle": "Impordi Feishini seaded",
|
||||
"exportImportSettings_importSuccess": "Seaded on edukalt imporditud!",
|
||||
"exportImportSettings_notValidJSON": "Edastatud fail ei ole korrektne JSON",
|
||||
"exportImportSettings_offendingKeyError": "\"{{offendingKey}}\" on vale - {{reason}}",
|
||||
"externalLinks_description": "Lubab esitaja ja albumi lehtedel näidata väliseid linke (Last.fm, MusicBrainz)",
|
||||
"externalLinks": "Kuva välised lingid",
|
||||
"followCurrentSong_description": "Keri esitusjärjekord automaatselt hetkel mängiva looni",
|
||||
"followCurrentSong": "Jälgi praegust lugu",
|
||||
"followLyric_description": "Keri laulusõnad praegusesse kohta",
|
||||
"followLyric": "Jälgi laulusõnu",
|
||||
"font_description": "Määrab rakenduses kasutatava fondi",
|
||||
"font": "Font",
|
||||
"fontType_description": "Sisseehitatud font valib ühe Feishini pakutavatest fontidest. Süsteemi font võimaldab valida suvalise operatsioonisüsteemi pakutava fondi. Kohandatud valik lubab sul sisestada oma fondi",
|
||||
"fontType_optionBuiltIn": "Sisseehitatud font",
|
||||
"fontType_optionCustom": "Kohandatud font",
|
||||
"fontType_optionSystem": "Süsteemi font",
|
||||
"fontType": "Fondi tüüp",
|
||||
"gaplessAudio_description": "Määrab mpv jaoks pausideta esituse seaded",
|
||||
"gaplessAudio_optionWeak": "Nõrk (soovitatav)",
|
||||
"gaplessAudio": "Pausideta esitus",
|
||||
"globalMediaHotkeys_description": "Luba või keela süsteemi meediaklahvide kasutamine esituse juhtimiseks",
|
||||
"globalMediaHotkeys": "Globaalsed meedia kiirklahvid",
|
||||
"homeConfiguration_description": "Seadista, milliseid elemente avalehel kuvatakse ja mis järjekorras",
|
||||
"homeConfiguration": "Avalehe seadistus",
|
||||
"homeFeature_description": "Määrab, kas avalehel kuvatakse suurt esitluskarusselli",
|
||||
"homeFeature": "Avalehe esitluskarussell",
|
||||
"homeFeatureStyle_description": "Määrab avalehe karusselli stiili",
|
||||
"homeFeatureStyle": "Avalehe karusselli stiil",
|
||||
"homeFeatureStyle_optionMultiple": "Mitu",
|
||||
"homeFeatureStyle_optionSingle": "Üks",
|
||||
"hotkey_browserBack": "Tagasi",
|
||||
"hotkey_browserForward": "Edasi",
|
||||
"hotkey_favoriteCurrentSong": "Lisa $t(common.currentSong) lemmikuks",
|
||||
"hotkey_favoritePreviousSong": "Lisa $t(common.previousSong) lemmikuks",
|
||||
"hotkey_globalSearch": "Globaalne otsing",
|
||||
"hotkey_localSearch": "Otsing lehelt",
|
||||
"hotkey_listNavigateToPage": "Liigu nimekirjast üksuse lehele",
|
||||
"hotkey_listPlayDefault": "Esita loendist",
|
||||
"hotkey_listPlayLast": "Lisa järjekorra lõppu",
|
||||
"hotkey_listPlayNext": "Esita järgmisena",
|
||||
"hotkey_listPlayNow": "Esita kohe",
|
||||
"hotkey_listShowPlayingSong": "Kuva esitatav lugu loendis",
|
||||
"hotkey_navigateHome": "Liigu avalehele",
|
||||
"hotkey_playbackNext": "Järgmine lugu",
|
||||
"hotkey_playbackPause": "Paus",
|
||||
"hotkey_playbackPlay": "Esita",
|
||||
"hotkey_playbackPlayPause": "Esita / peata",
|
||||
"hotkey_playbackPrevious": "Eelmine lugu",
|
||||
"hotkey_playbackStop": "Peata",
|
||||
"hotkey_rate0": "Eemalda hinne",
|
||||
"hotkey_rate1": "Hinne 1 tärn",
|
||||
"hotkey_rate2": "Hinne 2 tärni",
|
||||
"hotkey_rate3": "Hinne 3 tärni",
|
||||
"hotkey_rate4": "Hinne 4 tärni",
|
||||
"hotkey_rate5": "Hinne 5 tärni",
|
||||
"hotkey_skipBackward": "Hüppa tagasi",
|
||||
"hotkey_skipForward": "Hüppa edasi",
|
||||
"hotkey_toggleCurrentSongFavorite": "Muuda $t(common.currentSong) lemmikuks olekut",
|
||||
"hotkey_toggleFullScreenPlayer": "Lülita täisekraanil pleier sisse/välja",
|
||||
"hotkey_togglePreviousSongFavorite": "Muuda $t(common.previousSong) lemmikuks olekut",
|
||||
"hotkey_toggleQueue": "Lülita järjekord sisse/välja",
|
||||
"hotkey_toggleRepeat": "Lülita kordus sisse/välja",
|
||||
"hotkey_toggleShuffle": "Lülita juhuesitus sisse/välja",
|
||||
"hotkey_unfavoriteCurrentSong": "Eemalda $t(common.currentSong) lemmikutest",
|
||||
"hotkey_unfavoritePreviousSong": "Eemalda $t(common.previousSong) lemmikutest",
|
||||
"hotkey_volumeDown": "Heli vaiksemaks",
|
||||
"hotkey_volumeMute": "Vaigista",
|
||||
"hotkey_volumeUp": "Heli kõvemaks",
|
||||
"hotkey_zoomIn": "Suumi sisse",
|
||||
"hotkey_zoomOut": "Suumi välja",
|
||||
"imageAspectRatio_description": "Kui see on sisse lülitatud, kuvatakse albumipilte nende algse kuvasuhtega. Piltide puhul, mis pole 1:1 suhtega, jääb ülejäänud ala tühjaks",
|
||||
"imageAspectRatio": "Kuva kaanepilte algses kuvasuhtes",
|
||||
"language": "Keel",
|
||||
"language_description": "Määrab rakenduse keele ($t(common.restartRequired))",
|
||||
"lastfm_description": "Kuva esitaja/albumi lehtedel Last.fm linke",
|
||||
"lastfm": "Kuva Last.fm linke",
|
||||
"listenbrainz_description": "Kuva esitaja/albumi lehtedel ListenBrainz linke",
|
||||
"listenbrainz": "Kuva ListenBrainz linke",
|
||||
"lastfmApiKey_description": "{{lastfm}} API võti. Vajalik kaanepiltide jaoks",
|
||||
"lastfmApiKey": "{{lastfm}} API võti",
|
||||
"lyricFetch_description": "Hangi laulusõnad erinevatest veebiallikatest",
|
||||
"lyricFetch": "Hangi laulusõnad internetist",
|
||||
"lyricFetchProvider_description": "Vali laulusõnade allikad",
|
||||
"lyricFetchProvider": "Laulusõnade allikad",
|
||||
"lyricOffset_description": "Nihuta laulusõnu määratud millisekundite võrra",
|
||||
"lyricOffset": "Laulusõnade nihe (ms)",
|
||||
"logLevel": "Logimise tase",
|
||||
"logLevel_description": "Määrab kuvatava logimise miinimumtaseme. „Silumine“ näitab kõiki logisid, „viga“ ainult vigu",
|
||||
"logLevel_optionDebug": "Silumine",
|
||||
"logLevel_optionError": "Viga",
|
||||
"logLevel_optionInfo": "Info",
|
||||
"logLevel_optionWarn": "Hoiata",
|
||||
"minimizeToTray_description": "Minimeeri rakendus süsteemisalve",
|
||||
"minimizeToTray": "Minimeeri salve",
|
||||
"minimumScrobblePercentage_description": "Minimaalne laulu kuulamise protsent, mis peab olema läbitud, enne kui see kraasitakse",
|
||||
"minimumScrobblePercentage": "Minimaalne kestus kraasimiseks (protsent)",
|
||||
"minimumScrobbleSeconds_description": "Minimaalne kuulamise kestus sekundites, mis peab olema läbitud, enne kui see kraasitakse",
|
||||
"minimumScrobbleSeconds": "Minimaalne aeg kraasimiseks (sekundit)",
|
||||
"scrobble_description": "Kraasi esitused meediaserverisse",
|
||||
"scrobble": "Kraasi",
|
||||
"mpvExecutablePath_description": "Määrab mpv käivitusfaili asukoha. Kui väli jääb tühjaks, kasutatakse vaikeasukohta",
|
||||
"mpvExecutablePath": "mpv käivitusfaili asukoht",
|
||||
"mpvExtraParameters": "mpv lisaparameetrid",
|
||||
"mpvExtraParameters_description": "mpv-le edastatavad lisasätted",
|
||||
"mpvExtraParameters_help": "Üks igal real",
|
||||
"musicbrainz_description": "Kuva esitaja/albumi lehtedel linke MusicBrainzile, kui MusicBrainzi ID on olemas",
|
||||
"musicbrainz": "Kuva MusicBrainzi linke",
|
||||
"qobuz_description": "Kuva esitaja/albumi lehtedel Qobuz linke",
|
||||
"qobuz": "Kuva Qobuzi linke",
|
||||
"spotify_description": "Kuva artisti/albumi lehtedel Spotify linke"
|
||||
},
|
||||
"datetime": {
|
||||
"minuteShort": "m",
|
||||
"secondShort": "s",
|
||||
"hourShort": "t",
|
||||
"dayShort": "p"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,7 +49,8 @@
|
||||
"sleepTimer_setCustom": "Définir le minuteur",
|
||||
"sleepTimer_cancel": "Annuler le minuteur",
|
||||
"albumRadio": "Radio d'album",
|
||||
"scrobbleForceSubmit": "Forcer le scrobble"
|
||||
"scrobbleForceSubmit": "Forcer le scrobble",
|
||||
"sleepTimer_endOfAlbum": "Fin de l'album actuel"
|
||||
},
|
||||
"action": {
|
||||
"editPlaylist": "Éditer $t(entity.playlist, {\"count\": 1})",
|
||||
@@ -226,7 +227,8 @@
|
||||
"rename": "Renommer",
|
||||
"newVersionAvailable": "Une nouvelle version est disponible",
|
||||
"numberOfResults": "{{numberOfResults}} résultats",
|
||||
"back": "Retour"
|
||||
"back": "Retour",
|
||||
"openFolder": "Ouvrir le dossier"
|
||||
},
|
||||
"error": {
|
||||
"remotePortWarning": "Redémarrer le serveur pour appliquer le nouveau port",
|
||||
@@ -728,7 +730,7 @@
|
||||
"translationTargetLanguage": "Langue cible de traduction",
|
||||
"trayEnabled": "Afficher la barre d’état système",
|
||||
"translationApiProvider_description": "Fournisseur d'API pour la traduction",
|
||||
"customCss_description": "Contenu CSS personnalisé. Remarque : les propriétés 'content' et les URL distantes ne sont pas autorisées. Un aperçu de votre contenu est affiché ci-dessous. Des champs supplémentaires que vous n'avez pas définis sont présents en raison d'assainissement",
|
||||
"customCss_description": "Contenu CSS personnalisé. Remarque : les propriétés 'content' et les URL distantes ne sont pas autorisées. Un aperçu de votre contenu est affiché ci-dessous. Des champs supplémentaires que vous n'avez pas définis sont présents en raison d'assainissement. Application de Bureau uniquement: feishin lit et écrit le fichier custom.css dans le répertoire de configuration de l'application et le recharge lorsque celui-ci est modifié",
|
||||
"translationApiKey": "Clé API de traduction",
|
||||
"translationTargetLanguage_description": "Langue cible pour la traduction",
|
||||
"trayEnabled_description": "Afficher/masquer l’icône/le menu dans la barre d’état système. si désactivé, désactive également la réduction/fermeture vers la barre d’état système",
|
||||
@@ -813,7 +815,7 @@
|
||||
"queryBuilderCustomFields_description": "Ajouter des champs personnalisés à utiliser dans les constructeurs de requêtes",
|
||||
"autoDJ": "DJ auto",
|
||||
"autoDJ_itemCount": "Nombre d'entrée",
|
||||
"autoDJ_itemCount_description": "Le nombre d'entrées tentées d'être ajoutées à la file d'attente lorsque le DJ auto est activé",
|
||||
"autoDJ_itemCount_description": "Le nombre d'entrées tentées d'être ajoutées à la file d'attente",
|
||||
"autoDJ_timing": "Timing",
|
||||
"autoDJ_timing_description": "Le nombre de titres restant dans la file d'attente avant le déclenchement du DJ auto",
|
||||
"followCurrentSong_description": "Défiler automatiquement la file d'attente jusqu'au titre en cours",
|
||||
@@ -915,7 +917,16 @@
|
||||
"sidebarPlaylistFolderTreeIndent": "Indentation de l'arbre",
|
||||
"sidebarPlaylistMode_description": "Comment chaque liste de lecture est affichée dans la barre latérale",
|
||||
"sidebarPlaylistMode": "Mode de liste de lecture de la barre latérale",
|
||||
"sidebarPlaylistMode_optionCompact": "Compacte"
|
||||
"sidebarPlaylistMode_optionCompact": "Compacte",
|
||||
"autoDJ_mode": "Mode",
|
||||
"autoDJ_mode_albums": "Albums",
|
||||
"autoDJ_mode_description": "Choisissez d'ajouter des titres ou des albums entiers à la file d'attente",
|
||||
"autoDJ_mode_songs": "Titres",
|
||||
"autoDJ_enabled": "Activer le DJ auto",
|
||||
"autoDJ_albumStrategy": "Mode de sélection d'album",
|
||||
"autoDJ_songStrategy": "Mode de sélection de titre",
|
||||
"autoDJ_strategy_option_library_random": "Aléatoire",
|
||||
"autoDJ_strategy_option_similar": "Similaire"
|
||||
},
|
||||
"form": {
|
||||
"deletePlaylist": {
|
||||
@@ -1009,7 +1020,12 @@
|
||||
"input_played": "Filtre de lecture",
|
||||
"input_played_optionAll": "Toutes les pistes",
|
||||
"input_played_optionUnplayed": "Seulement les pistes non jouées",
|
||||
"input_played_optionPlayed": "Seulement les pistes jouées"
|
||||
"input_played_optionPlayed": "Seulement les pistes jouées",
|
||||
"input_kind_songs": "Titres",
|
||||
"input_kind_albums": "Albums",
|
||||
"input_kind": "Sélections aléatoires",
|
||||
"input_limit_albums": "Combien d'albums ?",
|
||||
"input_limit_songs": "Combien de titres ?"
|
||||
},
|
||||
"createRadioStation": {
|
||||
"success": "Station radio créée avec succès",
|
||||
|
||||
+39
-23
@@ -49,7 +49,8 @@
|
||||
"albumRadio": "アルバム・ラジオ",
|
||||
"artistRadio": "アーティストラジオ",
|
||||
"trackRadio": "ラジオを追跡する",
|
||||
"scrobbleForceSubmit": "強制 Scrobble"
|
||||
"scrobbleForceSubmit": "強制 Scrobble",
|
||||
"sleepTimer_endOfAlbum": "現在のアルバムの終了"
|
||||
},
|
||||
"setting": {
|
||||
"crossfadeStyle_description": "オーディオプレーヤーが使用するクロスフェードのスタイルを選択します",
|
||||
@@ -430,12 +431,21 @@
|
||||
"playerbarWaveformStretch_description": "波形を伸縮させて、利用可能なスペースを埋めます",
|
||||
"preventSuspendOnPlayback_description": "音楽再生中にアプリケーションが停止しないようにします",
|
||||
"preventSuspendOnPlayback": "再生の中断を防止する",
|
||||
"hotkey_listShowPlayingSong": "再生中の曲をリストに表示"
|
||||
"hotkey_listShowPlayingSong": "再生中の曲をリストに表示",
|
||||
"autoDJ_mode": "モード",
|
||||
"autoDJ_mode_albums": "アルバム",
|
||||
"autoDJ_mode_description": "キューに曲を追加するか、アルバム全体を追加するかを選択してください。",
|
||||
"autoDJ_mode_songs": "曲",
|
||||
"autoDJ_enabled": "Auto DJを有効にする",
|
||||
"autoDJ_albumStrategy": "アルバム選択モード",
|
||||
"autoDJ_songStrategy": "選曲モード",
|
||||
"autoDJ_strategy_option_library_random": "ランダム",
|
||||
"autoDJ_strategy_option_similar": "類似"
|
||||
},
|
||||
"action": {
|
||||
"editPlaylist": "$t(entity.playlist, {\"count\": 1}) を編集",
|
||||
"goToPage": "ページへ移動",
|
||||
"moveToTop": "先頭に移動",
|
||||
"moveToTop": "一番上へ移動",
|
||||
"clearQueue": "キューをクリア",
|
||||
"addToFavorites": "$t(entity.favorite, {\"count\": 2}) に追加",
|
||||
"addToPlaylist": "$t(entity.playlist, {\"count\": 1}) に追加",
|
||||
@@ -446,9 +456,9 @@
|
||||
"deletePlaylist": "$t(entity.playlist, {\"count\": 1}) を削除",
|
||||
"removeFromQueue": "キューから削除",
|
||||
"deselectAll": "すべて選択解除",
|
||||
"moveToBottom": "末尾に移動",
|
||||
"setRating": "評価を設定する",
|
||||
"toggleSmartPlaylistEditor": "$t(entity.smartPlaylist) エディタの切り替え",
|
||||
"moveToBottom": "一番下へ移動",
|
||||
"setRating": "評価を設定",
|
||||
"toggleSmartPlaylistEditor": "$t(entity.smartPlaylist) エディターを切り替え",
|
||||
"removeFromFavorites": "$t(entity.favorite, {\"count\": 2}) から削除",
|
||||
"openIn": {
|
||||
"lastfm": "Last.fm で開く",
|
||||
@@ -457,9 +467,9 @@
|
||||
"listenbrainz": "ListenBrainz で開く",
|
||||
"qobuz": "Qobuz で開く"
|
||||
},
|
||||
"moveToNext": "次",
|
||||
"moveToNext": "次へ進む",
|
||||
"downloadStarted": "{{count}} 曲のダウンロードを開始しました",
|
||||
"moveItems": "曲を移動",
|
||||
"moveItems": "項目を移動",
|
||||
"shuffle": "シャッフル",
|
||||
"shuffleAll": "すべてシャッフル",
|
||||
"shuffleSelected": "選択した曲をシャッフル",
|
||||
@@ -471,28 +481,28 @@
|
||||
"moveDown": "下に移動",
|
||||
"holdToMoveToTop": "押し続けると一番上に移動します",
|
||||
"holdToMoveToBottom": "押し続けると一番下に移動します",
|
||||
"openApplicationDirectory": "アプリケーションディレクトリを開く",
|
||||
"openApplicationDirectory": "アプリディレクトリを開く",
|
||||
"selectRangeOfItems": "項目の範囲を選択",
|
||||
"addOrRemoveFromSelection": "選択に追加または削除",
|
||||
"addOrRemoveFromSelection": "選択に追加または選択から除外",
|
||||
"goToCurrent": "現在の項目へ移動",
|
||||
"collapseAllFolders": "すべてのフォルダーを折りたたむ",
|
||||
"expandAllFolders": "すべてのフォルダーを展開する"
|
||||
},
|
||||
"common": {
|
||||
"backward": "戻る",
|
||||
"backward": "逆行",
|
||||
"increase": "増加",
|
||||
"rating": "評価",
|
||||
"bpm": "BPM",
|
||||
"refresh": "再読み込み",
|
||||
"unknown": "不明",
|
||||
"areYouSure": "実行しますか?",
|
||||
"areYouSure": "実行してもよろしいですか?",
|
||||
"edit": "編集",
|
||||
"favorite": "お気に入り",
|
||||
"left": "左側",
|
||||
"save": "保存",
|
||||
"right": "右側",
|
||||
"currentSong": "現在の $t(entity.track, {\"count\": 1})",
|
||||
"collapse": "折りたたみ",
|
||||
"collapse": "折りたたむ",
|
||||
"trackNumber": "トラック",
|
||||
"descending": "降順",
|
||||
"add": "追加",
|
||||
@@ -534,7 +544,7 @@
|
||||
"confirm": "確認",
|
||||
"resetToDefault": "デフォルトにリセット",
|
||||
"home": "ホーム",
|
||||
"comingSoon": "近日利用可能になる予定です…",
|
||||
"comingSoon": "近日公開…",
|
||||
"reset": "リセット",
|
||||
"channel_other": "チャンネル",
|
||||
"disable": "無効",
|
||||
@@ -543,7 +553,7 @@
|
||||
"menu": "メニュー",
|
||||
"restartRequired": "再起動が必要です",
|
||||
"previousSong": "前の $t(entity.track, {\"count\": 1})",
|
||||
"noResultsFromQuery": "条件にマッチするものがありません",
|
||||
"noResultsFromQuery": "クエリに一致する結果がありません",
|
||||
"quit": "終了",
|
||||
"expand": "展開",
|
||||
"search": "検索",
|
||||
@@ -553,11 +563,11 @@
|
||||
"random": "ランダム",
|
||||
"size": "サイズ",
|
||||
"biography": "バイオグラフィー",
|
||||
"note": "ノート",
|
||||
"note": "注記",
|
||||
"explicitStatus": "明示的なステータス",
|
||||
"additionalParticipants": "追加参加者",
|
||||
"newVersion": "新しいバージョン ({{version}}) がインストールされました",
|
||||
"viewReleaseNotes": "リリースノートを表示する",
|
||||
"viewReleaseNotes": "リリースノートを表示",
|
||||
"bitDepth": "ビット深度",
|
||||
"close": "閉じる",
|
||||
"codec": "コーデック",
|
||||
@@ -565,7 +575,7 @@
|
||||
"sampleRate": "サンプルレート",
|
||||
"preview": "プレビュー",
|
||||
"private": "プライベート",
|
||||
"public": "パブリック",
|
||||
"public": "公開",
|
||||
"share": "共有",
|
||||
"tags": "タグ",
|
||||
"trackGain": "トラックゲイン",
|
||||
@@ -598,7 +608,8 @@
|
||||
"newVersionAvailable": "新しいバージョンが利用可能です",
|
||||
"numberOfResults": "{{numberOfResults}} 件の結果",
|
||||
"grouping": "グループ化",
|
||||
"back": "戻る"
|
||||
"back": "戻る",
|
||||
"openFolder": "フォルダーを開く"
|
||||
},
|
||||
"table": {
|
||||
"config": {
|
||||
@@ -710,7 +721,7 @@
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"remotePortWarning": "新たなポート設定を適用するためサーバーを再起動してください",
|
||||
"remotePortWarning": "新しいポートの設定を反映させるには、サーバーを再起動してください",
|
||||
"systemFontError": "システムフォントを取得する際にエラーが発生しました",
|
||||
"playbackError": "メディアの再生開始時にエラーが発生しました",
|
||||
"remotePortError": "リモートサーバーのポート設定時にエラーが発生しました",
|
||||
@@ -725,7 +736,7 @@
|
||||
"serverNotSelectedError": "サーバーが選択されていません",
|
||||
"remoteDisableError": "リモートサーバーを$t(common.disable)にする際にエラーが発生しました",
|
||||
"mpvRequired": "MPV が必要です",
|
||||
"audioDeviceFetchError": "オーディオデバイスの取得時にエラーが発生しました",
|
||||
"audioDeviceFetchError": "オーディオデバイスを取得しようとした際にエラーが発生しました",
|
||||
"invalidServer": "無効なサーバー",
|
||||
"loginRateError": "ログイン試行回数が多すぎます。数秒後に再試行してください",
|
||||
"endpointNotImplementedError": "{{serverType}} にはエンドポイント {{endpoint}} が実装されていません",
|
||||
@@ -733,7 +744,7 @@
|
||||
"networkError": "ネットワークエラーが発生しました",
|
||||
"notificationDenied": "通知の許可が拒否されました。この設定は効果がありません",
|
||||
"openError": "ファイルを開けませんでした",
|
||||
"badValue": "無効なオプション「{{value}}」。この値は存在しません",
|
||||
"badValue": "無効なオプション「{{value}}」です。この値は存在しません",
|
||||
"multipleServerSaveQueueError": "再生キューに現在のサーバーに存在しない曲が 1 曲以上あります。これはサポートされていません",
|
||||
"noNetwork": "サーバーが利用できません",
|
||||
"noNetworkDescription": "このサーバーに接続できませんでした",
|
||||
@@ -1109,7 +1120,12 @@
|
||||
"input_played_optionAll": "すべてのトラック",
|
||||
"input_played_optionUnplayed": "未再生のトラックのみ",
|
||||
"input_played_optionPlayed": "再生されたトラックのみ",
|
||||
"input_played": "再生フィルター"
|
||||
"input_played": "再生フィルター",
|
||||
"input_kind_albums": "アルバム",
|
||||
"input_kind_songs": "曲",
|
||||
"input_kind": "ランダムピック",
|
||||
"input_limit_albums": "アルバムは何枚ですか?",
|
||||
"input_limit_songs": "何曲ですか?"
|
||||
},
|
||||
"saveQueue": {
|
||||
"success": "プレイキューをサーバーに保存しました"
|
||||
|
||||
+244
-24
@@ -17,7 +17,10 @@
|
||||
"removeFromPlaylist": "$t(entity.playlist, {\"count\": 1})에서 제거",
|
||||
"openIn": {
|
||||
"musicbrainz": "MusicBrainz에서 보기",
|
||||
"lastfm": "Last.fm에서 보기"
|
||||
"lastfm": "Last.fm에서 보기",
|
||||
"listenbrainz": "ListenBrainz에서 열기",
|
||||
"qobuz": "Qobuz에서 열기",
|
||||
"spotify": "Spotify에서 열기"
|
||||
},
|
||||
"viewPlaylists": "$t(entity.playlist, {\"count\": 2}) 보기",
|
||||
"setRating": "평점 지정",
|
||||
@@ -37,7 +40,10 @@
|
||||
"shuffleAll": "모두 섞기",
|
||||
"shuffleSelected": "선택항목 섞기",
|
||||
"viewMore": "더 보기",
|
||||
"openApplicationDirectory": "앱 디렉토리 열기"
|
||||
"openApplicationDirectory": "앱 디렉토리 열기",
|
||||
"goToCurrent": "현재 항목으로 이동",
|
||||
"collapseAllFolders": "모든 폴더 접기",
|
||||
"expandAllFolders": "모든 폴더 확장"
|
||||
},
|
||||
"common": {
|
||||
"translation": "번역",
|
||||
@@ -149,7 +155,18 @@
|
||||
"sort": "정렬",
|
||||
"gridRows": "행 그리드",
|
||||
"tableColumns": "테이블 열",
|
||||
"itemsMore": "{{count}}개 더"
|
||||
"itemsMore": "{{count}}개 더",
|
||||
"back": "뒤로",
|
||||
"example": "예",
|
||||
"openFolder": "폴더 열기",
|
||||
"filter_single": "미혼",
|
||||
"filter_multiple": "다중",
|
||||
"grouping": "그룹화",
|
||||
"mood": "기분",
|
||||
"numberOfResults": "결과 {{numberOfResults}}개",
|
||||
"retry": "다시 해 보다",
|
||||
"rename": "이름 변경",
|
||||
"newVersionAvailable": "새로운 버전이 나왔습니다"
|
||||
},
|
||||
"entity": {
|
||||
"albumWithCount_other": "{{count}} 앨범",
|
||||
@@ -197,7 +214,15 @@
|
||||
"localFontAccessDenied": "로컬 글꼴에 접근 거부되었습니다",
|
||||
"apiRouteError": "요청 보내기 실패",
|
||||
"badValue": "옵션이 없습니다 {{value}}. 이 값은 더이상 존재하지 않습니다",
|
||||
"notificationDenied": "알림에 대한 권한이 거부되었습니다. 이 설정은 변경되지 않습니다"
|
||||
"notificationDenied": "알림에 대한 권한이 거부되었습니다. 이 설정은 변경되지 않습니다",
|
||||
"invalidJson": "유효하지 않은 JSON",
|
||||
"multipleServerSaveQueueError": "재생 대기열에 현재 서버에 속하지 않은 곡이 하나 이상 포함되어 있습니다. 이는 지원되지 않습니다",
|
||||
"noNetwork": "서버를 이용할 수 없음",
|
||||
"noNetworkDescription": "이 서버에 연결할 수 없습니다",
|
||||
"playbackPausedDueToError": "오류로 인해 재생이 일시 중지되었습니다",
|
||||
"saveQueueFailed": "큐 저장 실패",
|
||||
"serverLockSingleServer": "서버가 잠겨 있을 때는 서버를 하나만 허용합니다",
|
||||
"settingsSyncError": "렌더러와 메인 프로세스의 설정 간에 불일치가 발견되었습니다. 변경 사항을 적용하려면 애플리케이션을 다시 시작하십시오"
|
||||
},
|
||||
"filter": {
|
||||
"title": "곡명",
|
||||
@@ -222,7 +247,7 @@
|
||||
"disc": "디스크",
|
||||
"bitrate": "비트 전송률",
|
||||
"biography": "바이오그래피",
|
||||
"channels": "$t(common.channel_other)",
|
||||
"channels": "$t(common.channel, {\"count\": 2})",
|
||||
"duration": "길이",
|
||||
"bpm": "BPM",
|
||||
"albumCount": "$t(entity.album, {\"count\": 2}) 앨범수",
|
||||
@@ -242,7 +267,10 @@
|
||||
"songCount": "곡 갯수",
|
||||
"toYear": "년도까지",
|
||||
"trackNumber": "트랙",
|
||||
"explicitStatus": "$t(common.explicitStatus)"
|
||||
"explicitStatus": "$t(common.explicitStatus)",
|
||||
"matchAnd": "그리고",
|
||||
"matchOr": "또는",
|
||||
"sortName": "이름 정렬"
|
||||
},
|
||||
"form": {
|
||||
"addServer": {
|
||||
@@ -258,7 +286,10 @@
|
||||
"input_legacyAuthentication": "레거시 인증 사용",
|
||||
"input_username": "유저 이름",
|
||||
"input_preferInstantMix": "즉석 믹스 선호",
|
||||
"input_preferInstantMixDescription": "비슷한 곳을 찾기 위해 즉석 믹스를 사용합니다. 이 명령을 수정하기 위한 플러그인을 설치한 경우 유용합니다"
|
||||
"input_preferInstantMixDescription": "비슷한 곳을 찾기 위해 즉석 믹스를 사용합니다. 이 명령을 수정하기 위한 플러그인을 설치한 경우 유용합니다",
|
||||
"input_preferRemoteUrl": "공개 URL 선호",
|
||||
"input_remoteUrl": "공개 URL",
|
||||
"input_remoteUrlPlaceholder": "선택 사항: 외부 기능을 위한 공개 URL"
|
||||
},
|
||||
"addToPlaylist": {
|
||||
"input_skipDuplicates": "중복 건너뛰기",
|
||||
@@ -266,7 +297,8 @@
|
||||
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||
"success": "$t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })에 $t(entity.trackWithCount, {\"count\": {{message}} })가 추가되었습니다",
|
||||
"create": "$t(entity.playlist, {\"count\": 1}) {{playlist}} 생성",
|
||||
"searchOrCreate": "$t(entity.playlist, {\"count\": 2}) 검색 또는 입력하여 새로 만들기"
|
||||
"searchOrCreate": "$t(entity.playlist, {\"count\": 2}) 검색 또는 입력하여 새로 만들기",
|
||||
"noneAdded": "$t(entity.playlist, {\"count\": 1}) '{{playlist}}'에 트랙이 추가되지 않았습니다"
|
||||
},
|
||||
"lyricSearch": {
|
||||
"title": "가사 검색",
|
||||
@@ -276,7 +308,11 @@
|
||||
"queryEditor": {
|
||||
"input_optionMatchAll": "모두 일치",
|
||||
"input_optionMatchAny": "무엇이든 일치",
|
||||
"title": "쿼리 편집기"
|
||||
"title": "쿼리 편집기",
|
||||
"addRuleGroup": "규칙 그룹 추가",
|
||||
"removeRuleGroup": "규칙 그룹 제거",
|
||||
"resetToDefault": "기본값으로 초기화",
|
||||
"clearFilters": "필터 초기화"
|
||||
},
|
||||
"editPlaylist": {
|
||||
"title": "$t(entity.playlist, {\"count\": 1}) 편집",
|
||||
@@ -289,7 +325,9 @@
|
||||
"success": "클립보드에 공유 링크를 복사했습니다 (또는 열어보려면 클릭하세요)",
|
||||
"expireInvalid": "만료 날짜는 미래 날짜여야만 합니다",
|
||||
"createFailed": "공유 링크를 생성하는데 실패하였습니다 (혹시 공유하기 설정되어 있나요?)",
|
||||
"setExpiration": "만료 기간 설정하기"
|
||||
"setExpiration": "만료 기간 설정하기",
|
||||
"copyToClipboard": "클립보드로 복사: Ctrl+C, Enter",
|
||||
"successMustClick": "공유가 성공적으로 생성되었습니다. 여기를 클릭하여 여세요"
|
||||
},
|
||||
"updateServer": {
|
||||
"title": "서버 업데이트",
|
||||
@@ -312,6 +350,44 @@
|
||||
"enabled": "프라이빗 모드가 활성화되었습니다. 재생상태가 외부 서비스에 지금부터 노출되지 않습니다",
|
||||
"disabled": "프라이빗 모드가 비활성화되었습니다. 재생상태가 외부서비스에서 지금부터 표시됩니다",
|
||||
"title": "프라이빗 모드"
|
||||
},
|
||||
"largeFetchConfirmation": {
|
||||
"title": "대기열에 항목을 추가하세요",
|
||||
"description": "이 작업은 현재 필터링된 보기의 모든 항목을 추가합니다"
|
||||
},
|
||||
"createRadioStation": {
|
||||
"success": "라디오 방송국이 성공적으로 생성되었습니다",
|
||||
"title": "라디오 방송국 만들기",
|
||||
"input_homepageUrl": "홈페이지 URL",
|
||||
"input_name": "명의",
|
||||
"input_streamUrl": "스트림 URL"
|
||||
},
|
||||
"editRadioStation": {
|
||||
"success": "라디오 방송국이 성공적으로 업데이트되었습니다"
|
||||
},
|
||||
"lyricsExport": {
|
||||
"export": "가사 내보내기",
|
||||
"input_synced": "동기화된 가사 내보내기",
|
||||
"input_offset": "$t(setting.lyricOffset)"
|
||||
},
|
||||
"saveQueue": {
|
||||
"success": "재생 대기열을 서버에 저장했습니다"
|
||||
},
|
||||
"shuffleAll": {
|
||||
"title": "무작위 재생",
|
||||
"input_kind_albums": "앨범",
|
||||
"input_kind_songs": "노래들",
|
||||
"input_kind": "무작위 선택",
|
||||
"input_limit_albums": "앨범이 몇 장인가요?",
|
||||
"input_limit_songs": "몇 곡인가요?",
|
||||
"input_genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"input_limit": "몇 곡인가요?",
|
||||
"input_minYear": "연도부터",
|
||||
"input_maxYear": "연도까지",
|
||||
"input_played": "재생 필터",
|
||||
"input_played_optionAll": "모든 트랙",
|
||||
"input_played_optionUnplayed": "재생하지 않은 트랙만",
|
||||
"input_played_optionPlayed": "재생된 트랙만"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
@@ -325,7 +401,13 @@
|
||||
"collapseSidebar": "사이드바 줄이기",
|
||||
"expandSidebar": "사이드바 확장",
|
||||
"privateModeOff": "프라이빗 모드 끄기",
|
||||
"privateModeOn": "프라이빗 모드 켜기"
|
||||
"privateModeOn": "프라이빗 모드 켜기",
|
||||
"commandPalette": "명령 팔레트 열기",
|
||||
"quit": "$t(common.quit)",
|
||||
"selectMusicFolder": "음악 폴더 선택",
|
||||
"noMusicFolder": "음악 폴더가 선택되지 않았습니다",
|
||||
"multipleMusicFolders": "{{count}}개의 음악 폴더가 선택되었습니다",
|
||||
"settings": "$t(common.setting, {\"count\": 2})"
|
||||
},
|
||||
"manageServers": {
|
||||
"title": "서버 설정하기",
|
||||
@@ -350,7 +432,9 @@
|
||||
"lyricGap": "가사 간격",
|
||||
"lyricSize": "가사 크기",
|
||||
"showLyricMatch": "가사 일치 표시",
|
||||
"showLyricProvider": "가사 제공자 표시"
|
||||
"showLyricProvider": "가사 제공자 표시",
|
||||
"lyricOpacityNonActive": "비활성 가사 불투명도",
|
||||
"lyricScaleNonActive": "비활성 서정적 척도"
|
||||
},
|
||||
"lyrics": "가사",
|
||||
"related": "관련",
|
||||
@@ -364,7 +448,27 @@
|
||||
"shareItem": "공유",
|
||||
"goToAlbum": "$t(entity.album, {\"count\": 1})으로 이동",
|
||||
"goToAlbumArtist": "$t(entity.albumArtist, {\"count\": 1})으로 이동",
|
||||
"showDetails": "추가정보"
|
||||
"showDetails": "추가정보",
|
||||
"addFavorite": "$t(action.addToFavorites)",
|
||||
"addLast": "$t(player.addLast)",
|
||||
"addNext": "$t(player.addNext)",
|
||||
"addToFavorites": "$t(action.addToFavorites)",
|
||||
"addToPlaylist": "$t(action.addToPlaylist)",
|
||||
"createPlaylist": "$t(action.createPlaylist)",
|
||||
"deletePlaylist": "$t(action.deletePlaylist)",
|
||||
"deselectAll": "$t(action.deselectAll)",
|
||||
"moveItems": "$t(action.moveItems)",
|
||||
"moveToNext": "$t(action.moveToNext)",
|
||||
"moveToBottom": "$t(action.moveToBottom)",
|
||||
"moveToTop": "$t(action.moveToTop)",
|
||||
"play": "$t(player.play)",
|
||||
"playSimilarSongs": "$t(player.playSimilarSongs)",
|
||||
"removeFromFavorites": "$t(action.removeFromFavorites)",
|
||||
"removeFromPlaylist": "$t(action.removeFromPlaylist)",
|
||||
"removeFromQueue": "$t(action.removeFromQueue)",
|
||||
"setRating": "$t(action.setRating)",
|
||||
"playShuffled": "$t(player.shuffle)",
|
||||
"goTo": "이동"
|
||||
},
|
||||
"albumArtistDetail": {
|
||||
"about": "{{artist}}에 대해",
|
||||
@@ -375,7 +479,13 @@
|
||||
"topSongs": "최고의 곡들",
|
||||
"topSongsFrom": "{{title}}이 포함된 최고의 곡들",
|
||||
"viewAll": "전부 보이기",
|
||||
"viewAllTracks": "$t(entity.track, {\"count\": 2}) 전부 보이기"
|
||||
"viewAllTracks": "$t(entity.track, {\"count\": 2}) 전부 보이기",
|
||||
"favoriteSongs": "좋아하는 노래들",
|
||||
"groupingTypeAll": "모든 릴리스 유형",
|
||||
"groupingTypePrimary": "주요 릴리스 유형",
|
||||
"topSongsCommunity": "공동체",
|
||||
"topSongsPersonal": "개인의",
|
||||
"favoriteSongsFrom": "{{title}}에서 가장 좋아하는 곡들"
|
||||
},
|
||||
"albumArtistList": {
|
||||
"title": "$t(entity.albumArtist, {\"count\": 2})"
|
||||
@@ -386,11 +496,14 @@
|
||||
"released": "발매"
|
||||
},
|
||||
"albumList": {
|
||||
"artistAlbums": "{{artist}}의 앨범"
|
||||
"artistAlbums": "{{artist}}의 앨범",
|
||||
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})",
|
||||
"title": "$t(entity.album, {\"count\": 2})"
|
||||
},
|
||||
"genreList": {
|
||||
"showAlbums": "$t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2}) 표시",
|
||||
"showTracks": "$t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2}) 표시"
|
||||
"showTracks": "$t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2}) 표시",
|
||||
"title": "$t(entity.genre, {\"count\": 2})"
|
||||
},
|
||||
"globalSearch": {
|
||||
"commands": {
|
||||
@@ -405,7 +518,9 @@
|
||||
"mostPlayed": "자주 플레이된 곡",
|
||||
"newlyAdded": "최근에 추가된 곡",
|
||||
"recentlyPlayed": "최근에 플레이된 곡",
|
||||
"recentlyReleased": "최근에 발매된 곡"
|
||||
"recentlyReleased": "최근에 발매된 곡",
|
||||
"genres": "$t(entity.genre, {\"count\": 2})",
|
||||
"title": "$t(common.home)"
|
||||
},
|
||||
"itemDetail": {
|
||||
"copyPath": "클립보드에 경로를 복사",
|
||||
@@ -420,15 +535,71 @@
|
||||
"generalTab": "일반",
|
||||
"hotkeysTab": "단축키",
|
||||
"playbackTab": "재생",
|
||||
"windowTab": "윈도우"
|
||||
"windowTab": "윈도우",
|
||||
"analytics": "해석학",
|
||||
"updates": "업데이트",
|
||||
"cache": "은닉처",
|
||||
"application": "애플리케이션",
|
||||
"queryBuilder": "쿼리 빌더",
|
||||
"theme": "테마",
|
||||
"controls": "통제 수단",
|
||||
"sidebar": "사이드바",
|
||||
"exportImport": "가져오기/내보내기",
|
||||
"audio": "오디오",
|
||||
"lyrics": "가사",
|
||||
"lyricsDisplay": "가사 표시",
|
||||
"transcoding": "트랜스코딩",
|
||||
"discord": "Discord",
|
||||
"logger": "로거",
|
||||
"playerFilters": "선수 필터"
|
||||
},
|
||||
"sidebar": {
|
||||
"myLibrary": "내 라이브러리",
|
||||
"nowPlaying": "재생중",
|
||||
"shared": "공유 $t(entity.playlist, {\"count\": 2})"
|
||||
"shared": "공유 $t(entity.playlist, {\"count\": 2})",
|
||||
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
|
||||
"albums": "$t(entity.album, {\"count\": 2})",
|
||||
"collections": "컬렉션",
|
||||
"artists": "$t(entity.artist, {\"count\": 2})",
|
||||
"favorites": "$t(entity.favorite, {\"count\": 2})",
|
||||
"folders": "$t(entity.folder, {\"count\": 2})",
|
||||
"genres": "$t(entity.genre, {\"count\": 2})",
|
||||
"home": "$t(common.home)",
|
||||
"radio": "$t(entity.radioStation, {\"count\": 2})",
|
||||
"playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||
"search": "$t(common.search)",
|
||||
"settings": "$t(common.setting, {\"count\": 2})",
|
||||
"tracks": "$t(entity.track, {\"count\": 2})"
|
||||
},
|
||||
"trackList": {
|
||||
"artistTracks": "{{artist}}의 음악"
|
||||
"artistTracks": "{{artist}}의 음악",
|
||||
"genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})",
|
||||
"title": "$t(entity.track, {\"count\": 2})"
|
||||
},
|
||||
"radioList": {
|
||||
"title": "라디오 방송국"
|
||||
},
|
||||
"releasenotes": {
|
||||
"commitsSinceStable": "{{stable}} 이후 커밋",
|
||||
"noNewCommits": "이 범위에 새로운 커밋이 없습니다",
|
||||
"noStableReleaseToCompare": "비교할 수 있는 안정화 릴리스가 없습니다"
|
||||
},
|
||||
"favorites": {
|
||||
"title": "$t(entity.favorite, {\"count\": 2})"
|
||||
},
|
||||
"windowBar": {
|
||||
"paused": "(일시 정지됨) ",
|
||||
"privateMode": "(비공개 모드)"
|
||||
},
|
||||
"folderList": {
|
||||
"title": "$t(entity.folder, {\"count\": 2})"
|
||||
},
|
||||
"playlistList": {
|
||||
"title": "$t(entity.playlist, {\"count\": 2})"
|
||||
},
|
||||
"collections": {
|
||||
"overrideExisting": "기존 항목 덮어쓰기",
|
||||
"saveAsCollection": "컬렉션으로 저장"
|
||||
}
|
||||
},
|
||||
"table": {
|
||||
@@ -473,7 +644,25 @@
|
||||
"toggleFullscreenPlayer": "전체화면으로 전환",
|
||||
"unfavorite": "즐겨찾기 취소",
|
||||
"pause": "멈춤",
|
||||
"viewQueue": "대기열 보기"
|
||||
"viewQueue": "대기열 보기",
|
||||
"addLastShuffled": "마지막 (섞인)",
|
||||
"addNextShuffled": "다음 (무작위)",
|
||||
"albumRadio": "앨범 라디오",
|
||||
"artistRadio": "아티스트 라디오",
|
||||
"holdToShuffle": "길게 눌러 섞기",
|
||||
"lyrics": "가사",
|
||||
"restoreQueueFromServer": "서버에서 큐 복원",
|
||||
"saveQueueToServer": "대기열을 서버에 저장",
|
||||
"trackRadio": "라디오 추적",
|
||||
"sleepTimer": "취침 타이머",
|
||||
"sleepTimer_endOfSong": "현재 곡 종료",
|
||||
"sleepTimer_endOfAlbum": "현재 앨범의 끝",
|
||||
"sleepTimer_minutes": "{{count}}분",
|
||||
"sleepTimer_hours": "{{count}}시간",
|
||||
"sleepTimer_off": "끄다",
|
||||
"sleepTimer_timeRemaining": "{{time}} 남음",
|
||||
"sleepTimer_setCustom": "타이머 설정",
|
||||
"sleepTimer_cancel": "타이머 취소"
|
||||
},
|
||||
"setting": {
|
||||
"accentColor_description": "앱의 강조색상 설정",
|
||||
@@ -482,7 +671,7 @@
|
||||
"albumBackground": "앨범 배경이미지",
|
||||
"albumBackgroundBlur_description": "앨범 배경이미지의 흐려짐 정도 조정",
|
||||
"albumBackgroundBlur": "앨범배경이미지 흐려짐 크기",
|
||||
"applicationHotkeys_description": "앱의 단축키 설정. 앱 전체에 적용되는 단축키를 설정하기 위해서는 체크박스에 체크하세요(PC만 가능)",
|
||||
"applicationHotkeys_description": "애플리케이션 단축키를 설정합니다. 체크박스를 전환하여 전역 단축키로 설정하세요(데스크톱 전용)",
|
||||
"applicationHotkeys": "앱 단축키",
|
||||
"artistBackground": "아티스트 배경이미지",
|
||||
"artistBackground_description": "아티스트 페이지에 아티스트가 포함된 배경이미지를 추가",
|
||||
@@ -492,7 +681,7 @@
|
||||
"artistConfiguration_description": "앨범아티스트 페이지에 표시할 정보 및 순서 설정",
|
||||
"audioDevice_description": "음악재생에 사용할 장치 선택(웹플레이어만 가능)",
|
||||
"audioDevice": "오디오 장치",
|
||||
"audioExclusiveMode_description": "단독재생모드 켜기. 이 모드에서는 일반적으로 시스템의 재생장치가 고정되며 MPV로만 오디오가 재생됩니다",
|
||||
"audioExclusiveMode_description": "독점 출력 모드를 활성화합니다. 이 모드에서는 일반적으로 시스템의 오디오 출력이 차단되며, 오직 mpv만이 오디오를 출력할 수 있습니다. 이 모드가 활성화된 동안에는 비주얼라이저의 시스템 오디오 캡처 기능이 작동하지 않습니다",
|
||||
"audioExclusiveMode": "오디오 단독재생모드",
|
||||
"audioPlayer_description": "재생을 위한 오디오 플레이어 선택",
|
||||
"audioPlayer": "오디오 플레이어",
|
||||
@@ -505,7 +694,8 @@
|
||||
"broadcast": "방송",
|
||||
"ep": "ep앨범",
|
||||
"other": "기타",
|
||||
"single": "싱글"
|
||||
"single": "싱글",
|
||||
"album": "$t(entity.album, {\"count\": 1})"
|
||||
},
|
||||
"secondary": {
|
||||
"audiobook": "오디오북",
|
||||
@@ -521,5 +711,35 @@
|
||||
"soundtrack": "사운드트랙",
|
||||
"spokenWord": "보컬사운드"
|
||||
}
|
||||
},
|
||||
"datetime": {
|
||||
"minuteShort": "분",
|
||||
"secondShort": "초",
|
||||
"hourShort": "시간",
|
||||
"dayShort": "일"
|
||||
},
|
||||
"filterOperator": {
|
||||
"after": "~ 뒤에 있나요",
|
||||
"afterDate": "(날짜) 이후입니까",
|
||||
"before": "~보다 앞서 있다",
|
||||
"beforeDate": "(날짜) 이전인가요",
|
||||
"contains": "포함",
|
||||
"endsWith": "~로 끝남",
|
||||
"inPlaylist": "~ 안에 있다",
|
||||
"inTheLast": "마지막에 있습니다",
|
||||
"inTheRange": "범위 내에 있습니다",
|
||||
"inTheRangeDate": "범위 내에 있음 (날짜)",
|
||||
"is": "~이다",
|
||||
"isNot": "~이 아닙니까",
|
||||
"isGreaterThan": "~보다 크다",
|
||||
"isLessThan": "~보다 작다",
|
||||
"matchesRegex": "정규식과 일치",
|
||||
"notContains": "함유하지 않음",
|
||||
"notInPlaylist": "~ 안에 있지 않다",
|
||||
"notInTheLast": "마지막에 있지 않다",
|
||||
"startsWith": "~로 시작함"
|
||||
},
|
||||
"queryBuilder": {
|
||||
"customTags": "사용자 정의 태그"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
"openIn": {
|
||||
"lastfm": "Åpne i Last.fm",
|
||||
"musicbrainz": "Åpne i MusicBrainz",
|
||||
"spotify": "Åpne i Spotify"
|
||||
"spotify": "Åpne i Spotify",
|
||||
"listenbrainz": "Åpne i ListenBrainz",
|
||||
"qobuz": "Åpne i Qobuz"
|
||||
},
|
||||
"moveToBottom": "Flytt til bunnen",
|
||||
"deletePlaylist": "Slett $t(entity.playlist, {\"count\": 1})",
|
||||
@@ -38,7 +40,10 @@
|
||||
"shuffleAll": "Tilfelding avspilling av alt",
|
||||
"shuffleSelected": "Tilfelding avspilling av utvalgte",
|
||||
"viewMore": "Se mer",
|
||||
"openApplicationDirectory": "Åpne applikasjonskatalogen"
|
||||
"openApplicationDirectory": "Åpne applikasjonskatalogen",
|
||||
"goToCurrent": "Gå til gjeldende element",
|
||||
"collapseAllFolders": "Skjul alle mapper",
|
||||
"expandAllFolders": "Utvid alle mapper"
|
||||
},
|
||||
"common": {
|
||||
"bpm": "Bpm",
|
||||
@@ -161,7 +166,11 @@
|
||||
"tableColumns": "Tabellkolonner",
|
||||
"itemsMore": "{{count}} fler",
|
||||
"explicitStatus": "Grovhetsstatus",
|
||||
"newVersionAvailable": "En ny version er tilgjengelig"
|
||||
"newVersionAvailable": "En ny version er tilgjengelig",
|
||||
"back": "Tilbake",
|
||||
"openFolder": "Åpne mappe",
|
||||
"grouping": "Grupper",
|
||||
"numberOfResults": "{{numberOfResults}} resultater"
|
||||
},
|
||||
"entity": {
|
||||
"smartPlaylist": "Smart $t(entity.playlist, {\"count\": 1})",
|
||||
@@ -667,7 +676,19 @@
|
||||
"b": "B",
|
||||
"c": "C",
|
||||
"d": "D",
|
||||
"z": "Z"
|
||||
"z": "Z",
|
||||
"none": "Ingen"
|
||||
},
|
||||
"frequencyScale": {
|
||||
"linear": "Lineær skala",
|
||||
"log": "Logaritmisk skala"
|
||||
},
|
||||
"channelLayout": {
|
||||
"single": "Enkel"
|
||||
},
|
||||
"gradient": {
|
||||
"rainbow": "Regnbue",
|
||||
"prism": "Prisme"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+14
-13
@@ -178,14 +178,14 @@
|
||||
},
|
||||
"entity": {
|
||||
"genre_one": "Gatunek",
|
||||
"genre_few": "gatunki",
|
||||
"genre_many": "gatunków",
|
||||
"genre_few": "Gatunki",
|
||||
"genre_many": "Gatunków",
|
||||
"playlistWithCount_one": "{{count}} playlista",
|
||||
"playlistWithCount_few": "{{count}} playlisty",
|
||||
"playlistWithCount_many": "{{count}} playlist",
|
||||
"playlist_one": "Playlista",
|
||||
"playlist_few": "playlisty",
|
||||
"playlist_many": "playlist",
|
||||
"playlist_few": "Playlisty",
|
||||
"playlist_many": "Playlist",
|
||||
"artist_one": "Wykonawca",
|
||||
"artist_few": "wykonawcy",
|
||||
"artist_many": "wykonawców",
|
||||
@@ -196,8 +196,8 @@
|
||||
"albumArtist_few": "Wykonawców albumów",
|
||||
"albumArtist_many": "Wykonawców albumów",
|
||||
"track_one": "Utwór",
|
||||
"track_few": "utwory",
|
||||
"track_many": "utworów",
|
||||
"track_few": "Utwory",
|
||||
"track_many": "Utworów",
|
||||
"albumArtistCount_one": "{{count}} wykonawca albumu",
|
||||
"albumArtistCount_few": "{{count}} wykonawców albumu",
|
||||
"albumArtistCount_many": "{{count}} wykonawców albumu",
|
||||
@@ -205,18 +205,18 @@
|
||||
"albumWithCount_few": "{{count}} albumy",
|
||||
"albumWithCount_many": "{{count}} albumów",
|
||||
"favorite_one": "Ulubiony",
|
||||
"favorite_few": "ulubione",
|
||||
"favorite_many": "ulubionych",
|
||||
"favorite_few": "Ulubione",
|
||||
"favorite_many": "Ulubionych",
|
||||
"artistWithCount_one": "{{count}} wykonawca",
|
||||
"artistWithCount_few": "{{count}} wykonawców",
|
||||
"artistWithCount_many": "{{count}} wykonawców",
|
||||
"folder_one": "Katalog",
|
||||
"folder_few": "katalogi",
|
||||
"folder_many": "katalogów",
|
||||
"folder_few": "Katalogi",
|
||||
"folder_many": "Katalogów",
|
||||
"smartPlaylist": "Inteligentna $t(entity.playlist, {\"count\": 1})",
|
||||
"album_one": "Album",
|
||||
"album_few": "albumy",
|
||||
"album_many": "albumów",
|
||||
"album_few": "Albumy",
|
||||
"album_many": "Albumów",
|
||||
"genreWithCount_one": "{{count}} gatunek",
|
||||
"genreWithCount_few": "{{count}} gatunki",
|
||||
"genreWithCount_many": "{{count}} gatunków",
|
||||
@@ -700,7 +700,8 @@
|
||||
"sleepTimer_setCustom": "Ustaw wyłącznik",
|
||||
"sleepTimer_cancel": "Anuluj wyłączanie",
|
||||
"albumRadio": "Radio albumu",
|
||||
"scrobbleForceSubmit": "Wymuś scrobble"
|
||||
"scrobbleForceSubmit": "Wymuś scrobble",
|
||||
"sleepTimer_endOfAlbum": "Koniec aktualnego albumu"
|
||||
},
|
||||
"setting": {
|
||||
"crossfadeStyle_description": "Wybierz styl przenikania, który ma być używany do odtwarzania dźwięku",
|
||||
|
||||
+172
-9
@@ -174,7 +174,8 @@
|
||||
"explicitStatus": "Признак нецензурного контента",
|
||||
"newVersionAvailable": "Доступна новая версия",
|
||||
"numberOfResults": "{{numberOfResults}} результатов",
|
||||
"back": "Назад"
|
||||
"back": "Назад",
|
||||
"openFolder": "Открыть папку"
|
||||
},
|
||||
"entity": {
|
||||
"album_one": "Альбом",
|
||||
@@ -240,7 +241,10 @@
|
||||
"table": {
|
||||
"config": {
|
||||
"view": {
|
||||
"table": "Таблица"
|
||||
"table": "Таблица",
|
||||
"detail": "Детали",
|
||||
"grid": "Сетка",
|
||||
"list": "Список"
|
||||
},
|
||||
"general": {
|
||||
"displayType": "Тип отображения",
|
||||
@@ -250,7 +254,29 @@
|
||||
"followCurrentSong": "Следовать за исполняемым треком",
|
||||
"size": "$t(common.size)",
|
||||
"itemSize": "Размер элементов (px)",
|
||||
"itemGap": "Отступ между элементами (px)"
|
||||
"itemGap": "Отступ между элементами (px)",
|
||||
"advancedSettings": "Расширенные настройки",
|
||||
"autosize": "Автоматический выбор размера",
|
||||
"moveUp": "Переместить выше",
|
||||
"moveDown": "Переместить ниже",
|
||||
"pinToLeft": "Закрепить слева",
|
||||
"pinToRight": "Закрепить права",
|
||||
"alignLeft": "Выровнять по левой стороне",
|
||||
"alignCenter": "Выровнять по центру",
|
||||
"alignRight": "Выровнять по правой стороне",
|
||||
"itemsPerRow": "Элементов в строке",
|
||||
"size_default": "По-умолчанию",
|
||||
"size_compact": "Компактный",
|
||||
"size_large": "Большой",
|
||||
"pagination": "Пагинация",
|
||||
"pagination_itemsPerPage": "Элементов на странице",
|
||||
"pagination_infinite": "Бесконечно",
|
||||
"pagination_paginate": "Разбитый по страницам",
|
||||
"alternateRowColors": "Переменный цвет строк",
|
||||
"horizontalBorders": "Границы строки",
|
||||
"rowHoverHighlight": "Подсветка строки при наведении",
|
||||
"showHeader": "Показать заголовок",
|
||||
"verticalBorders": "Границы колонки"
|
||||
},
|
||||
"label": {
|
||||
"releaseDate": "Дата выхода",
|
||||
@@ -276,7 +302,10 @@
|
||||
"favorite": "$t(common.favorite)",
|
||||
"year": "$t(common.year)",
|
||||
"codec": "$t(common.codec)",
|
||||
"titleArtist": "$t(common.title) (артист)"
|
||||
"titleArtist": "$t(common.title) (артист)",
|
||||
"albumGroup": "Группа альбома",
|
||||
"composer": "Композитор",
|
||||
"image": "Изображение"
|
||||
}
|
||||
},
|
||||
"column": {
|
||||
@@ -299,7 +328,14 @@
|
||||
"comment": "Комментарий",
|
||||
"bitrate": "Битрейт",
|
||||
"channels": "$t(common.channel_other)",
|
||||
"bpm": "BPM"
|
||||
"bpm": "BPM",
|
||||
"albumCount": "Альбомы",
|
||||
"artist": "Исполнители",
|
||||
"bitDepth": "Битовая глубина",
|
||||
"genre": "Жанр",
|
||||
"sampleRate": "Частота дискретизации",
|
||||
"songCount": "Треки",
|
||||
"owner": "Правообладатель"
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
@@ -434,7 +470,8 @@
|
||||
"sleepTimer_setCustom": "Установить таймер",
|
||||
"sleepTimer_custom": "Пользовательский",
|
||||
"sleepTimer_cancel": "Отменить таймер",
|
||||
"scrobbleForceSubmit": "Принудительная скробблинг"
|
||||
"scrobbleForceSubmit": "Принудительная скробблинг",
|
||||
"sleepTimer_endOfAlbum": "Конец этого альбома"
|
||||
},
|
||||
"page": {
|
||||
"sidebar": {
|
||||
@@ -756,7 +793,12 @@
|
||||
"input_played_optionAll": "Все треки",
|
||||
"input_played_optionUnplayed": "Только не игранные треки",
|
||||
"input_played_optionPlayed": "Только воспроизведённые треки",
|
||||
"input_genre": "$t(entity.genre, {\"count\": 1})"
|
||||
"input_genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"input_kind_albums": "Альбомы",
|
||||
"input_kind_songs": "Песни",
|
||||
"input_kind": "Случайный выбор",
|
||||
"input_limit_albums": "Сколько альбомов?",
|
||||
"input_limit_songs": "Сколько песен?"
|
||||
},
|
||||
"editRadioStation": {
|
||||
"success": "Радиостанция успешно обновлена"
|
||||
@@ -1087,7 +1129,78 @@
|
||||
"audioFadeOnStatusChange": "плавное изменение звука",
|
||||
"audioFadeOnStatusChange_description": "включает эффекты затухания и появления звука при изменении статуса (пауза/проигрывание)",
|
||||
"preventSleepOnPlayback_description": "запрещает спящий режим экрана, пока играет музыка",
|
||||
"preventSleepOnPlayback": "не переходить в спящий режим"
|
||||
"preventSleepOnPlayback": "не переходить в спящий режим",
|
||||
"autoDJ_mode": "Режим",
|
||||
"autoDJ_mode_albums": "Альбомы",
|
||||
"autoDJ_mode_description": "Добавь песни или целые альбомы в очередь",
|
||||
"autoDJ_mode_songs": "Песни",
|
||||
"autoDJ_enabled": "Включить Auto DJ",
|
||||
"autoDJ_albumStrategy": "Режим выбора альбома",
|
||||
"autoDJ_songStrategy": "Режим выбора песни",
|
||||
"autoDJ_strategy_option_library_random": "Случайно",
|
||||
"autoDJ_strategy_option_similar": "Похожие",
|
||||
"hotkey_listShowPlayingSong": "Показать текущую песню в списке",
|
||||
"listenbrainz_description": "Показать ссылки на ListenBrains на страницах исполнителя/альбома",
|
||||
"listenbrainz": "Показать ссылки на ListenBrainz",
|
||||
"qobuz_description": "Показать ссылки на Qobuz на страницах исполнителя/альбома",
|
||||
"qobuz": "Показать ссылки на Qobuz",
|
||||
"spotify_description": "Показать ссылки на Spotify на странице исполнителя/альбома",
|
||||
"spotify": "Показать ссылки на Spotify",
|
||||
"nativeSpotify_description": "Открывать в приложении Spotify вместо браузера",
|
||||
"nativeSpotify": "Использовать приложение Spotify",
|
||||
"imageResolution_optionTable": "Таблица",
|
||||
"preventSuspendOnPlayback_description": "Не приостанавливать приложение во время проигрывания музыки",
|
||||
"preventSuspendOnPlayback": "Не приостанавливать во время проигрывания",
|
||||
"playerItemConfiguration_description": "Настроить какие элементы и в каком порядке видны в полноэкранном плеере",
|
||||
"playerItemConfiguration": "Настройка плеера",
|
||||
"sidebarPlaylistFolders": "Включить папки",
|
||||
"sidebarPlaylistFolderSeparator_description": "Символ (или строка), который разделяет уровни папок в названии плейлиста",
|
||||
"sidebarPlaylistFolderSeparator": "Разделитель папок",
|
||||
"sidebarPlaylistFolderView_description": "Как отображать папки в боковой панели",
|
||||
"sidebarPlaylistFolderView": "Вид папок",
|
||||
"sidebarPlaylistFolderView_optionSingle": "Единстванная папка",
|
||||
"sidebarPlaylistFolderView_optionTree": "Вид дерева",
|
||||
"sidebarPlaylistFolderView_optionNavigation": "Вид навигации",
|
||||
"sidebarPlaylistFolderTreeIndent_description": "Отступ в пикселях на каждом уровне дерева",
|
||||
"sidebarPlaylistFolderTreeIndent": "Отступ в дереве",
|
||||
"sidebarPlaylistFolderTreeLineColor_description": "Цвет линий соединения в дереве (оставь пустым, чтобы использовать настройки темы)",
|
||||
"sidebarPlaylistFolderTreeLineColor": "Цвет линии в дереве",
|
||||
"sidebarPlaylistMode_description": "Как отображать каждый плейлист в списке в боковой панели",
|
||||
"sidebarPlaylistMode": "Режим плейлиста в боковой панели",
|
||||
"sidebarPlaylistMode_optionCompact": "Компактный",
|
||||
"sidebarPlaylistMode_optionExpanded": "Просторный",
|
||||
"sidebarPlaylistSorting_description": "Разрешить ручную сортировку плейлистов в боковой панели с помощью перетаскивания вместо сортировки со стороны сервера",
|
||||
"sidebarPlaylistSorting": "Сортировка плейлистов в боковой панели",
|
||||
"sidebarPlaylistListFilterRegex_description": "Скрывать плейлисты в боковой панели, которые соответствуют этому регулярному выражению",
|
||||
"sidebarPlaylistListFilterRegex_placeholder": "Например ^daily mix.*",
|
||||
"sidebarPlaylistListFilterRegex": "Регулярное выражение для фильтрации плейлистов",
|
||||
"sidePlayQueueLayout": "Макет очереди проигрывания сбоку",
|
||||
"sidePlayQueueLayout_description": "Задает макет прикрепленной очереди проигрывания сбоку",
|
||||
"sidePlayQueueLayout_optionHorizontal": "Горизонтальный",
|
||||
"sidePlayQueueLayout_optionVertical": "Вертикальный",
|
||||
"mediaSession_description": "Включает интеграцию сессии медиа, отображая элементы управления и метаданные медиа в системном оверлее управления громкостью и на экране блокировки. Требуется Web Audio Player.",
|
||||
"mediaSession": "Включить сессию медиа",
|
||||
"skipPlaylistPage_description": "Когда переходишь в плейлист, откроется страница со списком песен плейлиста, вместо страницы по-умолчанию",
|
||||
"transcode": "Включить транскодирование",
|
||||
"transcodeFormat_description": "Выбирает форматы для транскодирования. Оставь пустым, чтобы решение принимал сервер",
|
||||
"translationApiKey_description": "Ключ API для перевода (только эндпойнт глобального сервиса)",
|
||||
"translationApiKey": "Ключ API перевода",
|
||||
"translationApiProvider_description": "Поставщик API для перевода",
|
||||
"translationApiProvider": "Поставщик API перевода",
|
||||
"translationTargetLanguage_description": "На какой язык выполнять перевод",
|
||||
"translationTargetLanguage": "На какой язык переводить",
|
||||
"trayEnabled_description": "Показать/скрыть иконку/меню в трее. Если скрыто, то также отключается сворачивать в трей/свернуть в трей при выходе",
|
||||
"trayEnabled": "Показать в трее",
|
||||
"queryBuilder": "Создатель очереди",
|
||||
"queryBuilderCustomFields_inputLabel": "Метка",
|
||||
"queryBuilderCustomFields_inputTag": "Тег",
|
||||
"queryBuilderCustomFields": "Пользовательские поля",
|
||||
"queryBuilderCustomFields_description": "Добавь пользовательские поля для использования создателями очереди",
|
||||
"hotkey_listNavigateToPage": "Перейти к странице элемента",
|
||||
"hotkey_listPlayDefault": "Воспроизвести список",
|
||||
"hotkey_listPlayLast": "Воспроизвести последний в списке",
|
||||
"hotkey_listPlayNext": "Воспроизвести следующий в списке",
|
||||
"sidebarPlaylistFolders_description": "Создать вид папки для плейлистов, которые включают настраиваемый разделитель в имени"
|
||||
},
|
||||
"releaseType": {
|
||||
"secondary": {
|
||||
@@ -1162,6 +1275,56 @@
|
||||
"presetName": "Название пресета",
|
||||
"presetNamePlaceholder": "Введите название пресета",
|
||||
"general": "Главная",
|
||||
"lineWidth": "Ширина линии"
|
||||
"lineWidth": "Ширина линии",
|
||||
"systemAudioConsentAllow": "Разрешить",
|
||||
"systemAudioConsentBody": "Для работы визуализатора требуется доступ к аудио в системе",
|
||||
"systemAudioConsentDecline": "Запретить",
|
||||
"systemAudioConsentTitle": "Разрешить доступ к аудио в системе?",
|
||||
"systemAudioCaptureFailed": "Не удается начать захват: {{message}}",
|
||||
"visualizerType": "Тип визуализатора",
|
||||
"cyclePresets": "Переключаться между наборами настроек",
|
||||
"cycleTime": "Время между переключениями (в секундах)",
|
||||
"includeAllPresets": "Включить все наборы настроек",
|
||||
"ignoredPresets": "Игнорируемые наборы настроек",
|
||||
"selectedPresets": "Выбранные наборы настроек",
|
||||
"randomizeNextPreset": "Выбирать следующий набор настроек случайным образом",
|
||||
"blendTime": "Время смешивания",
|
||||
"mode": "Режим",
|
||||
"mode1To8": "Режимы 1-8",
|
||||
"mode10": "Режим 10",
|
||||
"maxFPS": "Максимум кадров в секунду",
|
||||
"opacity": "Прозрачность",
|
||||
"customGradients": "Пользовательские градиенты",
|
||||
"addCustomGradient": "Добавить пользовательский градиент",
|
||||
"gradientName": "Название градиента",
|
||||
"gradientNamePlaceholder": "Название градиента",
|
||||
"vertical": "Вертикальный",
|
||||
"horizontal": "Горизонтальный",
|
||||
"addColor": "Добавить цвет",
|
||||
"position": "Расположение",
|
||||
"level": "Уровень",
|
||||
"remove": "Удалить",
|
||||
"pasteGradient": "Вставить градиент",
|
||||
"pasteGradientPlaceholder": "Вставить JSON с градиентом сюда...",
|
||||
"custom": "Пользовательский",
|
||||
"builtIn": "Встроенный",
|
||||
"colors": "Цвета",
|
||||
"colorMode": "Цветовой режим",
|
||||
"gradient": "Градиент",
|
||||
"gradientLeft": "Градиент слева",
|
||||
"gradientRight": "Градиент справа",
|
||||
"smoothing": "Сглаживание",
|
||||
"minimumFrequency": "Минимальная частота",
|
||||
"maximumFrequency": "Максимальная частота",
|
||||
"sensitivity": "Чуствительность",
|
||||
"minimumDecibels": "Минимум децибел",
|
||||
"maximumDecibels": "Максимум децибел",
|
||||
"linearAmplitude": "Линейная амплитуда",
|
||||
"showPeaks": "Показывать пики"
|
||||
},
|
||||
"dragDropZone": {
|
||||
"error_oneFileOnly": "Выбери только 1 файл",
|
||||
"error_readingFile": "Проблема при чтении файла: {{errorMessage}}",
|
||||
"mainText": "Перемести файл сюда"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ export const orderSearchResults = (args: {
|
||||
|
||||
searchResults = Array.from(combinedResults.values());
|
||||
} else {
|
||||
searchResults = fuse.search<InternetProviderLyricSearchResponse>({
|
||||
searchResults = fuse.search({
|
||||
...(params.artist && { artist: params.artist }),
|
||||
...(params.name && { name: params.name }),
|
||||
});
|
||||
|
||||
@@ -1793,6 +1793,17 @@ export const JellyfinController: InternalControllerEndpoint = {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (query.event === 'stop') {
|
||||
jfApiClient(apiClientProps).scrobbleStopped({
|
||||
body: {
|
||||
ItemId: query.id,
|
||||
PositionTicks: position,
|
||||
},
|
||||
});
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
jfApiClient(apiClientProps).scrobbleProgress({
|
||||
body: {
|
||||
ItemId: query.id,
|
||||
|
||||
@@ -2309,7 +2309,7 @@ export const SubsonicController: InternalControllerEndpoint = {
|
||||
const { apiClientProps, query } = args;
|
||||
|
||||
if (hasFeature(apiClientProps.server, ServerFeature.REPORT_PLAYBACK)) {
|
||||
if (query.submission) {
|
||||
if (query.submission || query.event === 'start') {
|
||||
const res = await ssApiClient(apiClientProps).scrobble({
|
||||
query: {
|
||||
id: query.id,
|
||||
@@ -2321,38 +2321,54 @@ export const SubsonicController: InternalControllerEndpoint = {
|
||||
throw new Error('Failed to scrobble');
|
||||
}
|
||||
|
||||
return null;
|
||||
if (query.submission) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
let state: 'paused' | 'playing' | 'starting' | 'stopped' = 'playing';
|
||||
const defaultParams = {
|
||||
ignoreScrobble: true,
|
||||
mediaId: query.id,
|
||||
mediaType: query.mediaType,
|
||||
playbackRate: query.playbackRate,
|
||||
positionMs: query.position ?? 0,
|
||||
};
|
||||
|
||||
const reportPlayback = (state: 'paused' | 'playing' | 'starting' | 'stopped') => {
|
||||
return ssApiClient(apiClientProps).reportPlayback({
|
||||
query: {
|
||||
...defaultParams,
|
||||
state,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const promises: Promise<any>[] = [];
|
||||
|
||||
switch (query.event) {
|
||||
case 'pause':
|
||||
state = 'paused';
|
||||
promises.push(reportPlayback('paused'));
|
||||
break;
|
||||
case 'start':
|
||||
state = 'starting';
|
||||
promises.push(reportPlayback('starting'));
|
||||
promises.push(reportPlayback('playing'));
|
||||
break;
|
||||
case 'stop':
|
||||
promises.push(reportPlayback('stopped'));
|
||||
break;
|
||||
case 'unpause':
|
||||
state = 'playing';
|
||||
promises.push(reportPlayback('playing'));
|
||||
break;
|
||||
default:
|
||||
state = 'playing';
|
||||
break;
|
||||
}
|
||||
|
||||
const res = await ssApiClient(apiClientProps).reportPlayback({
|
||||
query: {
|
||||
ignoreScrobble: true,
|
||||
mediaId: query.id,
|
||||
mediaType: query.mediaType,
|
||||
playbackRate: query.playbackRate,
|
||||
positionMs: query.position ?? 0,
|
||||
state,
|
||||
},
|
||||
});
|
||||
for (const promise of promises) {
|
||||
const res = await promise;
|
||||
|
||||
if (res.status !== 200) {
|
||||
throw new Error('Failed to report playback');
|
||||
if (res.status !== 200) {
|
||||
throw new Error('Failed to report playback');
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
@@ -67,8 +67,9 @@ Jellyfin progress APIs still use playback position (ticks), not listen time:
|
||||
- pause / unpause
|
||||
|
||||
Other events:
|
||||
- When the song changes: sends 'start' when the new track is playing;
|
||||
clears submission flag and listen accumulator for the new track.
|
||||
- When the song changes: sends 'stop' for the previous track; sends 'start'
|
||||
when the new track is playing; clears submission flag and listen accumulator
|
||||
for the new track.
|
||||
|
||||
- When the song is restarted (near 0 after 10s+): clears submission flag
|
||||
and listen accumulator.
|
||||
@@ -129,6 +130,7 @@ export const useScrobble = () => {
|
||||
|
||||
const previousSongRef = useRef<QueueSong | undefined>(undefined);
|
||||
const previousTimestampRef = useRef<number>(0);
|
||||
const stopPositionRef = useRef<number>(0);
|
||||
const lastProgressEventRef = useRef<number>(0);
|
||||
const lastSeekEventRef = useRef<number>(0);
|
||||
const songChangeTimeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);
|
||||
@@ -316,7 +318,10 @@ export const useScrobble = () => {
|
||||
) => {
|
||||
const currentSong = properties.song;
|
||||
const previousSong = previousSongRef.current;
|
||||
const previousPositionSec = stopPositionRef.current;
|
||||
const mediaType = currentSong?._itemType.includes('song') ? 'song' : 'podcast';
|
||||
const previousMediaType = previousSong?._itemType.includes('song') ? 'song' : 'podcast';
|
||||
const useTicksForPrevious = previousSong?._serverType === ServerType.JELLYFIN;
|
||||
|
||||
// Handle notifications
|
||||
if (scrobbleSettings?.notify && currentSong?.id) {
|
||||
@@ -352,6 +357,7 @@ export const useScrobble = () => {
|
||||
if (!isScrobbleEnabled || isPrivateModeEnabled) {
|
||||
previousSongRef.current = currentSong;
|
||||
previousTimestampRef.current = 0;
|
||||
stopPositionRef.current = 0;
|
||||
listenedMsRef.current = 0;
|
||||
lastListenSampleTimeRef.current = null;
|
||||
flushScrobbleDebug();
|
||||
@@ -395,10 +401,42 @@ export const useScrobble = () => {
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
// Send stop scrobble for the track that was playing before the change
|
||||
if (previousSong?.id) {
|
||||
sendScrobble.mutate(
|
||||
{
|
||||
apiClientProps: { serverId: previousSong._serverId || '' },
|
||||
query: {
|
||||
albumId: previousSong.albumId,
|
||||
event: 'stop',
|
||||
id: previousSong.id,
|
||||
mediaType: previousMediaType,
|
||||
playbackRate: playbackRate,
|
||||
position: getPositionValue(
|
||||
previousPositionSec,
|
||||
useTicksForPrevious,
|
||||
),
|
||||
submission: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
onSuccess: () => {
|
||||
logFn.debug(logMsg[LogCategory.SCROBBLE].scrobbledStop, {
|
||||
category: LogCategory.SCROBBLE,
|
||||
meta: {
|
||||
id: previousSong.id,
|
||||
},
|
||||
});
|
||||
},
|
||||
},
|
||||
);
|
||||
}
|
||||
}, 2000);
|
||||
|
||||
previousSongRef.current = currentSong;
|
||||
previousTimestampRef.current = 0;
|
||||
stopPositionRef.current = 0;
|
||||
flushScrobbleDebug();
|
||||
},
|
||||
[
|
||||
@@ -591,6 +629,7 @@ export const useScrobble = () => {
|
||||
isCurrentSongScrobbledRef.current = false;
|
||||
lastProgressEventRef.current = 0;
|
||||
previousTimestampRef.current = 0;
|
||||
stopPositionRef.current = 0;
|
||||
listenedMsRef.current = 0;
|
||||
lastListenSampleTimeRef.current = null;
|
||||
|
||||
@@ -625,6 +664,17 @@ export const useScrobble = () => {
|
||||
// Update previous timestamp on progress for use in status change handler
|
||||
const handleProgressUpdate = useCallback(
|
||||
(properties: { timestamp: number }, prev: { timestamp: number }) => {
|
||||
// Preserve last playback position when the playhead resets to the start
|
||||
// (song change can fire after progress already reports 0 for the new track).
|
||||
if (
|
||||
properties.timestamp < SCROBBLE_TRACK_BEGIN_SEC &&
|
||||
prev.timestamp >= SCROBBLE_TRACK_BEGIN_SEC
|
||||
) {
|
||||
stopPositionRef.current = prev.timestamp;
|
||||
} else {
|
||||
stopPositionRef.current = properties.timestamp;
|
||||
}
|
||||
|
||||
previousTimestampRef.current = properties.timestamp;
|
||||
handleScrobbleFromProgress(properties, prev);
|
||||
flushScrobbleDebug();
|
||||
|
||||
@@ -224,25 +224,26 @@ export const PlaylistQueryEditor = ({
|
||||
return detailQuery?.data?.rules?.order || 'asc';
|
||||
}, [detailQuery?.data?.rules?.order, detailQuery?.data?.rules?.sort]);
|
||||
|
||||
const appliedQuery = appliedJsonState?.query;
|
||||
const detailQueryRules = detailQuery?.data?.rules;
|
||||
const effectiveQuery = useMemo(
|
||||
() =>
|
||||
appliedJsonState?.query ??
|
||||
(detailQuery?.data?.rules?.all
|
||||
? { all: detailQuery.data.rules.all }
|
||||
: detailQuery?.data?.rules?.any
|
||||
? { any: detailQuery.data.rules.any }
|
||||
: detailQuery?.data?.rules),
|
||||
[appliedJsonState?.query, detailQuery?.data?.rules],
|
||||
appliedQuery ??
|
||||
(detailQueryRules?.all
|
||||
? { all: detailQueryRules.all }
|
||||
: detailQueryRules?.any
|
||||
? { any: detailQueryRules.any }
|
||||
: detailQueryRules),
|
||||
[appliedQuery, detailQueryRules],
|
||||
);
|
||||
const effectiveLimit = appliedJsonState?.limit ?? detailQuery?.data?.rules?.limit;
|
||||
const effectiveLimitPercent =
|
||||
appliedJsonState?.limitPercent ?? detailQuery?.data?.rules?.limitPercent;
|
||||
|
||||
const appliedSort = appliedJsonState?.sort;
|
||||
const effectiveSortBy = useMemo(
|
||||
() =>
|
||||
(appliedJsonState?.sort ? [appliedJsonState.sort] : parseSortBy()) as
|
||||
| SongListSort
|
||||
| SongListSort[],
|
||||
[appliedJsonState?.sort, parseSortBy],
|
||||
() => (appliedSort ? [appliedSort] : parseSortBy()) as SongListSort | SongListSort[],
|
||||
[appliedSort, parseSortBy],
|
||||
);
|
||||
const effectiveSortOrder = appliedJsonState?.sort
|
||||
? appliedJsonState.sort.startsWith('-')
|
||||
|
||||
@@ -298,6 +298,7 @@ export const useServerAuthenticated = () => {
|
||||
await new Promise((resolve) => setTimeout(resolve, NETWORK_RETRY_DELAY_MS));
|
||||
|
||||
// Retry authentication
|
||||
// eslint-disable-next-line react-hooks/immutability
|
||||
return authenticateServer(serverWithAuth, nextRetry);
|
||||
}
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@ const appRouterModals = {
|
||||
|
||||
export const AppRouter = () => {
|
||||
const router = (
|
||||
<HashRouter unstable_useTransitions={false}>
|
||||
<HashRouter>
|
||||
<ModalsProvider modals={appRouterModals}>
|
||||
<RouterErrorBoundary>
|
||||
<Routes>
|
||||
|
||||
@@ -47,6 +47,7 @@ export const THEME_DATA = [
|
||||
{ label: 'Rosé Pine', type: 'dark', value: AppTheme.ROSE_PINE },
|
||||
{ label: 'Rosé Pine Moon', type: 'dark', value: AppTheme.ROSE_PINE_MOON },
|
||||
{ label: 'Rosé Pine Dawn', type: 'light', value: AppTheme.ROSE_PINE_DAWN },
|
||||
{ label: 'Zenburn', type: 'dark', value: AppTheme.ZENBURN },
|
||||
];
|
||||
|
||||
export const useAppTheme = (overrideTheme?: AppTheme) => {
|
||||
|
||||
@@ -107,6 +107,7 @@ export const logMsg = {
|
||||
[LogCategory.SCROBBLE]: {
|
||||
scrobbledPause: 'Scrobbled a pause event',
|
||||
scrobbledStart: 'Scrobbled a start event',
|
||||
scrobbledStop: 'Scrobbled a stop event',
|
||||
scrobbledSubmission: 'Scrobbled a submission event',
|
||||
scrobbledTimeupdate: 'Scrobbled a timeupdate event',
|
||||
scrobbledUnpause: 'Scrobbled an unpause event',
|
||||
|
||||
@@ -34,6 +34,7 @@ export enum AppTheme {
|
||||
TOKYO_NIGHT = 'tokyoNight',
|
||||
VSCODE_DARK_PLUS = 'vscodeDarkPlus',
|
||||
VSCODE_LIGHT_PLUS = 'vscodeLightPlus',
|
||||
ZENBURN = 'zenburn',
|
||||
}
|
||||
|
||||
export type AppThemeConfiguration = Partial<BaseAppThemeConfiguration>;
|
||||
|
||||
@@ -35,6 +35,7 @@ import { solarizedLight } from '/@/shared/themes/solarized-light/solarized-light
|
||||
import { tokyoNight } from '/@/shared/themes/tokyo-night/tokyo-night';
|
||||
import { vscodeDarkPlus } from '/@/shared/themes/vscode-dark-plus/vscode-dark-plus';
|
||||
import { vscodeLightPlus } from '/@/shared/themes/vscode-light-plus/vscode-light-plus';
|
||||
import { zenburn } from '/@/shared/themes/zenburn/zenburn';
|
||||
|
||||
export const appTheme: Record<AppTheme, AppThemeConfiguration> = {
|
||||
[AppTheme.AYU_DARK]: ayuDark,
|
||||
@@ -68,6 +69,7 @@ export const appTheme: Record<AppTheme, AppThemeConfiguration> = {
|
||||
[AppTheme.TOKYO_NIGHT]: tokyoNight,
|
||||
[AppTheme.VSCODE_DARK_PLUS]: vscodeDarkPlus,
|
||||
[AppTheme.VSCODE_LIGHT_PLUS]: vscodeLightPlus,
|
||||
[AppTheme.ZENBURN]: zenburn,
|
||||
};
|
||||
|
||||
export const getAppTheme = (theme: AppTheme): AppThemeConfiguration => {
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
import { AppThemeConfiguration } from '/@/shared/themes/app-theme-types';
|
||||
|
||||
export const zenburn: AppThemeConfiguration = {
|
||||
app: {
|
||||
'overlay-header':
|
||||
'linear-gradient(transparent 0%, rgb(40 44 52 / 85%) 100%), var(--theme-background-noise)',
|
||||
'overlay-subheader':
|
||||
'linear-gradient(180deg, rgb(40 44 52 / 5%) 0%, var(--theme-colors-background) 100%), var(--theme-background-noise)',
|
||||
'scrollbar-handle-background': 'rgba(160, 160, 160, 20%)',
|
||||
'scrollbar-handle-hover-background': 'rgba(160, 160, 160, 40%)',
|
||||
},
|
||||
colors: {
|
||||
background: '#3f3f3f',
|
||||
'background-alternate': '#313131',
|
||||
black: '#313131',
|
||||
foreground: '#dcdccc',
|
||||
'foreground-muted': '#d9d9d9',
|
||||
primary: '#95a4b2',
|
||||
'state-error': '#dca3a3',
|
||||
'state-info': '#95a4b2',
|
||||
'state-success': '#7f9f7f',
|
||||
'state-warning': '#efdcbc',
|
||||
surface: '#636363',
|
||||
'surface-foreground': '#95a4b2',
|
||||
white: '#dcdccc',
|
||||
},
|
||||
mode: 'dark',
|
||||
};
|
||||
@@ -1363,7 +1363,7 @@ export type ScrobbleArgs = BaseEndpointArgs & {
|
||||
|
||||
export type ScrobbleQuery = {
|
||||
albumId?: string;
|
||||
event?: 'pause' | 'start' | 'unpause';
|
||||
event?: 'pause' | 'start' | 'stop' | 'unpause';
|
||||
id: string;
|
||||
mediaType: 'podcast' | 'song';
|
||||
playbackRate: number;
|
||||
|
||||
Reference in New Issue
Block a user