Compare commits

..

2 Commits

Author SHA1 Message Date
jeffvli 7b643c7379 remove mpv instance validation from system resume reload in case process was closed 2026-08-07 22:08:26 -07:00
jeffvli de07ea7b2f add MPV reload button to audio player selector 2026-08-07 22:02:32 -07:00
13 changed files with 320 additions and 661 deletions
+1 -1
View File
@@ -165,7 +165,7 @@
"concurrently": "^9.2.1", "concurrently": "^9.2.1",
"cross-env": "^10.1.0", "cross-env": "^10.1.0",
"electron": "^41.7.1", "electron": "^41.7.1",
"electron-builder": "^26.15.7", "electron-builder": "^26.15.5",
"electron-devtools-installer": "^4.0.0", "electron-devtools-installer": "^4.0.0",
"electron-vite": "^4.0.1", "electron-vite": "^4.0.1",
"eslint": "^9.39.4", "eslint": "^9.39.4",
+22 -22
View File
@@ -287,8 +287,8 @@ importers:
specifier: ^41.7.1 specifier: ^41.7.1
version: 41.7.2 version: 41.7.2
electron-builder: electron-builder:
specifier: ^26.15.7 specifier: ^26.15.5
version: 26.15.7(electron-builder-squirrel-windows@26.15.7) version: 26.15.5(electron-builder-squirrel-windows@26.15.5)
electron-devtools-installer: electron-devtools-installer:
specifier: ^4.0.0 specifier: ^4.0.0
version: 4.0.0 version: 4.0.0
@@ -2356,12 +2356,12 @@ packages:
anynum@1.0.0: anynum@1.0.0:
resolution: {integrity: sha512-xjR9/zBVnUOP6ztMIIgShjsxui80nQUQH+5xJnvrYLs+90bF25/KJqaAi8mk+B4RDtX1Nspi6fmp4YTEts8SfA==} resolution: {integrity: sha512-xjR9/zBVnUOP6ztMIIgShjsxui80nQUQH+5xJnvrYLs+90bF25/KJqaAi8mk+B4RDtX1Nspi6fmp4YTEts8SfA==}
app-builder-lib@26.15.7: app-builder-lib@26.15.5:
resolution: {integrity: sha512-C7APoYISPExUmrEntNhDpz9Tccb4uWuEDfLaC0WPPc7/pwzz0WZGznCz/ycPfkkzw6tKOalceD8g6TgHmVz1QA==} resolution: {integrity: sha512-CJdzqy4YXQQdn+ivw1ssuY4yBTgVaBtniB2Dnjc6JsM9mbXoZ4shbuuysjenZloMOEIKEqkuRxltNQyG/NP/pA==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
peerDependencies: peerDependencies:
dmg-builder: 26.15.7 dmg-builder: 26.15.5
electron-builder-squirrel-windows: 26.15.7 electron-builder-squirrel-windows: 26.15.5
argparse@2.0.1: argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -2889,8 +2889,8 @@ packages:
discord-api-types@0.38.48: discord-api-types@0.38.48:
resolution: {integrity: sha512-WFUE/2o0lBlLeCQonQ+Pu2RqHAqbytBJ2RlXR91gzk05InSS6k9ShzzLYoymrA4c2oRgRKGE7/VqQJNNdGWSxQ==} resolution: {integrity: sha512-WFUE/2o0lBlLeCQonQ+Pu2RqHAqbytBJ2RlXR91gzk05InSS6k9ShzzLYoymrA4c2oRgRKGE7/VqQJNNdGWSxQ==}
dmg-builder@26.15.7: dmg-builder@26.15.5:
resolution: {integrity: sha512-rfo1YyAWO0L3cZLKCqKQiLYbW6ZXebRUfK0kWp4oXxO7dDFLrf7alRkWImNuXvZVQhs6Idzy++cwOk8I+xPDhw==} resolution: {integrity: sha512-Ts58Bs9QVCPhkhvkz9V1JwVoIwmbA06szZTM7W/ihzoDjHlf7KJo1Ci9nFknoFUC8uDeYgtbu5HW8eAeZ5qeSA==}
doctrine@2.1.0: doctrine@2.1.0:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
@@ -2954,11 +2954,11 @@ packages:
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
hasBin: true hasBin: true
electron-builder-squirrel-windows@26.15.7: electron-builder-squirrel-windows@26.15.5:
resolution: {integrity: sha512-B4uvn2NzFSuf084udWqugludFull6CRJiWe2dLzMnZLl6G5hdAGk0fsBMGlBSpKjvQCJn8IPc+S7OnJ+GXqwLA==} resolution: {integrity: sha512-+7D6F08V26p8dLLu2rK4MReQR50lA5W6hEgtNmjm6xbLrAGCJSWFbQEca6oNRKnFGlfHGS1TfgHLmOL3HX+6DA==}
electron-builder@26.15.7: electron-builder@26.15.5:
resolution: {integrity: sha512-DBpaNzxsPs1BvEblzFoNriSbzsBqDCy/gseIngeEhYzQG1IxfB7Hvc2tBBVmpWE2BTQGP9J1RrAvDT+Vc/uAxg==} resolution: {integrity: sha512-ii+Befxc8diyoQv9iUchEzBAvFef4vrY/l2NID1wdZL2WCTLe80sYQz7Alc+yswWPpgowUdpsI5HtomE2Lj/Mg==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
hasBin: true hasBin: true
@@ -7782,7 +7782,7 @@ snapshots:
anynum@1.0.0: {} anynum@1.0.0: {}
app-builder-lib@26.15.7(dmg-builder@26.15.7)(electron-builder-squirrel-windows@26.15.7): app-builder-lib@26.15.5(dmg-builder@26.15.5)(electron-builder-squirrel-windows@26.15.5):
dependencies: dependencies:
'@electron/asar': 3.4.1 '@electron/asar': 3.4.1
'@electron/fuses': 1.8.0 '@electron/fuses': 1.8.0
@@ -7803,11 +7803,11 @@ snapshots:
chromium-pickle-js: 0.2.0 chromium-pickle-js: 0.2.0
ci-info: 4.3.1 ci-info: 4.3.1
debug: 4.4.3 debug: 4.4.3
dmg-builder: 26.15.7(electron-builder-squirrel-windows@26.15.7) dmg-builder: 26.15.5(electron-builder-squirrel-windows@26.15.5)
dotenv: 16.6.1 dotenv: 16.6.1
dotenv-expand: 11.0.7 dotenv-expand: 11.0.7
ejs: 3.1.10 ejs: 3.1.10
electron-builder-squirrel-windows: 26.15.7(dmg-builder@26.15.7) electron-builder-squirrel-windows: 26.15.5(dmg-builder@26.15.5)
electron-publish: 26.15.3 electron-publish: 26.15.3
fs-extra: 10.1.0 fs-extra: 10.1.0
hosted-git-info: 4.1.0 hosted-git-info: 4.1.0
@@ -8416,9 +8416,9 @@ snapshots:
discord-api-types@0.38.48: {} discord-api-types@0.38.48: {}
dmg-builder@26.15.7(electron-builder-squirrel-windows@26.15.7): dmg-builder@26.15.5(electron-builder-squirrel-windows@26.15.5):
dependencies: dependencies:
app-builder-lib: 26.15.7(dmg-builder@26.15.7)(electron-builder-squirrel-windows@26.15.7) app-builder-lib: 26.15.5(dmg-builder@26.15.5)(electron-builder-squirrel-windows@26.15.5)
builder-util: 26.15.3 builder-util: 26.15.3
fs-extra: 10.1.0 fs-extra: 10.1.0
js-yaml: 4.2.0 js-yaml: 4.2.0
@@ -8491,23 +8491,23 @@ snapshots:
dependencies: dependencies:
jake: 10.9.4 jake: 10.9.4
electron-builder-squirrel-windows@26.15.7(dmg-builder@26.15.7): electron-builder-squirrel-windows@26.15.5(dmg-builder@26.15.5):
dependencies: dependencies:
app-builder-lib: 26.15.7(dmg-builder@26.15.7)(electron-builder-squirrel-windows@26.15.7) app-builder-lib: 26.15.5(dmg-builder@26.15.5)(electron-builder-squirrel-windows@26.15.5)
builder-util: 26.15.3 builder-util: 26.15.3
electron-winstaller: 5.4.0 electron-winstaller: 5.4.0
transitivePeerDependencies: transitivePeerDependencies:
- dmg-builder - dmg-builder
- supports-color - supports-color
electron-builder@26.15.7(electron-builder-squirrel-windows@26.15.7): electron-builder@26.15.5(electron-builder-squirrel-windows@26.15.5):
dependencies: dependencies:
app-builder-lib: 26.15.7(dmg-builder@26.15.7)(electron-builder-squirrel-windows@26.15.7) app-builder-lib: 26.15.5(dmg-builder@26.15.5)(electron-builder-squirrel-windows@26.15.5)
builder-util: 26.15.3 builder-util: 26.15.3
builder-util-runtime: 9.7.0 builder-util-runtime: 9.7.0
chalk: 4.1.2 chalk: 4.1.2
ci-info: 4.4.0 ci-info: 4.4.0
dmg-builder: 26.15.7(electron-builder-squirrel-windows@26.15.7) dmg-builder: 26.15.5(electron-builder-squirrel-windows@26.15.5)
fs-extra: 10.1.0 fs-extra: 10.1.0
lazy-val: 1.0.5 lazy-val: 1.0.5
simple-update-notifier: 2.0.0 simple-update-notifier: 2.0.0
+8 -33
View File
@@ -519,12 +519,7 @@
"customThemeWarnings_description": "Následující motivy byly načteny, ale některé hodnoty byly neplatné a byly ignorovány.", "customThemeWarnings_description": "Následující motivy byly načteny, ale některé hodnoty byly neplatné a byly ignorovány.",
"customThemeWarnings": "Varování", "customThemeWarnings": "Varování",
"customThemes_description": "Přesuňte soubory motivu .json pro přidání vlastních motivů. Budou načteny automaticky kdykoli přidáte, upravíte nebo odstraníte soubor.", "customThemes_description": "Přesuňte soubory motivu .json pro přidání vlastních motivů. Budou načteny automaticky kdykoli přidáte, upravíte nebo odstraníte soubor.",
"customThemes": "Vlastní motivy", "customThemes": "Vlastní motivy"
"confirmQueueChanges": "Potvrdit změny ve frontě",
"confirmQueueChanges_description": "Zeptat se na potvrzení před vymazáním aktuální fronty",
"shareExpiration_description": "Jak daleko do budoucnosti ve výchozím nastavení vyprší nové odkazy ke sdílení. Vymažte datum v dialogu sdílení pro použití výchozí hodnoty serveru",
"shareExpiration": "Výchozí vypršení sdílení",
"shareExpirationUseServerDefault": "Použít výchozí dobu vypršení serveru"
}, },
"action": { "action": {
"editPlaylist": "Upravit $t(entity.playlist, {\"count\": 1})", "editPlaylist": "Upravit $t(entity.playlist, {\"count\": 1})",
@@ -791,9 +786,7 @@
"sampleRate": "$t(common.sampleRate)", "sampleRate": "$t(common.sampleRate)",
"composer": "Skladatel", "composer": "Skladatel",
"titleArtist": "$t(common.title) (umělec)", "titleArtist": "$t(common.title) (umělec)",
"albumGroup": "Skupina alb", "albumGroup": "Skupina alb"
"date": "Datum",
"releaseYear": "Rok vydání"
} }
}, },
"column": { "column": {
@@ -803,7 +796,7 @@
"favorite": "Oblíbené", "favorite": "Oblíbené",
"playCount": "Přehrání", "playCount": "Přehrání",
"albumCount": "Alba", "albumCount": "Alba",
"releaseYear": "Rok vydání", "releaseYear": "Rok",
"lastPlayed": "Naposledy přehráno", "lastPlayed": "Naposledy přehráno",
"biography": "Biografie", "biography": "Biografie",
"releaseDate": "Datum vydání", "releaseDate": "Datum vydání",
@@ -823,9 +816,7 @@
"codec": "Kodek", "codec": "Kodek",
"owner": "Majitel", "owner": "Majitel",
"bitDepth": "Bitová hloubka", "bitDepth": "Bitová hloubka",
"sampleRate": "Vzorkovací frekvence", "sampleRate": "Vzorkovací frekvence"
"date": "Datum",
"year": "Rok"
} }
}, },
"error": { "error": {
@@ -908,9 +899,7 @@
"explicitStatus": "$t(common.explicitStatus)", "explicitStatus": "$t(common.explicitStatus)",
"sortName": "Název v řazení", "sortName": "Název v řazení",
"matchAnd": "A", "matchAnd": "A",
"matchOr": "Nebo", "matchOr": "Nebo"
"date": "Datum",
"year": "Rok"
}, },
"page": { "page": {
"sidebar": { "sidebar": {
@@ -1065,8 +1054,7 @@
"playerFilters": "Filtry přehrávače", "playerFilters": "Filtry přehrávače",
"logger": "Protokol", "logger": "Protokol",
"lyricsDisplay": "Zobrazení textů", "lyricsDisplay": "Zobrazení textů",
"lyricsTranslation": "Překlad textů", "lyricsTranslation": "Překlad textů"
"sharing": "Sdílení"
}, },
"albumArtistList": { "albumArtistList": {
"title": "$t(entity.albumArtist, {\"count\": 2})" "title": "$t(entity.albumArtist, {\"count\": 2})"
@@ -1246,9 +1234,7 @@
"setExpiration": "Nastavit vypršení", "setExpiration": "Nastavit vypršení",
"createFailed": "Nepodařilo se vytvořit sdílení (je sdílení povoleno?)", "createFailed": "Nepodařilo se vytvořit sdílení (je sdílení povoleno?)",
"copyToClipboard": "Zkopírovat do schránky: Ctrl+C, enter", "copyToClipboard": "Zkopírovat do schránky: Ctrl+C, enter",
"successMustClick": "Sdílení úspěšně vytvořeno. klikněte sem pro otevření", "successMustClick": "Sdílení úspěšně vytvořeno. klikněte sem pro otevření"
"setExpiration_description": "Ponechte prázdné pro použití výchozího vypršení serveru",
"setExpiration_serverDefault": "Podle serveru"
}, },
"privateMode": { "privateMode": {
"enabled": "Soukromý režim povolen, stav přehrávání je nyní skryt před externími integracemi", "enabled": "Soukromý režim povolen, stav přehrávání je nyní skryt před externími integracemi",
@@ -1295,10 +1281,6 @@
}, },
"createPrefilledPlaylist": { "createPrefilledPlaylist": {
"title": "Vytvořit $t(entity.playlist, {\"count\": 1}) z vybraných skladeb" "title": "Vytvořit $t(entity.playlist, {\"count\": 1}) z vybraných skladeb"
},
"queueChangeConfirmation": {
"title": "Vymazat aktuální frontu?",
"description": "Toto odstraní všechny položky z aktuální fronty."
} }
}, },
"entity": { "entity": {
@@ -1420,14 +1402,7 @@
"minuteShort": "min.", "minuteShort": "min.",
"secondShort": "s", "secondShort": "s",
"hourShort": "h.", "hourShort": "h.",
"dayShort": "d.", "dayShort": "d."
"secondLong": "Sekunda",
"minuteLong": "Minuta",
"hourLong": "Hodina",
"dayLong": "Den",
"weekLong": "Týden",
"monthLong": "Měsíc",
"yearLong": "Rok"
}, },
"visualizer": { "visualizer": {
"visualizerType": "Typ vizualizéru", "visualizerType": "Typ vizualizéru",
+42 -136
View File
@@ -24,11 +24,11 @@
"createPlaylist": "Sortu $t(entity.playlist, {\"count\": 1})", "createPlaylist": "Sortu $t(entity.playlist, {\"count\": 1})",
"deletePlaylist": "Ezabatu $t(entity.playlist, {\"count\": 1})", "deletePlaylist": "Ezabatu $t(entity.playlist, {\"count\": 1})",
"addToFavorites": "Gehitu gogokoetara", "addToFavorites": "Gehitu gogokoetara",
"addToPlaylist": "Gehitu erreprodukzio zerrendara", "addToPlaylist": "Gehitu $t(entity.playlist, {\"count\": 1})ra",
"createRadioStation": "Sortu $t(entity.radioStation, {\"count\": 1})", "createRadioStation": "Sortu $t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "Ezabatu $t(entity.radioStation, {\"count\": 1})", "deleteRadioStation": "Ezabatu $t(entity.radioStation, {\"count\": 1})",
"viewMore": "Ikusi gehiago", "viewMore": "Ikusi gehiago",
"shuffle": "Auzazkoa", "shuffle": "Nahastu",
"selectAll": "Aukeratu guztiak", "selectAll": "Aukeratu guztiak",
"downloadStarted": "{{count}} elementuren deskarga hasi da", "downloadStarted": "{{count}} elementuren deskarga hasi da",
"addOrRemoveFromSelection": "Gehitu edo kendu hautapenetik", "addOrRemoveFromSelection": "Gehitu edo kendu hautapenetik",
@@ -38,13 +38,7 @@
"moveItems": "Elementuak mugitu", "moveItems": "Elementuak mugitu",
"openApplicationDirectory": "Ireki aplikazioaren direktorioa", "openApplicationDirectory": "Ireki aplikazioaren direktorioa",
"goToCurrent": "Joan uneko elementura", "goToCurrent": "Joan uneko elementura",
"createPlaylistFromQueue": "Sortu $t(entity.playlist, {\"count\": 1}) ilaratik", "createPlaylistFromQueue": "Sortu $t(entity.playlist, {\"count\": 1}) ilaratik"
"collapseAllFolders": "Bildu karpeta guztiak",
"expandAllFolders": "Erakutsi karpeta guztiak",
"moveUp": "Mugitu gorantz",
"moveDown": "Mugitu beherantz",
"holdToMoveToTop": "Sakatu eta eutsi gora mugitzeko",
"holdToMoveToBottom": "Sakatu eta eutsi behera mugitzeko"
}, },
"common": { "common": {
"add": "Gehitu", "add": "Gehitu",
@@ -165,19 +159,7 @@
"numberOfResults": "{{numberOfResults}} emaitza", "numberOfResults": "{{numberOfResults}} emaitza",
"rename": "Berrizendatu", "rename": "Berrizendatu",
"newVersionAvailable": "Bertsio berri bat eskuragarri dago", "newVersionAvailable": "Bertsio berri bat eskuragarri dago",
"gridRows": "Sareta-errenkadak", "gridRows": "Sareta-errenkadak"
"back": "Atzera",
"openFolder": "Ireki karpeta",
"filter_single": "Bakarra",
"filter_multiple": "Anitzeko",
"grouping": "Taldekatzea",
"mood": "Aldartea",
"saveAndClose": "Gorde eta itxi",
"undo": "Desegin",
"lastScan": "Azken eskaneatzea {{date}}",
"scanFolderCount": "{{count}} karpeta",
"scanItemCount": "{{count}} elementu",
"scanningLibrary": "Liburutegia eskaneatzen…"
}, },
"player": { "player": {
"repeat": "Errepikatu", "repeat": "Errepikatu",
@@ -191,8 +173,8 @@
"skip": "Saltatu", "skip": "Saltatu",
"stop": "Gelditu", "stop": "Gelditu",
"unfavorite": "Kendu gogokoetatik", "unfavorite": "Kendu gogokoetatik",
"addLast": "Azken aldiz", "addLast": "Gehitu azkena",
"addNext": "Hurrengoa", "addNext": "Gehitu hurrengoa",
"playbackFetchInProgress": "Abestiak kargatzen…", "playbackFetchInProgress": "Abestiak kargatzen…",
"playbackSpeed": "Erreprodukzio-abiadura", "playbackSpeed": "Erreprodukzio-abiadura",
"playRandom": "Erreproduzitu auzaz", "playRandom": "Erreproduzitu auzaz",
@@ -217,8 +199,7 @@
"addLastShuffled": "Azkena (ausaz)", "addLastShuffled": "Azkena (ausaz)",
"addNextShuffled": "Hurrengoa (ausaz)", "addNextShuffled": "Hurrengoa (ausaz)",
"artistRadio": "Artista irratia", "artistRadio": "Artista irratia",
"trackRadio": "Pista irratia", "trackRadio": "Pista irratia"
"sleepTimer_custom": "Pertsonalizatua"
}, },
"table": { "table": {
"config": { "config": {
@@ -248,14 +229,14 @@
"pagination_infinite": "Infinitua" "pagination_infinite": "Infinitua"
}, },
"label": { "label": {
"actions": "$t(common.action, {\"count\": 2})", "actions": "$t(common.action_other)",
"album": "$t(entity.album, {\"count\": 1})", "album": "$t(entity.album, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})", "albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"artist": "$t(entity.artist, {\"count\": 1})", "artist": "$t(entity.artist, {\"count\": 1})",
"biography": "$t(common.biography)", "biography": "$t(common.biography)",
"bitrate": "$t(common.bitrate)", "bitrate": "$t(common.bitrate)",
"bpm": "$t(common.bpm)", "bpm": "$t(common.bpm)",
"channels": "$t(common.channel, {\"count\": 2})", "channels": "$t(common.channel_other)",
"codec": "$t(common.codec)", "codec": "$t(common.codec)",
"duration": "$t(common.duration)", "duration": "$t(common.duration)",
"favorite": "$t(common.favorite)", "favorite": "$t(common.favorite)",
@@ -277,27 +258,25 @@
"albumCount": "$t(entity.album, {\"count\": 2})", "albumCount": "$t(entity.album, {\"count\": 2})",
"image": "Irudia", "image": "Irudia",
"bitDepth": "$t(common.bitDepth)", "bitDepth": "$t(common.bitDepth)",
"sampleRate": "$t(common.sampleRate)", "sampleRate": "$t(common.sampleRate)"
"date": "Data",
"releaseYear": "Argitaratze urtea"
} }
}, },
"column": { "column": {
"album": "Albuma", "album": "Albuma",
"albumCount": "albumak", "albumCount": "$t(entity.album, {\"count\": 2})",
"artist": "Artista", "artist": "$t(entity.artist, {\"count\": 1})",
"biography": "Biografia", "biography": "Biografia",
"bitrate": "Bit-emaria", "bitrate": "Bit-emaria",
"channels": "Kanalak", "channels": "$t(common.channel_other)",
"codec": "Kodekak", "codec": "$t(common.codec)",
"discNumber": "Diskoa", "discNumber": "Diskoa",
"favorite": "Gogokoa", "favorite": "Gogokoa",
"genre": "Generoa", "genre": "$t(entity.genre, {\"count\": 1})",
"path": "Bidea", "path": "Bidea",
"rating": "Balorazioa", "rating": "Balorazioa",
"releaseYear": "Argitaratze urtea", "releaseYear": "Urtea",
"size": "Tamaina", "size": "$t(common.size)",
"songCount": "Pistak", "songCount": "$t(entity.track, {\"count\": 2})",
"title": "Tituloa", "title": "Tituloa",
"trackNumber": "Pista", "trackNumber": "Pista",
"bpm": "BPM", "bpm": "BPM",
@@ -308,17 +287,15 @@
"dateAdded": "Gehitutako data", "dateAdded": "Gehitutako data",
"albumArtist": "Albumeko artista", "albumArtist": "Albumeko artista",
"owner": "Jabea", "owner": "Jabea",
"bitDepth": "Bit-sakonera", "bitDepth": "$t(common.bitDepth)",
"sampleRate": "$t(common.sampleRate)", "sampleRate": "$t(common.sampleRate)"
"date": "Data",
"year": "Urtea"
} }
}, },
"entity": { "entity": {
"album_one": "Albuma", "album_one": "Albuma",
"album_other": "Albumak", "album_other": "Albumak",
"albumArtist_one": "Albumaren Artista", "albumArtist_one": "Albumaren artista",
"albumArtist_other": "Albumaren Artistak", "albumArtist_other": "Albumaren artistak",
"albumArtistCount_one": "Album artista {{count}}", "albumArtistCount_one": "Album artista {{count}}",
"albumArtistCount_other": "{{count}} album artista", "albumArtistCount_other": "{{count}} album artista",
"albumWithCount_one": "Album {{count}}", "albumWithCount_one": "Album {{count}}",
@@ -435,9 +412,7 @@
"explicitStatus": "$t(common.explicitStatus)", "explicitStatus": "$t(common.explicitStatus)",
"matchAnd": "Eta", "matchAnd": "Eta",
"matchOr": "Edo", "matchOr": "Edo",
"sortName": "Izenaren arabera ordenatu", "sortName": "Izenaren arabera ordenatu"
"date": "Data",
"year": "Urtea"
}, },
"setting": { "setting": {
"hotkey_playbackPause": "Pausatu", "hotkey_playbackPause": "Pausatu",
@@ -495,7 +470,7 @@
"lastfmApiKey": "{{lastfm}} API gakoa", "lastfmApiKey": "{{lastfm}} API gakoa",
"lastfmApiKey_description": "{{lastfm}}-ren API gakoa. Azaleko arterako beharrezkoa.", "lastfmApiKey_description": "{{lastfm}}-ren API gakoa. Azaleko arterako beharrezkoa.",
"lyricFetch": "Eskuratu letrak internetetik", "lyricFetch": "Eskuratu letrak internetetik",
"lyricFetch_description": "Eskuratu letrak hautatutako hornitzaileetatik", "lyricFetch_description": "Eskuratu letrak hainbat internet iturrietatik",
"audioExclusiveMode_description": "Gaitu irteera esklusiboko modua. Modu honetan, sistema normalean blokeatuta egoten da, eta mpv-k bakarrik atera ahal izango du audioa", "audioExclusiveMode_description": "Gaitu irteera esklusiboko modua. Modu honetan, sistema normalean blokeatuta egoten da, eta mpv-k bakarrik atera ahal izango du audioa",
"audioDevice_description": "Aukeratu erreproduzitzeko erabiliko den audio gailua (web erreproduzitzailea bakarrik)", "audioDevice_description": "Aukeratu erreproduzitzeko erabiliko den audio gailua (web erreproduzitzailea bakarrik)",
"audioPlayer": "Audio erreproduzitzailea", "audioPlayer": "Audio erreproduzitzailea",
@@ -626,7 +601,7 @@
"playerbarOpenDrawer": "Txandakatu erreproduzitzailearen barra pantaila osora", "playerbarOpenDrawer": "Txandakatu erreproduzitzailearen barra pantaila osora",
"playerbarOpenDrawer_description": "Aukera ematen du erreproduzitzailearen barran klik egiteak pantaila osoko erreproduzitzailea irekitzeko", "playerbarOpenDrawer_description": "Aukera ematen du erreproduzitzailearen barran klik egiteak pantaila osoko erreproduzitzailea irekitzeko",
"customCssNotice": "Abisua: garbiketa batzuk dauden arren (URL() eta content: debekatuz), CSS pertsonalizatua erabiltzeak arriskuak sor ditzake interfazea aldatuz gero", "customCssNotice": "Abisua: garbiketa batzuk dauden arren (URL() eta content: debekatuz), CSS pertsonalizatua erabiltzeak arriskuak sor ditzake interfazea aldatuz gero",
"customCss_description": "CSS eduki pertsonalizatua. Oharra: edukia eta urruneko urlak debekatutako propietateak dira. Zure edukiaren aurrebista erakusten da behean. Ezarri ez dituzun eremu gehigarriak daude garbiketa dela eta. Mahaigaina: Feishinek custom.css fitxategia aplikazioaren konfigurazio direktorioan irakurri eta idazten du eta fitxategia aldatzen denean berriro kargatzen du", "customCss_description": "CSS eduki pertsonalizatua. Oharra: edukia eta urruneko urlak debekatutako propietateak dira. Zure edukiaren aurrebista erakusten da behean. Ezarri ez dituzun eremu gehigarriak daude garbiketa dela eta",
"enableRemote": "Gaitu urruneko kontrol zerbitzaria", "enableRemote": "Gaitu urruneko kontrol zerbitzaria",
"enableRemote_description": "Urruneko kontrol zerbitzariari beste gailu batzuei aplikazioa kontrolatzeko aukera ematen dio", "enableRemote_description": "Urruneko kontrol zerbitzariari beste gailu batzuei aplikazioa kontrolatzeko aukera ematen dio",
"imageAspectRatio_description": "Gaituta badago, azaleko artea jatorrizko aspektu-erlazioa erabiliz erakutsiko da. 1:1 ez den arterako, gainerako espazioa hutsik egongo da", "imageAspectRatio_description": "Gaituta badago, azaleko artea jatorrizko aspektu-erlazioa erabiliz erakutsiko da. 1:1 ez den arterako, gainerako espazioa hutsik egongo da",
@@ -683,7 +658,7 @@
"transcodeFormat": "Transkodetzeko formatua", "transcodeFormat": "Transkodetzeko formatua",
"queryBuilderCustomFields_inputLabel": "Etiketa", "queryBuilderCustomFields_inputLabel": "Etiketa",
"autoDJ": "DJ automatikoa", "autoDJ": "DJ automatikoa",
"autoDJ_itemCount_description": "Ilaran gehitzen saiatu diren elementuen kopurua", "autoDJ_itemCount_description": "DJ automatikoa gaituta dagoenean ilaran gehitzen saiatu diren elementuen kopurua",
"autoDJ_timing_description": "DJ automatikoa aktibatu aurretik ilaran geratzen diren abestien kopurua", "autoDJ_timing_description": "DJ automatikoa aktibatu aurretik ilaran geratzen diren abestien kopurua",
"analyticsDisable": "Erabileran oinarritutako analisiei uko egin", "analyticsDisable": "Erabileran oinarritutako analisiei uko egin",
"analyticsDisable_description": "Erabilera-datu anonimoak garatzaileari bidaltzen zaizkio aplikazioa hobetzen laguntzeko", "analyticsDisable_description": "Erabilera-datu anonimoak garatzaileari bidaltzen zaizkio aplikazioa hobetzen laguntzeko",
@@ -697,7 +672,7 @@
"hotkey_listPlayLast": "Zerrenda erreproduzitu amaieran", "hotkey_listPlayLast": "Zerrenda erreproduzitu amaieran",
"hotkey_listPlayNow": "Zerrenda erreproduzitu orain", "hotkey_listPlayNow": "Zerrenda erreproduzitu orain",
"logLevel": "Erregistro maila", "logLevel": "Erregistro maila",
"logLevel_description": "Bistaratzeko erregistroen gutxieneko maila ezartzen du", "logLevel_description": "Bistaratzeko erregistroen gutxieneko maila ezartzen du. Debug-ek erregistro guztiak erakusten ditu, «erroreak» erroreak bakarrik erakusten ditu",
"logLevel_optionDebug": "Arazketa", "logLevel_optionDebug": "Arazketa",
"playerFilters_description": "Saltatu abestiak ilaran gehitzea irizpide hauen arabera", "playerFilters_description": "Saltatu abestiak ilaran gehitzea irizpide hauen arabera",
"artistRadioCount_description": "Artista eta abestien irratian bilatu beharreko abesti kopurua ezartzen du", "artistRadioCount_description": "Artista eta abestien irratian bilatu beharreko abesti kopurua ezartzen du",
@@ -756,28 +731,7 @@
"showSkipButton_description": "Erakutsi edo ezkutatu saltatzeko botoiak erreproduzitzailearen barran", "showSkipButton_description": "Erakutsi edo ezkutatu saltatzeko botoiak erreproduzitzailearen barran",
"showSkipButton": "Erakutsi saltatzeko botoiak", "showSkipButton": "Erakutsi saltatzeko botoiak",
"showSkipButtons_description": "Erakutsi edo ezkutatu saltatzeko botoiak erreproduzitzailearen barran", "showSkipButtons_description": "Erakutsi edo ezkutatu saltatzeko botoiak erreproduzitzailearen barran",
"showSkipButtons": "Erakutsi saltatzeko botoiak", "showSkipButtons": "Erakutsi saltatzeko botoiak"
"replayGainPreamp": "{{ReplayGain}} aurreamplifikadorea (db)",
"replayGainPreamp_description": "Doitu {{ReplayGain}} balioei aplikatutako aurreamplifikadorearen irabazpena",
"sidebarPlaylistFolderSeparator": "Karpeta-bereizlea",
"sidebarPlaylistFolderView_description": "Karpetak alboko barran nola bistaratzen diren",
"sidebarPlaylistFolderView": "Karpeta-ikuspegia",
"sidebarPlaylistFolderView_optionSingle": "Karpeta bakarra",
"sidebarPlaylistFolderView_optionTree": "Zuhaitz-ikuspegia",
"sidebarPlaylistFolderView_optionNavigation": "Nabigazio ikuspegia",
"exportDiagnostics": "Esportatu diagnostikoak",
"confirmQueueChanges": "Berretsi ilararen aldaketak",
"confirmQueueChanges_description": "Eskatu baieztapena uneko ilara baztertu aurretik",
"preventSuspendOnPlayback_description": "Saihestu aplikazioa musika erreproduzitzen ari den bitartean etetea",
"preventSuspendOnPlayback": "Saihestu erreprodukzioan etetea",
"shareExpiration": "Partekatze-iraungitze lehenetsia",
"shareExpirationUseServerDefault": "Erabili zerbitzariaren iraungitze-data lehenetsia",
"playerItemConfiguration": "Erreproduzitzeilearen elementuen ezarpenak",
"sidebarPlaylistFolders": "Gaitu karpetak",
"sidebarPlaylistList": "Alboko barrako erreprodukzio-zerrendak",
"sidebarPlaylistMode_description": "Nola bistaratzen den erreprodukzio-zerrenda bakoitza alboko barrako zerrendan",
"equalizerPreset": "Aurrezarpena",
"equalizerPresetGroupBuiltIn": "Barneratua"
}, },
"form": { "form": {
"addServer": { "addServer": {
@@ -796,8 +750,7 @@
"input_preferInstantMixDescription": "Erabili berehalako nahasketa soilik antzeko abestiak lortzeko. Erabilgarria portaera hau aldatzen duten pluginak badituzu", "input_preferInstantMixDescription": "Erabili berehalako nahasketa soilik antzeko abestiak lortzeko. Erabilgarria portaera hau aldatzen duten pluginak badituzu",
"input_remoteUrl": "URL publikoa", "input_remoteUrl": "URL publikoa",
"input_preferRemoteUrl": "URL publikoa nahiago izan", "input_preferRemoteUrl": "URL publikoa nahiago izan",
"input_remoteUrlPlaceholder": "Aukerakoa: kanpoko funtzioetarako URL publikoa", "input_remoteUrlPlaceholder": "Aukerakoa: kanpoko funtzioetarako URL publikoa"
"input_passwordNoSSO": "Alderantzizko proxy (SSO) autentifikazioa ez da onartzen. Erabiltzaile-izen/pasahitz autentifikazioa eta Subsonic autentifikazioa bakarrik onartzen dira"
}, },
"addToPlaylist": { "addToPlaylist": {
"input_playlists": "$t(entity.playlist, {\"count\": 2})", "input_playlists": "$t(entity.playlist, {\"count\": 2})",
@@ -829,9 +782,7 @@
"allowDownloading": "Baimendu deskargatzea", "allowDownloading": "Baimendu deskargatzea",
"createFailed": "Partekatzea sortzeak huts egin du (Partekatzea gaituta al dago?)", "createFailed": "Partekatzea sortzeak huts egin du (Partekatzea gaituta al dago?)",
"copyToClipboard": "Kopiatu arbelean: Ctrl+C, Enter", "copyToClipboard": "Kopiatu arbelean: Ctrl+C, Enter",
"successMustClick": "Partekatzea behar bezala sortu da. Egin klik hemen irekitzeko", "successMustClick": "Partekatzea behar bezala sortu da. Egin klik hemen irekitzeko"
"setExpiration_description": "Utzi hutsik zerbitzariaren iraungitze-data lehenetsia erabiltzeko",
"setExpiration_serverDefault": "Zerbitzariaren lehenetsia"
}, },
"deletePlaylist": { "deletePlaylist": {
"success": "$t(entity.playlist, {\"count\": 1}) behar bezala ezabatu da", "success": "$t(entity.playlist, {\"count\": 1}) behar bezala ezabatu da",
@@ -882,28 +833,10 @@
"input_limit": "Zenbat abesti?", "input_limit": "Zenbat abesti?",
"input_played_optionAll": "Pista guztiak", "input_played_optionAll": "Pista guztiak",
"input_played_optionUnplayed": "Erreproduzitu gabeko pistak bakarrik", "input_played_optionUnplayed": "Erreproduzitu gabeko pistak bakarrik",
"input_played_optionPlayed": "Erreproduzitutako pistak bakarrik", "input_played_optionPlayed": "Erreproduzitutako pistak bakarrik"
"input_kind_albums": "Albumak",
"input_kind_songs": "Abestiak",
"input_kind": "Ausazko aukeraketak",
"input_limit_albums": "Zenbat album?",
"input_limit_songs": "Zenbat abesti?",
"input_minYear": "Urtetik aurrera",
"input_maxYear": "Urtera arte",
"input_played": "Erreproduzitu iragazkia"
}, },
"saveQueue": { "saveQueue": {
"success": "Erreprodukzio-ilara zerbitzarian gordeta" "success": "Erreprodukzio-ilara zerbitzarian gordeta"
},
"queueChangeConfirmation": {
"title": "Uneko ilara baztertu?",
"description": "Honek uneko ilaratik elementu guztiak kenduko ditu."
},
"createPrefilledPlaylist": {
"title": "Hautatutako abestietatik $t(entity.playlist, {\"count\": 1}) sortu"
},
"editRadioStation": {
"success": "Irrati-katea behar bezala eguneratu da"
} }
}, },
"page": { "page": {
@@ -936,9 +869,7 @@
"commandPalette": "Ireki komando-paleta", "commandPalette": "Ireki komando-paleta",
"noMusicFolder": "Ez da musika karpetarik hautatu", "noMusicFolder": "Ez da musika karpetarik hautatu",
"selectMusicFolder": "Aukeratu musika karpeta", "selectMusicFolder": "Aukeratu musika karpeta",
"multipleMusicFolders": "{{count}} musika karpeta aukeratuta", "multipleMusicFolders": "{{count}} musika karpeta aukeratuta"
"rescanLibrary": "Berriro eskaneatu liburutegia",
"logout": "Saioa itxi"
}, },
"manageServers": { "manageServers": {
"url": "URLa", "url": "URLa",
@@ -973,9 +904,7 @@
"goToAlbum": "Joan $t(entity.album, {\"count\": 1})-(e)ra", "goToAlbum": "Joan $t(entity.album, {\"count\": 1})-(e)ra",
"goToAlbumArtist": "Joan albumera", "goToAlbumArtist": "Joan albumera",
"showDetails": "Informazioa lortu", "showDetails": "Informazioa lortu",
"moveItems": "$t(action.moveItems)", "moveItems": "$t(action.moveItems)"
"goTo": "Joan honera",
"editMetadata": "Editatu metadatuak"
}, },
"fullscreenPlayer": { "fullscreenPlayer": {
"config": { "config": {
@@ -992,12 +921,7 @@
"showLyricProvider": "Erakutsi letra hornitzailea", "showLyricProvider": "Erakutsi letra hornitzailea",
"lyricOffset": "Letra-desplazamendua (ms)", "lyricOffset": "Letra-desplazamendua (ms)",
"lyricGap": "Letra hutsunea", "lyricGap": "Letra hutsunea",
"useImageAspectRatio": "Erabili irudiaren aspektu-erlazioa", "useImageAspectRatio": "Erabili irudiaren aspektu-erlazioa"
"followCurrentLyric_description": "Korritu automatikoki letra-lerro aktiboa ikusgai mantentzeko",
"lyricFollowScrollAlignment": "Letrak lerrokatzeari jarraitzen diote",
"lyricAlignment_description": "Letra-testuaren lerrokatze horizontala",
"lyricGapSynchronized_description": "Letra-lerro sinkronizatuen arteko tarte bertikala",
"lyricGapUnsynchronized_description": "Letra-lerro ez-sinkronizatuen arteko tarte bertikala"
}, },
"lyrics": "Letrak", "lyrics": "Letrak",
"related": "Erlazionatuta", "related": "Erlazionatuta",
@@ -1042,16 +966,15 @@
"sidebar": "Alboko barra", "sidebar": "Alboko barra",
"exportImport": "Inportatu/esportatu", "exportImport": "Inportatu/esportatu",
"scrobble": "Scrobble", "scrobble": "Scrobble",
"audio": "Audio", "audio": "Audioa",
"lyrics": "Letrak", "lyrics": "Letrak",
"discord": "Discord", "discord": "Discord",
"playerFilters": "Erreproduzitzailearen iragazkiak", "playerFilters": "Erreproduzitzailearen iragazkiak",
"updates": "Eguneratu", "updates": "Eguneraketa",
"queryBuilder": "Kontsulta-sortzailea", "queryBuilder": "Kontsulta-sortzailea",
"controls": "Kontrolak", "controls": "Kontrolak",
"remote": "Urrunekoa", "remote": "Urrunekoa",
"lyricsDisplay": "Erakutsi letrak", "lyricsDisplay": "Erakutsi letrak"
"transcoding": "Transkodetzea"
}, },
"sidebar": { "sidebar": {
"albumArtists": "Albumaren artistak", "albumArtists": "Albumaren artistak",
@@ -1090,19 +1013,12 @@
"groupingTypePrimary": "Argitalpen mota nagusiak", "groupingTypePrimary": "Argitalpen mota nagusiak",
"favoriteSongs": "Abesti gogokoenak", "favoriteSongs": "Abesti gogokoenak",
"topSongsCommunity": "Komunitatea", "topSongsCommunity": "Komunitatea",
"topSongsPersonal": "Pertsonala", "topSongsPersonal": "Pertsonala"
"favoriteSongsFrom": "{{title}}-ko abesti gogokoenak"
}, },
"itemDetail": { "itemDetail": {
"copyPath": "Kopiatu bidea arbelean", "copyPath": "Kopiatu bidea arbelean",
"openFile": "Erakutsi pista fitxategi-kudeatzailean", "openFile": "Erakutsi pista fitxategi-kudeatzailean",
"copiedPath": "Bidea behar bezala kopiatu da", "copiedPath": "Bidea behar bezala kopiatu da"
"fileNotWritable": "Fitxategia ez da eskuragarria edo ezin da idatzi",
"triggerRescan": "Aktibatu beste liburutegi-eskaneatzea gorde ondoren",
"addField": "Gehitu eremua…",
"emptyFields": "Eremuak ezin dira hutsik egon",
"tagsTab": "Etiketak",
"multipleValues": "(Balio Anitzak)"
}, },
"playlist": { "playlist": {
"reorder": "Berrantolaketa idaren arabera ordenatzean bakarrik gaituta dago" "reorder": "Berrantolaketa idaren arabera ordenatzean bakarrik gaituta dago"
@@ -1142,14 +1058,7 @@
"minuteShort": "M", "minuteShort": "M",
"secondShort": "S", "secondShort": "S",
"hourShort": "H", "hourShort": "H",
"dayShort": "D", "dayShort": "D"
"secondLong": "Segundoa",
"minuteLong": "Minutua",
"hourLong": "Ordua",
"dayLong": "Eguna",
"weekLong": "Astea",
"monthLong": "Hilabetea",
"yearLong": "Urtea"
}, },
"queryBuilder": { "queryBuilder": {
"customTags": "Etiketa pertsonalizatutak", "customTags": "Etiketa pertsonalizatutak",
@@ -1161,7 +1070,7 @@
"notContains": "Ez dauka", "notContains": "Ez dauka",
"startsWith": "Honekin hasten da", "startsWith": "Honekin hasten da",
"endsWith": "Honekin amaitzen da", "endsWith": "Honekin amaitzen da",
"isNot": "Ez dago", "isNot": "Ez da",
"afterDate": "(Data) ondoren da", "afterDate": "(Data) ondoren da",
"after": "Ondoren da", "after": "Ondoren da",
"before": "Lehenago da", "before": "Lehenago da",
@@ -1173,10 +1082,7 @@
"isGreaterThan": "Hau baino handiagoa da", "isGreaterThan": "Hau baino handiagoa da",
"isLessThan": "Hau baino gutxiago da", "isLessThan": "Hau baino gutxiago da",
"notInPlaylist": "Ez dago barruan", "notInPlaylist": "Ez dago barruan",
"notInTheLast": "Ez dago azkenengoan", "notInTheLast": "Ez dago azkenengoan"
"isMissing": "falta da",
"isPresent": "Badago",
"matchesRegex": "Adierazpen erregularrarekin bat dator"
}, },
"visualizer": { "visualizer": {
"general": "Orokorra", "general": "Orokorra",
+1 -96
View File
@@ -1,96 +1 @@
{ {}
"action": {
"addOrRemoveFromSelection": "Engadir ou eliminar da selección",
"clearQueue": "Limpar a cola",
"goToCurrent": "Vai ao elemento actual",
"collapseAllFolders": "Colapsar todos os cartafoles",
"expandAllFolders": "Expandir todos os cartafoles",
"selectAll": "Seleccionar todo",
"downloadStarted": "Comezou a descarga de {{count}} elementos",
"editPlaylist": "Editar $t(entity.playlist, {\"count\": 1})",
"goToPage": "Ir á páxina",
"moveToNext": "Por a continuación",
"moveToBottom": "Por ao final",
"moveToTop": "Por á cabeza",
"moveUp": "Subir",
"moveDown": "Baixar",
"deselectAll": "Seleccionar nada",
"moveItems": "Mover elementos",
"shuffle": "Barallar",
"shuffleAll": "Barallar todo",
"shuffleSelected": "Barallar a selección",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "Sacar de $t(entity.favorite, {\"count\": 2})",
"removeFromPlaylist": "Sacar de $t(entity.playlist, {\"count\": 1})",
"removeFromQueue": "Sacar da cola",
"setRating": "Puntuar",
"viewMore": "Ver máis",
"openApplicationDirectory": "Abrir o cartafol da aplicación",
"openIn": {
"lastfm": "Abrir en Last.fm",
"listenbrainz": "Abrir en ListenBrainz",
"musicbrainz": "Abrir en MusicBrainz",
"qobuz": "Abrir en Qobuz",
"spotify": "Abrir en Spotify"
},
"addToFavorites": "Engadir a $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "Engadir a $t(entity.playlist, {\"count\": 1})",
"selectRangeOfItems": "Seleccionar un rango de elementos",
"createPlaylist": "Crea $t(entity.playlist, {\"count\": 1})",
"createPlaylistFromQueue": "Crea $t(entity.playlist, {\"count\": 1}) desde fila",
"createRadioStation": "Crea $t(entity.radioStation, {\"count\": 1})",
"deletePlaylist": "Borra $t(entity.playlist, {\"count\": 1})",
"deleteRadioStation": "Borra $t(entity.radioStation, {\"count\": 1})",
"viewPlaylists": "Ver $t(entity.playlist, {\"count\": 2})"
},
"common": {
"countSelected": "{{count}} seleccionados",
"action_one": "Acción",
"action_other": "Accións",
"add": "Engadir",
"additionalParticipants": "Participantes adicionais",
"newVersion": "Unha nova versión foi instalada ({{version}})",
"explicitStatus": "Estado explícito",
"areYouSure": "Estás seguro?",
"ascending": "Ascendente",
"back": "Atrás",
"biography": "Biografía",
"bitrate": "Bitrate",
"bpm": "BPM",
"cancel": "Cancela",
"channel_one": "Canle",
"channel_other": "Canles",
"clear": "Limpar",
"close": "Pechar",
"codec": "Codec",
"collapse": "Collapsar",
"comingSoon": "Próximamente…",
"create": "Crea",
"decrease": "Diminuir",
"delete": "Borrar",
"descending": "Descendente",
"description": "Descrición",
"disable": "Desabilita",
"disc": "Disco",
"dismiss": "Desbotar",
"doNotShowAgain": "Non mostrar isto outra vez",
"duration": "Duración",
"edit": "Editar",
"enable": "Habilitar",
"expand": "Expandir",
"example": "Exemplo",
"externalLinks": "Ligazóns externas",
"openFolder": "Abrir cartafol",
"faster": "Máis rápido",
"favorite": "Favorito",
"filter_one": "Filtro",
"filter_other": "Filtros",
"filters": "Filtros",
"filter_single": "Single",
"filter_multiple": "Multi",
"forceRestartRequired": "Reinicia para aplicar os cambios… pecha a notificación para reiniciar",
"forward": "Adiante",
"home": "Casa",
"increase": "Aumenta"
}
}
+27 -197
View File
@@ -43,8 +43,7 @@
"openApplicationDirectory": "Buka direktori aplikasi", "openApplicationDirectory": "Buka direktori aplikasi",
"goToCurrent": "Pergi ke item saat ini", "goToCurrent": "Pergi ke item saat ini",
"collapseAllFolders": "Ciutkan semua folder", "collapseAllFolders": "Ciutkan semua folder",
"expandAllFolders": "Bentangkan semua folder", "expandAllFolders": "Bentangkan semua folder"
"createPlaylistFromQueue": "Buat $t(entity.playlist, {\"count\": 1}) dari antrean"
}, },
"common": { "common": {
"clear": "Bersihkan", "clear": "Bersihkan",
@@ -166,14 +165,7 @@
"back": "Kembali", "back": "Kembali",
"grouping": "Pengelompokan", "grouping": "Pengelompokan",
"numberOfResults": "{{numberOfResults}} hasil", "numberOfResults": "{{numberOfResults}} hasil",
"newVersionAvailable": "Versi baru tersedia", "newVersionAvailable": "Versi baru tersedia"
"openFolder": "Buka folder",
"saveAndClose": "Simpan dan tutup",
"undo": "Batalkan",
"lastScan": "Pemindaian terakhir {{date}}",
"scanFolderCount": "{{count}} folder",
"scanItemCount": "{{count}} item",
"scanningLibrary": "Memindai pustaka…"
}, },
"entity": { "entity": {
"album_other": "Album", "album_other": "Album",
@@ -277,9 +269,7 @@
"sortName": "Nama pengurutan", "sortName": "Nama pengurutan",
"explicitStatus": "$t(common.explicitStatus)", "explicitStatus": "$t(common.explicitStatus)",
"matchAnd": "Dan", "matchAnd": "Dan",
"matchOr": "Atau", "matchOr": "Atau"
"date": "Tanggal",
"year": "Tahun"
}, },
"form": { "form": {
"addServer": { "addServer": {
@@ -298,8 +288,7 @@
"input_preferInstantMixDescription": "Hanya gunakan mix instan untuk mendapatkan lagu serupa. berguna jika Anda memiliki plugin yang memodifikasi perilaku ini", "input_preferInstantMixDescription": "Hanya gunakan mix instan untuk mendapatkan lagu serupa. berguna jika Anda memiliki plugin yang memodifikasi perilaku ini",
"input_preferRemoteUrl": "Utamakan URL publik", "input_preferRemoteUrl": "Utamakan URL publik",
"input_remoteUrl": "Url publik", "input_remoteUrl": "Url publik",
"input_remoteUrlPlaceholder": "Opsional: URL publik untuk fitur eksternal", "input_remoteUrlPlaceholder": "Opsional: URL publik untuk fitur eksternal"
"input_passwordNoSSO": "Autentikasi proxy terbalik (SSO) tidak didukung. Hanya autentikasi nama pengguna/kata sandi dan autentikasi Subsonic yang didukung"
}, },
"addToPlaylist": { "addToPlaylist": {
"input_playlists": "$t(entity.playlist, {\"count\": 2})", "input_playlists": "$t(entity.playlist, {\"count\": 2})",
@@ -350,9 +339,7 @@
"expireInvalid": "Masa berlaku harus di waktu mendatang", "expireInvalid": "Masa berlaku harus di waktu mendatang",
"createFailed": "Gagal membuat bagikanan (apakah fitur berbagi diaktifkan?)", "createFailed": "Gagal membuat bagikanan (apakah fitur berbagi diaktifkan?)",
"copyToClipboard": "Salin ke clipboard: Ctrl+C, enter", "copyToClipboard": "Salin ke clipboard: Ctrl+C, enter",
"successMustClick": "Berbagi berhasil dibuat. klik di sini untuk membuka", "successMustClick": "Berbagi berhasil dibuat. klik di sini untuk membuka"
"setExpiration_description": "Kosongkan untuk menggunakan masa kedaluwarsa default server",
"setExpiration_serverDefault": "Default server"
}, },
"updateServer": { "updateServer": {
"success": "Server berhasil diperbarui", "success": "Server berhasil diperbarui",
@@ -386,12 +373,7 @@
"input_played": "Filter pemutaran", "input_played": "Filter pemutaran",
"input_played_optionAll": "Semua trek", "input_played_optionAll": "Semua trek",
"input_played_optionUnplayed": "Hanya trek yang belum diputar", "input_played_optionUnplayed": "Hanya trek yang belum diputar",
"input_played_optionPlayed": "Hanya trek yang sudah diputar", "input_played_optionPlayed": "Hanya trek yang sudah diputar"
"input_kind_albums": "Album",
"input_kind_songs": "Lagu",
"input_kind": "Pilihan acak",
"input_limit_albums": "Berapa banyak album?",
"input_limit_songs": "Berapa banyak lagu?"
}, },
"privateMode": { "privateMode": {
"enabled": "Mode pribadi diaktifkan, status pemutaran kini disembunyikan dari integrasi eksternal", "enabled": "Mode pribadi diaktifkan, status pemutaran kini disembunyikan dari integrasi eksternal",
@@ -400,13 +382,6 @@
}, },
"editRadioStation": { "editRadioStation": {
"success": "Stasiun radio berhasil diperbarui" "success": "Stasiun radio berhasil diperbarui"
},
"queueChangeConfirmation": {
"title": "Buang antrean saat ini?",
"description": "Ini akan menghapus semua item dari antrean saat ini."
},
"createPrefilledPlaylist": {
"title": "Buat $t(entity.playlist, {\"count\": 1}) dari lagu yang dipilih"
} }
}, },
"page": { "page": {
@@ -456,9 +431,7 @@
"privateModeOn": "Nyalakan mode pribadi", "privateModeOn": "Nyalakan mode pribadi",
"selectMusicFolder": "Pilih folder musik", "selectMusicFolder": "Pilih folder musik",
"noMusicFolder": "Tidak ada folder musik yang dipilih", "noMusicFolder": "Tidak ada folder musik yang dipilih",
"multipleMusicFolders": "{{count}} folder musik dipilih", "multipleMusicFolders": "{{count}} folder musik dipilih"
"rescanLibrary": "Pindai ulang pustaka",
"logout": "Keluar"
}, },
"manageServers": { "manageServers": {
"title": "Kelola server", "title": "Kelola server",
@@ -494,8 +467,7 @@
"moveItems": "$t(action.moveItems)", "moveItems": "$t(action.moveItems)",
"goTo": "Buka ke", "goTo": "Buka ke",
"goToAlbum": "Buka ke $t(entity.album, {\"count\": 1})", "goToAlbum": "Buka ke $t(entity.album, {\"count\": 1})",
"goToAlbumArtist": "Buka ke $t(entity.albumArtist, {\"count\": 1})", "goToAlbumArtist": "Buka ke $t(entity.albumArtist, {\"count\": 1})"
"editMetadata": "Edit Metadata"
}, },
"fullscreenPlayer": { "fullscreenPlayer": {
"config": { "config": {
@@ -514,35 +486,13 @@
"lyricOffset": "Offset lirik (ms)", "lyricOffset": "Offset lirik (ms)",
"lyricGap": "Jarak lirik", "lyricGap": "Jarak lirik",
"lyricOpacityNonActive": "Opasitas lirik nonaktif", "lyricOpacityNonActive": "Opasitas lirik nonaktif",
"lyricScaleNonActive": "Skala lirik nonaktif", "lyricScaleNonActive": "Skala lirik nonaktif"
"followCurrentLyric_description": "Gulir secara otomatis untuk menjaga baris lirik aktif tetap terlihat",
"lyricFollowScrollAlignment": "Penyelarasan ikuti lirik",
"lyricFollowScrollAlignment_description": "Posisi vertikal baris aktif saat mengikuti",
"lyricAlignment_description": "Penyelarasan horizontal teks lirik",
"lyricGapSynchronized_description": "Jarak vertikal antar baris lirik tersinkronisasi",
"lyricGapUnsynchronized_description": "Jarak vertikal antar baris lirik tak tersinkronisasi",
"lyricLineLeadTime": "Waktu tuntun baris (ms)",
"lyricLineLeadTime_description": "Majukan baris aktif sebanyak milidetik ini sebelum timestamp-nya",
"lyricPaddingLeft": "Padding kiri lirik (%)",
"lyricPaddingLeft_description": "Padding kiri sebagai persentase dari area lirik",
"lyricPaddingRight": "Padding kanan lirik (%)",
"lyricPaddingRight_description": "Padding kanan sebagai persentase dari area lirik",
"lyricSizeSynchronized_description": "Ukuran font untuk lirik tersinkronisasi (berwaktu)",
"lyricSizeUnsynchronized_description": "Ukuran font untuk lirik tak tersinkronisasi (biasa)",
"lyricOpacityNonActive_description": "Opasitas baris lirik yang sedang tidak aktif",
"lyricScaleNonActive_description": "Skala baris lirik yang sedang tidak aktif",
"showLyricMatch_description": "Tampilkan nama lagu dan artis dari lirik yang cocok",
"showLyricProvider_description": "Tampilkan penyedia yang menyediakan lirik saat ini"
}, },
"lyrics": "Lirik", "lyrics": "Lirik",
"related": "Terkait", "related": "Terkait",
"upNext": "Berikutnya", "upNext": "Berikutnya",
"noLyrics": "Tanpa lirik", "noLyrics": "Tanpa lirik",
"visualizer": "Visualisasi", "visualizer": "Visualisasi"
"lyricLayers": "Lapisan lirik",
"lyricLanguage": "Bahasa",
"showPronunciation": "Pelafalan",
"showTranslation": "Terjemahan"
}, },
"genreList": { "genreList": {
"showAlbums": "Tampilkan $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})", "showAlbums": "Tampilkan $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
@@ -569,27 +519,7 @@
"itemDetail": { "itemDetail": {
"copyPath": "Salin jalur ke papan klip", "copyPath": "Salin jalur ke papan klip",
"copiedPath": "Jalur berhasil disalin", "copiedPath": "Jalur berhasil disalin",
"openFile": "Tampilkan trek di pengelola file", "openFile": "Tampilkan trek di pengelola file"
"tagConfiguration": "Konfigurasi tag",
"addTagConfig": "Tambahkan tag…",
"multiValueToggle": "Multi-nilai",
"autocompleteSource": "Sumber autolengkap",
"customValues": "Nilai khusus",
"addCustomValue": "Tambahkan nilai khusus…",
"serverSuggestions": "Server",
"fileNotWritable": "File tidak dapat diakses atau tidak dapat ditulis",
"triggerRescan": "Picu pemindaian ulang pustaka setelah menyimpan",
"addField": "Tambahkan bidang…",
"emptyFields": "Bidang tidak boleh kosong",
"tagsTab": "Tag",
"artworkTab": "Artwork",
"removeArtwork": "Hapus Artwork",
"noArtwork": "Tanpa Artwork",
"multipleValues": "(Beberapa Nilai)",
"multipleArtworks": "Beberapa Artwork",
"noLocalSongs": "Tidak ditemukan lagu dengan jalur file lokal",
"readPartialFailure": "Gagal membaca metadata dari {{count}} dari {{total}} file",
"writePartialFailure": "Gagal menyimpan {{count}} file"
}, },
"playlist": { "playlist": {
"reorder": "Pengurutan ulang hanya diaktifkan saat mengurutkan berdasarkan ID" "reorder": "Pengurutan ulang hanya diaktifkan saat mengurutkan berdasarkan ID"
@@ -620,9 +550,7 @@
"transcoding": "Transcoding", "transcoding": "Transcoding",
"discord": "Discord", "discord": "Discord",
"logger": "Logger", "logger": "Logger",
"playerFilters": "Filter pemutar", "playerFilters": "Filter pemutar"
"sharing": "Berbagi",
"lyricsTranslation": "Terjemahan Lirik"
}, },
"sidebar": { "sidebar": {
"albumArtists": "Artis Album", "albumArtists": "Artis Album",
@@ -720,10 +648,7 @@
"sleepTimer_timeRemaining": "{{time}} tersisa", "sleepTimer_timeRemaining": "{{time}} tersisa",
"sleepTimer_setCustom": "Atur pengatur waktu", "sleepTimer_setCustom": "Atur pengatur waktu",
"sleepTimer_cancel": "Batalkan pengatur waktu", "sleepTimer_cancel": "Batalkan pengatur waktu",
"scrobbleForceSubmit": "Paksa scrobble", "scrobbleForceSubmit": "Paksa scrobble"
"nextAlbum": "Alt+klik untuk album berikutnya",
"previousAlbum": "Alt+klik untuk album sebelumnya",
"sleepTimer_endOfAlbum": "Akhir album saat ini"
}, },
"setting": { "setting": {
"accentColor": "Warna sorotan", "accentColor": "Warna sorotan",
@@ -762,7 +687,7 @@
"customCssEnable_description": "Izinkan penulisan CSS kustom", "customCssEnable_description": "Izinkan penulisan CSS kustom",
"customCssNotice": "Peringatan: meskipun ada beberapa sanitasi (melarang URL() dan content:), menggunakan CSS kustom tetap dapat menimbulkan risiko dengan mengubah antarmuka", "customCssNotice": "Peringatan: meskipun ada beberapa sanitasi (melarang URL() dan content:), menggunakan CSS kustom tetap dapat menimbulkan risiko dengan mengubah antarmuka",
"customCss": "Css kustom", "customCss": "Css kustom",
"customCss_description": "Konten CSS khusus. Catatan: properti content dan remote urls tidak diizinkan. Pratinjau konten Anda ditampilkan di bawah. Bidang tambahan yang tidak Anda atur tetap ada karena sanitasi. Desktop: feishin membaca dan menulis custom.css di direktori konfigurasi aplikasi dan memuat ulangnya saat file berubah", "customCss_description": "Konten CSS kustom. Catatan: properti content dan URL jarak jauh tidak diizinkan. Pratinjau konten anda ditampilkan di bawah. Kolom tambahan yang tidak anda atur ada karena sanitasi",
"customFontPath": "Jalur font kustom", "customFontPath": "Jalur font kustom",
"customFontPath_description": "Tentukan jalur font kustom yang akan digunakan aplikasi", "customFontPath_description": "Tentukan jalur font kustom yang akan digunakan aplikasi",
"discordApplicationId": "ID aplikasi {{discord}}", "discordApplicationId": "ID aplikasi {{discord}}",
@@ -837,7 +762,7 @@
"lastfmApiKey": "Kunci API untuk {{lastfm}}", "lastfmApiKey": "Kunci API untuk {{lastfm}}",
"lastfmApiKey_description": "Kunci API untuk {{lastfm}}. Diperlukan untuk sampul", "lastfmApiKey_description": "Kunci API untuk {{lastfm}}. Diperlukan untuk sampul",
"lyricFetch": "Cari lirik di internet", "lyricFetch": "Cari lirik di internet",
"lyricFetch_description": "Ambil lirik dari penyedia yang dipilih", "lyricFetch_description": "Mencari lirik dari berbagai sumber di Internet",
"lyricFetchProvider": "Penyedia untuk mencari lirik", "lyricFetchProvider": "Penyedia untuk mencari lirik",
"lyricFetchProvider_description": "Pilih penyedia untuk mengambil lirik dari", "lyricFetchProvider_description": "Pilih penyedia untuk mengambil lirik dari",
"lyricOffset": "Geser lirik (ms)", "lyricOffset": "Geser lirik (ms)",
@@ -916,11 +841,11 @@
"transcodeFormat": "Format untuk ditranskode", "transcodeFormat": "Format untuk ditranskode",
"transcodeFormat_description": "Pilih format untuk ditranskode. biarkan kosong agar server yang memutuskan", "transcodeFormat_description": "Pilih format untuk ditranskode. biarkan kosong agar server yang memutuskan",
"translationApiProvider": "Penyedia API terjemahan", "translationApiProvider": "Penyedia API terjemahan",
"translationApiProvider_description": "Memilih penyedia API yang digunakan untuk terjemahan", "translationApiProvider_description": "Penyedia API untuk terjemahan",
"translationApiKey": "Kunci API terjemahan", "translationApiKey": "Kunci API terjemahan",
"translationApiKey_description": "Kunci API untuk terjemahan (hanya endpoint layanan global)", "translationApiKey_description": "Kunci API untuk terjemahan (hanya endpoint layanan global)",
"translationTargetLanguage": "Bahasa tujuan penerjemahan", "translationTargetLanguage": "Bahasa tujuan penerjemahan",
"translationTargetLanguage_description": "Menetapkan bahasa target yang digunakan untuk terjemahan otomatis", "translationTargetLanguage_description": "Bahasa tujuan untuk penerjemahan",
"trayEnabled": "Tampilkan baki", "trayEnabled": "Tampilkan baki",
"trayEnabled_description": "Tampilkan/sembunyikan ikon/menu di area pemberitahuan. Jika dinonaktifkan, juga menonaktifkan meminimalkan/keluar ke baki", "trayEnabled_description": "Tampilkan/sembunyikan ikon/menu di area pemberitahuan. Jika dinonaktifkan, juga menonaktifkan meminimalkan/keluar ke baki",
"useSystemTheme": "Gunakan tema sistem", "useSystemTheme": "Gunakan tema sistem",
@@ -938,7 +863,7 @@
"savePlayQueue": "Simpan antrean pemutaran", "savePlayQueue": "Simpan antrean pemutaran",
"autoDJ": "DJ Otomatis", "autoDJ": "DJ Otomatis",
"autoDJ_itemCount": "Jumlah item", "autoDJ_itemCount": "Jumlah item",
"autoDJ_itemCount_description": "Jumlah item yang berusaha ditambahkan ke antrean", "autoDJ_itemCount_description": "Jumlah item yang dicoba ditambahkan ke antrean saat DJ otomatis diaktifkan",
"autoDJ_timing": "Waktu", "autoDJ_timing": "Waktu",
"autoDJ_timing_description": "Jumlah lagu yang tersisa dalam antrean sebelum DJ otomatis dipicu", "autoDJ_timing_description": "Jumlah lagu yang tersisa dalam antrean sebelum DJ otomatis dipicu",
"useThemeAccentColor": "Gunakan warna aksen tema", "useThemeAccentColor": "Gunakan warna aksen tema",
@@ -997,7 +922,7 @@
"lastfm_description": "Tampilkan tautan ke Last.fm pada halaman artis/album", "lastfm_description": "Tampilkan tautan ke Last.fm pada halaman artis/album",
"lastfm": "Tampilkan tautan last.fm", "lastfm": "Tampilkan tautan last.fm",
"logLevel": "Tingkat log", "logLevel": "Tingkat log",
"logLevel_description": "Menetapkan tingkat log minimum yang akan ditampilkan", "logLevel_description": "Menetapkan tingkat log minimum untuk ditampilkan. debug menampilkan semua log, error hanya menampilkan error",
"logLevel_optionDebug": "Debug", "logLevel_optionDebug": "Debug",
"logLevel_optionInfo": "Info", "logLevel_optionInfo": "Info",
"mpvExtraParameters": "Parameter tambahan mpv", "mpvExtraParameters": "Parameter tambahan mpv",
@@ -1054,7 +979,7 @@
"preventSleepOnPlayback": "Cegah tidur saat pemutaran", "preventSleepOnPlayback": "Cegah tidur saat pemutaran",
"sidebarPlaylistSorting_description": "Memungkinkan pengurutan playlist secara manual di bilah samping dengan drag dan drop alih-alih urutan default server", "sidebarPlaylistSorting_description": "Memungkinkan pengurutan playlist secara manual di bilah samping dengan drag dan drop alih-alih urutan default server",
"sidebarPlaylistSorting": "Pengurutan playlist bilah samping", "sidebarPlaylistSorting": "Pengurutan playlist bilah samping",
"mediaSession_description": "Mengaktifkan integrasi sesi media, menampilkan kontrol media dan metadata di overlay volume sistem dan layar kunci. Memerlukan Pemutar Audio Web.", "mediaSession_description": "Mengaktifkan integrasi Media Session, menampilkan kontrol media dan metadata pada overlay volume sistem dan layar kunci",
"mediaSession": "Aktifkan media session", "mediaSession": "Aktifkan media session",
"transcode": "Aktifkan transcoding", "transcode": "Aktifkan transcoding",
"queryBuilder": "Pembuat kueri", "queryBuilder": "Pembuat kueri",
@@ -1119,84 +1044,7 @@
"sidePlayQueueLayout_optionHorizontal": "Horizontal", "sidePlayQueueLayout_optionHorizontal": "Horizontal",
"sidePlayQueueLayout_optionVertical": "Vertikal", "sidePlayQueueLayout_optionVertical": "Vertikal",
"waveformLoadingDelay": "Penundaan pemuatan bentuk gelombang", "waveformLoadingDelay": "Penundaan pemuatan bentuk gelombang",
"waveformLoadingDelay_description": "Penundaan dalam detik sebelum memuat bentuk gelombang. Tingkatkan nilai ini jika Anda mengalami tersendat saat menggunakan pemutar web.", "waveformLoadingDelay_description": "Penundaan dalam detik sebelum memuat bentuk gelombang. Tingkatkan nilai ini jika Anda mengalami tersendat saat menggunakan pemutar web."
"autoDJ_mode": "Mode",
"autoDJ_mode_albums": "Album",
"autoDJ_mode_description": "Pilih untuk menambahkan lagu atau seluruh album ke antrean",
"autoDJ_mode_songs": "Lagu",
"autoDJ_enabled": "Aktifkan Auto DJ",
"autoDJ_albumStrategy": "Mode pemilihan album",
"autoDJ_songStrategy": "Mode pemilihan lagu",
"autoDJ_strategy_option_library_random": "Acak",
"autoDJ_strategy_option_similar": "Serupa",
"autoDJ_allowDuplicates": "Izinkan duplikat",
"autoDJ_allowDuplicates_description": "Izinkan lagu atau album yang sudah ada di antrean ditambahkan lagi oleh Auto DJ",
"autoDJ_onlySimilar": "Hanya yang serupa",
"autoDJ_onlySimilar_description": "Hanya tambahkan item yang serupa dengan lagu pemicu. Jumlah item dianggap sebagai jumlah maksimum item yang akan ditambahkan, bukan diisi hingga batas oleh sumber lain",
"audioDeviceDefault": "Default sistem",
"enableFurigana_description": "Tampilkan panduan pelafalan (furigana) di atas lirik kanji Jepang",
"enableFurigana": "Aktifkan pembuatan furigana",
"enableRomaji_description": "Tampilkan baris pelafalan romaji di bawah lirik Jepang",
"enableRomaji": "Aktifkan pembuatan romaji",
"equalizer_descriptionMpv": "Equalizer parametrik melalui FFmpeg lavfi (MPV)",
"equalizer_descriptionWebAudio": "Equalizer parametrik melalui Web Audio API",
"equalizer": "Equalizer",
"equalizerBands_description": "Gain per-bands. Seret ke atas/bawah atau ketik nilai. Rentang: -12 hingga +12 dB.",
"equalizerBands": "Bands",
"equalizerPreamp_description": "Gain input sebelum bands EQ. Atur negatif saat meningkatkan bands untuk mencegah clipping (MPV).",
"equalizerPreamp": "Preamp",
"equalizerPreset_description": "Terapkan kurva EQ bawaan atau khusus yang tersimpan",
"equalizerPreset": "Preset",
"equalizerPresetDeletePlaceholder": "Hapus custom...",
"equalizerPresetGroupBuiltIn": "Bawaan",
"equalizerPresetGroupCustom": "Khusus",
"equalizerPresetNamePlaceholder": "Nama preset...",
"equalizerPresetSelectPlaceholder": "Pilih preset",
"equalizerSavePreset_description": "Simpan pengaturan EQ saat ini sebagai preset bernama",
"equalizerSavePreset": "Simpan preset",
"hotkey_playbackNextAlbum": "Album berikutnya",
"hotkey_playbackPreviousAlbum": "Album sebelumnya",
"logLevel_optionDebugDescription": "Termasuk info, plus informasi debug lengkap, dan respons API yang disamarkan",
"logLevel_optionInfoDescription": "Termasuk info, peringatan, dan kesalahan",
"exportDiagnostics": "Ekspor diagnostik",
"confirmQueueChanges": "Konfirmasi perubahan antrean",
"confirmQueueChanges_description": "Minta konfirmasi sebelum membuang antrean saat ini",
"showFavorites": "Tampilkan favorit",
"showFavorites_description": "Mengontrol apakah tombol favorit (hati) muncul di antarmuka",
"showQueueInSidebar_description": "Panel akan ditambahkan ke bilah sisi pemutar yang menampilkan antrean putar",
"showQueueInSidebar": "Tampilkan antrean putar di bilah sisi pemutar",
"compressor_descriptionMpv": "Kompresor rentang dinamis melalui FFmpeg acompressor (MPV)",
"compressor_descriptionWebAudio": "Kompresor rentang dinamis melalui Web Audio API",
"compressor": "Kompresor",
"compressorAttack_description": "Seberapa cepat kompresor aktif setelah sinyal melebihi ambang.",
"compressorAttack": "Attack",
"compressorKnee_description": "Lebar soft-knee. Nilai lebih tinggi membuat transisi ke kompresi lebih bertahap.",
"compressorKnee": "Knee",
"compressorMakeupGain_description": "Gain output yang diterapkan setelah kompresi untuk mengembalikan kenyaringan.",
"compressorMakeupGain": "Makeup Gain",
"compressorPreset_description": "Terapkan pengaturan kompresor bawaan atau khusus yang tersimpan",
"compressorRatio_description": "Rasio kompresi, mis. 4 = 4:1.",
"compressorRatio": "Ratio",
"compressorRelease_description": "Seberapa cepat kompresor melepas setelah sinyal turun di bawah ambang.",
"compressorRelease": "Release",
"compressorReset_description": "Kembalikan semua parameter kompresor ke nilai default",
"compressorSavePreset_description": "Simpan pengaturan kompresor saat ini sebagai preset bernama",
"compressorThreshold_description": "Tingkat sinyal di mana kompresi dimulai.",
"compressorThreshold": "Threshold",
"shareExpiration_description": "Berapa lama ke depan tautan berbagi baru akan kedaluwarsa secara default. Kosongkan tanggal di dialog berbagi untuk menggunakan default server",
"shareExpiration": "Kedaluwarsa berbagi default",
"shareExpirationUseServerDefault_description": "Jangan sertakan kedaluwarsa saat membuat berbagi sehingga server dapat menerapkan default yang dikonfigurasi (mis. Navidrome DefaultShareExpiration)",
"shareExpirationUseServerDefault": "Gunakan kedaluwarsa default server",
"customThemeErrors_description": "File tema ini tidak dapat dimuat.",
"customThemeErrors": "Kesalahan",
"customThemeWarnings_description": "Tema ini dimuat, tetapi beberapa nilai tidak valid dan diabaikan.",
"customThemeWarnings": "Peringatan",
"customThemes_description": "Letakkan file tema .json ke folder ini untuk menambahkan tema khusus. File-file ini diambil secara otomatis setiap kali Anda menambahkan, mengedit, atau menghapus file.",
"customThemes": "Tema Khusus",
"windowBarTrackinfo": "Info trek di Judul Jendela",
"windowBarTrackinfo_description": "Tampilkan judul dan artis trek saat ini, posisi antrean, dan status Memutar/Jeda di Judul Jendela.",
"microtonalPitchControls": "Kontrol pitch mikrotonal",
"microtonalPitchControls_description": "Tambahkan lebih banyak kontrol pitch untuk berpindah di antara semi-ton"
}, },
"table": { "table": {
"column": { "column": {
@@ -1219,16 +1067,14 @@
"playCount": "Putaran", "playCount": "Putaran",
"rating": "Penilaian", "rating": "Penilaian",
"releaseDate": "Tanggal rilis", "releaseDate": "Tanggal rilis",
"releaseYear": "Tahun rilis", "releaseYear": "Tahun",
"size": "Ukuran", "size": "Ukuran",
"songCount": "Trek", "songCount": "Trek",
"title": "Judul", "title": "Judul",
"trackNumber": "Pista", "trackNumber": "Pista",
"bitDepth": "Kedalaman Bit", "bitDepth": "Kedalaman Bit",
"sampleRate": "Laju Sampel", "sampleRate": "Laju Sampel",
"owner": "Pemilik", "owner": "Pemilik"
"date": "Tanggal",
"year": "Tahun"
}, },
"config": { "config": {
"general": { "general": {
@@ -1261,12 +1107,7 @@
"horizontalBorders": "Batas baris", "horizontalBorders": "Batas baris",
"rowHoverHighlight": "Sorotan hover baris", "rowHoverHighlight": "Sorotan hover baris",
"showHeader": "Tampilkan header", "showHeader": "Tampilkan header",
"verticalBorders": "Batas kolom", "verticalBorders": "Batas kolom"
"albumGroupConfig": "Konfigurasi Grup Album",
"albumGroupMetadata": "Bidang metadata",
"albumGroupShowFavoriteRating": "Tampilkan favorit dan peringkat",
"albumGroupVerticalLayout": "Tata letak vertikal",
"albumImageSize": "Ukuran gambar album"
}, },
"label": { "label": {
"actions": "$t(common.action, {\"count\": 2})", "actions": "$t(common.action, {\"count\": 2})",
@@ -1304,9 +1145,7 @@
"image": "Gambar", "image": "Gambar",
"sampleRate": "$t(common.sampleRate)", "sampleRate": "$t(common.sampleRate)",
"titleArtist": "$t(common.title) (artis)", "titleArtist": "$t(common.title) (artis)",
"albumGroup": "Grup album", "albumGroup": "Grup album"
"date": "Tanggal",
"releaseYear": "Tahun Rilis"
}, },
"view": { "view": {
"table": "Tabel", "table": "Tabel",
@@ -1320,14 +1159,7 @@
"minuteShort": "M", "minuteShort": "M",
"secondShort": "S", "secondShort": "S",
"hourShort": "H", "hourShort": "H",
"dayShort": "D", "dayShort": "D"
"secondLong": "Detik",
"minuteLong": "Menit",
"hourLong": "Jam",
"dayLong": "Hari",
"weekLong": "Minggu",
"monthLong": "Bulan",
"yearLong": "Tahun"
}, },
"filterOperator": { "filterOperator": {
"after": "Setelah", "after": "Setelah",
@@ -1348,9 +1180,7 @@
"notContains": "Tidak berisi", "notContains": "Tidak berisi",
"notInPlaylist": "Tidak berada di", "notInPlaylist": "Tidak berada di",
"notInTheLast": "Tidak dalam kurun terakhir", "notInTheLast": "Tidak dalam kurun terakhir",
"startsWith": "Diawali dengan", "startsWith": "Diawali dengan"
"isMissing": "Tidak ada",
"isPresent": "Ada"
}, },
"queryBuilder": { "queryBuilder": {
"standardTags": "Tag standar", "standardTags": "Tag standar",
+69 -69
View File
@@ -1,45 +1,45 @@
{ {
"player": { "player": {
"repeat_all": "すべてリピート", "repeat_all": "全曲リピート",
"stop": "停止", "stop": "停止",
"repeat": "リピート", "repeat": "リピート",
"queue_remove": "選択項目を削除", "queue_remove": "選択項目を削除",
"playRandom": "ランダム再生", "playRandom": "ランダム再生",
"skip": "スキップ", "skip": "スキップ",
"previous": "前へ", "previous": "前へ",
"toggleFullscreenPlayer": "全画面プレーヤーに切り替え", "toggleFullscreenPlayer": "全画面プレーヤーに切り替え",
"skip_back": "前へスキップ", "skip_back": "前へスキップ",
"favorite": "お気に入り", "favorite": "お気に入り",
"next": "次へ", "next": "次へ",
"shuffle": "再生シャッフル", "shuffle": "再生 (シャッフル)",
"playbackFetchNoResults": "曲が見つかりません", "playbackFetchNoResults": "曲が見つかりません",
"playbackFetchInProgress": "曲を読み込み中…", "playbackFetchInProgress": "曲を読み込み中…",
"addNext": "再生している曲の直後に追加", "addNext": "",
"playbackSpeed": "再生速度", "playbackSpeed": "再生速度",
"playbackFetchCancel": "処理に時間がかかります… 通知を閉じるとキャンセルします", "playbackFetchCancel": "処理に時間がかかります… 通知を閉じるとキャンセルします",
"play": "再生", "play": "再生",
"repeat_off": "リピート無効", "repeat_off": "リピート無効",
"queue_clear": "キューを消去", "queue_clear": "キューをクリア",
"muted": "ミュート中", "muted": "ミュート中",
"unfavorite": "お気に入り解除", "unfavorite": "お気に入り解除",
"queue_moveToTop": "選択項目を先頭に移動", "queue_moveToTop": "選択項目を先頭に移動",
"queue_moveToBottom": "選択項目を一番下に移動", "queue_moveToBottom": "選択項目を一番下に移動",
"shuffle_off": "シャッフル無効", "shuffle_off": "シャッフル無効",
"addLast": "キューの最後に追加", "addLast": "最後",
"mute": "ミュート", "mute": "ミュート",
"skip_forward": "次へスキップ", "skip_forward": "次へスキップ",
"pause": "一時停止", "pause": "一時停止",
"playSimilarSongs": "似たような曲を再生", "playSimilarSongs": "似たような曲を再生する",
"viewQueue": "キューを表示", "viewQueue": "キューを表示",
"lyrics": "歌詞", "lyrics": "歌詞",
"restoreQueueFromServer": "サーバーからキューを復元", "restoreQueueFromServer": "サーバーからキューを復元",
"saveQueueToServer": "サーバーにキューを保存", "saveQueueToServer": "サーバーにキューを保存",
"addLastShuffled": "キューの最後に追加(シャッフル", "addLastShuffled": "最後 (シャッフル)",
"addNextShuffled": "再生している曲の直後に追加(シャッフル", "addNextShuffled": "次 (シャッフル)",
"sleepTimer_minutes": "{{count}} 分", "sleepTimer_minutes": "{{count}} 分",
"sleepTimer_hours": "{{count}} 時間", "sleepTimer_hours": "{{count}} 時間",
"sleepTimer": "スリープタイマー", "sleepTimer": "スリープタイマー",
"sleepTimer_endOfSong": "現在の曲の終", "sleepTimer_endOfSong": "現在の曲の終わり",
"sleepTimer_custom": "カスタム", "sleepTimer_custom": "カスタム",
"sleepTimer_off": "オフ", "sleepTimer_off": "オフ",
"sleepTimer_timeRemaining": "残り {{time}}", "sleepTimer_timeRemaining": "残り {{time}}",
@@ -89,14 +89,14 @@
"hotkey_zoomIn": "拡大", "hotkey_zoomIn": "拡大",
"scrobble_description": "再生した音楽をメディアサーバーから Scrobble します", "scrobble_description": "再生した音楽をメディアサーバーから Scrobble します",
"hotkey_browserForward": "ブラウザ 進む", "hotkey_browserForward": "ブラウザ 進む",
"audioExclusiveMode_description": "排他出力モードを有効にします。このモードでは、通常、システムへのアクセスが制限され、MPV のみが音声を出力できます。このモードが有効になっている間は、ビジュアライザーシステム音声キャプチャ機能しません", "audioExclusiveMode_description": "排他出力モードを有効にします。このモードでは、システムの他の出力がロックされ、MPV のみがオーディオを出力できるようになります。このモードが有効になっている間は、ビジュアライザーシステムオーディオのキャプチャ機能は動作しません",
"discordUpdateInterval": "{{discord}} Rich Presence の更新間隔", "discordUpdateInterval": "{{discord}} Rich Presence の更新間隔",
"themeLight": "テーマ (ライト)", "themeLight": "テーマ (ライト)",
"fontType_optionBuiltIn": "組み込みフォント", "fontType_optionBuiltIn": "組み込みフォント",
"hotkey_playbackPlayPause": "再生 / 一時停止", "hotkey_playbackPlayPause": "再生 / 一時停止",
"hotkey_rate1": "1 つ星で評価", "hotkey_rate1": "1 つ星で評価",
"hotkey_skipForward": "次へスキップ", "hotkey_skipForward": "次へスキップ",
"disableLibraryUpdateOnStartup": "起動時に新しいバージョンの有無を確認しない", "disableLibraryUpdateOnStartup": "起動時の新バージョンチェックを無効にします",
"discordApplicationId_description": "{{discord}} に Rich Presence ステータスを表示するためのアプリケーション ID (デフォルトは {{defaultId}} です)", "discordApplicationId_description": "{{discord}} に Rich Presence ステータスを表示するためのアプリケーション ID (デフォルトは {{defaultId}} です)",
"sidePlayQueueStyle": "サイド再生キューの形式", "sidePlayQueueStyle": "サイド再生キューの形式",
"gaplessAudio": "ギャップレス再生", "gaplessAudio": "ギャップレス再生",
@@ -161,7 +161,7 @@
"sidebarPlaylistList_description": "サイドバーのプレイリストを表示または非表示にします", "sidebarPlaylistList_description": "サイドバーのプレイリストを表示または非表示にします",
"accentColor": "アクセントカラー", "accentColor": "アクセントカラー",
"sidePlayQueueStyle_description": "サイド再生キューの形式を設定します", "sidePlayQueueStyle_description": "サイド再生キューの形式を設定します",
"accentColor_description": "アプリアクセントカラーを設定します", "accentColor_description": "アプリケーションが利用するアクセントカラーを設定します",
"replayGainMode": "{{ReplayGain}} モード", "replayGainMode": "{{ReplayGain}} モード",
"playbackStyle_optionNormal": "通常", "playbackStyle_optionNormal": "通常",
"windowBarStyle": "ウィンドウバースタイル", "windowBarStyle": "ウィンドウバースタイル",
@@ -172,13 +172,13 @@
"sidebarConfiguration_description": "サイドバーに表示する項目と順序を選択します", "sidebarConfiguration_description": "サイドバーに表示する項目と順序を選択します",
"fontType": "フォントタイプ", "fontType": "フォントタイプ",
"remotePort": "リモートコントロールサーバーのポート", "remotePort": "リモートコントロールサーバーのポート",
"applicationHotkeys": "アプリホットキー", "applicationHotkeys": "アプリケーションホットキー",
"hotkey_playbackNext": "次のトラック", "hotkey_playbackNext": "次のトラック",
"useSystemTheme_description": "システム設定のライト/ダークテーマに従います", "useSystemTheme_description": "システム設定のライト/ダークテーマに従います",
"playButtonBehavior_optionAddNext": "$t(player.addNext)", "playButtonBehavior_optionAddNext": "$t(player.addNext)",
"lyricFetch_description": "様々なインターネットソースから歌詞を取得します", "lyricFetch_description": "様々なインターネットソースから歌詞を取得します",
"lyricFetchProvider_description": "歌詞を取得するプロバイダーを選択します", "lyricFetchProvider_description": "歌詞を取得するプロバイダーを選択します",
"globalMediaHotkeys_description": "再生を制御するためのシステムメディアホットキーの使用を有効または無効します", "globalMediaHotkeys_description": "システムメディアホットキーでの再生コントロールを有効/無効します",
"customFontPath": "カスタムフォントパス", "customFontPath": "カスタムフォントパス",
"followLyric": "歌詞を再生位置に追従", "followLyric": "歌詞を再生位置に追従",
"crossfadeDuration": "クロスフェードの長さ", "crossfadeDuration": "クロスフェードの長さ",
@@ -189,7 +189,7 @@
"hotkey_unfavoriteCurrentSong": "$t(common.currentSong)をお気に入りから解除", "hotkey_unfavoriteCurrentSong": "$t(common.currentSong)をお気に入りから解除",
"hotkey_rate0": "評価をクリア", "hotkey_rate0": "評価をクリア",
"discordApplicationId": "{{discord}} アプリケーション ID", "discordApplicationId": "{{discord}} アプリケーション ID",
"applicationHotkeys_description": "アプリのホットキーを設定します。チェックボックスをオンまたはオフにして、グローバルホットキーとして設定しますデスクトップのみ", "applicationHotkeys_description": "アプリケーションのホットキーを設定します。チェックボックスを切り替えて、グローバルホットキーとして設定します (デスクトップのみ)",
"hotkey_volumeMute": "音量をミュート", "hotkey_volumeMute": "音量をミュート",
"hotkey_toggleCurrentSongFavorite": "$t(common.currentSong)のお気に入りを切り替え", "hotkey_toggleCurrentSongFavorite": "$t(common.currentSong)のお気に入りを切り替え",
"remoteUsername": "リモートコントロールサーバーのユーザー名", "remoteUsername": "リモートコントロールサーバーのユーザー名",
@@ -200,7 +200,7 @@
"skipPlaylistPage": "プレイリストページをスキップ", "skipPlaylistPage": "プレイリストページをスキップ",
"themeDark": "テーマ (ダーク)", "themeDark": "テーマ (ダーク)",
"sidebarCollapsedNavigation": "サイドバー (折りたたみ) ナビゲーション", "sidebarCollapsedNavigation": "サイドバー (折りたたみ) ナビゲーション",
"customFontPath_description": "アプリ使用するカスタムフォントへのパスを設定します", "customFontPath_description": "アプリケーションが使用するカスタムフォントへのパスを設定します",
"gaplessAudio_optionWeak": "弱 (推奨)", "gaplessAudio_optionWeak": "弱 (推奨)",
"minimumScrobbleSeconds": "最小 Scrobble 時間 (秒)", "minimumScrobbleSeconds": "最小 Scrobble 時間 (秒)",
"hotkey_playbackStop": "停止", "hotkey_playbackStop": "停止",
@@ -208,19 +208,19 @@
"font_description": "アプリケーションに使用するフォントを設定します", "font_description": "アプリケーションに使用するフォントを設定します",
"savePlayQueue_description": "アプリケーション終了時に再生キューを保存し、アプリケーション開始時に復元します", "savePlayQueue_description": "アプリケーション終了時に再生キューを保存し、アプリケーション開始時に復元します",
"useSystemTheme": "システムテーマを使用", "useSystemTheme": "システムテーマを使用",
"webAudio": "Web Audio を使用", "webAudio": "Web Audio を使用する",
"mediaSession_description": "Media Session の統合を有効にし、システムボリュームオーバーレイとロック画面にメディアコントロールとメタデータを表示します。Web Audio Player が必要です。", "mediaSession_description": "Media Session の統合を有効にし、システムボリュームオーバーレイとロック画面にメディアコントロールとメタデータを表示します。Web Audio Player が必要です。",
"mediaSession": "Media Session を有効にする", "mediaSession": "Media Session を有効にする",
"startMinimized_description": "システムトレイでアプリケーションを起動する", "startMinimized_description": "システムトレイでアプリケーションを起動する",
"startMinimized": "最小化して起動する", "startMinimized": "最小化して起動する",
"translationApiKey_description": "翻訳用の API キー (グローバルサービスエンドポイントのみ)", "translationApiKey_description": "翻訳用の API キー (グローバルサービスエンドポイントのみ)",
"translationApiKey": "翻訳 API キー", "translationApiKey": "翻訳 API キー",
"translationApiProvider_description": "翻訳に使用する API プロバイダーを選択します", "translationApiProvider_description": "翻訳用の API プロバイダー",
"translationApiProvider": "翻訳 API プロバイダー", "translationApiProvider": "翻訳 API プロバイダー",
"translationTargetLanguage_description": "自動翻訳に使用する対象言語を設定します", "translationTargetLanguage_description": "翻訳対象言語",
"translationTargetLanguage": "翻訳対象言語", "translationTargetLanguage": "翻訳対象言語",
"trayEnabled_description": "トレイアイコン / メニューの表示 / 非表示。無効にすると、トレイへの最小化 / 終了も無効になります", "trayEnabled_description": "トレイアイコン/メニューの表示/非表示。無効にすると、最小化/トレイへの終了も無効になります",
"trayEnabled": "トレイを表示", "trayEnabled": "トレイを表示する",
"volumeWidth_description": "音量スライダーの幅", "volumeWidth_description": "音量スライダーの幅",
"volumeWidth": "音量スライダーの幅", "volumeWidth": "音量スライダーの幅",
"webAudio_description": "Web Audio を使用します。これにより、リプレイゲインなどの高度な機能が有効になります。問題が発生した場合は無効にしてください", "webAudio_description": "Web Audio を使用します。これにより、リプレイゲインなどの高度な機能が有効になります。問題が発生した場合は無効にしてください",
@@ -235,10 +235,10 @@
"preferLocalLyrics_description": "利用可能な場合は、リモート歌詞よりもローカル歌詞を優先します", "preferLocalLyrics_description": "利用可能な場合は、リモート歌詞よりもローカル歌詞を優先します",
"preferLocalLyrics": "ローカル歌詞を優先", "preferLocalLyrics": "ローカル歌詞を優先",
"preservePitch_description": "再生速度を変更してもピッチを保持します", "preservePitch_description": "再生速度を変更してもピッチを保持します",
"preservePitch": "ピッチを保持", "preservePitch": "ピッチを保持する",
"preventSleepOnPlayback_description": "音楽の再生中にディスプレイがスリープ状態にならないようにします", "preventSleepOnPlayback_description": "音楽の再生中にディスプレイがスリープ状態にならないようにします",
"preventSleepOnPlayback": "再生中のスリープを防止する", "preventSleepOnPlayback": "再生中のスリープを防止する",
"lastfmApiKey_description": "{{lastfm}} の API キーを入力してください。カバーアートの表示に必要です", "lastfmApiKey_description": "{{lastfm}} の API キー。カバーアートの表示に必要です",
"imageAspectRatio": "ネイティブのカバーアートの縦横比を使用する", "imageAspectRatio": "ネイティブのカバーアートの縦横比を使用する",
"language": "言語", "language": "言語",
"imageAspectRatio_description": "有効にすると、カバーアートはネイティブの縦横比で表示されます。縦横比が 1:1 でない場合、残りのスペースは空白になります", "imageAspectRatio_description": "有効にすると、カバーアートはネイティブの縦横比で表示されます。縦横比が 1:1 でない場合、残りのスペースは空白になります",
@@ -247,8 +247,8 @@
"lastfmApiKey": "{{lastfm}} API キー", "lastfmApiKey": "{{lastfm}} API キー",
"homeConfiguration_description": "ホーム画面に表示する項目と表示順序を設定します", "homeConfiguration_description": "ホーム画面に表示する項目と表示順序を設定します",
"homeConfiguration": "ホーム画面の設定", "homeConfiguration": "ホーム画面の設定",
"externalLinks": "外部リンクを表示", "externalLinks": "外部リンクを表示する",
"externalLinks_description": "アーティストアルバムページ外部リンクLast.fm、MusicBrainzを表示できるようにします", "externalLinks_description": "アーティスト/アルバムページ外部リンク (Last.fm、MusicBrainz) を表示できるようにします",
"enableAutoTranslation": "自動翻訳を有効にする", "enableAutoTranslation": "自動翻訳を有効にする",
"enableAutoTranslation_description": "歌詞が読み込まれたときに自動的に翻訳を有効にします", "enableAutoTranslation_description": "歌詞が読み込まれたときに自動的に翻訳を有効にします",
"albumBackground_description": "アルバムアートを含むアルバムページに背景画像を追加します", "albumBackground_description": "アルバムアートを含むアルバムページに背景画像を追加します",
@@ -256,7 +256,7 @@
"albumBackgroundBlur": "アルバムの背景画像のぼかしサイズ", "albumBackgroundBlur": "アルバムの背景画像のぼかしサイズ",
"albumBackgroundBlur_description": "アルバムの背景画像に適用されるぼかしの量を調整します", "albumBackgroundBlur_description": "アルバムの背景画像に適用されるぼかしの量を調整します",
"artistBackground": "アーティストの背景画像", "artistBackground": "アーティストの背景画像",
"artistBackground_description": "アーティストの作品が掲載されているアーティストページに背景画像を追加します", "artistBackground_description": "アーティストアートを含むアーティストページに背景画像を追加します",
"artistBackgroundBlur": "アーティストの背景画像のぼかしサイズ", "artistBackgroundBlur": "アーティストの背景画像のぼかしサイズ",
"artistBackgroundBlur_description": "アーティストの背景画像に適用されるぼかしの量を調整します", "artistBackgroundBlur_description": "アーティストの背景画像に適用されるぼかしの量を調整します",
"artistConfiguration": "アルバムアーティストページの設定", "artistConfiguration": "アルバムアーティストページの設定",
@@ -269,9 +269,9 @@
"clearQueryCache_description": "Feishin の「ソフトクリア」を実行します。これにより、プレイリストとトラックのメタデータが更新され、保存された歌詞がリセットされます。設定、サーバーの資格情報、キャッシュされた画像は保持されます", "clearQueryCache_description": "Feishin の「ソフトクリア」を実行します。これにより、プレイリストとトラックのメタデータが更新され、保存された歌詞がリセットされます。設定、サーバーの資格情報、キャッシュされた画像は保持されます",
"clearQueryCache": "Feishin のキャッシュを消去", "clearQueryCache": "Feishin のキャッシュを消去",
"contextMenu_description": "アイテムを右クリックした際にメニューに表示される項目を非表示にすることができます。チェックされていない項目は非表示になります", "contextMenu_description": "アイテムを右クリックした際にメニューに表示される項目を非表示にすることができます。チェックされていない項目は非表示になります",
"contextMenu": "コンテキストメニュー右クリックの設定", "contextMenu": "コンテキストメニュー (右クリック) の設定",
"crossfadeStyle": "クロスフェードのスタイル", "crossfadeStyle": "クロスフェードのスタイル",
"customCss_description": "カスタム CSS コンテンツ。注: コンテンツとリモート URL は許可されていないプロパティです。コンテンツのプレビューは以下に表示されます。設定していない追加フィールドは、サニタイズ処理により表示されています。デスクトップ: feishin はアプリの設定ディレクトリ内の custom.css を読み書きし、ファイルが変更されると再読み込みを行います", "customCss_description": "カスタム CSS コンテンツ。注: コンテンツとリモート URL は許可されていないプロパティです。コンテンツのプレビューは以下に表示されます。設定していない追加フィールドは、サニタイズ処理により表示されています",
"customCss": "カスタム CSS", "customCss": "カスタム CSS",
"customCssEnable_description": "カスタム CSS の記述を許可します", "customCssEnable_description": "カスタム CSS の記述を許可します",
"customCssEnable": "カスタム CSS を有効にする", "customCssEnable": "カスタム CSS を有効にする",
@@ -289,7 +289,7 @@
"exportImportSettings_control_exportText": "設定をエクスポート", "exportImportSettings_control_exportText": "設定をエクスポート",
"exportImportSettings_control_importText": "設定をインポート", "exportImportSettings_control_importText": "設定をインポート",
"exportImportSettings_control_title": "設定をインポート/エクスポート", "exportImportSettings_control_title": "設定をインポート/エクスポート",
"exportImportSettings_control_description": "JSON 経由で設定をエクスポートおよびインポートします", "exportImportSettings_control_description": "JSON 経由で設定をエクスポートおよびインポートす",
"exportImportSettings_destructiveWarning": "設定のインポートは破壊的です。下の「インポート」をクリックする前に、上記の内容を必ずご確認ください!", "exportImportSettings_destructiveWarning": "設定のインポートは破壊的です。下の「インポート」をクリックする前に、上記の内容を必ずご確認ください!",
"hotkey_navigateHome": "ホーム画面へ移動", "hotkey_navigateHome": "ホーム画面へ移動",
"playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)", "playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)",
@@ -322,11 +322,11 @@
"autoDJ_itemCount_description": "キューに追加しようとした曲数", "autoDJ_itemCount_description": "キューに追加しようとした曲数",
"autoDJ_itemCount": "曲数", "autoDJ_itemCount": "曲数",
"autoDJ_timing": "タイミング", "autoDJ_timing": "タイミング",
"autoDJ_timing_description": "自動 DJ が開始される前にキューに残っている曲数", "autoDJ_timing_description": "自動 DJ が作動するまでのキューに残っている曲数",
"analyticsDisable": "使用状況に基づく分析のオプトアウト", "analyticsDisable": "使用状況に基づく分析のオプトアウト",
"analyticsDisable_description": "匿名化された利用データは、アプリケーションの改善のために開発者に送信されます", "analyticsDisable_description": "匿名化された利用データは、アプリケーションの改善のために開発者に送信されます",
"useThemeAccentColor": "テーマのアクセントカラーを使用", "useThemeAccentColor": "テーマのアクセントカラーを使用",
"useThemeAccentColor_description": "カスタムアクセントカラーの代わりに、選択したテーマで定義されたプライマリカラーを使用します", "useThemeAccentColor_description": "カスタムアクセントカラーの代わりに、選択したテーマで定義されたプライマリカラーを使用します",
"artistReleaseTypeConfiguration": "アーティストリリースタイプの設定", "artistReleaseTypeConfiguration": "アーティストリリースタイプの設定",
"artistReleaseTypeConfiguration_description": "アルバムアーティストページでどのリリースタイプをどのような順序で表示するかを設定します", "artistReleaseTypeConfiguration_description": "アルバムアーティストページでどのリリースタイプをどのような順序で表示するかを設定します",
"followCurrentSong": "現在の曲をフォロー", "followCurrentSong": "現在の曲をフォロー",
@@ -390,12 +390,12 @@
"playerItemConfiguration": "プレーヤーの項目設定", "playerItemConfiguration": "プレーヤーの項目設定",
"autosave": "再生キューを自動的に保存", "autosave": "再生キューを自動的に保存",
"autosave_description": "再生キューをサーバーに自動的に保存できるようにします。これは Navidrome/Subsonic を使用している場合にのみ可能であり、再生キューを混在させることはできません。", "autosave_description": "再生キューをサーバーに自動的に保存できるようにします。これは Navidrome/Subsonic を使用している場合にのみ可能であり、再生キューを混在させることはできません。",
"autosaveCount": "再生キューの自動保存頻度", "autosaveCount": "自動再生キューの保存頻度",
"autosaveCount_description": "キューが保存されるまでの曲の切り替え回数を設定します。1最小値は曲が変わるたびに保存されることを意味します", "autosaveCount_description": "キューが保存されるまでにトラックが変更される回数を設定します。1 (最小値) は曲が変わるたびに保存されることを意味します",
"useThemePrimaryShade_description": "選択したテーマで定義されているプライマリシェードをプライマリカラーのバリエーションに使用します", "useThemePrimaryShade_description": "選択したテーマで定義されプライマリシェードをプライマリカラーのバリアントに使用します",
"useThemePrimaryShade": "テーマのプライマリシェードを使用", "useThemePrimaryShade": "テーマのプライマリシェードを使用",
"primaryShade": "プライマリシェード", "primaryShade": "プライマリシェード",
"primaryShade_description": "ボタン、リンク、およびその他の主要色要素に使用されるプライマリシェード09を上書きします", "primaryShade_description": "ボタン、リンク、およびその他の主要色要素に使用されるプライマリシェード (09) を上書きします",
"playerbarWaveformAlign_optionTop": "上部", "playerbarWaveformAlign_optionTop": "上部",
"playerbarWaveformAlign_optionCenter": "中央", "playerbarWaveformAlign_optionCenter": "中央",
"playerbarWaveformAlign_optionBottom": "下部", "playerbarWaveformAlign_optionBottom": "下部",
@@ -529,7 +529,7 @@
"editPlaylist": "$t(entity.playlist, {\"count\": 1})を編集", "editPlaylist": "$t(entity.playlist, {\"count\": 1})を編集",
"goToPage": "ページへ移動", "goToPage": "ページへ移動",
"moveToTop": "一番上へ移動", "moveToTop": "一番上へ移動",
"clearQueue": "キューを消去", "clearQueue": "キューをクリア",
"addToFavorites": "$t(entity.favorite, {\"count\": 2})に追加", "addToFavorites": "$t(entity.favorite, {\"count\": 2})に追加",
"addToPlaylist": "$t(entity.playlist, {\"count\": 1})に追加", "addToPlaylist": "$t(entity.playlist, {\"count\": 1})に追加",
"createPlaylist": "$t(entity.playlist, {\"count\": 1})を作成", "createPlaylist": "$t(entity.playlist, {\"count\": 1})を作成",
@@ -857,14 +857,14 @@
"mostPlayed": "最も多く再生", "mostPlayed": "最も多く再生",
"playCount": "再生回数", "playCount": "再生回数",
"isCompilation": "コンピレーションアルバム", "isCompilation": "コンピレーションアルバム",
"recentlyPlayed": "最近再生した", "recentlyPlayed": "最近再生",
"isRated": "評価済み", "isRated": "評価済み",
"title": "タイトル", "title": "タイトル",
"rating": "評価", "rating": "評価",
"search": "検索", "search": "検索",
"bitrate": "ビットレート", "bitrate": "ビットレート",
"recentlyAdded": "最近追加された", "recentlyAdded": "最近追加",
"note": "注記", "note": "ノート",
"name": "名前", "name": "名前",
"dateAdded": "追加日", "dateAdded": "追加日",
"releaseDate": "発売日", "releaseDate": "発売日",
@@ -872,7 +872,7 @@
"path": "パス", "path": "パス",
"favorited": "お気に入り", "favorited": "お気に入り",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})", "albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"isRecentlyPlayed": "最近再生した", "isRecentlyPlayed": "最近再生済み",
"isFavorited": "お気に入り済み", "isFavorited": "お気に入り済み",
"bpm": "BPM", "bpm": "BPM",
"releaseYear": "発売年", "releaseYear": "発売年",
@@ -888,12 +888,12 @@
"criticRating": "批評家の評価", "criticRating": "批評家の評価",
"trackNumber": "トラック", "trackNumber": "トラック",
"comment": "コメント", "comment": "コメント",
"recentlyUpdated": "最近更新された", "recentlyUpdated": "新規更新",
"isPublic": "共有済み", "isPublic": "共有済み",
"channels": "$t(common.channel, {\"count\": 2})", "channels": "$t(common.channel, {\"count\": 2})",
"owner": "$t(common.owner)", "owner": "$t(common.owner)",
"genre": "$t(entity.genre, {\"count\": 1})", "genre": "$t(entity.genre, {\"count\": 1})",
"albumCount": "$t(entity.album, {\"count\": 2})枚", "albumCount": "$t(entity.album, {\"count\": 2}) 枚",
"id": "ID", "id": "ID",
"album": "$t(entity.album, {\"count\": 1})", "album": "$t(entity.album, {\"count\": 1})",
"explicitStatus": "$t(common.explicitStatus)", "explicitStatus": "$t(common.explicitStatus)",
@@ -933,7 +933,7 @@
"showLyricProvider": "歌詞の提供元を表示", "showLyricProvider": "歌詞の提供元を表示",
"unsynchronized": "非同期", "unsynchronized": "非同期",
"lyricAlignment": "歌詞の位置", "lyricAlignment": "歌詞の位置",
"useImageAspectRatio": "画像のアスペクト比を使用", "useImageAspectRatio": "画像のアスペクト比を使用する",
"lyricGap": "歌詞の間隔", "lyricGap": "歌詞の間隔",
"dynamicImageBlur": "画像のぼかしサイズ", "dynamicImageBlur": "画像のぼかしサイズ",
"dynamicIsImage": "背景画像を有効にする", "dynamicIsImage": "背景画像を有効にする",
@@ -1009,10 +1009,10 @@
"download": "ダウンロード", "download": "ダウンロード",
"moveToNext": "$t(action.moveToNext)", "moveToNext": "$t(action.moveToNext)",
"playSimilarSongs": "$t(player.playSimilarSongs)", "playSimilarSongs": "$t(player.playSimilarSongs)",
"shareItem": "アイテムを共有", "shareItem": "アイテムを共有する",
"goToAlbum": "$t(entity.album, {\"count\": 1}) に移動", "goToAlbum": "$t(entity.album, {\"count\": 1}) に移動",
"goToAlbumArtist": "$t(entity.albumArtist, {\"count\": 1}) に移動", "goToAlbumArtist": "$t(entity.albumArtist, {\"count\": 1}) に移動",
"showDetails": "情報を取得", "showDetails": "情報を取得する",
"playShuffled": "$t(player.shuffle)", "playShuffled": "$t(player.shuffle)",
"moveItems": "$t(action.moveItems)", "moveItems": "$t(action.moveItems)",
"goTo": "移動", "goTo": "移動",
@@ -1022,8 +1022,8 @@
"mostPlayed": "最も多く再生", "mostPlayed": "最も多く再生",
"newlyAdded": "新規追加リリース", "newlyAdded": "新規追加リリース",
"title": "$t(common.home)", "title": "$t(common.home)",
"explore": "ライブラリから探す", "explore": "ライブラリから検索",
"recentlyPlayed": "最近再生した", "recentlyPlayed": "最近再生",
"recentlyReleased": "最近のリリース", "recentlyReleased": "最近のリリース",
"genres": "$t(entity.genre, {\"count\": 2})" "genres": "$t(entity.genre, {\"count\": 2})"
}, },
@@ -1041,7 +1041,7 @@
"analytics": "分析", "analytics": "分析",
"updates": "更新", "updates": "更新",
"cache": "キャッシュ", "cache": "キャッシュ",
"application": "アプリ", "application": "アプリケーション",
"queryBuilder": "クエリビルダー", "queryBuilder": "クエリビルダー",
"theme": "テーマ", "theme": "テーマ",
"controls": "コントロール", "controls": "コントロール",
@@ -1097,7 +1097,7 @@
"topSongsFrom": "{{title}} の人気曲", "topSongsFrom": "{{title}} の人気曲",
"viewAll": "すべて表示", "viewAll": "すべて表示",
"viewAllTracks": "$t(entity.track, {\"count\": 2}) をすべて表示", "viewAllTracks": "$t(entity.track, {\"count\": 2}) をすべて表示",
"relatedArtists": "関連の$t(entity.artist, {\"count\": 2})", "relatedArtists": "関連の $t(entity.artist, {\"count\": 2})",
"groupingTypeAll": "すべてのリリースタイプ", "groupingTypeAll": "すべてのリリースタイプ",
"groupingTypePrimary": "主なリリースタイプ", "groupingTypePrimary": "主なリリースタイプ",
"favoriteSongs": "お気に入りの曲", "favoriteSongs": "お気に入りの曲",
@@ -1109,13 +1109,13 @@
"title": "サーバーの管理", "title": "サーバーの管理",
"serverDetails": "サーバーの詳細", "serverDetails": "サーバーの詳細",
"url": "URL", "url": "URL",
"username": "ユーザー", "username": "ユーザーネーム",
"editServerDetailsTooltip": "サーバーの詳細を編集", "editServerDetailsTooltip": "サーバーの詳細を編集する",
"removeServer": "リモートサーバー" "removeServer": "リモートサーバー"
}, },
"itemDetail": { "itemDetail": {
"openFile": "ファイルマネージャーでトラックを表示", "openFile": "ファイルマネージャーでトラックを表示",
"copyPath": "パスをクリップボードにコピー", "copyPath": "パスをクリップボードにコピーする",
"copiedPath": "パスが正常にコピーされました", "copiedPath": "パスが正常にコピーされました",
"tagConfiguration": "タグ設定", "tagConfiguration": "タグ設定",
"addTagConfig": "タグを追加…", "addTagConfig": "タグを追加…",
@@ -1190,9 +1190,9 @@
"ignoreSsl": "SSL を無視します ($t(common.restartRequired))", "ignoreSsl": "SSL を無視します ($t(common.restartRequired))",
"ignoreCors": "CORS を無視します ($t(common.restartRequired))", "ignoreCors": "CORS を無視します ($t(common.restartRequired))",
"error_savePassword": "パスワードを保存する際にエラーが発生しました", "error_savePassword": "パスワードを保存する際にエラーが発生しました",
"input_preferInstantMixDescription": "類似曲を取得するにインスタントミックスのみを使用します。この動作を変更するプラグインがある場合に役立ちます", "input_preferInstantMixDescription": "類似曲を取得するにインスタントミックスのみを使用してください。この動作を変更するプラグインがある場合に役立ちます",
"input_preferInstantMix": "インスタントミックスを優先", "input_preferInstantMix": "インスタントミックスを優先する",
"input_preferRemoteUrl": "公開 URL を優先", "input_preferRemoteUrl": "公開 URL を優先する",
"input_remoteUrl": "公開 URL", "input_remoteUrl": "公開 URL",
"input_remoteUrlPlaceholder": "オプション: 外部機能用の公開 URL", "input_remoteUrlPlaceholder": "オプション: 外部機能用の公開 URL",
"input_passwordNoSSO": "リバースプロキシ(SSO)認証はサポートされていません。ユーザー名 / パスワード認証と Subsonic 認証のみがサポートされています" "input_passwordNoSSO": "リバースプロキシ(SSO)認証はサポートされていません。ユーザー名 / パスワード認証と Subsonic 認証のみがサポートされています"
@@ -1207,13 +1207,13 @@
"noneAdded": "$t(entity.playlist, {\"count\": 1}) {{playlist}} にトラックが追加されませんでした" "noneAdded": "$t(entity.playlist, {\"count\": 1}) {{playlist}} にトラックが追加されませんでした"
}, },
"updateServer": { "updateServer": {
"title": "サーバーを更新", "title": "サーバーをアップデート",
"success": "サーバーの更新に成功しました" "success": "サーバーの更新に成功しました"
}, },
"queryEditor": { "queryEditor": {
"input_optionMatchAll": "すべて一致", "input_optionMatchAll": "すべて一致",
"input_optionMatchAny": "一部一致", "input_optionMatchAny": "一部一致",
"title": "クエリエディタ", "title": "クエリエディタ",
"addRuleGroup": "ルールグループを追加", "addRuleGroup": "ルールグループを追加",
"removeRuleGroup": "ルールグループを削除", "removeRuleGroup": "ルールグループを削除",
"resetToDefault": "デフォルトにリセット", "resetToDefault": "デフォルトにリセット",
@@ -1233,9 +1233,9 @@
"allowDownloading": "ダウンロードを許可", "allowDownloading": "ダウンロードを許可",
"description": "説明", "description": "説明",
"setExpiration": "有効期限を設定", "setExpiration": "有効期限を設定",
"success": "共有リンクがクリップボードにコピーされましたまたはここをクリックして開きます", "success": "共有リンクがクリップボードにコピーされました (またはここをクリックして開きます)",
"expireInvalid": "有効期限は将来の日時である必要があります", "expireInvalid": "有効期限は将来の日時である必要があります",
"createFailed": "共有リンクを作成できませんでした共有は有効になっていますか?)", "createFailed": "共有リンクを作成できませんでした (共有は有効になっていますか?)",
"copyToClipboard": "クリップボードにコピー: Ctrl+C、Enter", "copyToClipboard": "クリップボードにコピー: Ctrl+C、Enter",
"successMustClick": "共有リンクが正常に作成されました。開くにはここをクリックしてください", "successMustClick": "共有リンクが正常に作成されました。開くにはここをクリックしてください",
"setExpiration_description": "サーバーのデフォルトの有効期限を使用する場合は空欄のままにしてください", "setExpiration_description": "サーバーのデフォルトの有効期限を使用する場合は空欄のままにしてください",
@@ -1247,7 +1247,7 @@
"title": "プライベートモード" "title": "プライベートモード"
}, },
"largeFetchConfirmation": { "largeFetchConfirmation": {
"title": "キューにアイテムを追加", "title": "キューにアイテムを追加する",
"description": "この操作により、現在のフィルタービュー内のすべてのアイテムが追加されます" "description": "この操作により、現在のフィルタービュー内のすべてのアイテムが追加されます"
}, },
"createRadioStation": { "createRadioStation": {
@@ -1265,7 +1265,7 @@
"shuffleAll": { "shuffleAll": {
"title": "ランダムに再生", "title": "ランダムに再生",
"input_genre": "$t(entity.genre, {\"count\": 1})", "input_genre": "$t(entity.genre, {\"count\": 1})",
"input_limit": "何曲ですか?", "input_limit": "何曲?",
"input_minYear": "年から", "input_minYear": "年から",
"input_maxYear": "年まで", "input_maxYear": "年まで",
"input_played_optionAll": "すべてのトラック", "input_played_optionAll": "すべてのトラック",
@@ -1279,7 +1279,7 @@
"input_limit_songs": "何曲ですか?" "input_limit_songs": "何曲ですか?"
}, },
"saveQueue": { "saveQueue": {
"success": "再生キューをサーバーに保存しました" "success": "プレイキューをサーバーに保存しました"
}, },
"editRadioStation": { "editRadioStation": {
"success": "ラジオ局の更新に成功しました" "success": "ラジオ局の更新に成功しました"
@@ -1363,14 +1363,14 @@
"matchesRegex": "正規表現に一致", "matchesRegex": "正規表現に一致",
"notContains": "含まれていない", "notContains": "含まれていない",
"after": "以降", "after": "以降",
"afterDate": "以降日付", "afterDate": "以降 (日付)",
"before": "以前", "before": "以前",
"beforeDate": "以前日付", "beforeDate": "以前 (日付)",
"contains": "を含む", "contains": "を含む",
"endsWith": "で終わる", "endsWith": "で終わる",
"inPlaylist": "いずれか", "inPlaylist": "いずれか",
"inTheRange": "範囲内", "inTheRange": "範囲内",
"inTheRangeDate": "範囲内日付", "inTheRangeDate": "範囲内 (日付)",
"is": "完全一致", "is": "完全一致",
"isNot": "不一致", "isNot": "不一致",
"startsWith": "で始まる", "startsWith": "で始まる",
+8 -50
View File
@@ -171,13 +171,7 @@
"back": "Tilbake", "back": "Tilbake",
"openFolder": "Åpne mappe", "openFolder": "Åpne mappe",
"grouping": "Grupper", "grouping": "Grupper",
"numberOfResults": "{{numberOfResults}} resultater", "numberOfResults": "{{numberOfResults}} resultater"
"saveAndClose": "Lagre og avslutt",
"undo": "Angre",
"lastScan": "Siste skan {{date}}",
"scanningLibrary": "Skanner bibliotek",
"scanFolderCount": "{{count}} mapper",
"scanItemCount": "{{count}} elementer"
}, },
"entity": { "entity": {
"smartPlaylist": "Smart $t(entity.playlist, {\"count\": 1})", "smartPlaylist": "Smart $t(entity.playlist, {\"count\": 1})",
@@ -403,9 +397,6 @@
"input_played_optionAll": "Alle sanger", "input_played_optionAll": "Alle sanger",
"input_played_optionUnplayed": "Bare uavspilte sanger", "input_played_optionUnplayed": "Bare uavspilte sanger",
"input_played_optionPlayed": "Bare avspilte sanger" "input_played_optionPlayed": "Bare avspilte sanger"
},
"privateMode": {
"title": "Privat modus"
} }
}, },
"page": { "page": {
@@ -419,15 +410,7 @@
"openBrowserDevtools": "Åpne utviklingsverktøy i nettleser", "openBrowserDevtools": "Åpne utviklingsverktøy i nettleser",
"settings": "$t(common.setting, {\"count\": 2})", "settings": "$t(common.setting, {\"count\": 2})",
"expandSidebar": "Utvid sidefelt", "expandSidebar": "Utvid sidefelt",
"goForward": "Gå fremover", "goForward": "Gå fremover"
"privateModeOn": "Aktiver privat modus",
"logout": "Logg ut",
"commandPalette": "Åpne kommandopalett",
"selectMusicFolder": "Velg musikkmappe",
"noMusicFolder": "Ingen musikkmappe valgt",
"multipleMusicFolders": "{{count}} musikkmapper valgt",
"privateModeOff": "Avslutt privat modus",
"rescanLibrary": "Skann biblioteket på nytt"
}, },
"contextMenu": { "contextMenu": {
"addToPlaylist": "$t(action.addToPlaylist)", "addToPlaylist": "$t(action.addToPlaylist)",
@@ -451,11 +434,7 @@
"shareItem": "Del element", "shareItem": "Del element",
"addFavorite": "$t(action.addToFavorites)", "addFavorite": "$t(action.addToFavorites)",
"deletePlaylist": "$t(action.deletePlaylist)", "deletePlaylist": "$t(action.deletePlaylist)",
"deselectAll": "$t(action.deselectAll)", "deselectAll": "$t(action.deselectAll)"
"goTo": "Gå til",
"goToAlbum": "Gå til $t(entity.album, {\"count\": 1})",
"goToAlbumArtist": "Gå til $t(entity.albumArtist, {\"count\": 1})",
"editMetadata": "Rediger metadata"
}, },
"albumArtistDetail": { "albumArtistDetail": {
"topSongs": "Beste sanger", "topSongs": "Beste sanger",
@@ -466,8 +445,7 @@
"viewAll": "Se alle", "viewAll": "Se alle",
"about": "Om {{artist}}", "about": "Om {{artist}}",
"appearsOn": "Opptrer på", "appearsOn": "Opptrer på",
"relatedArtists": "Relatert $t(entity.artist, {\"count\": 2})", "relatedArtists": "Relatert $t(entity.artist, {\"count\": 2})"
"topSongsCommunity": "Fellesskap"
}, },
"albumList": { "albumList": {
"artistAlbums": "Album av {{artist}}", "artistAlbums": "Album av {{artist}}",
@@ -497,9 +475,7 @@
"unsynchronized": "Usynkronisert", "unsynchronized": "Usynkronisert",
"dynamicBackground": "Dynamisk bakgrunn", "dynamicBackground": "Dynamisk bakgrunn",
"useImageAspectRatio": "Bruk sideforhold til bildet", "useImageAspectRatio": "Bruk sideforhold til bildet",
"followCurrentLyric": "Følg sangtekst", "followCurrentLyric": "Følg sangtekst"
"lyricAlignment_description": "Horisontal justering av sangtekst",
"lyricFollowScrollAlignment_description": "Vertikal plassering av den aktive linjen ved følging"
}, },
"noLyrics": "Fant ikke sangtekst", "noLyrics": "Fant ikke sangtekst",
"lyrics": "Sangtekst", "lyrics": "Sangtekst",
@@ -556,10 +532,9 @@
"playlists": "Spillelister", "playlists": "Spillelister",
"search": "Søk", "search": "Søk",
"settings": "Innstillinger", "settings": "Innstillinger",
"shared": "Delte spillelister", "shared": "Delte Spillelister",
"artists": "Artister", "artists": "Artister",
"myLibrary": "Mitt bibliotek", "myLibrary": "Mitt bibliotek"
"radio": "Radiostasjoner"
}, },
"setting": { "setting": {
"generalTab": "Generelt", "generalTab": "Generelt",
@@ -574,12 +549,6 @@
}, },
"playlist": { "playlist": {
"reorder": "Omorganisering kun mulig ved sortering på ID" "reorder": "Omorganisering kun mulig ved sortering på ID"
},
"windowBar": {
"privateMode": "(Privat modus)"
},
"radioList": {
"title": "Radiostasjoner"
} }
}, },
"player": { "player": {
@@ -613,18 +582,7 @@
"toggleFullscreenPlayer": "Bytt til fullskjermspiller", "toggleFullscreenPlayer": "Bytt til fullskjermspiller",
"pause": "Sett på pause", "pause": "Sett på pause",
"viewQueue": "Se kø", "viewQueue": "Se kø",
"unfavorite": "Fjern fra favoritter", "unfavorite": "Fjern fra favoritter"
"addLastShuffled": "Sist (tilfeldig rekkefølge)",
"addNextShuffled": "Neste (tilfeldig rekkefølge)",
"albumRadio": "Albumradio",
"artistRadio": "Artistradio",
"holdToShuffle": "Hold inne for tilfeldig avspilling",
"lyrics": "Sangtekst",
"nextAlbum": "Alt+klikk for neste album",
"previousAlbum": "Alt+klikk for forrige album",
"saveQueueToServer": "Lagre avspillingskøen på serveren",
"restoreQueueFromServer": "Hent avspillingskøen fra serveren",
"trackRadio": "Låtradio"
}, },
"setting": { "setting": {
"accentColor": "Aksentfarge", "accentColor": "Aksentfarge",
+53 -9
View File
@@ -26,6 +26,21 @@ let mpvInstance: MpvAPI | null = null;
let currentPlayerData: null | PlayerData = null; let currentPlayerData: null | PlayerData = null;
const socketPath = isWindows() ? `\\\\.\\pipe\\mpvserver-${pid}` : `/tmp/node-mpv-${pid}.sock`; const socketPath = isWindows() ? `\\\\.\\pipe\\mpvserver-${pid}` : `/tmp/node-mpv-${pid}.sock`;
// While quitting/restarting mpv, playlist-pos goes to -1 and node-mpv emits stopped/paused/
// resumed. Those look identical to a real track end and must not reach the renderer — otherwise
// handleTrackEnded runs mediaAutoNext while status is STOPPED and flips the UI back to Playing
// on the next queue item (e.g. MPV reload after mediaStop).
let suppressRendererPlaybackEvents = false;
// Bumped on quit so late events from a dying instance are ignored after a new one starts.
let playbackEventGeneration = 0;
const sendRendererPlaybackEvent = (channel: string, ...args: unknown[]) => {
if (suppressRendererPlaybackEvents) {
return;
}
getMainWindow()?.webContents.send(channel, ...args);
};
const NodeMpvErrorCode = { const NodeMpvErrorCode = {
0: 'Unable to load file or stream', 0: 'Unable to load file or stream',
1: 'Invalid argument', 1: 'Invalid argument',
@@ -167,6 +182,16 @@ const createMpv = async (data: {
} }
let previousPlaylistPos: number | undefined; let previousPlaylistPos: number | undefined;
const eventGeneration = playbackEventGeneration;
suppressRendererPlaybackEvents = false;
const sendIfCurrent = (channel: string, ...args: unknown[]) => {
if (eventGeneration !== playbackEventGeneration) {
return;
}
sendRendererPlaybackEvent(channel, ...args);
};
mpv.on('status', (status) => { mpv.on('status', (status) => {
if (status.property === 'playlist-pos') { if (status.property === 'playlist-pos') {
@@ -175,7 +200,7 @@ const createMpv = async (data: {
// mpv uses playlist-pos = -1 when nothing is playing (ended, cleared, load failure, etc). // mpv uses playlist-pos = -1 when nothing is playing (ended, cleared, load failure, etc).
if (currentPos === -1) { if (currentPos === -1) {
if (previousPlaylistPos === 0) { if (previousPlaylistPos === 0) {
getMainWindow()?.webContents.send('renderer-player-track-ended'); sendIfCurrent('renderer-player-track-ended');
} }
mpv?.pause(); mpv?.pause();
previousPlaylistPos = currentPos; previousPlaylistPos = currentPos;
@@ -185,7 +210,7 @@ const createMpv = async (data: {
// In our 2-item queue model, playlist-pos should normally be 0. // In our 2-item queue model, playlist-pos should normally be 0.
// When mpv auto-advances to the next track it becomes > 0 (typically 1). // When mpv auto-advances to the next track it becomes > 0 (typically 1).
if (typeof currentPos === 'number' && currentPos > 0) { if (typeof currentPos === 'number' && currentPos > 0) {
getMainWindow()?.webContents.send('renderer-player-auto-next'); sendIfCurrent('renderer-player-auto-next');
} }
previousPlaylistPos = currentPos; previousPlaylistPos = currentPos;
@@ -194,21 +219,24 @@ const createMpv = async (data: {
// Automatically updates the play button when the player is playing // Automatically updates the play button when the player is playing
mpv.on('resumed', () => { mpv.on('resumed', () => {
getMainWindow()?.webContents.send('renderer-player-play'); sendIfCurrent('renderer-player-play');
}); });
// Automatically updates the play button when the player is stopped // Automatically updates the play button when the player is stopped
mpv.on('stopped', () => { mpv.on('stopped', () => {
getMainWindow()?.webContents.send('renderer-player-stop'); sendIfCurrent('renderer-player-stop');
}); });
// Automatically updates the play button when the player is paused // Automatically updates the play button when the player is paused
mpv.on('paused', () => { mpv.on('paused', () => {
getMainWindow()?.webContents.send('renderer-player-pause'); sendIfCurrent('renderer-player-pause');
}); });
// Event output every interval set by time_update, used to update the current time // Event output every interval set by time_update, used to update the current time
mpv.on('timeposition', (time: number) => { mpv.on('timeposition', (time: number) => {
if (eventGeneration !== playbackEventGeneration) {
return;
}
getMainWindow()?.webContents.send('renderer-player-current-time', time); getMainWindow()?.webContents.send('renderer-player-current-time', time);
}); });
@@ -235,6 +263,8 @@ const killMpvProcess = (mpv: MpvAPI) => {
const quit = async (instance?: MpvAPI | null) => { const quit = async (instance?: MpvAPI | null) => {
const mpv = instance || getMpvInstance(); const mpv = instance || getMpvInstance();
if (mpv) { if (mpv) {
suppressRendererPlaybackEvents = true;
playbackEventGeneration += 1;
try { try {
// mpv.quit() resolves only when mpv replies over IPC. If mpv's command queue // mpv.quit() resolves only when mpv replies over IPC. If mpv's command queue
// is wedged (e.g. blocked on a dead network stream after the system resumes // is wedged (e.g. blocked on a dead network stream after the system resumes
@@ -302,6 +332,8 @@ ipcMain.handle(
}); });
// Clean up previous mpv instance // Clean up previous mpv instance
suppressRendererPlaybackEvents = true;
playbackEventGeneration += 1;
getMpvInstance()?.stop(); getMpvInstance()?.stop();
getMpvInstance() getMpvInstance()
?.quit() ?.quit()
@@ -338,6 +370,9 @@ ipcMain.handle(
); );
ipcMain.on('player-quit', async () => { ipcMain.on('player-quit', async () => {
// stop() also drives playlist-pos to -1; suppress before that so reload does not look like a track end.
suppressRendererPlaybackEvents = true;
playbackEventGeneration += 1;
try { try {
await getMpvInstance()?.stop(); await getMpvInstance()?.stop();
await quit(); await quit();
@@ -440,6 +475,13 @@ ipcMain.on('player-set-queue', async (_event, current?: string, next?: string, p
} }
} }
// When pause is requested (e.g. preload after reload while UI is STOPPED/PAUSED), mpv still
// briefly resumes on load. Suppress those events so they do not overwrite renderer status.
const shouldSuppressLoadEvents = pause === true;
if (shouldSuppressLoadEvents) {
suppressRendererPlaybackEvents = true;
}
try { try {
if (current) { if (current) {
try { try {
@@ -462,6 +504,10 @@ ipcMain.on('player-set-queue', async (_event, current?: string, next?: string, p
} }
} catch (err: any | NodeMpvError) { } catch (err: any | NodeMpvError) {
mpvLog({ action: `Failed to set play queue` }, err); mpvLog({ action: `Failed to set play queue` }, err);
} finally {
if (shouldSuppressLoadEvents) {
suppressRendererPlaybackEvents = false;
}
} }
}); });
@@ -727,10 +773,8 @@ const cleanupMpv = async (force = false) => {
// the renderer to reload mpv so it reconnects with a fresh stream instead of staying // the renderer to reload mpv so it reconnects with a fresh stream instead of staying
// stuck on the old, now-dead connection until the app is manually restarted. // stuck on the old, now-dead connection until the app is manually restarted.
powerMonitor.on('resume', () => { powerMonitor.on('resume', () => {
if (getMpvInstance()) { mpvLog({ action: 'System resumed from sleep, notifying renderer to reconnect mpv' });
mpvLog({ action: 'System resumed from sleep, reloading mpv' }); getMainWindow()?.webContents.send('renderer-mpv-reconnect');
getMainWindow()?.webContents.send('renderer-mpv-reconnect');
}
}); });
app.on('before-quit', async (event) => { app.on('before-quit', async (event) => {
@@ -2035,22 +2035,12 @@ export const SubsonicController: InternalControllerEndpoint = {
getStructuredLyrics: async (args) => { getStructuredLyrics: async (args) => {
const { apiClientProps, query } = args; const { apiClientProps, query } = args;
const server = apiClientProps.server; const server = apiClientProps.server;
const supportsStructuredLyrics = hasFeatureWithVersion(
server,
ServerFeature.LYRICS_MULTIPLE_STRUCTURED,
1,
);
const supportsEnhancedLyrics = hasFeatureWithVersion( const supportsEnhancedLyrics = hasFeatureWithVersion(
server, server,
ServerFeature.LYRICS_MULTIPLE_STRUCTURED, ServerFeature.LYRICS_MULTIPLE_STRUCTURED,
2, 2,
); );
if (!supportsStructuredLyrics && !supportsEnhancedLyrics) {
return [];
}
const res = await ssApiClient(apiClientProps).getStructuredLyrics({ const res = await ssApiClient(apiClientProps).getStructuredLyrics({
query: { query: {
enhanced: supportsEnhancedLyrics ? true : undefined, enhanced: supportsEnhancedLyrics ? true : undefined,
@@ -69,10 +69,14 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => {
setReloadTrigger((prev) => prev + 1); setReloadTrigger((prev) => prev + 1);
}; };
const handleMpvReconnect = () => {
handleMpvReload();
};
eventEmitter.on('MPV_RELOAD', handleMpvReload); eventEmitter.on('MPV_RELOAD', handleMpvReload);
// The main process notifies us after the OS resumes from sleep, since the // The main process notifies us after the OS resumes from sleep, since the
// stream mpv had open is likely on a now-dead connection. // stream mpv had open is likely on a now-dead connection.
mpvPlayerListener?.rendererMpvReconnect(handleMpvReload); mpvPlayerListener?.rendererMpvReconnect(handleMpvReconnect);
return () => { return () => {
eventEmitter.off('MPV_RELOAD', handleMpvReload); eventEmitter.off('MPV_RELOAD', handleMpvReload);
@@ -147,7 +151,9 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => {
: undefined; : undefined;
if (currentSongUrl && nextSongUrl && !hasPopulatedQueueRef.current && mpvPlayer) { if (currentSongUrl && nextSongUrl && !hasPopulatedQueueRef.current && mpvPlayer) {
mpvPlayer.setQueue(currentSongUrl, nextSongUrl, true); const shouldPause =
usePlayerStore.getState().player.status !== PlayerStatus.PLAYING;
mpvPlayer.setQueue(currentSongUrl, nextSongUrl, shouldPause);
hasPopulatedQueueRef.current = true; hasPopulatedQueueRef.current = true;
} }
} }
@@ -2,6 +2,8 @@ import isElectron from 'is-electron';
import { useCallback, useMemo } from 'react'; import { useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { eventEmitter } from '/@/renderer/events/event-emitter';
import { usePlayer } from '/@/renderer/features/player/context/player-context';
import { import {
getDefaultAudioDevice, getDefaultAudioDevice,
useAudioDevices, useAudioDevices,
@@ -241,36 +243,54 @@ export const PlayerConfig = () => {
}; };
const AudioPlayerTypeConfig = () => { const AudioPlayerTypeConfig = () => {
const { t } = useTranslation();
const status = usePlayerStatus(); const status = usePlayerStatus();
const playbackSettings = usePlaybackSettings(); const playbackSettings = usePlaybackSettings();
const { setSettings } = useSettingsStoreActions(); const { setSettings } = useSettingsStoreActions();
const { mediaStop } = usePlayer();
const showRefreshButton = playbackSettings.type === PlayerType.LOCAL;
return ( return (
<Select <Group gap="xs" wrap="nowrap">
comboboxProps={{ withinPortal: false }} <Select
data={[ comboboxProps={{ withinPortal: false }}
{ data={[
disabled: !isElectron(), {
label: 'MPV', disabled: !isElectron(),
value: PlayerType.LOCAL, label: 'MPV',
}, value: PlayerType.LOCAL,
{ label: 'Web', value: PlayerType.WEB }, },
{ label: 'Jukebox', value: PlayerType.JUKEBOX }, { label: 'Web', value: PlayerType.WEB },
]} { label: 'Jukebox', value: PlayerType.JUKEBOX },
defaultValue={playbackSettings.type} ]}
disabled={status === PlayerStatus.PLAYING} defaultValue={playbackSettings.type}
onChange={(e) => { disabled={status === PlayerStatus.PLAYING}
setSettings({ onChange={(e) => {
playback: { ...playbackSettings, type: e as PlayerType }, setSettings({
}); playback: { ...playbackSettings, type: e as PlayerType },
ipc?.send('settings-set', { });
property: 'playbackType', ipc?.send('settings-set', {
value: e, property: 'playbackType',
}); value: e,
}} });
variant="filled" }}
width="100%" variant="filled"
/> width="100%"
/>
{showRefreshButton && (
<ActionIcon
icon="refresh"
iconProps={{ size: 'md' }}
onClick={() => {
mediaStop();
eventEmitter.emit('MPV_RELOAD', {});
}}
tooltip={{ label: t('common.reload') }}
variant="transparent"
/>
)}
</Group>
); );
}; };
@@ -291,6 +311,7 @@ const AudioDeviceConfig = () => {
comboboxProps={{ withinPortal: false }} comboboxProps={{ withinPortal: false }}
data={audioDevices} data={audioDevices}
disabled={status === PlayerStatus.PLAYING} disabled={status === PlayerStatus.PLAYING}
key={playbackType}
onChange={(e) => { onChange={(e) => {
setSettings({ setSettings({
playback: { playback: {
@@ -3,14 +3,22 @@ import isElectron from 'is-electron';
import { memo, useEffect, useState } from 'react'; import { memo, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { eventEmitter } from '/@/renderer/events/event-emitter';
import { usePlayer } from '/@/renderer/features/player/context/player-context';
import { import {
SettingOption, SettingOption,
SettingsSection, SettingsSection,
} from '/@/renderer/features/settings/components/settings-section'; } from '/@/renderer/features/settings/components/settings-section';
import { useCurrentServer, usePlaybackType, usePlayerStatus } from '/@/renderer/store'; import { useCurrentServer, usePlayerStatus } from '/@/renderer/store';
import { usePlaybackSettings, useSettingsStoreActions } from '/@/renderer/store/settings.store'; import {
usePlaybackSettings,
usePlaybackType,
useSettingsStoreActions,
} from '/@/renderer/store/settings.store';
import { logger } from '/@/renderer/utils/logger'; import { logger } from '/@/renderer/utils/logger';
import { hasFeature } from '/@/shared/api/utils'; import { hasFeature } from '/@/shared/api/utils';
import { ActionIcon } from '/@/shared/components/action-icon/action-icon';
import { Group } from '/@/shared/components/group/group';
import { Select } from '/@/shared/components/select/select'; import { Select } from '/@/shared/components/select/select';
import { Switch } from '/@/shared/components/switch/switch'; import { Switch } from '/@/shared/components/switch/switch';
import { toast } from '/@/shared/components/toast/toast'; import { toast } from '/@/shared/components/toast/toast';
@@ -100,10 +108,12 @@ export const AudioSettings = memo(() => {
const { setSettings } = useSettingsStoreActions(); const { setSettings } = useSettingsStoreActions();
const status = usePlayerStatus(); const status = usePlayerStatus();
const playbackType = usePlaybackType(); const playbackType = usePlaybackType();
const { mediaStop } = usePlayer();
// Cleaned up server feature logic via requested hooks/utilities // Cleaned up server feature logic via requested hooks/utilities
const currentServer = useCurrentServer(); const currentServer = useCurrentServer();
const isJukeboxSupported = hasFeature(currentServer, ServerFeature.JUKEBOX); const isJukeboxSupported = hasFeature(currentServer, ServerFeature.JUKEBOX);
const showRefreshButton = settings.type === PlayerType.LOCAL;
const audioDevices = useAudioDevices(playbackType); const audioDevices = useAudioDevices(playbackType);
const audioDeviceId = const audioDeviceId =
@@ -126,15 +136,29 @@ export const AudioSettings = memo(() => {
const audioOptions: SettingOption[] = [ const audioOptions: SettingOption[] = [
{ {
control: ( control: (
<Select <Group gap="xs" wrap="nowrap">
data={selectData} <Select
defaultValue={settings.type} data={selectData}
disabled={status === PlayerStatus.PLAYING} defaultValue={settings.type}
onChange={(e) => { disabled={status === PlayerStatus.PLAYING}
setSettings({ playback: { type: e as PlayerType } }); onChange={(e) => {
ipc?.send('settings-set', { property: 'playbackType', value: e }); setSettings({ playback: { type: e as PlayerType } });
}} ipc?.send('settings-set', { property: 'playbackType', value: e });
/> }}
/>
{showRefreshButton && (
<ActionIcon
icon="refresh"
iconProps={{ size: 'md' }}
onClick={() => {
mediaStop();
eventEmitter.emit('MPV_RELOAD', {});
}}
tooltip={{ label: t('common.reload') }}
variant="transparent"
/>
)}
</Group>
), ),
description: t('setting.audioPlayer', { context: 'description' }), description: t('setting.audioPlayer', { context: 'description' }),
isHidden: !isElectron() && !isJukeboxSupported, isHidden: !isElectron() && !isJukeboxSupported,