Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
child_duckling 2022-02-08 15:46:16 -08:00
commit 0eafd16b8c
57 changed files with 3496 additions and 2325 deletions

View file

@ -42,6 +42,9 @@ jobs:
#command: yarn test
- store_test_results:
path: test-results
- run:
name: Append Commit BuildID to Version
command: yarn circle:append-bid
- run:
name: Generate Builds (Linux)
command: yarn dist -l -p never

1
.gitignore vendored
View file

@ -2,6 +2,7 @@
dist
build
.flatpak*
yarn-cache
# Misc
.idea

View file

@ -23,20 +23,21 @@
"start:darwin": "yarn build && ELECTRON_ENABLE_LOGGING=true && electron ./build/index.js --enable-accelerated-mjpeg-decode --enable-accelerated-video --disable-gpu-driver-bug-workarounds --ignore-gpu-blacklist --enable-native-gpu-memory-buffers",
"pack": "electron-builder --dir",
"dist": "yarn build && electron-builder",
"dist:macarm" : "yarn build && electron-builder --mac --arm64",
"dist:universalNotWorking": "yarn build && electron-builder --mac --universal",
"dist:all": "yarn build && electron-builder -mwl",
"msft": "yarn build && electron-builder -c msft-package.json",
"postinstall": "electron-builder install-app-deps"
"postinstall": "electron-builder install-app-deps",
"circle:append-bid": "node resources/appendCommitToVersion"
},
"dependencies": {
"@sentry/electron": "^2.5.4",
"@sentry/integrations": "^6.17.4",
"castv2-client": "^1.2.0",
"discord-rpc": "^4.0.1",
"ejs": "^3.1.6",
"electron-fetch": "^1.7.4",
"electron-log": "^4.4.5",
"electron-notarize": "^1.1.1",
"electron-packager": "^15.4.0",
"electron-store": "^8.0.1",
"electron-updater": "^4.6.1",
"electron-window-state": "^5.0.3",
@ -48,18 +49,13 @@
"mpris-service": "^2.1.2",
"music-metadata": "^7.11.4",
"node-gyp": "^8.4.1",
"node-ssdp": "^4.0.1",
"qrcode": "^1.5.0",
"qrcode-terminal": "^0.12.0",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"run-script-os": "^1.1.6",
"source-map-support": "^0.5.21",
"tsc": "^2.0.4",
"typescript": "^4.5.5",
"upnp-mediarenderer-client": "^1.4.0",
"v8-compile-cache": "^2.3.0",
"wavefile": "^11.0.0",
"ws": "^8.4.2",
"xml2js": "^0.4.23",
"youtube-search-without-api-key": "^1.0.7"
@ -71,7 +67,7 @@
"@types/qrcode-terminal": "^0.12.0",
"@types/ws": "^8.2.2",
"electron": "git+https://github.com/castlabs/electron-releases.git",
"electron-builder": "^22.14.5",
"electron-builder": "^22.14.13",
"electron-webpack": "^2.8.2",
"musickit-typescript": "^1.2.4",
"playwright": "^1.18.1",
@ -175,7 +171,6 @@
"target": [
"dmg"
]
},
"artifactName": "${productName}.${ext}"
}
}
}

View file

@ -1,5 +1,6 @@
exports.default = function(context) {
const { execSync } = require('child_process')
const fs = require('fs')
if (process.platform !== 'darwin')
return
@ -11,8 +12,12 @@ exports.default = function(context) {
console.log('VMP signing start')
if (fs.existsSync('dist/mac'))
execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac',{stdio: 'inherit'})
if (fs.existsSync('dist/mac-arm64'))
execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac-arm64 -z',{stdio: 'inherit'})
if (fs.existsSync('dist/mac-x64'))
execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac-x64',{stdio: 'inherit'})
console.log('VMP signing complete')
}

View file

@ -0,0 +1,21 @@
if (!process.env['CIRCLECI']) {
console.log(`[CIRCLECI SCRIPT] CircleCI not found... Aborting script`)
return
}
let fs = require('fs')
var data = fs.readFileSync('package.json');
var package = JSON.parse(data);
pvers = package.version.match(/\d+\./g)
// https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables
package.version = `${pvers[0]}${pvers[1]}${process.env['CIRCLE_BUILD_NUM']}`
fs.writeFile('package.json', JSON.stringify(package), err => {
// error checking
if(err) throw err;
console.log("VERSION CHANGED");
});

View file

@ -1,4 +1,4 @@
# Cider i18n
# Cider i18n Notices & Changelog
Some notes about Cider's i18n support.
@ -21,7 +21,7 @@ been modified, the ones not mentioned in the list need modifying.
* `term.sharedPlaylists`: "Shared Playlists" - Added for `en_US`.
* `term.people`: "People" - Added for `en_US`.
Updated 02/02/2022 17:16 UTC
Update 02/02/2022 17:16 UTC
* `term.newpreset.name`: Added for `en_US`.
* `term.addedpreset`: Added for `en_US`.
@ -38,7 +38,7 @@ Updated 02/02/2022 17:16 UTC
* `action.newpreset`: Added for `en_US`.
* `action.deletepreset`: Added for `en_US`.
Updated 04/02/2022 10:00 UTC
Update 04/02/2022 10:00 UTC
* `term.history`: Added for `en_US`.
* `action.copy`: Added for `en_US`.
@ -56,3 +56,28 @@ Update 05/02/2022 09:00 UTC
* `settings.header.audio.quality.lossless.description`: Added for `en_US`.
* `settings.option.audio.enableAdvancedFunctionality.ciderPPE`: Added for `en_US`.
* `settings.option.audio.enableAdvancedFunctionality.ciderPPE.description`: Added for `en_US`.
Update 06/02/2022 10:35 UTC
* `settings.header.audio.quality.hireslossless.description`: Brackets removed, handled in renderer.
* `settings.header.audio.quality.lossless.description`: Brackets removed, handled in renderer.
* `settings.header.audio.quality.high.description`: Added for `en_US`.
* `settings.header.audio.quality.auto`: Removed as default for MusicKit is 256.
* `settings.header.audio.quality.standard`: Replaced `settings.header.audio.quality.low` to match MusicKit naming.
* `settings.header.audio.quality.standard.description`: Added for `en_US`.
Update 08/02/2022 10:20 UTC
* `settings.option.general.updateCider`: Added for `en_US`.
* `settings.option.general.updateCider.branch`: Added for `en_US`.
* `settings.option.general.updateCider.branch.description`: Added for `en_US`.
* `settings.option.general.updateCider.branch.main`: Added for `en_US`.
* `settings.option.general.updateCider.branch.develop`: Added for `en_US`.
* `settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength`: Added for `en_US`.
* `settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description`: Added for `en_US`.
* `settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard`: Added for `en_US`.
* `settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive`: Added for `en_US`.
* `settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility`: Added for `en_US`.
* `settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility`: Added for `en_US`.
* `term.requestError`: Added for `en_US`.
* `term.song.link.generate`: Added for `en_US`.

View file

@ -1,7 +1,7 @@
{ // Base File
{
// i18n Info
"i18n.languageName": "Deutsch", // name of language in native language
"i18n.languageName": "Deutsch", // name of language in native language
"i18n.languageNameEnglish": "German", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@motz0815", // Authors, if you contribute to this file feel free to add your name seperated with a space
@ -19,6 +19,7 @@
"notification.updatingLibrarySongs": "Aktualisiere Songs...",
"notification.updatingLibraryAlbums": "Aktualisiere Alben...",
"notification.updatingLibraryArtists": "Aktualisiere Künstler...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
@ -117,7 +118,6 @@
"term.tracks": "Lieder", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "Videos",
"term.menu": "Menü",
"action.showAlbum": "Zeige ganzes Album",
// Home
"home.title": "Home",
@ -128,13 +128,14 @@
"home.madeForYou": "Für dich gemacht",
"home.friendsListeningTo": "Freunde hören",
"home.followedArtists": "Gefolgte Künstler",
// Errors
"error.appleMusicSubRequired": "Apple Music benötigt ein Abonnement.",
"error.connectionError": "Es ist ein Fehler aufgetreten, während sich mit Apple Music verbunden wurde.",
"error.noResults": "Keine Ergebnisse.",
"error.noResults.description": "Versuche einen anderen Suchbegriff.",
//Podcasts
// Podcasts
"podcast.followOnCider": "Folge auf Cider",
"podcast.followedOnCider": "Gefolgt auf Cider",
"podcast.subscribeOnItunes": "Folge auf iTunes",
@ -183,6 +184,7 @@
"action.removeTracks": "Entferne ${self.selectedItems.length} Lieder aus der Warteschlange",
"action.import": "Importieren",
"action.export": "Exportieren",
"action.showAlbum": "Zeige ganzes Album",
// Settings - General
"settings.header.general": "Allgemein",
@ -194,6 +196,8 @@
"settings.option.general.language.fun": "Lustige Sprachen",
"settings.option.general.language.unsorted": "Unsortiert",
// Update Cider
// Settings - Audio
"settings.header.audio": "Audio",
"settings.header.audio.description": "Passe die Audio-Einstellungen für Cider an.",
@ -208,6 +212,7 @@
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalisiert die Lautstärke aller Lieder, um die Hörerfahrung einheitlicher zu machen.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Räumliches Audio", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Macht die Musik räumlicher (3D-Effekt) (Beachte: Dies ist kein Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Visuell",
"settings.header.visual.description": "Passe die visuellen Einstellungen für Cider an.",
@ -230,6 +235,9 @@
"settings.option.visual.hardwareAcceleration.description": "Erfordert Neustart der Anwendung",
"settings.header.visual.hardwareAcceleration.default": "Normal",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Settings - Visual - Theme name
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Persönliche Daten anzeigen", // Toggle
@ -265,8 +273,8 @@
"settings.option.experimental.closeButtonBehaviour.quit": "Cider Schließen",
"settings.option.experimental.closeButtonBehaviour.minimizeTaskbar": "In Taskleiste minimieren",
"settings.option.experimental.closeButtonBehaviour.minimizeTray": "In den Tray minimieren",
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.spatialProperties" : "Räumliche Einstellungen",
"spatial.width" : "Breite",

View file

@ -1,10 +1,10 @@
{
// i18n Info
"i18n.languageName": "Ελληνικά",
"i18n.languageNameEnglish": "Greek",
"i18n.category": "main",
"i18n.authors": "@down-bad",
"i18n.languageName": "Ελληνικά", // name of language in native language
"i18n.languageNameEnglish": "Greek", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@down-bad", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cider",
@ -19,6 +19,7 @@
"notification.updatingLibrarySongs": "Ενημέρωση βιβλιοθήκης τραγουδιών...",
"notification.updatingLibraryAlbums": "Ενημέρωση βιβλιοθήκης άλμπουμ...",
"notification.updatingLibraryArtists": "Ενημέρωση βιβλιοθήκης καλλιτεχνών...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
@ -117,7 +118,6 @@
"term.tracks": "τραγούδια", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "Βίντεο",
"term.menu": "Μενού",
"action.showAlbum": "Εμφάνιση ολόκληρου άλμπουμ",
// Home
"home.title": "Αρχική",
@ -128,13 +128,14 @@
"home.madeForYou": "Δημιουργήθηκε για εσάς",
"home.friendsListeningTo": "Οι φίλοι σου ακούν",
"home.followedArtists": "Καλλιτέχνες που ακολουθείτε",
// Errors
"error.appleMusicSubRequired": "Το Apple Music απαιτεί μια συνδρομή.",
"error.connectionError": "Δεν είναι δυνατή η σύνδεση με το Apple Music.",
"error.noResults": "Κανένα αποτέλεσμα.",
"error.noResults.description": "Δοκιμάστε μια νέα αναζήτηση.",
//Podcasts
// Podcasts
"podcast.followOnCider": "Ακολούθηση στο Cider",
"podcast.followedOnCider": "Ακολουθείτε στο Cider",
"podcast.subscribeOnItunes": "Συνδρομή στο iTunes",
@ -183,6 +184,7 @@
"action.removeTracks": "Αφαίρεση ${self.selectedItems.length} τραγουδιών από την ουρά",
"action.import": "Εισαγωγή",
"action.export": "Εξαγωγή",
"action.showAlbum": "Εμφάνιση ολόκληρου άλμπουμ",
// Settings - General
"settings.header.general": "Γενικά",
@ -194,6 +196,8 @@
"settings.option.general.language.fun": "Γλώσσες για πλάκα",
"settings.option.general.language.unsorted": "Αταξινόμητες",
// Update Cider
// Settings - Audio
"settings.header.audio": "Ήχος",
"settings.header.audio.description": "Προσαρμογή ρυθμίσεων ήχου για το Cider.",
@ -208,6 +212,7 @@
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Κανονικοποιεί την ένταση για μεμονωμένα κομμάτια για μια πιο ομοιόμορφη εμπειρία ακρόασης.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Χωρικοποίηση Ήχου", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Πιο τρισδιάστατος και χωρικοποιημένος ήχος (σημείωση: Αυτό δεν είναι Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Οπτικά",
"settings.header.visual.description": "Προσαρμογή οπτικών ρυθμίσεων για το Cider.",
@ -230,6 +235,9 @@
"settings.option.visual.hardwareAcceleration.description": "Απαιτεί επανεκκίνηση",
"settings.header.visual.hardwareAcceleration.default": "Προεπιλογή",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Settings - Visual - Theme name
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Εμφάνιση προσωπικών στοιχείων", // Toggle
@ -265,8 +273,8 @@
"settings.option.experimental.closeButtonBehaviour.quit": "Έξοδος του Cider",
"settings.option.experimental.closeButtonBehaviour.minimizeTaskbar": "Ελαχιστοποίηση στη γραμμή εργασιών",
"settings.option.experimental.closeButtonBehaviour.minimizeTray": "Ελαχιστοποίηση στη γωνία γραμμής εργασιών",
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.spatialProperties" : "Χωρικές Ιδιότητες",
"spatial.width" : "Πλάτος",

View file

@ -1,7 +1,7 @@
{ // HODOR
// i18n Info
"i18n.languageName": "HODOR", // name of language in native language
"i18n.languageName": "HODOR", // name of language in native language
"i18n.languageNameEnglish": "HODOR", // name of language in English
"i18n.category": "fun", // main = real language, fun = fun community languages
"i18n.authors": "HODOR", // Authors, if you contribute to this file feel free to add your name seperated with a space
@ -19,6 +19,7 @@
"notification.updatingLibrarySongs": "UPDATING HODOR HODORS...",
"notification.updatingLibraryAlbums": "UPDATING HODOR HODORBUMS...",
"notification.updatingLibraryArtists": "UPDATING HODOR HODORTISTS...",
// Terms
"term.appleInc": "HODOR Inc.",
"term.appleMusic": "HODOR MUSIC",
@ -139,7 +140,7 @@
"error.noResults": "NO HODOR.",
"error.noResults.description": "TRY NEW HODOR.",
//Podcasts
// Podcasts
"podcast.followOnCider": "FOLLOW ON HODOR",
"podcast.followedOnCider": "FOLLOWING ON HODOR",
"podcast.subscribeOnItunes": "SUBSCRIBE ON iHODOR",
@ -190,12 +191,11 @@
"action.import": "HODOR IN",
"action.export": "HODOR OUT",
"action.showAlbum": "SHOW HODOR HODOR",
// Waiting on Core for moving plugin to app.ts
"action.tray.minimize": "HODOR TO TRAY",
"action.tray.quit": "HODOR",
"action.tray.show": "SEE",
// Settings - General (Reserved)
// Settings - General
"settings.header.general": "HODORAL",
"settings.header.general.description": "HODOR HODORAL HODOR FOR HODOR.",
"settings.option.general.language": "HODOR SPEAKS",
@ -205,6 +205,8 @@
"settings.option.general.language.fun": "HODOR HODORS",
"settings.option.general.language.unsorted": "NO HODORS",
// Update Cider
// Settings - Audio
"settings.header.audio": "HODOR HEARS",
"settings.header.audio.description": "ADJUST HODOR EARS FOR HODOR HODOR.",
@ -219,6 +221,7 @@
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "NORMALIZES HODOR VOLUME FOR INDIVIDUAL HODORS TO HODOR A MORE HODOR LISTENING HODOR.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "HODOR SPATIALIZATION", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "SPATIALIZE HODOR AND MAKE HODOR MORE 3-HODOR (HODOR: THIS IS NOT HODOR ATMOS)",
// Settings - Visual
"settings.header.visual": "HODOR SEES",
"settings.header.visual.description": "ADJUST HODOR EYES FOR HODOR.",
@ -241,6 +244,9 @@
"settings.option.visual.hardwareAcceleration.description": "NEED RE HODOR",
"settings.header.visual.hardwareAcceleration.default": "HODOR.",
"settings.header.visual.hardwareAcceleration.webGPU": "WEB HODOR!!",
// Settings - Visual - Theme name
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "SHOW HODOR NAME?", // Toggle
@ -276,8 +282,8 @@
"settings.option.experimental.closeButtonBehaviour.quit": "END HODOR",
"settings.option.experimental.closeButtonBehaviour.minimizeTaskbar": "MINIMIZE HODOR TO HODORBAR",
"settings.option.experimental.closeButtonBehaviour.minimizeTray": "MINIMIZE HODOR TO HODORAY",
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "HODOR SPATIALIZATION IS HODOR. TO HODOR, PLEASE HODOR IT HODOR.",
"spatial.spatialProperties" : "SPATIAL HODOR",
@ -308,5 +314,4 @@
//About
"about.thanks": "HODOR THANKS TO THE HODOR TEAM AND ALL OF OUR HODORS."
}

View file

@ -1,19 +1,25 @@
{ // Base File
{
// i18n Info
"i18n.languageName": "Engwish (OwO)", // name of language in native language
"i18n.languageNameEnglish": "Engwish (OwO)", // name of language in English
"i18n.category": "fun", // main = real language, fun = fun community languages
"i18n.authors": "@deerwithacurl", // Authors, if you contribute to this file feel free to add your name seperated with a space
"i18n.authors": "@deerwithacurl @gamingliamstudios", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cidew",
"date.format": "${m} ${d}, ${y}",
// Dialogs
"dialog.cancel": "Nu",
"dialog.ok": "Oki",
// Notification
"notification.updatingLibrarySongs": "Updating wibwawy songs...",
"notification.updatingLibraryAlbums": "Updating wibwawy awbums...",
"notification.updatingLibraryArtists": "Updating wibwawy awtists...",
// Terms
"term.appleInc": "Appwe Inc.",
"term.appleMusic": "Appwe Mewsic",
@ -121,7 +127,6 @@
"term.menu": "Menuwu",
"term.check": "Check",
"term.aboutArtist": "About {{artistName}}", // e.g. 'About Doja Cat'
"term.updateCider": "Update Cidew",
"term.topResult": "Top Wesuwt", // Search Results
"term.sharedPlaylists": "Shawed Pwaywists", // Search Results
"term.people": "Peopwe", // Search Results
@ -137,6 +142,7 @@
"term.recordLabels": "Wecowd Wabews",
"term.videoExtras": "Videowo Extwas",
"term.top": "Top",
// Home
"home.title": "Home",
"home.recentlyPlayed": "Wecentwy Pwayed",
@ -146,12 +152,14 @@
"home.madeForYou": "Made Fow Chu",
"home.friendsListeningTo": "Fwiends Wistening To",
"home.followedArtists": "Fowwowed Awtists",
// Errors
"error.appleMusicSubRequired": "Appwe Music wequiwes a subscwiption.",
"error.connectionError": "Thewe was a pwobwem connecting to Appwe Mewsic.",
"error.noResults": "No Wesuwts.",
"error.noResults.description": "Twy a new seawch.",
//Podcasts
// Podcasts
"podcast.followOnCider": "Fowwow On Cidew",
"podcast.followedOnCider": "Fowwowing On Cidew",
"podcast.subscribeOnItunes": "Subscwibe On iTuwunes",
@ -160,6 +168,7 @@
"podcast.episodes": "Episowodes",
"podcast.playEpisode": "Pway Episowode",
"podcast.website": "Pawdcast Website",
// Actions
"action.addToLibrary": "Add to Wibwawy",
"action.addToLibrary.success": "Added to Wibwawy",
@ -207,14 +216,24 @@
"action.update": "Update",
"action.newpreset": "New Pweset...", // Equalizer Preset
"action.deletepreset": "Dewete Pweset",
// Settings - General
"settings.header.general": "Genewaw",
"settings.header.general.description": "Adjust the genewaw settings fow Cidew.",
"settings.option.general.language": "Wanguage",
// Language optgroups
"settings.option.general.language.main": "Wanguages",
"settings.option.general.language.fun": "Fun Wanguages",
"settings.option.general.language.unsorted": "Unsowted",
// Update Cider
"settings.option.general.updateCider": "Update Cidew", // Button
"settings.option.general.updateCider.branch": "Cidew Update Bwanch", // Dropdown
"settings.option.general.updateCider.branch.description": "Sewect the bwanch to uwpdate Cidew to",
"settings.option.general.updateCider.branch.main": "Stabwe",
"settings.option.general.updateCider.branch.develop": "Devewopment",
// Settings - Audio
"settings.header.audio": "Audiowo",
"settings.header.audio.description": "Adjust the audiowo settings fow Cidew.",
@ -229,9 +248,9 @@
"settings.option.audio.seamlessTransition": "Seamwess Audiowo Twansition", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Enabwe Advanced Functionawity", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "Enabwing AudiowoContext functionawity wiww awwow fow extended audiowo featuwes wike Audiowo Nowmawization, Equalizews and Visuawizews, howevew on some systems dis may cause stuttewing in audiowo twacks.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cidew Adwenawine Pwocessow", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cidew Adwenawine Pwocessow™️", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacouwstic enhancements that makes evewything souwnd both wichew and mowe wivewy. | Designed by Maikiwi",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP stwength", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Stwength", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the stwength of the pwocessing done to the auwdio. (Aggwessive may yiewd uwndesiwabwe wesuwwts)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standawd",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggwessive",
@ -239,6 +258,7 @@
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Nowmawizes peak vowume fow individuaw twacks to cweate a moar unifowm wistening expewience.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audiowo Spatiawization", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatiawize audiowo and make audiowo moar 3-dimensionaw (note: Dis is not Dowby Atmos)",
// Settings - Visual
"settings.header.visual": "Visuaw",
"settings.header.visual.description": "Adjust the visuaw settings fow Cidew.",
@ -261,8 +281,12 @@
"settings.option.visual.hardwareAcceleration.description": "Wequiwes wewaunch",
"settings.header.visual.hardwareAcceleration.default": "Defauwt",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Settings - Visual - Theme name
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Show Pewsonaw Info", // Toggle
// Settings - Lyrics
"settings.header.lyrics": "Wywics",
"settings.header.lyrics.description": "Adjust the wywics settings fow Cidew.",
@ -270,6 +294,7 @@
"settings.option.lyrics.enableMusixmatchKaraoke": "Enabwe Kawaoke Mode (Musixmatch onwy)", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch Twanswation Pwefewwed Wanguage", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "Enabwe YouTube Wywics fow Mewsic Videowos", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "Connectivity",
"settings.header.connectivity.description": "Adjust the connectivity settings fow Cidew.",
@ -285,11 +310,13 @@
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Wemove featuwing awtists fwom song titwe (Wast.fm)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Fiwtew wooped twack (Wast.fm)",
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "Expewimentaw",
"settings.header.experimental.description": "Adjust the expewimentaw settings fow Cidew.",
"settings.option.experimental.compactUI": "Wittwe UI", // Toggle
"settings.option.experimental.close_button_hide": "Cwose Button Shouwd Hide the Appwication",
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "Audiowo Spatiawization is disabwed. To use, pwease enabwe it fiwst.",
@ -311,11 +338,14 @@
"spatial.down": "Down",
"spatial.listener": "Wistenew",
"spatial.audioSource": "Audiowo Souwce",
// Settings - Unfinished
"settings.header.unfinished": "Unfinished",
// Web Remote
"remote.web.title": "Cider Wiimote",
"remote.web.title": "Cidew Wiimote",
"remote.web.description": "Scan da QR code to paiw chur phone up with dis Cidew instance",
// About
"about.thanks": "Majow tanks to da Cidew Cowwective Team and aww of ouw contwibutows."
}

View file

@ -1,7 +1,7 @@
{ // Base File
{
// i18n Info
"i18n.languageName": "piss", // name of language in native language
"i18n.languageName": "piss", // name of language in native language
"i18n.languageNameEnglish": "English (piss)", // name of language in English
"i18n.category": "fun", // main = real language, fun = fun community languages
"i18n.authors": "@SoNothingMC @saboooor", // Authors, if you contribute to this file feel free to add your name seperated with a space
@ -19,6 +19,7 @@
"notification.updatingLibrarySongs": "pisssing all over your songs",
"notification.updatingLibraryAlbums": "pissing all over your albums",
"notification.updatingLibraryArtists": "pissing all over your idols",
// Terms
"term.appleInc": "piss Inc.",
"term.appleMusic": "piss music",
@ -93,7 +94,7 @@
"term.less": "piss less",
"term.showMore": "more piss",
"term.showLess": "less piss",
"term.topSongs" : "top piss",
"term.topSongs": "top piss",
"term.latestReleases": "latest piss collection",
"term.time.added": "pissed",
"term.time.released": "pissed",
@ -127,8 +128,7 @@
"term.menu": "piss menu",
"term.check": "piss!",
"term.aboutArtist": "about pisser {{artistName}}", // e.g. 'About Doja Cat'
"term.updateCider": "piss on cider",
"term.topResult": "top piss", // Search Results
"term.topResult": "top piss", // Search Results
"term.sharedPlaylists": "shared pisslists", // Search Results
"term.people": "pissers", // Search Results
"term.newpreset.name": "new advanced piss prepiss name", // Equalizer Preset
@ -153,13 +153,14 @@
"home.madeForYou": "pissed for you",
"home.friendsListeningTo": "friends pissing to",
"home.followedArtists": "followed pissers",
// Errors
"error.appleMusicSubRequired": "piss music requires, like y'know, an actual piss music subscription to actually use.",
"error.connectionError": "oh, piss.",
"error.noResults": "no piss found",
"error.noResults.description": "try pissing somewhere else (or press Enter/Return to search)",
//Podcasts
// Podcasts
"podcast.followOnCider": "piss on Cider",
"podcast.followedOnCider": "pissed on Cider",
"podcast.subscribeOnItunes": "piss on iPiss",
@ -215,7 +216,7 @@
"action.tray.show": "piss back",
"action.update": "piss!",
"action.copy": "copiss",
"action.newpreset": "new prepiss...", // Equalizer Preset
"action.newpreset": "new prepiss...", // Equalizer Preset
"action.deletepreset": "unpiss prepiss",
// Settings - General
@ -228,6 +229,9 @@
"settings.option.general.language.fun": "piss languages",
"settings.option.general.language.unsorted": "???? who put this here",
// Update Cider
"settings.option.general.updateCider": "piss on cider", // Button
// Settings - Audio
"settings.header.audio": "piss sounds",
"settings.header.audio.description": "change how your piss sounds",
@ -243,12 +247,13 @@
"settings.option.audio.seamlessTransition": "seamless piss-to-piss transition", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "cool piss tricks", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "enabling the AudioContext thingy allows you to do cool stuffs, however on some systems your song may stutter",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "clear piss", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "clear piss™️", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "makes your bladder go overboard and makes your piss crisp and clear.",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "piss normaliztion", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "protect your eardrums from overly loud/slient pisses",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "3D piss", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "this aint the dolby atmos you are looking for but its still pretty crazy so check it out",
// Settings - Visual
"settings.header.visual": "piss appearance",
"settings.header.visual.description": "change how your piss looks",
@ -311,8 +316,8 @@
"settings.option.experimental.close_button_hide": "play hide-and-seek when clicking close button",
"settings.option.experimental.copy_log": "copy sewage to pissboard",
"settings.option.experimental.inline_playlists": "inpiss pisslists and piss collections",
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "3D piss is not on. turn it on lol",
"spatial.spatialProperties": "3D properties",

View file

@ -1,7 +1,7 @@
{
// i18n Info
"i18n.languageName": "┤ᖋ|:ᖋᔮᒣ╎ᔮ ᖋ|:i!⍑ᖋᕊᒷᒣ", // name of language in native language
"i18n.languageName": "┤ᖋ|:ᖋᔮᒣ╎ᔮ ᖋ|:i!⍑ᖋᕊᒷᒣ", // name of language in native language
"i18n.languageNameEnglish": "Galactic Alphabet", // name of language in English
"i18n.category": "fun", // main = real language, fun = fun community languages
"i18n.authors": "@kyw504100", // Authors, if you contribute to this file feel free to add your name seperated with a space
@ -19,6 +19,7 @@
"notification.updatingLibrarySongs": "⚍i!↸ᖋᒣ╎リ┤ |:╎ᕊ∷ᖋ∷॥ ϟᒍリ┤ϟ...",
"notification.updatingLibraryAlbums": "⚍i!↸ᖋᒣ╎リ┤ |:╎ᕊ∷ᖋ∷॥ ᖋ|:ᕊ⚍ᒲϟ...",
"notification.updatingLibraryArtists": "⚍i!↸ᖋᒣ╎リ┤ |:╎ᕊ∷ᖋ∷॥ ᖋ∷ᒣ╎ϟᒣϟ...",
// Terms
"term.appleInc": "ᖋi!i!|:ᒷ ╎リᔮ.",
"term.appleMusic": "ᖋi!i!|:ᒷ ᒲ⚍ϟ╎ᔮ",
@ -93,7 +94,7 @@
"term.less": "|:ᒷϟϟ",
"term.showMore": "ϟ⍑ᒍ∴ ᒲᒍ∷ᒷ",
"term.showLess": "ϟ⍑ᒍ∴ |:ᒷϟϟ",
"term.topSongs" : "ᒣi! ϟᒍリ┤ϟ",
"term.topSongs": "ᒣi! ϟᒍリ┤ϟ",
"term.latestReleases": "|:ᖋᒣᒷϟᒣ ∷ᒷ|:ᒷᖋϟᒷϟ",
"term.time.added": "ᖋ↸↸ᒷ↸",
"term.time.released": "∷ᒷ|:ᒷᖋϟᒷ↸",
@ -127,14 +128,15 @@
"term.menu": "ᒲᒷ⚍リ",
"term.check": "ᔮ⍑ᒷᔮ·ǀ·",
"term.aboutArtist": "ᖋᕊᒍ⚍ᒣ {{artistName}}", // e.g. 'About Doja Cat'
"term.updateCider": "⚍i!↸ᖋᒣᒷ ᔮ╎↸ᒷ∷",
"term.topResult": "ᒣi! ∷ᒷϟ⚍|:ᒣ", // Search Results
"term.topResult": "ᒣi! ∷ᒷϟ⚍|:ᒣ", // Search Results
"term.sharedPlaylists": "ϟ⍑ᖋ∷ᒷ↸ i!|:ᖋ॥|:╎ϟᒣϟ", // Search Results
"term.people": "i!ᒷi!|:ᒷ", // Search Results
"term.newpreset.name": "リᒷ∴ ᒷᑑ i!∷ᒷϟᒷᒣ リᖋᒲᒷ", // Equalizer Preset
"term.addedpreset": "ᖋ↸↸ᒷ↸ i!∷ᒷϟᒷᒣ",
"term.deletepreset.warn": "ᖋ∷ᒷ ॥ᒍ⚍ ϟ⚍∷ᒷ ॥ᒍ⚍ ∴ᖋリᒣ ᒣᒍ ↸ᒷ|:ᒷᒣᒷ ᒣ⍑╎ϟ i!∷ᒷϟᒷᒣ?",
"term.deletedpreset": "∷ᒷᒲᒍ⍊ᒷ↸ i!∷ᒷϟᒷᒣ",
"term.requestError": "ᒣ⍑ᒷ∷ᒷ ∴ᖋϟ ᖋ i!∷ᒍᕊ|:ᒷᒲ ∴╎ᒣ⍑ ᒣ⍑ᒷ ∷ᒷᑑ⚍ᒷϟᒣ.",
"term.song.link.generate": "┤ᒷᒣᒣ╎リ┤ ϟᒍリ┤.|:╎リ·ǀ· ϟ⍑ᖋ∷ᒷ ⚍∷|:...",
"term.musicVideos": "ᒲ⚍ϟ╎ᔮ ⍊╎↸ᒷᒍϟ", // Search page friendlyTypes
"term.stations": "ϟᒣᖋᒣ╎ᒍリϟ",
"term.curators": "ᔮ⚍∷ᖋᒣᒍ∷ϟ",
@ -153,13 +155,14 @@
"home.madeForYou": "ᒲᖋ↸ᒷ ⎓ᒍ∷ ॥ᒍ⚍",
"home.friendsListeningTo": "⎓∷╎ᒷリ↸ϟ |:╎ϟᒣᒷリ╎リ┤ ᒣᒍ",
"home.followedArtists": "⎓ᒍ|:|:ᒍ∴ᒷ↸ ᖋ∷ᒣ╎ϟᒣϟ",
// Errors
"error.appleMusicSubRequired": "ᖋi!i!|:ᒷ ᒲ⚍ϟ╎ᔮ ∷ᒷᑑ⚍╎∷ᒷϟ ᖋ ϟ⚍ᕊϟᔮ∷╎i!ᒣ╎ᒍリ.",
"error.connectionError": "ᒣ⍑ᒷ∷ᒷ ∴ᖋϟ ᖋ i!∷ᒍᕊ|:ᒷᒲ ᔮᒍリリᒷᔮᒣ╎リ┤ ᒣᒍ ᖋi!i!|:ᒷ ᒲ⚍ϟ╎ᔮ.",
"error.noResults": "リᒍ ∷ᒷϟ⚍|:ᒣϟ.",
"error.noResults.description": "ᒣ∷॥ ᖋ リᒷ∴ ϟᒷᖋ∷ᔮ⍑.",
//Podcasts
// Podcasts
"podcast.followOnCider": "⎓ᒍ|:|:ᒍ∴ ᒍリ ᔮ╎↸ᒷ∷",
"podcast.followedOnCider": "⎓ᒍ|:|:ᒍ∴╎リ┤ ᒍリ ᔮ╎↸ᒷ∷",
"podcast.subscribeOnItunes": "ϟ⚍ᕊϟᔮ∷╎ᕊᒷ ᒍリ ╎ᒣ⚍リᒷϟ",
@ -215,7 +218,7 @@
"action.tray.show": "ϟ⍑ᒍ∴",
"action.update": "⚍i!↸ᖋᒣᒷ",
"action.copy": "ᔮi!॥",
"action.newpreset": "リᒷ∴ i!∷ᒷϟᒷᒣ...", // Equalizer Preset
"action.newpreset": "リᒷ∴ i!∷ᒷϟᒷᒣ...", // Equalizer Preset
"action.deletepreset": "↸ᒷ|:ᒷᒣᒷ i!∷ᒷϟᒷᒣ",
// Settings - General
@ -228,6 +231,13 @@
"settings.option.general.language.fun": "⎓⚍リ |:ᖋリ┤⚍ᖋ┤ᒷϟ",
"settings.option.general.language.unsorted": "⚍リϟᒍ∷ᒣᒷ↸",
// Update Cider
"settings.option.general.updateCider": "⚍i!↸ᖋᒣᒷ ᔮ╎↸ᒷ∷",
"settings.option.general.updateCider.branch": "ᔮ╎↸ᒷ∷ ⚍i!↸ᖋᒣᒷ ᕊ∷ᖋリᔮ⍑", // Dropdown
"settings.option.general.updateCider.branch.description": "ϟᒷ|:ᒷᔮᒣ ᒣ⍑ᒷ ᕊ∷ᖋリᔮ⍑ ᒣᒍ ⚍i!↸ᖋᒣᒷ ᔮ╎↸ᒷ∷ ᒣᒍ",
"settings.option.general.updateCider.branch.main": "ϟᒣᖋᕊ|:ᒷ",
"settings.option.general.updateCider.branch.develop": "↸ᒷ⍊ᒷ|:i!ᒲᒷリᒣ",
// Settings - Audio
"settings.header.audio": "ᖋ⚍↸╎ᒍ",
"settings.header.audio.description": "ᖋ↸⋮⚍ϟᒣ ᒣ⍑ᒷ ᖋ⚍↸╎ᒍ ϟᒷᒣᒣ╎リ┤ϟ ⎓ᒍ∷ ᔮ╎↸ᒷ∷.",
@ -237,17 +247,25 @@
"settings.header.audio.quality.lossless": "|:ᒍϟϟ|:ᒷϟϟ",
"settings.header.audio.quality.lossless.description": "(⚍i! ᒣᒍ 24-ᕊ╎ᒣ/48 ·ǀ·⍑∩)",
"settings.header.audio.quality.high": "⍑╎┤⍑",
"settings.header.audio.quality.low": "|:ᒍ∴",
"settings.header.audio.quality.auto": "ᖋ⚍ᒣᒍ",
"settings.header.audio.quality.high.description": "256 ·ǀ·ᕊi!ϟ",
"settings.header.audio.quality.standard": "ϟᒣᖋリ↸ᖋ∷↸",
"settings.header.audio.quality.standard.description": "64 ·ǀ·ᕊi!ϟ",
"settings.option.audio.seamlessTransition": "ϟᒷᖋᒲ|:ᒷϟϟ ᖋ⚍↸╎ᒍ ᒣ∷ᖋリϟ╎ᒣ╎ᒍリ", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "ᒷリᖋᕊ|:ᒷ ᖋ↸⍊ᖋリᔮᒷ↸ ⎓⚍リᔮᒣ╎ᒍリᖋ|:╎ᒣ॥", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "ᒷリᖋᕊ|:╎リ┤ ᖋ⚍↸╎ᒍᔮᒍリᒣᒷ/ᒣ ⎓⚍リᔮᒣ╎ᒍリᖋ|:╎ᒣ॥ ∴╎|:|: ᖋ|:|:ᒍ∴ ⎓ᒍ∷ ᒷ/ᒣᒷリ↸ᒷ↸ ᖋ⚍↸╎ᒍ ⎓ᒷᖋᒣ⚍∷ᒷϟ |:╎·ǀ·ᒷ ᖋ⚍↸╎ᒍ リᒍ∷ᒲᖋ|:╎∩ᖋᒣ╎ᒍリ , ᒷᑑ⚍ᖋ|:╎∩ᒷ∷ϟ ᖋリ↸ ⍊╎ϟ⚍ᖋ|:╎∩ᒷ∷ϟ, ⍑ᒍ∴ᒷ⍊ᒷ∷ ᒍリ ϟᒍᒲᒷ ϟ॥ϟᒣᒷᒲϟ ᒣ⍑╎ϟ ᒲᖋ॥ ᔮᖋ⚍ϟᒷ ϟᒣ⚍ᒣᒣᒷ∷╎リ┤ ╎リ ᖋ⚍↸╎ᒍ ᒣ∷ᖋᔮ·ǀ·ϟ.",
"settings.option.audio.enableAdvancedFunctionality.decryptLLPW": "↸ᒷᔮ∷॥i!ᒣ |:ᒍϟϟ|:ᒷϟϟ i!|:ᖋ॥ᕊᖋᔮ·ǀ· ∴ᒍ∷·ǀ·⎓|:ᒍ∴", // Toggle
"settings.option.audio.enableAdvancedFunctionality.decryptLLPW.description": "ᒷリᖋᕊ|:ᒷϟ ᒣ⍑ᒷ ᖋᕊ╎|:╎ᒣ॥ ⎓ᒍ∷ ᔮ╎↸ᒷ∷ ᒣᒍ ↸ᒷᔮ∷॥i!ᒣ |:ᒍϟϟ|:ᒷϟϟ ᖋ⚍↸╎ᒍ ⎓╎|:ᒷϟ. ᖋ ᒲ╎リᒍ∷ i!ᒷ∷⎓ᒍ∷ᒲᖋリᔮᒷ ⍑╎ᒣ ∴╎|:|: ᒍᔮᔮ⚍∷.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "ᔮ╎↸ᒷ∷ ᖋ↸∷ᒷリᖋ|:╎リᒷ i!∷ᒍᔮᒷϟϟᒍ∷™️", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "i!ϟ॥ᔮ⍑ᒍᖋᔮᒍ⚍ϟᒣ╎ᔮ ᒷリ⍑ᖋリᔮᒷᒲᒷリᒣϟ ᒣ⍑ᖋᒣ ᒲᖋ·ǀ·ᒷϟ ᒷ⍊ᒷ∷॥ᒣ⍑╎リ┤ ϟᒍ⚍リ↸ ᕊᒍᒣ⍑ ∷╎ᔮ⍑ᒷ∷ ᖋリ↸ ᒲᒍ∷ᒷ |:╎⍊ᒷ|:॥ | ↸ᒷϟ╎┤リᒷ↸ ᕊ॥ ᒲᖋ╎·ǀ·╎∴╎.",
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "ᔮᖋi! ╎ϟ リᒍᒣ ᔮᒲi!ᖋᒣ╎ᕊ|:ᒷ ∴╎ᒣ⍑ ϟi!ᖋᒣ╎ᖋ|:╎∩ᖋᒣ╎ᒍリ. i!|:ᒷᖋϟᒷ ↸╎ϟᖋᕊ|:ᒷ ϟi!ᖋᒣ╎ᖋ|:╎∩ᖋᒣ╎ᒍリ ᒣᒍ ᔮᒍリᒣ╎リ⚍ᒷ.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "ᔮᖋi! ϟᒣ∷ᒷリ┤ᒣ⍑", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "ᔮ⍑ᖋリ┤ᒷϟ ᒣ⍑ᒷ ϟᒣ∷ᒷリ┤ᒣ⍑ ᒍ⎓ ᒣ⍑ᒷ i!∷ᒍᔮᒷϟϟ╎リ┤ ↸ᒍリᒷ ᒣᒍ ᒣ⍑ᒷ ᖋ⚍↸╎ᒍ. (ᖋ┤┤∷ᒷϟϟ╎⍊ᒷ ᒲᖋ॥ ॥╎ᒷ|:↸ ⚍リ↸ᒷϟ╎∷ᖋᕊ|:ᒷ ∷ᒷϟ⚍|:ᒣϟ)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "ϟᒣᖋリ↸ᖋ∷↸",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "ᖋ┤┤∷ᒷϟϟ╎⍊ᒷ",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "ᖋ⚍↸╎ᒍ リᒍ∷ᒲᖋ|:╎∩ᖋᒣ╎ᒍリ", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "リᒍ∷ᒲᖋ|:╎∩ᒷϟ i!ᒷᖋ·ǀ· ⍊ᒍ|:⚍ᒲᒷ ⎓ᒍ∷ ╎リ↸╎⍊╎↸⚍ᖋ|: ᒣ∷ᖋᔮ·ǀ·ϟ ᒣᒍ ᔮ∷ᒷᖋᒣᒷ ᖋ ᒲᒍ∷ᒷ ⚍リ╎⎓ᒍ∷ᒲ |:╎ϟᒣᒷリ╎リ┤ ᒷ/i!ᒷ∷╎ᒷリᔮᒷ.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "ᖋ⚍↸╎ᒍ ϟi!ᖋᒣ╎ᖋ|:╎∩ᖋᒣ╎ᒍリ", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "ϟi!ᖋᒣ╎ᖋ|:╎∩ᒷ ᖋ⚍↸╎ᒍ ᖋリ↸ ᒲᖋ·ǀ·ᒷ ᖋ⚍↸╎ᒍ ᒲᒍ∷ᒷ 3-↸╎ᒲᒷリϟ╎ᒍリᖋ|: (リᒍᒣᒷ: ᒣ⍑╎ϟ ╎ϟ リᒍᒣ ↸ᒍ|:ᕊ॥ ᖋᒣᒲᒍϟ)",
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "ϟi!ᖋᒣ╎ᖋ|:╎∩ᖋᒣ╎ᒍリ ╎ϟ リᒍᒣ ᔮᒲi!ᖋᒣ╎ᕊ|:ᒷ ∴╎ᒣ⍑ ᔮᖋi!. i!|:ᒷᖋϟᒷ ↸╎ϟᖋᕊ|:ᒷ ᔮᖋi! ᒣᒍ ᔮᒍリᒣ╎リ⚍ᒷ.",
// Settings - Visual
"settings.header.visual": "⍊╎ϟ⚍ᖋ|:",
"settings.header.visual.description": "ᖋ↸⋮⚍ϟᒣ ᒣ⍑ᒷ ⍊╎ϟ⚍ᖋ| ϟᒷᒣᒣ╎リ┤ϟ ⎓ᒍ∷ ᔮ╎↸ᒷ∷.",
@ -310,28 +328,28 @@
"settings.option.experimental.close_button_hide": "ᔮ|:ᒍϟᒷ ᕊ⚍ᒣᒣᒍリ ϟ⍑ᒍ⚍|:↸ ⍑╎↸ᒷ ᒣ⍑ᒷ ᖋi!i!|:╎ᔮᖋᒣ╎ᒍリ",
"settings.option.experimental.copy_log": "ᔮi!॥ |:ᒍ┤ϟ ᒣᒍ ᔮ|:╎i!ᕊᒍᖋ∷↸",
"settings.option.experimental.inline_playlists": "╎リ|:╎リᒷ i!|:ᖋ॥|:╎ϟᒣϟ ᖋリ↸ ᖋ|:ᕊ⚍ᒲϟ",
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "ᖋ⚍↸╎ᒍ ϟi!ᖋᒣ╎ᖋ|:╎∩ᖋᒣ╎ᒍリ ╎ϟ ↸╎ϟᖋᕊ|:ᒷ↸. ᒣᒍ ⚍ϟᒷ, i!|:ᒷᖋϟᒷ ᒷリᖋᕊ|:ᒷ ╎ᒣ ⎓╎∷ϟᒣ.",
"spatial.spatialProperties" : "ϟi!ᖋᒣ╎ᖋ|: i!∷i!ᒷ∷ᒣ╎ᒷϟ",
"spatial.width" : "∴╎↸ᒣ⍑",
"spatial.height" : "⍑ᒷ╎┤⍑ᒣ",
"spatial.depth" : "↸ᒷi!ᒣ⍑",
"spatial.gain" : "┤ᖋ╎リ",
"spatial.roomMaterials" : "∷ᒍᒍᒲ ᒲᖋᒣᒷ∷╎ᖋ|:ϟ",
"spatial.roomDimensions" : "∷ᒍᒍᒲ ↸╎ᒲᒷリϟ╎ᒍリϟ",
"spatial.roomPositions" : "∷ᒍᒍᒲ i!ᒍϟ╎ᒣ╎ᒍリϟ",
"spatial.setDimensions" : "ϟᒷᒣ ↸╎ᒲᒷリϟ╎ᒍリϟ",
"spatial.setPositions" : "ϟᒷᒣ i!ᒍϟ╎ᒣ╎ᒍリϟ",
"spatial.up" : "⚍i!",
"spatial.front" : "⎓∷ᒍリᒣ",
"spatial.left" : "|:ᒷ⎓ᒣ",
"spatial.right" : "∷╎┤⍑ᒣ",
"spatial.back" : "ᕊᖋᔮ·ǀ·",
"spatial.down" : "↸ᒍ∴リ",
"spatial.listener" : "|:╎ϟᒣᒷリᒷ∷",
"spatial.audioSource" : "ᖋ⚍↸╎ᒍ ϟᒍ⚍∷ᔮᒷ",
"spatial.spatialProperties": "ϟi!ᖋᒣ╎ᖋ|: i!∷i!ᒷ∷ᒣ╎ᒷϟ",
"spatial.width": "∴╎↸ᒣ⍑",
"spatial.height": "⍑ᒷ╎┤⍑ᒣ",
"spatial.depth": "↸ᒷi!ᒣ⍑",
"spatial.gain": "┤ᖋ╎リ",
"spatial.roomMaterials": "∷ᒍᒍᒲ ᒲᖋᒣᒷ∷╎ᖋ|:ϟ",
"spatial.roomDimensions": "∷ᒍᒍᒲ ↸╎ᒲᒷリϟ╎ᒍリϟ",
"spatial.roomPositions": "∷ᒍᒍᒲ i!ᒍϟ╎ᒣ╎ᒍリϟ",
"spatial.setDimensions": "ϟᒷᒣ ↸╎ᒲᒷリϟ╎ᒍリϟ",
"spatial.setPositions": "ϟᒷᒣ i!ᒍϟ╎ᒣ╎ᒍリϟ",
"spatial.up": "⚍i!",
"spatial.front": "⎓∷ᒍリᒣ",
"spatial.left": "|:ᒷ⎓ᒣ",
"spatial.right": "∷╎┤⍑ᒣ",
"spatial.back": "ᕊᖋᔮ·ǀ·",
"spatial.down": "↸ᒍ∴リ",
"spatial.listener": "|:╎ϟᒣᒷリᒷ∷",
"spatial.audioSource": "ᖋ⚍↸╎ᒍ ϟᒍ⚍∷ᔮᒷ",
// Settings - Unfinished
"settings.header.unfinished": "⚍リ⎓╎リ╎ϟ⍑ᒷ↸",

View file

@ -1,19 +1,25 @@
{ // Base File
// i18n Info
"i18n.languageName": "English (US)", // name of language in native language
"i18n.languageNameEnglish": "English (US)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@maikirakiwi", // Authors, if you contribute to this file feel free to add your name seperated with a space
"i18n.authors": "@maikirakiwi @kyw504100", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cider",
"date.format": "${m} ${d}, ${y}",
// Dialogs
"dialog.cancel": "Cancel",
"dialog.ok": "OK",
// Notification
"notification.updatingLibrarySongs": "Updating library songs...",
"notification.updatingLibraryAlbums": "Updating library albums...",
"notification.updatingLibraryArtists": "Updating library artists...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
@ -122,7 +128,6 @@
"term.menu": "Menu",
"term.check": "Check",
"term.aboutArtist": "About {{artistName}}", // e.g. 'About Doja Cat'
"term.updateCider": "Update Cider",
"term.topResult": "Top Result", // Search Results
"term.sharedPlaylists": "Shared Playlists", // Search Results
"term.people": "People", // Search Results
@ -130,6 +135,8 @@
"term.addedpreset": "Added Preset",
"term.deletepreset.warn": "Are you sure you want to delete this preset?",
"term.deletedpreset": "Removed preset",
"term.requestError": "There was a problem with the request.",
"term.song.link.generate": "Getting song.link share URL...",
"term.musicVideos": "Music Videos", // Search page friendlyTypes
"term.stations": "Stations",
"term.curators": "Curators",
@ -138,6 +145,7 @@
"term.recordLabels": "Record Labels",
"term.videoExtras": "Video Extras",
"term.top": "Top",
// Home
"home.title": "Home",
"home.recentlyPlayed": "Recently Played",
@ -147,12 +155,14 @@
"home.madeForYou": "Made For You",
"home.friendsListeningTo": "Friends Listening To",
"home.followedArtists": "Followed Artists",
// Errors
"error.appleMusicSubRequired": "Apple Music requires a subscription.",
"error.connectionError": "There was a problem connecting to Apple Music.",
"error.noResults": "No Results.",
"error.noResults.description": "Try a new search.",
//Podcasts
// Podcasts
"podcast.followOnCider": "Follow On Cider",
"podcast.followedOnCider": "Following On Cider",
"podcast.subscribeOnItunes": "Subscribe On iTunes",
@ -161,6 +171,7 @@
"podcast.episodes": "Episodes",
"podcast.playEpisode": "Play Episode",
"podcast.website": "Podcast Website",
// Actions
"action.addToLibrary": "Add to Library",
"action.addToLibrary.success": "Added to Library",
@ -209,31 +220,42 @@
"action.copy": "Copy",
"action.newpreset": "New Preset...", // Equalizer Preset
"action.deletepreset": "Delete Preset",
// Settings - General
"settings.header.general": "General",
"settings.header.general.description": "Adjust the general settings for Cider.",
"settings.option.general.language": "Language",
// Language optgroups
"settings.option.general.language.main": "Languages",
"settings.option.general.language.fun": "Fun Languages",
"settings.option.general.language.unsorted": "Unsorted",
// Update Cider
"settings.option.general.updateCider": "Update Cider", // Button. Refer to term.check for the check button
"settings.option.general.updateCider.branch": "Cider Update Branch", // Dropdown
"settings.option.general.updateCider.branch.description": "Select the branch to update Cider to",
"settings.option.general.updateCider.branch.main": "Stable",
"settings.option.general.updateCider.branch.develop": "Development",
// Settings - Audio
"settings.header.audio": "Audio",
"settings.header.audio.description": "Adjust the audio settings for Cider.",
"settings.option.audio.quality": "Audio Quality", // Dropdown
"settings.header.audio.quality.hireslossless": "Hi-Res Lossless",
"settings.header.audio.quality.hireslossless.description": "(up to 24-bit/192 kHz)",
"settings.header.audio.quality.hireslossless.description": "up to 24-bit/192 kHz",
"settings.header.audio.quality.lossless": "Lossless",
"settings.header.audio.quality.lossless.description": "(up to 24-bit/48 kHz)",
"settings.header.audio.quality.enhanced": "Enhanced",
"settings.header.audio.quality.lossless.description": "up to 24-bit/48 kHz",
"settings.header.audio.quality.high": "High",
"settings.header.audio.quality.low": "Low",
"settings.header.audio.quality.auto": "Auto",
"settings.header.audio.quality.high.description": "256 kbps",
"settings.header.audio.quality.standard": "Standard",
"settings.header.audio.quality.standard.description": "64 kbps",
"settings.option.audio.seamlessTransition": "Seamless Audio Transition", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Enable Advanced Functionality", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "Enabling AudioContext functionality will allow for extended audio features like Audio Normalization , Equalizers and Visualizers, however on some systems this may cause stuttering in audio tracks.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes everything sound both richer and more lively. | Designed by Maikiwi",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes everything sound both richer and more lively | Designed by Maikiwi.",
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is not compatible with Spatialization. Please disable Spatialization to continue.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Strength", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the strength of the processing done to the audio. (Aggressive may yield undesirable results)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standard",
@ -242,6 +264,8 @@
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatialization", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialize audio and make audio more 3-dimensional (note: This is not Dolby Atmos)",
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Spatialization is not compatible with CAP. Please disable CAP to continue.",
// Settings - Visual
"settings.header.visual": "Visual",
"settings.header.visual.description": "Adjust the visual settings for Cider.",
@ -265,11 +289,14 @@
"settings.header.visual.hardwareAcceleration.default": "Default",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "Theme",
// Settings - Visual - Theme name
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Dark",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Show Personal Info", // Toggle
// Settings - Lyrics
"settings.header.lyrics": "Lyrics",
"settings.header.lyrics.description": "Adjust the lyrics settings for Cider.",
@ -277,6 +304,7 @@
"settings.option.lyrics.enableMusixmatchKaraoke": "Enable Karaoke Mode (Musixmatch only)", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch Translation Preferred Language", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "Enable Youtube Lyrics for Music Videos", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "Connectivity",
"settings.header.connectivity.description": "Adjust the connectivity settings for Cider.",
@ -292,6 +320,7 @@
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Remove featuring artists from song title (Last.fm)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filter looped track (Last.fm)",
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "Experimental",
"settings.header.experimental.description": "Adjust the experimental settings for Cider.",
@ -299,6 +328,7 @@
"settings.option.experimental.close_button_hide": "Close Button Should Hide the Application",
"settings.option.experimental.copy_log": "Copy logs to clipboard",
"settings.option.experimental.inline_playlists": "Inline Playlists and Albums",
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.",
@ -320,11 +350,14 @@
"spatial.down": "Down",
"spatial.listener": "Listener",
"spatial.audioSource": "Audio Source",
// Settings - Unfinished
"settings.header.unfinished": "Unfinished",
// Web Remote
"remote.web.title": "Cider Remote",
"remote.web.description": "Scan the QR code to pair your phone up with this Cider instance",
// About
"about.thanks": "Major thanks to the Cider Collective Team and all of our contributors."
}

View file

@ -1,312 +1,320 @@
{ // Base File
{
// i18n Info
"i18n.languageName": "Español (ES)", // name of language in native language
"i18n.languageNameEnglish": "Spanish (Spain)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@j.fl220", // Authors, if you contribute to this file feel free to add your name seperated with a space
// i18n Info
"i18n.languageName": "Español (ES)", // name of language in native language
"i18n.languageNameEnglish": "Spanish (Spain)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@j.fl220", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cider",
// App info
"app.name": "Cider",
"date.format": "${d} ${m}, ${y}",
"date.format": "${d} ${m}, ${y}",
// Dialogs
"dialog.cancel": "Cancelar",
"dialog.ok": "Aceptar",
// Dialogs
"dialog.cancel": "Cancelar",
"dialog.ok": "Aceptar",
// Notification
"notification.updatingLibrarySongs": "Actualizando canciones de la biblioteca...",
"notification.updatingLibraryAlbums": "Actualizando álbumes de la biblioteca...",
"notification.updatingLibraryArtists": "Actualizando biblioteca de artistas...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts",
"term.itunes": "iTunes",
"term.github": "GitHub",
"term.discord": "Discord",
"term.learnMore": "Leer más",
"term.accountSettings": "Ajustes de la cuenta",
"term.logout": "Cerrar sesión",
"term.login": "Iniciar sesión",
"term.about": "Más información",
"term.privateSession": "Sesión privada",
"term.queue": "En cola",
"term.search": "Buscar",
"term.library": "Biblioteca",
"term.listenNow": "Escuchar",
"term.browse": "Explorar",
"term.radio": "Radio",
"term.recentlyAdded": "Añadido recientemente",
"term.songs": "Canciones",
"term.albums": "Álbumes",
"term.artists": "Artistas",
"term.podcasts": "Podcasts",
"term.playlists": "Playlists",
"term.playlist": "Playlist",
"term.newPlaylist": "Nueva playlist",
"term.newPlaylistFolder": "Nueva carpeta de playlists",
"term.createNewPlaylist": "Crear nueva playlists",
"term.createNewPlaylistFolder": "Crear nueva carpeta de playlists",
"term.deletePlaylist": "¿Está seguro que desea eliminar esta playlist?",
"term.play": "Reproducir",
"term.pause": "Pausar",
"term.previous": "Anterior",
"term.next": "Siguiente",
"term.shuffle": "Aleatorio",
"term.repeat": "Repetir",
"term.volume": "Volumen",
"term.mute": "Silenciar",
"term.unmute": "Desilenciar",
"term.share": "Compartir",
"term.settings": "Ajustes",
"term.seeAll": "Ver todo",
"term.sortBy": "Ordenar por",
"term.sortBy.album": "Álbum",
"term.sortBy.artist": "Artista",
"term.sortBy.name": "Nombre",
"term.sortBy.genre": "Género",
"term.sortBy.releaseDate": "Fecha de lanzamiento",
"term.sortBy.duration": "Duración",
"term.sortOrder": "A-Z",
"term.sortOrder.ascending": "Ascendiente",
"term.sortOrder.descending": "Descendiente",
"term.viewAs": "Ver como",
"term.viewAs.coverArt": "Carátula",
"term.viewAs.list": "Lista",
"term.size": "Tamaño",
"term.size.normal": "Normal",
"term.size.compact": "Compacto",
"term.enable": "Habilitar",
"term.disable": "Deshabilitar",
"term.enabled": "Activado",
"term.disabled": "Desactivado",
"term.connect": "Conectar",
"term.connecting": "Conectando",
"term.disconnect": "Desconectado",
"term.authed": "Autentificado",
"term.confirm": "¿Confirmar?",
"term.more": "Más",
"term.less": "Menos",
"term.showMore": "Mostrar más",
"term.showLess": "Mostrar menos",
"term.topSongs" : "Top canciones",
"term.latestReleases": "Últimos lanzamientos",
"term.time.added": "Añadido",
"term.time.released": "Lanzado",
"term.time.updated": "Actualizado",
"term.time.hours": "horas",
"term.time.hour": "hora",
"term.time.minutes": "minutos",
"term.time.minute": "minuto",
"term.time.seconds": "segundos",
"term.time.second": "segundo",
"term.fullscreenView": "Pantalla completa",
"term.defaultView": "Vista por defecto",
"term.audioSettings": "Ajustes de audio",
"term.clearAll": "Borrar todo",
"term.recentStations": "Radios recientes",
"term.language": "Idioma",
"term.funLanguages": "Divertido",
"term.noLyrics": "Cargando... / Letra no encontrada./ Instrumental.",
"term.copyright": "Copyright",
"term.rightsReserved": "Todos los derechos reservados.",
"term.sponsor": "Apoya este proyecto",
"term.ciderTeam": "Equipo Cider",
"term.developer": "Desarrollador",
"term.socialTeam": "Equipo RRSS",
"term.socials": "Redes sociales",
"term.contributors": "Contribuidores",
"term.equalizer": "Equalizador",
"term.reset": "Resetear",
"term.tracks": "canciones", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "Vídeos",
"term.menu": "Menú",
"term.check": "Comprobar",
"term.aboutArtist": "Más sobre {{artistName}}", // e.g. 'About Doja Cat'
"term.updateCider": "Actualizar Cider",
// Notification
"notification.updatingLibrarySongs": "Actualizando canciones de la biblioteca...",
"notification.updatingLibraryAlbums": "Actualizando álbumes de la biblioteca...",
"notification.updatingLibraryArtists": "Actualizando biblioteca de artistas...",
// Home
"home.title": "Inicio",
"home.recentlyPlayed": "Reproducciones recientes",
"home.recentlyAdded": "Añadido recientemente",
"home.artistsFeed": "Historial de tus artistas",
"home.artistsFeed.noArtist": "Sigue primero a algunos artistas y sus últimos lanzamientos aparecerán aquí",
"home.madeForYou": "Hecho para ti",
"home.friendsListeningTo": "Tus amigos están escuchando",
"home.followedArtists": "Artistas que sigues",
// Errors
"error.appleMusicSubRequired": "Apple Music necesita una suscripción.",
"error.connectionError": "Ha habido un problema al conectar con Apple Music.",
"error.noResults": "Sin resultados",
"error.noResults.description": "Intenta otra búsqueda.",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts",
"term.itunes": "iTunes",
"term.github": "GitHub",
"term.discord": "Discord",
"term.learnMore": "Leer más",
"term.accountSettings": "Ajustes de la cuenta",
"term.logout": "Cerrar sesión",
"term.login": "Iniciar sesión",
"term.about": "Más información",
"term.privateSession": "Sesión privada",
"term.queue": "En cola",
"term.search": "Buscar",
"term.library": "Biblioteca",
"term.listenNow": "Escuchar",
"term.browse": "Explorar",
"term.radio": "Radio",
"term.recentlyAdded": "Añadido recientemente",
"term.songs": "Canciones",
"term.albums": "Álbumes",
"term.artists": "Artistas",
"term.podcasts": "Podcasts",
"term.playlists": "Playlists",
"term.playlist": "Playlist",
"term.newPlaylist": "Nueva playlist",
"term.newPlaylistFolder": "Nueva carpeta de playlists",
"term.createNewPlaylist": "Crear nueva playlists",
"term.createNewPlaylistFolder": "Crear nueva carpeta de playlists",
"term.deletePlaylist": "¿Está seguro que desea eliminar esta playlist?",
"term.play": "Reproducir",
"term.pause": "Pausar",
"term.previous": "Anterior",
"term.next": "Siguiente",
"term.shuffle": "Aleatorio",
"term.repeat": "Repetir",
"term.volume": "Volumen",
"term.mute": "Silenciar",
"term.unmute": "Desilenciar",
"term.share": "Compartir",
"term.settings": "Ajustes",
"term.seeAll": "Ver todo",
"term.sortBy": "Ordenar por",
"term.sortBy.album": "Álbum",
"term.sortBy.artist": "Artista",
"term.sortBy.name": "Nombre",
"term.sortBy.genre": "Género",
"term.sortBy.releaseDate": "Fecha de lanzamiento",
"term.sortBy.duration": "Duración",
"term.sortOrder": "A-Z",
"term.sortOrder.ascending": "Ascendiente",
"term.sortOrder.descending": "Descendiente",
"term.viewAs": "Ver como",
"term.viewAs.coverArt": "Carátula",
"term.viewAs.list": "Lista",
"term.size": "Tamaño",
"term.size.normal": "Normal",
"term.size.compact": "Compacto",
"term.enable": "Habilitar",
"term.disable": "Deshabilitar",
"term.enabled": "Activado",
"term.disabled": "Desactivado",
"term.connect": "Conectar",
"term.connecting": "Conectando",
"term.disconnect": "Desconectado",
"term.authed": "Autentificado",
"term.confirm": "¿Confirmar?",
"term.more": "Más",
"term.less": "Menos",
"term.showMore": "Mostrar más",
"term.showLess": "Mostrar menos",
"term.topSongs": "Top canciones",
"term.latestReleases": "Últimos lanzamientos",
"term.time.added": "Añadido",
"term.time.released": "Lanzado",
"term.time.updated": "Actualizado",
"term.time.hours": "horas",
"term.time.hour": "hora",
"term.time.minutes": "minutos",
"term.time.minute": "minuto",
"term.time.seconds": "segundos",
"term.time.second": "segundo",
"term.fullscreenView": "Pantalla completa",
"term.defaultView": "Vista por defecto",
"term.audioSettings": "Ajustes de audio",
"term.clearAll": "Borrar todo",
"term.recentStations": "Radios recientes",
"term.language": "Idioma",
"term.funLanguages": "Divertido",
"term.noLyrics": "Cargando... / Letra no encontrada./ Instrumental.",
"term.copyright": "Copyright",
"term.rightsReserved": "Todos los derechos reservados.",
"term.sponsor": "Apoya este proyecto",
"term.ciderTeam": "Equipo Cider",
"term.developer": "Desarrollador",
"term.socialTeam": "Equipo RRSS",
"term.socials": "Redes sociales",
"term.contributors": "Contribuidores",
"term.equalizer": "Equalizador",
"term.reset": "Resetear",
"term.tracks": "canciones", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "Vídeos",
"term.menu": "Menú",
"term.check": "Comprobar",
"term.aboutArtist": "Más sobre {{artistName}}", // e.g. 'About Doja Cat'
//Podcasts
"podcast.followOnCider": "Seguir en Cider",
"podcast.followedOnCider": "Siguiendo en Cider",
"podcast.subscribeOnItunes": "Suscribirse en iTunes",
"podcast.subscribedOnItunes": "Suscrito en iTunes",
"podcast.itunesStore": "Tienda de iTunes",
"podcast.episodes": "Episodios",
"podcast.playEpisode": "Iniciar Episodio",
"podcast.website": "Pagina del podcast",
// Home
"home.title": "Inicio",
"home.recentlyPlayed": "Reproducciones recientes",
"home.recentlyAdded": "Añadido recientemente",
"home.artistsFeed": "Historial de tus artistas",
"home.artistsFeed.noArtist": "Sigue primero a algunos artistas y sus últimos lanzamientos aparecerán aquí",
"home.madeForYou": "Hecho para ti",
"home.friendsListeningTo": "Tus amigos están escuchando",
"home.followedArtists": "Artistas que sigues",
// Actions
"action.addToLibrary": "Añadir a la biblioteca",
"action.addToLibrary.success": "Añadido a la biblioteca",
"action.addToLibrary.error": "Error al añadir a la biblioteca",
"action.removeFromLibrary": "Eliminar de la biblioteca",
"action.removeFromLibrary.success": "Eliminado de la biblioteca",
"action.addToQueue": "Añadir a la cola",
"action.addToQueue.success": "Añadido a la cola",
"action.addToQueue.error": "Error al añadirlo a la cola",
"action.removeFromQueue": "Elimiar de la cola",
"action.removeFromQueue.success": "Eliminado de la cola",
"action.removeFromQueue.error": "Error al eliminarlo de la cola",
"action.createPlaylist": "Crear nueva playlist",
"action.addToPlaylist": "Añadir a la playlist",
"action.removeFromPlaylist": "Eliminar de la playlist",
"action.addToFavorites": "Añadir a favoritos",
"action.follow": "Seguir",
"action.follow.success": "Siguiendo",
"action.follow.error": "Error al seguir",
"action.unfollow": "Dejar de seguir",
"action.unfollow.success": "Has dejado de seguirle",
"action.unfollow.error": "Error al dejar de seguir",
"action.playNext": "Reproducir a continuación",
"action.playLater": "Reproducir al final",
"action.startRadio": "Crear emisora",
"action.goToArtist": "Ir al artista",
"action.goToAlbum": "Mostrar álbum",
"action.moveToTop": "Mover a arriba",
"action.share": "Compartir",
"action.rename": "Renombrar",
"action.love": "Me gusta",
"action.unlove": "Eliminar me gusta",
"action.dislike": "Sugerir menos este estilo",
"action.undoDislike": "Sugerir este estilo",
"action.showWebRemoteQR": "Conexión remota",
"action.playTracksNext": "Reproducir ${app.selectedMediaItems.length} siguiente canción",
"action.playTracksLater": "Reproducir ${app.selectedMediaItems.length} como última canción",
"action.removeTracks": "Eliminar ${self.selectedItems.length} canciones de la cola",
"action.import": "Importar",
"action.export": "Exportar",
"action.showAlbum": "Mostrar álbum completo",
"action.tray.minimize": "Mover a la bandeja",
"action.tray.quit": "Salir",
"action.tray.show": "Abrir",
"action.update": "Actualizar",
// Errors
"error.appleMusicSubRequired": "Apple Music necesita una suscripción.",
"error.connectionError": "Ha habido un problema al conectar con Apple Music.",
"error.noResults": "Sin resultados",
"error.noResults.description": "Intenta otra búsqueda.",
// Settings - General
"settings.header.general": "General",
"settings.header.general.description": "Ajustes generales de Cider.",
"settings.option.general.language": "Idioma",
// Podcasts
"podcast.followOnCider": "Seguir en Cider",
"podcast.followedOnCider": "Siguiendo en Cider",
"podcast.subscribeOnItunes": "Suscribirse en iTunes",
"podcast.subscribedOnItunes": "Suscrito en iTunes",
"podcast.itunesStore": "Tienda de iTunes",
"podcast.episodes": "Episodios",
"podcast.playEpisode": "Iniciar Episodio",
"podcast.website": "Pagina del podcast",
// Language optgroups
"settings.option.general.language.main": "Idiomas",
"settings.option.general.language.fun": "Idiomas divertidos",
"settings.option.general.language.unsorted": "Sin clasificar",
// Actions
"action.addToLibrary": "Añadir a la biblioteca",
"action.addToLibrary.success": "Añadido a la biblioteca",
"action.addToLibrary.error": "Error al añadir a la biblioteca",
"action.removeFromLibrary": "Eliminar de la biblioteca",
"action.removeFromLibrary.success": "Eliminado de la biblioteca",
"action.addToQueue": "Añadir a la cola",
"action.addToQueue.success": "Añadido a la cola",
"action.addToQueue.error": "Error al añadirlo a la cola",
"action.removeFromQueue": "Elimiar de la cola",
"action.removeFromQueue.success": "Eliminado de la cola",
"action.removeFromQueue.error": "Error al eliminarlo de la cola",
"action.createPlaylist": "Crear nueva playlist",
"action.addToPlaylist": "Añadir a la playlist",
"action.removeFromPlaylist": "Eliminar de la playlist",
"action.addToFavorites": "Añadir a favoritos",
"action.follow": "Seguir",
"action.follow.success": "Siguiendo",
"action.follow.error": "Error al seguir",
"action.unfollow": "Dejar de seguir",
"action.unfollow.success": "Has dejado de seguirle",
"action.unfollow.error": "Error al dejar de seguir",
"action.playNext": "Reproducir a continuación",
"action.playLater": "Reproducir al final",
"action.startRadio": "Crear emisora",
"action.goToArtist": "Ir al artista",
"action.goToAlbum": "Mostrar álbum",
"action.moveToTop": "Mover a arriba",
"action.share": "Compartir",
"action.rename": "Renombrar",
"action.love": "Me gusta",
"action.unlove": "Eliminar me gusta",
"action.dislike": "Sugerir menos este estilo",
"action.undoDislike": "Sugerir este estilo",
"action.showWebRemoteQR": "Conexión remota",
"action.playTracksNext": "Reproducir ${app.selectedMediaItems.length} siguiente canción",
"action.playTracksLater": "Reproducir ${app.selectedMediaItems.length} como última canción",
"action.removeTracks": "Eliminar ${self.selectedItems.length} canciones de la cola",
"action.import": "Importar",
"action.export": "Exportar",
"action.showAlbum": "Mostrar álbum completo",
"action.tray.minimize": "Mover a la bandeja",
"action.tray.quit": "Salir",
"action.tray.show": "Abrir",
"action.update": "Actualizar",
// Settings - Audio
"settings.header.audio": "Audio",
"settings.header.audio.description": "Ajustes del audio de Cider.",
"settings.option.audio.quality": "Calidad de audio", // Dropdown
"settings.header.audio.quality.high": "Alto",
"settings.header.audio.quality.low": "Bajo",
"settings.header.audio.quality.auto": "Auto",
"settings.option.audio.seamlessTransition": "Transición de audio perfecta", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Activar funciones avanzadas", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "Habilitar la funcionalidad de AudioContext permitirá funciones de audio extendidas como Normalización de audio, Ecualizadores y Visualizadores; sin embargo, en algunos sistemas esto puede causar interrupciones en las canciones.",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalizar volumen", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normaliza los picos altos de canciones para hacer la experiencia de escucha mejor.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Espacialización del audio", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Espacializa más el audio y conviértelo más 3-dimensional (nota: Esto no es Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Visual",
"settings.header.visual.description": "Ajustes visuales para Cider.",
"settings.option.visual.windowBackgroundStyle": "Estilo del fondo de la ventana", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "Nada",
"settings.header.visual.windowBackgroundStyle.artwork": "Carátula",
"settings.header.visual.windowBackgroundStyle.image": "Imagen",
"settings.option.visual.animatedArtwork": "Carátula animada", // Dropdown
"settings.header.visual.animatedArtwork.always": "Habilitar siempre",
"settings.header.visual.animatedArtwork.limited": "Limitado a algunas páginas",
"settings.header.visual.animatedArtwork.disable": "Deshabilitar en todas partes",
"settings.option.visual.animatedArtworkQuality": "Calidad de la carátula animada", // Dropdown
"settings.header.visual.animatedArtworkQuality.low": "Bajo",
"settings.header.visual.animatedArtworkQuality.medium": "Medio",
"settings.header.visual.animatedArtworkQuality.high": "Alto",
"settings.header.visual.animatedArtworkQuality.veryHigh": "Muy alto",
"settings.header.visual.animatedArtworkQuality.extreme": "Extrema",
"settings.option.visual.animatedWindowBackground": "Fondo de la ventana animado", // Toggle
"settings.option.visual.hardwareAcceleration": "Aceleración del hardware", // Dropdown
"settings.option.visual.hardwareAcceleration.description": "La app requiere reinicio",
"settings.header.visual.hardwareAcceleration.default": "Por defecto",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Mostrar información personal", // Toggle
// Settings - General
"settings.header.general": "General",
"settings.header.general.description": "Ajustes generales de Cider.",
"settings.option.general.language": "Idioma",
// Settings - Lyrics
"settings.header.lyrics": "Letras",
"settings.header.lyrics.description": "Ajuste las letras para Cider",
"settings.option.lyrics.enableMusixmatch": "Habilitar las letras de Musixmatch", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "Habilita el modo Karaoke (solo con Musixmatch)", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Idioma de traducción por defecto en Musixmatch", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "Habilitar las letras de Youtube para los videos con música", // Toggle
// Language optgroups
"settings.option.general.language.main": "Idiomas",
"settings.option.general.language.fun": "Idiomas divertidos",
"settings.option.general.language.unsorted": "Sin clasificar",
// Settings - Connectivity
"settings.header.connectivity": "Conectividad",
"settings.header.connectivity.description": "Ajusta la conectividad para Cider.",
"settings.option.connectivity.discordRPC": "Discord Rich Presence", // Dropdown
"settings.option.connectivity.playbackNotifications": "Notificaciones de reproducción", // Toggle
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "Mostrar como 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "Mostrar como 'Apple Music'",
"settings.option.connectivity.discordRPC.clearOnPause": "Quitar Discord Rich Presence en pausa", // Toggle
"settings.option.connectivity.lastfmScrobble": "Scrobbling Last.fm", // Option to Connect
"settings.option.connectivity.lastfmScrobble.delay": "Delay del Scrobbling en Last.fm (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Habilitar 'Escuchando ahora' en Last.fm",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Eliminar artistas destacados del título de la canción (Last.fm)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filtrar pista en bucle (Last.fm)",
// Refer to term.connect for the connect button
// Update Cider
"settings.option.general.updateCider": "Actualizar Cider", // Button
// Settings - Experimental
"settings.header.experimental": "En pruebas",
"settings.header.experimental.description": "Ajustes en pruebas para Cider.",
"settings.option.experimental.compactUI": "Interfaz de usuario compacto", // Toggle
"settings.option.experimental.close_button_hide": "El botón de cerrar minimizará la aplicación en la bandeja",
// Refer to term.disabled & term.enabled
// Settings - Audio
"settings.header.audio": "Audio",
"settings.header.audio.description": "Ajustes del audio de Cider.",
"settings.option.audio.quality": "Calidad de audio", // Dropdown
"settings.header.audio.quality.high": "Alto",
"settings.header.audio.quality.low": "Bajo",
"settings.header.audio.quality.auto": "Auto",
"settings.option.audio.seamlessTransition": "Transición de audio perfecta", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Activar funciones avanzadas", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "Habilitar la funcionalidad de AudioContext permitirá funciones de audio extendidas como Normalización de audio, Ecualizadores y Visualizadores; sin embargo, en algunos sistemas esto puede causar interrupciones en las canciones.",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalizar volumen", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normaliza los picos altos de canciones para hacer la experiencia de escucha mejor.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Espacialización del audio", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Espacializa más el audio y conviértelo más 3-dimensional (nota: Esto no es Dolby Atmos)",
// Spatialization Menu
"spatial.notTurnedOn": "La espacialización del audio esta desactivada. Para usarlo primero actívelo.",
"spatial.spatialProperties": "Propiedades espaciales",
"spatial.width": "Ancho",
"spatial.height": "Altura",
"spatial.depth": "Profundidad",
"spatial.gain": "Ganancia",
"spatial.roomMaterials": "Material de la habitación",
"spatial.roomDimensions": "Dimensión de la habitación",
"spatial.roomPositions": "Posiciones de la habitación",
"spatial.setDimensions": "Establecer dimensiones",
"spatial.setPositions": "Establecer posiciones",
"spatial.up": "Arriba",
"spatial.front": "Delante",
"spatial.left": "Izquierda",
"spatial.right": "Derecha",
"spatial.back": "Atrás",
"spatial.down": "Abajo",
"spatial.listener": "Oyente",
"spatial.audioSource": "Salida del audio",
// Settings - Visual
"settings.header.visual": "Visual",
"settings.header.visual.description": "Ajustes visuales para Cider.",
"settings.option.visual.windowBackgroundStyle": "Estilo del fondo de la ventana", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "Nada",
"settings.header.visual.windowBackgroundStyle.artwork": "Carátula",
"settings.header.visual.windowBackgroundStyle.image": "Imagen",
"settings.option.visual.animatedArtwork": "Carátula animada", // Dropdown
"settings.header.visual.animatedArtwork.always": "Habilitar siempre",
"settings.header.visual.animatedArtwork.limited": "Limitado a algunas páginas",
"settings.header.visual.animatedArtwork.disable": "Deshabilitar en todas partes",
"settings.option.visual.animatedArtworkQuality": "Calidad de la carátula animada", // Dropdown
"settings.header.visual.animatedArtworkQuality.low": "Bajo",
"settings.header.visual.animatedArtworkQuality.medium": "Medio",
"settings.header.visual.animatedArtworkQuality.high": "Alto",
"settings.header.visual.animatedArtworkQuality.veryHigh": "Muy alto",
"settings.header.visual.animatedArtworkQuality.extreme": "Extrema",
"settings.option.visual.animatedWindowBackground": "Fondo de la ventana animado", // Toggle
"settings.option.visual.hardwareAcceleration": "Aceleración del hardware", // Dropdown
"settings.option.visual.hardwareAcceleration.description": "La app requiere reinicio",
"settings.header.visual.hardwareAcceleration.default": "Por defecto",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Settings - Unfinished
"settings.header.unfinished": "Sin acabar",
"settings.header.unfinished.description": "Ajustes siendo testeados, no están acabados.",
// Settings - Visual - Theme name
// Web Remote
"remote.web.title": "Cider Remoto",
"remote.web.description": "Escanee el código QR para emparejar su teléfono con su cliente de Cider",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Mostrar información personal", // Toggle
// About
"about.thanks": "Muchísimas gracias al equipo de Cider Collective y también a todos nuestros contribuidores."
}
// Settings - Lyrics
"settings.header.lyrics": "Letras",
"settings.header.lyrics.description": "Ajuste las letras para Cider",
"settings.option.lyrics.enableMusixmatch": "Habilitar las letras de Musixmatch", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "Habilita el modo Karaoke (solo con Musixmatch)", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Idioma de traducción por defecto en Musixmatch", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "Habilitar las letras de Youtube para los videos con música", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "Conectividad",
"settings.header.connectivity.description": "Ajusta la conectividad para Cider.",
"settings.option.connectivity.discordRPC": "Discord Rich Presence", // Dropdown
"settings.option.connectivity.playbackNotifications": "Notificaciones de reproducción", // Toggle
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "Mostrar como 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "Mostrar como 'Apple Music'",
"settings.option.connectivity.discordRPC.clearOnPause": "Quitar Discord Rich Presence en pausa", // Toggle
"settings.option.connectivity.lastfmScrobble": "Scrobbling Last.fm", // Option to Connect
"settings.option.connectivity.lastfmScrobble.delay": "Delay del Scrobbling en Last.fm (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Habilitar 'Escuchando ahora' en Last.fm",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Eliminar artistas destacados del título de la canción (Last.fm)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filtrar pista en bucle (Last.fm)",
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "En pruebas",
"settings.header.experimental.description": "Ajustes en pruebas para Cider.",
"settings.option.experimental.compactUI": "Interfaz de usuario compacto", // Toggle
"settings.option.experimental.close_button_hide": "El botón de cerrar minimizará la aplicación en la bandeja",
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "La espacialización del audio esta desactivada. Para usarlo primero actívelo.",
"spatial.spatialProperties": "Propiedades espaciales",
"spatial.width": "Ancho",
"spatial.height": "Altura",
"spatial.depth": "Profundidad",
"spatial.gain": "Ganancia",
"spatial.roomMaterials": "Material de la habitación",
"spatial.roomDimensions": "Dimensión de la habitación",
"spatial.roomPositions": "Posiciones de la habitación",
"spatial.setDimensions": "Establecer dimensiones",
"spatial.setPositions": "Establecer posiciones",
"spatial.up": "Arriba",
"spatial.front": "Delante",
"spatial.left": "Izquierda",
"spatial.right": "Derecha",
"spatial.back": "Atrás",
"spatial.down": "Abajo",
"spatial.listener": "Oyente",
"spatial.audioSource": "Salida del audio",
// Settings - Unfinished
"settings.header.unfinished": "Sin acabar",
"settings.header.unfinished.description": "Ajustes siendo testeados, no están acabados.",
// Web Remote
"remote.web.title": "Cider Remoto",
"remote.web.description": "Escanee el código QR para emparejar su teléfono con su cliente de Cider",
// About
"about.thanks": "Muchísimas gracias al equipo de Cider Collective y también a todos nuestros contribuidores."
}

View file

@ -1,7 +1,7 @@
{ // Base File
{
// i18n Info
"i18n.languageName": "Français (CA)", // name of language in native language
"i18n.languageName": "Français (CA)", // name of language in native language
"i18n.languageNameEnglish": "French (CA)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "brock#7527", // Authors, if you contribute to this file feel free to add your name seperated with a space
@ -19,6 +19,7 @@
"notification.updatingLibrarySongs": "Rafraîchir des chansons...",
"notification.updatingLibraryAlbums": "Rafraîchir des albums...",
"notification.updatingLibraryArtists": "Rafraîchir des artistes...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
@ -128,13 +129,14 @@
"home.madeForYou": "Creér pour toi",
"home.friendsListeningTo": "Amis écoutant",
"home.followedArtists": "Artistes suivis",
// Errors
"error.appleMusicSubRequired": "Apple Music nécessite un abonnement.",
"error.connectionError": "Un problème est survenu lors de la connexion à Apple Music.",
"error.noResults": "Pas de resultats.",
"error.noResults.description": "Essayez une nouvelle recherche.",
//Podcasts
// Podcasts
"podcast.followOnCider": "Suivez sur Cider",
"podcast.followedOnCider": "Suivi sur Cider",
"podcast.subscribeOnItunes": "S'abonner sur iTunes",
@ -194,6 +196,8 @@
"settings.option.general.language.fun": "Langues amusantes",
"settings.option.general.language.unsorted": "Non trié",
// Update Cider
// Settings - Audio
"settings.header.audio": "Audio",
"settings.header.audio.description": "Réglez les réglages audio de Cider.",
@ -208,6 +212,7 @@
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalise le volume maximal des pistes individuelles pour créer une expérience d'écoute plus uniforme.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatialization", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialisez l'audio et rendez l'audio plus tridimensionnel (remarque: il ne s'agit pas de Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Visuel",
"settings.header.visual.description": "Ajustez les réglages visuels de Cider.",
@ -230,6 +235,9 @@
"settings.option.visual.hardwareAcceleration.description": "Nécessite une relance",
"settings.header.visual.hardwareAcceleration.default": "Défaut",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Settings - Visual - Theme name
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Afficher les informations personnelles", // Toggle
@ -265,8 +273,8 @@
"settings.option.experimental.closeButtonBehaviour.quit": "Quitter Cider",
"settings.option.experimental.closeButtonBehaviour.minimizeTaskbar": "Réduire à la barre des tâches",
"settings.option.experimental.closeButtonBehaviour.minimizeTray": "Réduire dans le bac",
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.spatialProperties" : "Propriétés spatiales",
"spatial.width" : "Largeur",

View file

@ -1,347 +1,351 @@
{ // Base File
{
// i18n Info
"i18n.languageName": "Français", // name of language in native language
"i18n.languageNameEnglish": "French", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@ErwanGit", // Authors, if you contribute to this file feel free to add your name seperated with a space
// i18n Info
"i18n.languageName": "Français", // name of language in native language
"i18n.languageNameEnglish": "French", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@ErwanGit", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cider",
// App info
"app.name": "Cider",
"date.format": "${d} ${m} ${y}",
"date.format": "${d} ${m} ${y}",
// Dialogs
"dialog.cancel": "Annuler",
"dialog.ok": "OK",
// Dialogs
"dialog.cancel": "Annuler",
"dialog.ok": "OK",
// Notification
"notification.updatingLibrarySongs": "Mise à jour des chansons de la bibliothèque...",
"notification.updatingLibraryAlbums": "Mise à jour des albums de la bibliothèque...",
"notification.updatingLibraryArtists": "Mise à jour des artistes de la bibliothèque...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts",
"term.itunes": "iTunes",
"term.github": "GitHub",
"term.discord": "Discord",
"term.learnMore": "En savoir plus",
"term.accountSettings": "Paramètres du compte",
"term.logout": "Déconnexion",
"term.login": "Connexion",
"term.about": "À propos",
"term.privateSession": "Session privée",
"term.queue": "File d'attente",
"term.history": "Historique",
"term.search": "Recherche",
"term.library": "Bibliothèque",
"term.listenNow": "Écoutez maintenant",
"term.browse": "Explorer",
"term.radio": "Radio",
"term.recentlyAdded": "Ajouté récemment",
"term.songs": "Musiques",
"term.albums": "Albums",
"term.artists": "Artistes",
"term.podcasts": "Podcasts",
"term.playlists": "Playlists",
"term.playlist": "Playlist",
"term.newPlaylist": "Nouvelle Playlist",
"term.newPlaylistFolder": "Nouveau dossier de playlist",
"term.createNewPlaylist": "Créer une nouvelle playlist",
"term.createNewPlaylistFolder": "Create New Playlist Folder",
"term.deletePlaylist": "Êtes-vous sûr de vouloir supprimer cette playlist ?",
"term.play": "Lecture",
"term.pause": "Pause",
"term.previous": "Précédent",
"term.next": "Suivant",
"term.shuffle": "Aléatoire",
"term.repeat": "Répéter",
"term.volume": "Volume",
"term.mute": "Rendre muet",
"term.unmute": "Ne plus rendre muet",
"term.share": "Partager",
"term.settings": "Paramètres",
"term.share.success": "Copié dans le presse-papier",
"term.seeAll": "Voir tout",
"term.sortBy": "Trier par",
"term.sortBy.album": "Album",
"term.sortBy.artist": "Artiste",
"term.sortBy.name": "Nom",
"term.sortBy.genre": "Genre",
"term.sortBy.releaseDate": "Date de sortie",
"term.sortBy.duration": "Durée",
"term.sortOrder": "A-Z",
"term.sortOrder.ascending": "Ascendant",
"term.sortOrder.descending": "Descendant",
"term.viewAs": "Voir comme",
"term.viewAs.coverArt": "Pochette d'album",
"term.viewAs.list": "Liste",
"term.size": "Taille",
"term.size.normal": "Normal",
"term.size.compact": "Compacte",
"term.enable": "Activer",
"term.disable": "Désactiver",
"term.enabled": "Activé",
"term.disabled": "Désactivé",
"term.connect": "Connecter",
"term.connecting": "Connexion",
"term.disconnect": "Déconnexion",
"term.authed": "Authentifié",
"term.confirm": "Confirmer ?",
"term.more": "Plus",
"term.less": "Moins",
"term.showMore": "Afficher plus",
"term.showLess": "Afficher moins",
"term.topSongs" : "Meilleurs titres",
"term.latestReleases": "Dernières sorties",
"term.time.added": "Ajouté",
"term.time.released": "Publié",
"term.time.updated": "Mis à jour",
"term.time.hours": "heures",
"term.time.hour": "heure",
"term.time.minutes": "minutes",
"term.time.minute": "minute",
"term.time.seconds": "secondes",
"term.time.second": "seconde",
"term.fullscreenView": "Vue plein écran",
"term.defaultView": "Vue par défaut",
"term.spacializedAudioSetting": "Paramètres audio spatialisés",
"term.clearAll": "Tout effacer",
"term.recentStations": "Stations récentes",
"term.language": "Langue",
"term.funLanguages": "Amusant",
"term.noLyrics": "Chargement... / Paroles non trouvé./ Instrumental.",
"term.copyright": "Copyright",
"term.rightsReserved": "Tous droits réservés.",
"term.sponsor": "Soutenez ce projet",
"term.ciderTeam": "Équipe Cider",
"term.developer": "Développeur",
"term.socialTeam": "Équipe de communication",
"term.socials": "Réseaux sociaux",
"term.contributors": "Contributeurs",
"term.equalizer": "Égaliseur",
"term.reset": "Réinitialiser",
"term.tracks": "musiques", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "Vidéos",
"term.menu": "Menu",
"term.check": "Vérifier",
"term.aboutArtist": "À propos de {{artistName}}", // e.g. 'About Doja Cat'
"term.updateCider": "Mettre à jour Cider",
"term.topResult": "Meilleurs résultats", // Search Results
"term.sharedPlaylists": "Playlists partagées", // Search Results
"term.people": "Personnes", // Search Results
"term.newpreset.name": "Nouveau nom du préréglage de l'égaliseur", // Equalizer Preset
"term.addedpreset": "Ajout d'un préréglage",
"term.deletepreset.warn": "Êtes-vous sûr de vouloir supprimer ce préréglage ?",
"term.deletedpreset": "Suppression d'un préréglage",
"term.musicVideos": "Vidéos musicales", // Search page friendlyTypes
"term.stations": "Stations",
"term.curators": "Curateurs",
"term.appleCurators": "Curateurs Apple",
"term.radioShows": "Émissions de radio",
"term.recordLabels": "Labels de disques",
"term.videoExtras": "Vidéos bonus",
"term.top": "Top",
// Notification
"notification.updatingLibrarySongs": "Mise à jour des chansons de la bibliothèque...",
"notification.updatingLibraryAlbums": "Mise à jour des albums de la bibliothèque...",
"notification.updatingLibraryArtists": "Mise à jour des artistes de la bibliothèque...",
// Home
"home.title": "Accueil",
"home.recentlyPlayed": "Joué récemment",
"home.recentlyAdded": "Récemment ajouté",
"home.artistsFeed": "Votre file d'artistes",
"home.artistsFeed.noArtist": "Suivez d'abord certains artistes et leurs dernières sorties seront ici",
"home.madeForYou": "Fait pour vous",
"home.friendsListeningTo": "Vos amis écoutent",
"home.followedArtists": "Artistes suivis",
// Errors
"error.appleMusicSubRequired": "Apple Music nécessite un abonnement.",
"error.connectionError": "Il y a eu un problème de connexion à Apple Music.",
"error.noResults": "Aucun résultat.",
"error.noResults.description": "Essayez une nouvelle recherche.",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts",
"term.itunes": "iTunes",
"term.github": "GitHub",
"term.discord": "Discord",
"term.learnMore": "En savoir plus",
"term.accountSettings": "Paramètres du compte",
"term.logout": "Déconnexion",
"term.login": "Connexion",
"term.about": "À propos",
"term.privateSession": "Session privée",
"term.queue": "File d'attente",
"term.history": "Historique",
"term.search": "Recherche",
"term.library": "Bibliothèque",
"term.listenNow": "Écoutez maintenant",
"term.browse": "Explorer",
"term.radio": "Radio",
"term.recentlyAdded": "Ajouté récemment",
"term.songs": "Musiques",
"term.albums": "Albums",
"term.artists": "Artistes",
"term.podcasts": "Podcasts",
"term.playlists": "Playlists",
"term.playlist": "Playlist",
"term.newPlaylist": "Nouvelle Playlist",
"term.newPlaylistFolder": "Nouveau dossier de playlist",
"term.createNewPlaylist": "Créer une nouvelle playlist",
"term.createNewPlaylistFolder": "Create New Playlist Folder",
"term.deletePlaylist": "Êtes-vous sûr de vouloir supprimer cette playlist ?",
"term.play": "Lecture",
"term.pause": "Pause",
"term.previous": "Précédent",
"term.next": "Suivant",
"term.shuffle": "Aléatoire",
"term.repeat": "Répéter",
"term.volume": "Volume",
"term.mute": "Rendre muet",
"term.unmute": "Ne plus rendre muet",
"term.share": "Partager",
"term.settings": "Paramètres",
"term.share.success": "Copié dans le presse-papier",
"term.seeAll": "Voir tout",
"term.sortBy": "Trier par",
"term.sortBy.album": "Album",
"term.sortBy.artist": "Artiste",
"term.sortBy.name": "Nom",
"term.sortBy.genre": "Genre",
"term.sortBy.releaseDate": "Date de sortie",
"term.sortBy.duration": "Durée",
"term.sortOrder": "A-Z",
"term.sortOrder.ascending": "Ascendant",
"term.sortOrder.descending": "Descendant",
"term.viewAs": "Voir comme",
"term.viewAs.coverArt": "Pochette d'album",
"term.viewAs.list": "Liste",
"term.size": "Taille",
"term.size.normal": "Normal",
"term.size.compact": "Compacte",
"term.enable": "Activer",
"term.disable": "Désactiver",
"term.enabled": "Activé",
"term.disabled": "Désactivé",
"term.connect": "Connecter",
"term.connecting": "Connexion",
"term.disconnect": "Déconnexion",
"term.authed": "Authentifié",
"term.confirm": "Confirmer ?",
"term.more": "Plus",
"term.less": "Moins",
"term.showMore": "Afficher plus",
"term.showLess": "Afficher moins",
"term.topSongs": "Meilleurs titres",
"term.latestReleases": "Dernières sorties",
"term.time.added": "Ajouté",
"term.time.released": "Publié",
"term.time.updated": "Mis à jour",
"term.time.hours": "heures",
"term.time.hour": "heure",
"term.time.minutes": "minutes",
"term.time.minute": "minute",
"term.time.seconds": "secondes",
"term.time.second": "seconde",
"term.fullscreenView": "Vue plein écran",
"term.defaultView": "Vue par défaut",
"term.spacializedAudioSetting": "Paramètres audio spatialisés",
"term.clearAll": "Tout effacer",
"term.recentStations": "Stations récentes",
"term.language": "Langue",
"term.funLanguages": "Amusant",
"term.noLyrics": "Chargement... / Paroles non trouvé./ Instrumental.",
"term.copyright": "Copyright",
"term.rightsReserved": "Tous droits réservés.",
"term.sponsor": "Soutenez ce projet",
"term.ciderTeam": "Équipe Cider",
"term.developer": "Développeur",
"term.socialTeam": "Équipe de communication",
"term.socials": "Réseaux sociaux",
"term.contributors": "Contributeurs",
"term.equalizer": "Égaliseur",
"term.reset": "Réinitialiser",
"term.tracks": "musiques", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "Vidéos",
"term.menu": "Menu",
"term.check": "Vérifier",
"term.aboutArtist": "À propos de {{artistName}}", // e.g. 'About Doja Cat'
"term.topResult": "Meilleurs résultats", // Search Results
"term.sharedPlaylists": "Playlists partagées", // Search Results
"term.people": "Personnes", // Search Results
"term.newpreset.name": "Nouveau nom du préréglage de l'égaliseur", // Equalizer Preset
"term.addedpreset": "Ajout d'un préréglage",
"term.deletepreset.warn": "Êtes-vous sûr de vouloir supprimer ce préréglage ?",
"term.deletedpreset": "Suppression d'un préréglage",
"term.musicVideos": "Vidéos musicales", // Search page friendlyTypes
"term.stations": "Stations",
"term.curators": "Curateurs",
"term.appleCurators": "Curateurs Apple",
"term.radioShows": "Émissions de radio",
"term.recordLabels": "Labels de disques",
"term.videoExtras": "Vidéos bonus",
"term.top": "Top",
//Podcasts
"podcast.followOnCider": "Suivre sur Cider",
"podcast.followedOnCider": "Suivi sur Cider",
"podcast.subscribeOnItunes": "Suivre sur iTunes",
"podcast.subscribedOnItunes": "Suivi sur iTunes",
"podcast.itunesStore": "iTunes Store",
"podcast.episodes": "Épisodes",
"podcast.playEpisode": "Lire l'épisode",
"podcast.website": "Site du podcast",
// Home
"home.title": "Accueil",
"home.recentlyPlayed": "Joué récemment",
"home.recentlyAdded": "Récemment ajouté",
"home.artistsFeed": "Votre file d'artistes",
"home.artistsFeed.noArtist": "Suivez d'abord certains artistes et leurs dernières sorties seront ici",
"home.madeForYou": "Fait pour vous",
"home.friendsListeningTo": "Vos amis écoutent",
"home.followedArtists": "Artistes suivis",
// Actions
"action.addToLibrary": "Ajouter à la bibliothèque",
"action.addToLibrary.success": "Ajouté à la bibliothèque",
"action.addToLibrary.error": "Erreur lors de l'ajout à la bibliothèque",
"action.removeFromLibrary": "Retirer de la bibliothèque",
"action.removeFromLibrary.success": "Retiré de la bibliothèque",
"action.addToQueue": "Ajouter à la file d'attente",
"action.addToQueue.success": "Ajouté à la file d'attente",
"action.addToQueue.error": "Erreur lors de l'ajout à la file d'attente",
"action.removeFromQueue": "Retirer de la file d'attente",
"action.removeFromQueue.success": "Retiré de la file d'attente",
"action.removeFromQueue.error": "Erreur lors du retrait de la file d'attente",
"action.createPlaylist": "Créer une nouvelle playlist",
"action.addToPlaylist": "Ajouter à une playlist",
"action.removeFromPlaylist": "Retirer de la playlist",
"action.addToFavorites": "Ajouter aux favoris",
"action.follow": "Suivre",
"action.follow.success": "Suivi",
"action.follow.error": "Erreur lors de l'abonnement",
"action.unfollow": "Se désabonner",
"action.unfollow.success": "Désabonné",
"action.unfollow.error": "Erreur lors du désabonnement",
"action.playNext": "Jouer après",
"action.playLater": "Jouer plus tard",
"action.startRadio": "Lancer la radio",
"action.goToArtist": "Aller à l'artiste",
"action.goToAlbum": "Aller à l'album",
"action.moveToTop": "Haut de page",
"action.share": "Partager",
"action.rename": "Renommer",
"action.love": "Aimer",
"action.unlove": "Ne plus aimer",
"action.dislike": "Je n'aime pas",
"action.undoDislike": "Je n'aime plus",
"action.showWebRemoteQR": "Afficher le QR Code de la télécommande à distance",
"action.playTracksNext": "Jouer ${app.selectedMediaItems.length} musiques après",
"action.playTracksLater": "Jouer ${app.selectedMediaItems.length} musiques plus tard",
"action.removeTracks": "Retirer ${self.selectedItems.length} musiques de la file d'attente",
"action.import": "Importer",
"action.export": "Exporter",
"action.showAlbum": "Afficher l'album complet",
"action.tray.minimize": "Réduire dans la barre d'outils",
"action.tray.quit": "Quitter",
"action.tray.show": "Afficher",
"action.update": "Mettre à jour",
"action.copy": "Copier",
"action.newpreset": "Nouveau préréglage...", // Equalizer Preset
"action.deletepreset": "Supprimer le préréglage",
// Errors
"error.appleMusicSubRequired": "Apple Music nécessite un abonnement.",
"error.connectionError": "Il y a eu un problème de connexion à Apple Music.",
"error.noResults": "Aucun résultat.",
"error.noResults.description": "Essayez une nouvelle recherche.",
// Settings - General
"settings.header.general": "Général",
"settings.header.general.description": "Ajuster les paramètres généraux de Cider.",
"settings.option.general.language": "Langue",
// Podcasts
"podcast.followOnCider": "Suivre sur Cider",
"podcast.followedOnCider": "Suivi sur Cider",
"podcast.subscribeOnItunes": "Suivre sur iTunes",
"podcast.subscribedOnItunes": "Suivi sur iTunes",
"podcast.itunesStore": "iTunes Store",
"podcast.episodes": "Épisodes",
"podcast.playEpisode": "Lire l'épisode",
"podcast.website": "Site du podcast",
// Language optgroups
"settings.option.general.language.main": "Langues",
"settings.option.general.language.fun": "Langues amusantes",
"settings.option.general.language.unsorted": "Non trié",
// Actions
"action.addToLibrary": "Ajouter à la bibliothèque",
"action.addToLibrary.success": "Ajouté à la bibliothèque",
"action.addToLibrary.error": "Erreur lors de l'ajout à la bibliothèque",
"action.removeFromLibrary": "Retirer de la bibliothèque",
"action.removeFromLibrary.success": "Retiré de la bibliothèque",
"action.addToQueue": "Ajouter à la file d'attente",
"action.addToQueue.success": "Ajouté à la file d'attente",
"action.addToQueue.error": "Erreur lors de l'ajout à la file d'attente",
"action.removeFromQueue": "Retirer de la file d'attente",
"action.removeFromQueue.success": "Retiré de la file d'attente",
"action.removeFromQueue.error": "Erreur lors du retrait de la file d'attente",
"action.createPlaylist": "Créer une nouvelle playlist",
"action.addToPlaylist": "Ajouter à une playlist",
"action.removeFromPlaylist": "Retirer de la playlist",
"action.addToFavorites": "Ajouter aux favoris",
"action.follow": "Suivre",
"action.follow.success": "Suivi",
"action.follow.error": "Erreur lors de l'abonnement",
"action.unfollow": "Se désabonner",
"action.unfollow.success": "Désabonné",
"action.unfollow.error": "Erreur lors du désabonnement",
"action.playNext": "Jouer après",
"action.playLater": "Jouer plus tard",
"action.startRadio": "Lancer la radio",
"action.goToArtist": "Aller à l'artiste",
"action.goToAlbum": "Aller à l'album",
"action.moveToTop": "Haut de page",
"action.share": "Partager",
"action.rename": "Renommer",
"action.love": "Aimer",
"action.unlove": "Ne plus aimer",
"action.dislike": "Je n'aime pas",
"action.undoDislike": "Je n'aime plus",
"action.showWebRemoteQR": "Afficher le QR Code de la télécommande à distance",
"action.playTracksNext": "Jouer ${app.selectedMediaItems.length} musiques après",
"action.playTracksLater": "Jouer ${app.selectedMediaItems.length} musiques plus tard",
"action.removeTracks": "Retirer ${self.selectedItems.length} musiques de la file d'attente",
"action.import": "Importer",
"action.export": "Exporter",
"action.showAlbum": "Afficher l'album complet",
"action.tray.minimize": "Réduire dans la barre d'outils",
"action.tray.quit": "Quitter",
"action.tray.show": "Afficher",
"action.update": "Mettre à jour",
"action.copy": "Copier",
"action.newpreset": "Nouveau préréglage...", // Equalizer Preset
"action.deletepreset": "Supprimer le préréglage",
// Settings - Audio
"settings.header.audio": "Audio",
"settings.header.audio.description": "Ajuster les paramètres audio de Cider.",
"settings.option.audio.quality": "Qualité Audio", // Dropdown
"settings.header.audio.quality.hireslossless": "Lossless haute qualité (Hi-Res)",
"settings.header.audio.quality.hireslossless.description": "(jusqu'à 24 bits/192 kHz)",
"settings.header.audio.quality.lossless": "Lossless",
"settings.header.audio.quality.lossless.description": "(jusqu'à 24 bits/48 kHz)",
"settings.header.audio.quality.enhanced": "Amélioré",
"settings.header.audio.quality.high": "Élevée",
"settings.header.audio.quality.low": "Faible",
"settings.header.audio.quality.auto": "Automatique",
"settings.option.audio.seamlessTransition": "Fondu audio transparent", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Activer les fonctions avancées", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "L'activation de la fonctionnalité AudioContext permet d'utiliser des fonctions audio étendues telles que la normalisation du son, les égaliseurs et les visualiseurs. Toutefois, sur certains systèmes, cela peut provoquer des bégaiements dans les pistes audio.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Moteur de traitement psycho-acoustique Cider", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Un processus de traitement qui fait croire à votre cerveau que les fichiers sont de meilleure qualité.",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalisation du son", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalise le volume maximal des pistes individuelles pour créer une expérience d'écoute plus uniforme.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Spatialisation audio", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialiser l'audio et rendre l'audio plus tridimensionnel (note: Ce n'est pas Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Visuel",
"settings.header.visual.description": "Ajuster les paramètres visuels de Cider.",
"settings.option.visual.windowBackgroundStyle": "Style d'arrière-plan de la fenêtre", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "Aucun",
"settings.header.visual.windowBackgroundStyle.artwork": "Pochette d'album",
"settings.header.visual.windowBackgroundStyle.image": "Image",
"settings.option.visual.animatedArtwork": "Pochette d'album animée", // Dropdown
"settings.header.visual.animatedArtwork.always": "Toujours",
"settings.header.visual.animatedArtwork.limited": "Limité aux pages et aux entrées spéciales",
"settings.header.visual.animatedArtwork.disable": "Désactiver partout",
"settings.option.visual.animatedArtworkQuality": "Qualité de la pochette d'album animée", // Dropdown
"settings.header.visual.animatedArtworkQuality.low": "Faible",
"settings.header.visual.animatedArtworkQuality.medium": "Moyen",
"settings.header.visual.animatedArtworkQuality.high": "Élevée",
"settings.header.visual.animatedArtworkQuality.veryHigh": "Très élevée",
"settings.header.visual.animatedArtworkQuality.extreme": "Extrême",
"settings.option.visual.animatedWindowBackground": "Arrière-plan de fenêtre animé", // Toggle
"settings.option.visual.hardwareAcceleration": "Accélération matérielle", // Dropdown
"settings.option.visual.hardwareAcceleration.description": "Nécessite un relancement",
"settings.header.visual.hardwareAcceleration.default": "Défaut",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "Thème",
// Settings - General
"settings.header.general": "Général",
"settings.header.general.description": "Ajuster les paramètres généraux de Cider.",
"settings.option.general.language": "Langue",
// Settings - Visual - Theme name
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Sombre",
// Language optgroups
"settings.option.general.language.main": "Langues",
"settings.option.general.language.fun": "Langues amusantes",
"settings.option.general.language.unsorted": "Non trié",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Afficher vos informations personnelles", // Toggle
// Update Cider
"settings.option.general.updateCider": "Mettre à jour Cider", // Button
// Settings - Lyrics
"settings.header.lyrics": "Paroles",
"settings.header.lyrics.description": "Ajuster les paramètres des paroles pour Cider.",
"settings.option.lyrics.enableMusixmatch": "Activer les paroles Musixmatch", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "Activer le mode karaoké (Musixmatch seulement)", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Langue préférée pour les traductions Musixmatch", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "Activer les paroles YouTube pour les vidéos de musique", // Toggle
// Settings - Audio
"settings.header.audio": "Audio",
"settings.header.audio.description": "Ajuster les paramètres audio de Cider.",
"settings.option.audio.quality": "Qualité Audio", // Dropdown
"settings.header.audio.quality.hireslossless": "Lossless haute qualité (Hi-Res)",
"settings.header.audio.quality.hireslossless.description": "(jusqu'à 24 bits/192 kHz)",
"settings.header.audio.quality.lossless": "Lossless",
"settings.header.audio.quality.lossless.description": "(jusqu'à 24 bits/48 kHz)",
"settings.header.audio.quality.enhanced": "Amélioré",
"settings.header.audio.quality.high": "Élevée",
"settings.header.audio.quality.low": "Faible",
"settings.header.audio.quality.auto": "Automatique",
"settings.option.audio.seamlessTransition": "Fondu audio transparent", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Activer les fonctions avancées", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "L'activation de la fonctionnalité AudioContext permet d'utiliser des fonctions audio étendues telles que la normalisation du son, les égaliseurs et les visualiseurs. Toutefois, sur certains systèmes, cela peut provoquer des bégaiements dans les pistes audio.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Moteur de traitement psycho-acoustique Cider", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Un processus de traitement qui fait croire à votre cerveau que les fichiers sont de meilleure qualité.",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalisation du son", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalise le volume maximal des pistes individuelles pour créer une expérience d'écoute plus uniforme.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Spatialisation audio", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialiser l'audio et rendre l'audio plus tridimensionnel (note: Ce n'est pas Dolby Atmos)",
// Settings - Connectivity
"settings.header.connectivity": "Connectivité",
"settings.header.connectivity.description": "Ajuster les paramètres de connectivité de Cider.",
"settings.option.connectivity.discordRPC": "Discord Rich Presence", // Dropdown
"settings.option.connectivity.playbackNotifications": "Notifications de lecture", // Toggle
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "Afficher comme 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "Afficher comme 'Apple Music'",
"settings.option.connectivity.discordRPC.clearOnPause": "Désactiver le Discord Rich Presence quand la musique est en pause", // Toggle
"settings.option.connectivity.lastfmScrobble": "Scrobble LastFM", // Option to Connect
"settings.option.connectivity.lastfmScrobble.delay": "Délai de Scrobble LastFM (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Activer la lecture en cours sur LastFM",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Supprimer les artistes en vedette du titre de la chanson (LastFM)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filtrer les titres en boucle (LastFM)",
// Refer to term.connect for the connect button
// Settings - Visual
"settings.header.visual": "Visuel",
"settings.header.visual.description": "Ajuster les paramètres visuels de Cider.",
"settings.option.visual.windowBackgroundStyle": "Style d'arrière-plan de la fenêtre", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "Aucun",
"settings.header.visual.windowBackgroundStyle.artwork": "Pochette d'album",
"settings.header.visual.windowBackgroundStyle.image": "Image",
"settings.option.visual.animatedArtwork": "Pochette d'album animée", // Dropdown
"settings.header.visual.animatedArtwork.always": "Toujours",
"settings.header.visual.animatedArtwork.limited": "Limité aux pages et aux entrées spéciales",
"settings.header.visual.animatedArtwork.disable": "Désactiver partout",
"settings.option.visual.animatedArtworkQuality": "Qualité de la pochette d'album animée", // Dropdown
"settings.header.visual.animatedArtworkQuality.low": "Faible",
"settings.header.visual.animatedArtworkQuality.medium": "Moyen",
"settings.header.visual.animatedArtworkQuality.high": "Élevée",
"settings.header.visual.animatedArtworkQuality.veryHigh": "Très élevée",
"settings.header.visual.animatedArtworkQuality.extreme": "Extrême",
"settings.option.visual.animatedWindowBackground": "Arrière-plan de fenêtre animé", // Toggle
"settings.option.visual.hardwareAcceleration": "Accélération matérielle", // Dropdown
"settings.option.visual.hardwareAcceleration.description": "Nécessite un relancement",
"settings.header.visual.hardwareAcceleration.default": "Défaut",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "Thème",
// Settings - Experimental
"settings.header.experimental": "Expérimental",
"settings.header.experimental.description": "Ajuster les paramètres expérimentaux de Cider.",
"settings.option.experimental.compactUI": "Interface utilisateur compacte", // Toggle
"settings.option.experimental.close_button_hide": "Le bouton de fermeture doit masquer l'application",
"settings.option.experimental.copy_log": "Copier les logs dans le presse-papier",
"settings.option.experimental.inline_playlists": "Playlists et albums en ligne",
// Refer to term.disabled & term.enabled
// Settings - Visual - Theme name
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Sombre",
// Spatialization Menu
"spatial.notTurnedOn": "La spatialisation audio est désactivée. Pour l'utiliser, vous devez d'abord l'activer.",
"spatial.spatialProperties": "Propriétés spatiales",
"spatial.width": "Largeur",
"spatial.height": "Hauteur",
"spatial.depth": "Profondeur",
"spatial.gain": "Gain",
"spatial.roomMaterials": "Matériaux de la pièce",
"spatial.roomDimensions": "Dimensions de la pièce",
"spatial.roomPositions": "Positions de la pièce",
"spatial.setDimensions": "Définir les dimensions",
"spatial.setPositions": "Définir les positions",
"spatial.up": "Haut",
"spatial.front": "Avant",
"spatial.left": "Gauche",
"spatial.right": "Droite",
"spatial.back": "Retour",
"spatial.down": "Bas",
"spatial.listener": "Auditeur",
"spatial.audioSource": "Source Audio",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Afficher vos informations personnelles", // Toggle
// Settings - Unfinished
"settings.header.unfinished": "Inachevée",
// Settings - Lyrics
"settings.header.lyrics": "Paroles",
"settings.header.lyrics.description": "Ajuster les paramètres des paroles pour Cider.",
"settings.option.lyrics.enableMusixmatch": "Activer les paroles Musixmatch", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "Activer le mode karaoké (Musixmatch seulement)", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Langue préférée pour les traductions Musixmatch", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "Activer les paroles YouTube pour les vidéos de musique", // Toggle
// Web Remote
"remote.web.title": "Cider à distance",
"remote.web.description": "Scanner le QR code pour associer votre téléphone avec cette instance Cider",
// Settings - Connectivity
"settings.header.connectivity": "Connectivité",
"settings.header.connectivity.description": "Ajuster les paramètres de connectivité de Cider.",
"settings.option.connectivity.discordRPC": "Discord Rich Presence", // Dropdown
"settings.option.connectivity.playbackNotifications": "Notifications de lecture", // Toggle
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "Afficher comme 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "Afficher comme 'Apple Music'",
"settings.option.connectivity.discordRPC.clearOnPause": "Désactiver le Discord Rich Presence quand la musique est en pause", // Toggle
"settings.option.connectivity.lastfmScrobble": "Scrobble LastFM", // Option to Connect
"settings.option.connectivity.lastfmScrobble.delay": "Délai de Scrobble LastFM (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Activer la lecture en cours sur LastFM",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Supprimer les artistes en vedette du titre de la chanson (LastFM)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filtrer les titres en boucle (LastFM)",
// Refer to term.connect for the connect button
// About
"about.thanks": "Un grand merci à l'équipe de la Cider Collective et à tous nos contributeurs."
// Settings - Experimental
"settings.header.experimental": "Expérimental",
"settings.header.experimental.description": "Ajuster les paramètres expérimentaux de Cider.",
"settings.option.experimental.compactUI": "Interface utilisateur compacte", // Toggle
"settings.option.experimental.close_button_hide": "Le bouton de fermeture doit masquer l'application",
"settings.option.experimental.copy_log": "Copier les logs dans le presse-papier",
"settings.option.experimental.inline_playlists": "Playlists et albums en ligne",
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "La spatialisation audio est désactivée. Pour l'utiliser, vous devez d'abord l'activer.",
"spatial.spatialProperties": "Propriétés spatiales",
"spatial.width": "Largeur",
"spatial.height": "Hauteur",
"spatial.depth": "Profondeur",
"spatial.gain": "Gain",
"spatial.roomMaterials": "Matériaux de la pièce",
"spatial.roomDimensions": "Dimensions de la pièce",
"spatial.roomPositions": "Positions de la pièce",
"spatial.setDimensions": "Définir les dimensions",
"spatial.setPositions": "Définir les positions",
"spatial.up": "Haut",
"spatial.front": "Avant",
"spatial.left": "Gauche",
"spatial.right": "Droite",
"spatial.back": "Retour",
"spatial.down": "Bas",
"spatial.listener": "Auditeur",
"spatial.audioSource": "Source Audio",
// Settings - Unfinished
"settings.header.unfinished": "Inachevée",
// Web Remote
"remote.web.title": "Cider à distance",
"remote.web.description": "Scanner le QR code pour associer votre téléphone avec cette instance Cider",
// About
"about.thanks": "Un grand merci à l'équipe de la Cider Collective et à tous nos contributeurs."
}

359
src/i18n/hi_IN.jsonc Normal file
View file

@ -0,0 +1,359 @@
{
// i18n Info
"i18n.languageName": "English (US)", // name of language in native language
"i18n.languageNameEnglish": "English (US)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@maikirakiwi @vringster", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cider",
"date.format": "${m} ${d}, ${y}",
// Dialogs
"dialog.cancel": "रोकें",
"dialog.ok": "ठीक है",
// Notification
"notification.updatingLibrarySongs": "अपडेटिंग लाइब्रेरी के गाने...",
"notification.updatingLibraryAlbums": "अपडेटिंग लाइब्रेरी के एल्बम...",
"notification.updatingLibraryArtists": "अपडेटिंग लाइब्रेरी के कलाकार...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts",
"term.itunes": "iTunes",
"term.github": "GitHub",
"term.discord": "Discord",
"term.learnMore": "और जानिए",
"term.accountSettings": "खाता सेटिंग्स",
"term.logout": "लॉग आऊट",
"term.login": "लॉग इन",
"term.about": "के बारे में",
"term.privateSession": "गुप्त सैशन",
"term.queue": "कतार",
"term.history": "हिस्टरी",
"term.search": "खोज करें",
"term.library": "लाइब्रेरी",
"term.listenNow": "अभी सुनियें",
"term.browse": "ब्राउज़",
"term.radio": "रेडियो",
"term.recentlyAdded": "हाल ही में जोड़ें हुए",
"term.songs": "गाने",
"term.albums": "एल्बम",
"term.artists": "कलाकार",
"term.podcasts": "पॉडकास्टस",
"term.playlists": "प्लेलिस्ट्स",
"term.playlist": "प्लेलिस्ट",
"term.newPlaylist": "नई प्लेलिस्ट्स",
"term.newPlaylistFolder": "नई प्लेलिस्ट्स फ़ोल्डर",
"term.createNewPlaylist": "नई प्लेलिस्ट्स बनाएं",
"term.createNewPlaylistFolder": "नई प्लेलिस्ट्स फ़ोल्डर बनाएं",
"term.deletePlaylist": "क्या आप वाकई इस प्लेलिस्ट को हटाना चाहते हैं",
"term.play": "प्ले",
"term.pause": "ठहराव",
"term.previous": "पिछले",
"term.next": "अगले",
"term.shuffle": "शफल",
"term.repeat": "रिपीट",
"term.volume": "वॉल्यूम",
"term.mute": "म्यूट",
"term.unmute": "अनम्यूट",
"term.share": "शेयर",
"term.share.success": "क्लिपबोर्ड में कॉपीड",
"term.settings": "सेटिंग्स",
"term.seeAll": "सभी देखें",
"term.sortBy": "सॉर्ट बाये",
"term.sortBy.album": "एल्बम",
"term.sortBy.artist": "कलाकार",
"term.sortBy.name": "नाम",
"term.sortBy.genre": "शैली",
"term.sortBy.releaseDate": "रिलीज़ की तारीख",
"term.sortBy.duration": "लंबाई",
"term.sortOrder": "ए-ज़ी",
"term.sortOrder.ascending": "असेंडिंग",
"term.sortOrder.descending": "डिसेंडिंग",
"term.viewAs": "वियू ऐस",
"term.viewAs.coverArt": "कवर आर्ट",
"term.viewAs.list": "सूची",
"term.size": "साइज़",
"term.size.normal": "साधारण",
"term.size.compact": "पिचका हुआ",
"term.enable": "खोलें",
"term.disable": "बंद",
"term.enabled": "खोला हुआ",
"term.disabled": "बंद हुआ हुआ",
"term.connect": "कनेक्ट",
"term.connecting": "कनेक्टिंग",
"term.disconnect": "डिसकनेक्ट",
"term.authed": "प्रमाणित",
"term.confirm": "पक्का?",
"term.more": "ज़्यादा",
"term.less": "कम",
"term.showMore": "दिखाएं ज़्यादा",
"term.showLess": "दिखाएं कम",
"term.topSongs": "Top Songs",
"term.latestReleases": "Latest Releases",
"term.time.added": "Added",
"term.time.released": "Released",
"term.time.updated": "Updated",
"term.time.hours": "hours",
"term.time.hour": "hour",
"term.time.minutes": "minutes",
"term.time.minute": "minute",
"term.time.seconds": "seconds",
"term.time.second": "second",
"term.fullscreenView": "Fullscreen View",
"term.defaultView": "Default View",
"term.audioSettings": "Audio Settings",
"term.clearAll": "Clear All",
"term.recentStations": "Recent Stations",
"term.language": "Language",
"term.funLanguages": "Fun",
"term.noLyrics": "Loading... / Lyrics not found./ Instrumental.",
"term.copyright": "Copyright",
"term.rightsReserved": "All Rights Reserved.",
"term.sponsor": "Sponsor this project",
"term.ciderTeam": "Cider Team",
"term.developer": "Developer",
"term.socialTeam": "Social Team",
"term.socials": "Socials",
"term.contributors": "Contributors",
"term.equalizer": "Equalizer",
"term.reset": "Reset",
"term.tracks": "tracks", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "Videos",
"term.menu": "Menu",
"term.check": "Check",
"term.aboutArtist": "About {{artistName}}", // e.g. 'About Doja Cat'
"term.topResult": "Top Result", // Search Results
"term.sharedPlaylists": "Shared Playlists", // Search Results
"term.people": "People", // Search Results
"term.newpreset.name": "नई EQ Preset Name", // Equalizer Preset
"term.addedpreset": "Added Preset",
"term.deletepreset.warn": "Are you sure you want to delete this preset?",
"term.deletedpreset": "Removed preset",
"term.musicVideos": "Music Videos", // Search page friendlyTypes
"term.stations": "Stations",
"term.curators": "Curators",
"term.appleCurators": "Apple Curators",
"term.radioShows": "Radio Shows",
"term.recordLabels": "Record Labels",
"term.videoExtras": "Video Extras",
"term.top": "Top",
// Home
"home.title": "Home",
"home.recentlyPlayed": "Recently Played",
"home.recentlyAdded": "Recently Added",
"home.artistsFeed": "Your Artists Feed",
"home.artistsFeed.noArtist": "Follow some artists first and their latest releases will be here",
"home.madeForYou": "Made For You",
"home.friendsListeningTo": "Friends Listening To",
"home.followedArtists": "Followed Artists",
// Errors
"error.appleMusicSubRequired": "Apple Music requires a subscription.",
"error.connectionError": "There was a problem connecting to Apple Music.",
"error.noResults": "No Results.",
"error.noResults.description": "Try a नई search.",
// Podcasts
"podcast.followOnCider": "Follow On Cider",
"podcast.followedOnCider": "Following On Cider",
"podcast.subscribeOnItunes": "Subscribe On iTunes",
"podcast.subscribedOnItunes": "Subscribed On iTunes",
"podcast.itunesStore": "iTunes Store",
"podcast.episodes": "Episodes",
"podcast.playEpisode": "Play Episode",
"podcast.website": "Podcast Website",
// Actions
"action.addToLibrary": "Add to Library",
"action.addToLibrary.success": "Added to Library",
"action.addToLibrary.error": "Error Adding to Library",
"action.removeFromLibrary": "Remove from Library",
"action.removeFromLibrary.success": "Removed from Library",
"action.addToQueue": "Add to Queue",
"action.addToQueue.success": "Added to Queue",
"action.addToQueue.error": "Error Adding to Queue",
"action.removeFromQueue": "Remove from Queue",
"action.removeFromQueue.success": "Removed from Queue",
"action.removeFromQueue.error": "Error Removing from Queue",
"action.createPlaylist": "बनाएं a नई Playlist",
"action.addToPlaylist": "Add to Playlist",
"action.removeFromPlaylist": "Remove from Playlist",
"action.addToFavorites": "Add to Favorites",
"action.follow": "Follow",
"action.follow.success": "Followed",
"action.follow.error": "Error Following",
"action.unfollow": "Unfollow",
"action.unfollow.success": "Unfollowed",
"action.unfollow.error": "Error Unfollowing",
"action.playNext": "Play Next",
"action.playLater": "Play Later",
"action.startRadio": "Start Radio",
"action.goToArtist": "Go to Artist",
"action.goToAlbum": "Go to Album",
"action.moveToTop": "Move to top",
"action.share": "Share",
"action.rename": "Rename",
"action.love": "Love",
"action.unlove": "Unlove",
"action.dislike": "Dislike",
"action.undoDislike": "Undo dislike",
"action.showWebRemoteQR": "Web Remote",
"action.playTracksNext": "Play ${app.selectedMediaItems.length} tracks next",
"action.playTracksLater": "Play ${app.selectedMediaItems.length} tracks later",
"action.removeTracks": "Remove ${self.selectedItems.length} tracks from queue",
"action.import": "Import",
"action.export": "Export",
"action.showAlbum": "दिखाएं Complete Album",
"action.tray.minimize": "Minimize to Tray",
"action.tray.quit": "Quit",
"action.tray.show": "दिखाएं",
"action.update": "Update",
"action.copy": "Copy",
"action.newpreset": "नई Preset...", // Equalizer Preset
"action.deletepreset": "Delete Preset",
// Settings - General
"settings.header.general": "General",
"settings.header.general.description": "Adjust the general settings for Cider.",
"settings.option.general.language": "Language",
// Language optgroups
"settings.option.general.language.main": "Languages",
"settings.option.general.language.fun": "Fun Languages",
"settings.option.general.language.unsorted": "Unsorted",
// Update Cider
"settings.option.general.updateCider": "Update Cider", // Button. Refer to term.check for the check button
"settings.option.general.updateCider.branch": "Cider Update Branch", // Dropdown
"settings.option.general.updateCider.branch.description": "Select the branch to update Cider to",
"settings.option.general.updateCider.branch.main": "Stable",
"settings.option.general.updateCider.branch.develop": "Development",
// Settings - Audio
"settings.header.audio": "Audio",
"settings.header.audio.description": "Adjust the audio settings for Cider.",
"settings.option.audio.quality": "Audio Quality", // Dropdown
"settings.header.audio.quality.hireslossless": "Hi-Res Lossless",
"settings.header.audio.quality.hireslossless.description": "up to 24-bit/192 kHz",
"settings.header.audio.quality.lossless": "Lossless",
"settings.header.audio.quality.lossless.description": "up to 24-bit/48 kHz",
"settings.header.audio.quality.high": "High",
"settings.header.audio.quality.high.description": "256 kbps",
"settings.header.audio.quality.standard": "Standard",
"settings.header.audio.quality.standard.description": "64 kbps",
"settings.option.audio.seamlessTransition": "Seamless Audio Transition", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Enable Advanced Functionality", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "Enabling AudioContext functionality will allow for extended audio features like Audio Normalization , Equalizers and Visualizers, however on some systems this may cause stuttering in audio tracks.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes everything sound both richer and more lively | Designed by Maikiwi.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Strength", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the strength of the processing done to the audio. (Aggressive may yield undesirable results)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standard",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggressive",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Normalization", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatialization", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialize audio and make audio more 3-dimensional (note: This is not Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Visual",
"settings.header.visual.description": "Adjust the visual settings for Cider.",
"settings.option.visual.windowBackgroundStyle": "Window Background Style", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "None",
"settings.header.visual.windowBackgroundStyle.artwork": "Artwork",
"settings.header.visual.windowBackgroundStyle.image": "Image",
"settings.option.visual.animatedArtwork": "Animated Artwork", // Dropdown
"settings.header.visual.animatedArtwork.always": "Always",
"settings.header.visual.animatedArtwork.limited": "Limited to pages and special entries",
"settings.header.visual.animatedArtwork.disable": "Disable everywhere",
"settings.option.visual.animatedArtworkQuality": "Animated Artwork Quality", // Dropdown
"settings.header.visual.animatedArtworkQuality.low": "Low",
"settings.header.visual.animatedArtworkQuality.medium": "Medium",
"settings.header.visual.animatedArtworkQuality.high": "High",
"settings.header.visual.animatedArtworkQuality.veryHigh": "Very High",
"settings.header.visual.animatedArtworkQuality.extreme": "Extreme",
"settings.option.visual.animatedWindowBackground": "Animated Window Background", // Toggle
"settings.option.visual.hardwareAcceleration": "Hardware Acceleration", // Dropdown
"settings.option.visual.hardwareAcceleration.description": "Requires relaunch",
"settings.header.visual.hardwareAcceleration.default": "Default",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "Theme",
// Settings - Visual - Theme name
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Dark",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "दिखाएं Personal Info", // Toggle
// Settings - Lyrics
"settings.header.lyrics": "Lyrics",
"settings.header.lyrics.description": "Adjust the lyrics settings for Cider.",
"settings.option.lyrics.enableMusixmatch": "Enable Musixmatch Lyrics", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "Enable Karaoke Mode (Musixmatch only)", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch Translation Preferred Language", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "Enable Youtube Lyrics for Music Videos", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "Connectivity",
"settings.header.connectivity.description": "Adjust the connectivity settings for Cider.",
"settings.option.connectivity.discordRPC": "Discord Rich Presence", // Dropdown
"settings.option.connectivity.playbackNotifications": "Playback Notifications", // Toggle
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "Display as 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "Display as 'Apple Music'",
"settings.option.connectivity.discordRPC.clearOnPause": "Clear Discord Rich Presence on Pause", // Toggle
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling", // Option to Connect
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble Delay (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Enable Last.fm Now Playing",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Remove featuring artists from song title (Last.fm)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filter looped track (Last.fm)",
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "Experimental",
"settings.header.experimental.description": "Adjust the experimental settings for Cider.",
"settings.option.experimental.compactUI": "Compact UI", // Toggle
"settings.option.experimental.close_button_hide": "Close Button Should Hide the Application",
"settings.option.experimental.copy_log": "Copy logs to clipboard",
"settings.option.experimental.inline_playlists": "Inline Playlists and Albums",
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.",
"spatial.spatialProperties": "Spatial Properties",
"spatial.width": "Width",
"spatial.height": "Height",
"spatial.depth": "Depth",
"spatial.gain": "Gain",
"spatial.roomMaterials": "Room Materials",
"spatial.roomDimensions": "Room Dimensions",
"spatial.roomPositions": "Room Positions",
"spatial.setDimensions": "Set Dimensions",
"spatial.setPositions": "Set Positions",
"spatial.up": "Up",
"spatial.front": "Front",
"spatial.left": "Left",
"spatial.right": "Right",
"spatial.back": "Back",
"spatial.down": "Down",
"spatial.listener": "Listener",
"spatial.audioSource": "Audio Source",
// Settings - Unfinished
"settings.header.unfinished": "Unfinished",
// Web Remote
"remote.web.title": "Cider Remote",
"remote.web.description": "Scan the QR code to pair your phone up with this Cider instance",
// About
"about.thanks": "Major thanks to the Cider Collective Team and all of our contributors."
}

View file

@ -1,10 +1,10 @@
{ // Base File
{
// i18n Info
"i18n.languageName": "Magyar", // name of language in native language
"i18n.languageName": "Magyar", // name of language in native language
"i18n.languageNameEnglish": "Hungarian", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@Greenoliv @Rias @BenjaminStonawski", // Authors, if you contribute to this file feel free to add your name seperated with a space
"i18n.authors": "@Greenoliv @Amaru @BenjaminStonawski", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cider",
@ -19,10 +19,11 @@
"notification.updatingLibrarySongs": "Zenekönyvtár frissítése...",
"notification.updatingLibraryAlbums": "Albumok frissítése...",
"notification.updatingLibraryArtists": "Előadók frissítése...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts",
"term.applePodcasts": "Apple Podcastok",
"term.itunes": "iTunes",
"term.github": "GitHub",
"term.discord": "Discord",
@ -46,9 +47,9 @@
"term.playlists": "Lejátszási listák",
"term.playlist": "Lejátszási lista",
"term.newPlaylist": "Új lejátszási lista",
"term.newPlaylistFolder": "Új lejátszási lista mappa",
"term.newPlaylistFolder": "Új mappa",
"term.createNewPlaylist": "Új lejátszási lista létrehozása",
"term.createNewPlaylistFolder": "Új lejátszási lista mappa létrehozása",
"term.createNewPlaylistFolder": "Új mappa létrehozása",
"term.deletePlaylist": "Biztosan szeretné törölni a lejátszási listát?",
"term.play": "Lejátszás",
"term.pause": "Megállítás",
@ -60,6 +61,7 @@
"term.mute": "Némítás",
"term.unmute": "Némítás feloldása",
"term.share": "Megosztás",
"term.share.success": "Másolva a vágólapra",
"term.settings": "Beállítások",
"term.seeAll": "Összes",
"term.sortBy": "Rendezés",
@ -91,7 +93,7 @@
"term.less": "Kevesebb",
"term.showMore": "Mutass többet",
"term.showLess": "Mutass kevesebbet",
"term.topSongs" : "A legjobb dalok",
"term.topSongs": "A legjobb dalok",
"term.latestReleases": "Új megjelenések",
"term.time.added": "Hozzáadva",
"term.time.released": "Kiadva",
@ -104,45 +106,60 @@
"term.time.second": "másodperc",
"term.fullscreenView": "Teljes képernyős mód",
"term.defaultView": "Alapértelmezett nézet",
"term.spacializedAudioSetting": "Térbeli hangzás",
"term.spacializedAudioSetting": "Térbeli hang",
"term.clearAll": "Összes törlése",
"term.recentStations": "Nemrég játszott",
"term.language": "Nyelv",
"term.funLanguages": "Mókás",
"term.funLanguages": "Fantázianyelvek",
"term.noLyrics": "Betöltés... / Dalszöveg nem található. / Instrumentális.",
"term.copyright": "Szerzői jog",
"term.rightsReserved": "Minden jog fenntartva.",
"term.sponsor": "Támogasd a projektet",
"term.ciderTeam": "A Cider csapata",
"term.developer": "Fejlesztő",
"term.socialTeam": "Szociális csapat",
"term.socialTeam": "Közösségi csapat",
"term.socials": "Szociális",
"term.contributors": "Közreműködők",
"term.contributors": "Hozzájárulók",
"term.equalizer": "Hangszínszabályozó",
"term.reset": "Visszaállítás",
"term.tracks": "zeneszám", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "Videók",
"term.menu": "Menü",
"term.check": "Bejelöl",
"term.aboutArtist": "További információ {{artistName}} előadóról", // e.g. 'About Doja Cat'
"term.updateCider": "Cider frissítése",
"term.check": "Ellenőrzés",
"term.aboutArtist": "About {{artistName}}", // e.g. 'About Doja Cat'
"term.topResult": "Legjobb találatok", // Search Results
"term.sharedPlaylists": "Megosztott lejátszási listák", // Search Results
"term.people": "Profilok", // Search Results
"term.newpreset.name": "New EQ Preset Name", // Equalizer Preset
"term.addedpreset": "Preset hozzáadva",
"term.deletepreset.warn": "Are you sure you want to delete this preset?",
"term.deletedpreset": "Preset törölve",
"term.musicVideos": "Videóklipek", // Search page friendlyTypes
"term.stations": "Állomások",
"term.curators": "Curators",
"term.appleCurators": "Apple Curators",
"term.radioShows": "Radio Shows",
"term.recordLabels": "Record Labels",
"term.videoExtras": "Videóextrák",
"term.top": "Top",
// Home
"home.title": "Kezdőlap",
"home.recentlyPlayed": "Nemrég játszott",
"home.recentlyAdded": "Nemrég hozzáadott",
"home.artistsFeed": "Az előadóid feedje",
"home.artistsFeed.noArtist": "Kövess néhány előadót, hogy a legújabb zenéi itt megjelenhessenek.",
"home.artistsFeed.noArtist": "Kövess néhány előadót, hogy a legújabb zenéik itt megjelenjenek",
"home.madeForYou": "Személyre szabva",
"home.friendsListeningTo": "A barátaid épp ezt hallgatják",
"home.followedArtists": "Követett előadók",
// Errors
"error.appleMusicSubRequired": "Apple Music előfizetés szükséges.",
"error.connectionError": "Hiba történt az Apple Musichoz való csatlakozás közben.",
"error.noResults": "Nincs találat",
"error.noResults.description": "Próbálkozzon új kereséssel",
//Podcasts
// Podcasts
"podcast.followOnCider": "Követés a Cideren",
"podcast.followedOnCider": "Követve a Cideren",
"podcast.subscribeOnItunes": "Feliratkozás az iTunesban",
@ -153,11 +170,11 @@
"podcast.website": "Podcast weboldala",
// Actions
"action.addToLibrary": "Hozzáadás a könyvtárhoz",
"action.addToLibrary.success": "Hozzáadva a könyvtárhoz",
"action.addToLibrary": "Hozzáadás a Könyvtárhoz",
"action.addToLibrary.success": "Hozzáadva a Könyvtárhoz",
"action.addToLibrary.error": "Hiba a hozzáadáskor.",
"action.removeFromLibrary": "Törlés a Könytárból",
"action.removeFromLibrary.success": "Törölve a könyvtárból",
"action.removeFromLibrary.success": "Törölve a Könyvtárból",
"action.addToQueue": "Hozzáadás a várólistához",
"action.addToQueue.success": "Hozzáadva a várólistához",
"action.addToQueue.error": "Sikertelen hozzáadás a várólistához",
@ -182,51 +199,69 @@
"action.moveToTop": "Mozgatás legfelülre",
"action.share": "Megosztás",
"action.rename": "Átnevezés",
"action.love": "Kedvelés",
"action.unlove": "Kedvelés visszavonása",
"action.dislike": "Nem kedvelem",
"action.undoDislike": "Nem kedvelés visszavonása",
"action.showWebRemoteQR": "Távirányító QR kód megjelenítése",
"action.love": "Szeretem",
"action.unlove": "Mégsem szeretem",
"action.dislike": "Kevesebb ilyen javasolása",
"action.undoDislike": "A Kevesebb ilyen javasolása visszavonása",
"action.showWebRemoteQR": "Távirányító QR kód",
"action.playTracksNext": "${app.selectedMediaItems.length} zenék lejátszása következőnek",
"action.playTracksLater": "${app.selectedMediaItems.length} zenék lejátszása később",
"action.removeTracks": "${self.selectedItems.length} zenék eltávolítása a várólistáról",
"action.import": "Importálás",
"action.export": "Exportálás",
"action.showAlbum": "Teljes album megjelenítése",
// Waiting on Core for moving plugin to app.ts
"action.tray.minimize": "Kicsinyítés a tálcára",
"action.tray.quit": "Kilépés",
"action.tray.show": "Megjelenítés",
"action.update": "Frissítés",
"action.copy": "Másolás",
"action.newpreset": "Új Preset...", // Equalizer Preset
"action.deletepreset": "Preset törlése",
// Settings - General
"settings.header.general": "Általános",
"settings.header.general.description": "A Cider általános beállításainak módosítása",
"settings.header.general.description": "A Cider általános beállításainak módosítása.",
"settings.option.general.language": "Nyelv",
// Language optgroups
"settings.option.general.language.main": "Nyelvek",
"settings.option.general.language.fun": "Mókás nyelvek",
"settings.option.general.language.unsorted": "Nem besorolható",
"settings.option.general.language.fun": "Fantázianyelvek",
"settings.option.general.language.unsorted": "Azonosítatlan",
// Update Cider
"settings.option.general.updateCider": "A Cider frissítése", // Button
// Settings - Audio
"settings.header.audio": "Hang",
"settings.header.audio.description": "A Cider hangbeállításainak módosítása",
"settings.header.audio.description": "A Cider hangbeállításainak módosítása.",
"settings.option.audio.quality": "Hangminőség", // Dropdown
"settings.header.audio.quality.high": "Magas",
"settings.header.audio.quality.low": "Alacsony",
"settings.header.audio.quality.auto": "Automatikus",
"settings.header.audio.quality.hireslossless": "Nagy felbontású veszteségmentes",
"settings.header.audio.quality.hireslossless.description": "max. 24-bit/192 kHz sebességen",
"settings.header.audio.quality.lossless": "Veszteségmentes",
"settings.header.audio.quality.lossless.description": "max. up to 24-bit/48 kHz sebességen",
"settings.header.audio.quality.high": "High",
"settings.header.audio.quality.high.description": "256 kbps",
"settings.header.audio.quality.standard": "Standard",
"settings.header.audio.quality.standard.description": "64 kbps",
"settings.option.audio.seamlessTransition": "Szünetmentes lejátszás", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Haladó funkcionalitás engedélyezése", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "Az AudioContext funkció engedélyezése lehetővé teszi a fejlettebb hangfunkciókat, például a normalizásást, a hangszínszabályozót és a vizualizáció funkciókat, azonban egyes számítógépeken ez akadozást okozhat a hangsávokban.",
"settings.option.audio.enableAdvancedFunctionality.description": "Az AudioContext funkció engedélyezése lehetővé teszi a fejlettebb hangfunkciókat, például a Normalizásást, az Equalizereket és a Visualizer funkciókat, azonban egyes számítógépeken ez akadozást okozhat a hangsávokban.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Pszichoakusztikus Módosítások amik minden hangot felerősítenek és ütősebbé tesznek | Készítette Maikiwi",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Erősség", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Megváltoztatja a hangra végzett feldolgozás erősségét. (Az Agresszív mód nemkívánatos eredményeket hozhat!)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Szokásos",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agresszív",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalizálás", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizálja az egyes zeneszámok hangosabb részeit, hogy egységesebb hallgatási élményt hozzon létre.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Térbeli hangzás", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Térbeli hangzás és a hang háromdimenziósabbá tétele (Ez nem összekeverendő a Dolby Atmos-szal!)",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Térbeli hang", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Térbeli hang és a hang háromdimenziósabbá tétele (Ez nem összekeverendő a Dolby Atmos-szal!)",
// Settings - Visual
"settings.header.visual": "Vizuális",
"settings.header.visual.description": "A Cider vizuális beállításainak módosítása.",
"settings.option.visual.windowBackgroundStyle": "Ablak háttér stílusa", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "Egyik sem",
"settings.header.visual.windowBackgroundStyle.none": "Sehol",
"settings.header.visual.windowBackgroundStyle.artwork": "Borító",
"settings.header.visual.windowBackgroundStyle.image": "Kép",
"settings.option.visual.animatedArtwork": "Animált borító", // Dropdown
@ -244,6 +279,12 @@
"settings.option.visual.hardwareAcceleration.description": "Újraindítás szükséges",
"settings.header.visual.hardwareAcceleration.default": "Alap",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "Téma",
// Settings - Visual - Theme name
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Sötét",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Személyes adatok mutatása", // Toggle
@ -251,15 +292,15 @@
"settings.header.lyrics": "Dalszöveg",
"settings.header.lyrics.description": "A Cider dalszöveg beállításainak módosítása.",
"settings.option.lyrics.enableMusixmatch": "MusixMatch dalszövegek engedélyezése", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "Karaoke mód bekapcsolása (Csak MusixMatch esetén)", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "Karaoke mód bekapcsolása (Csak MusixMatch)", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "MusixMatch fordítás nyelve", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "YouTube dalszövegek engedélyezése a zenei videóknál", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "Csatlakozhatóságok",
"settings.header.connectivity": "Csatlakozások",
"settings.header.connectivity.description": "A Cider csatlakozás beállításainak módosítása.",
"settings.option.connectivity.discordRPC": "Discord Rich Presence", // Dropdown
"settings.option.connectivity.playbackNotifications": "Értesítés új dal lejátszásakor", // Toggle
"settings.option.connectivity.playbackNotifications": "Lejátszás értesítések", // Toggle
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "Megjelenítés 'Cider'-ként",
"settings.header.connectivity.discordRPC.appleMusic": "Megjelenítés 'Apple Music'-ként",
@ -267,7 +308,7 @@
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling", // Option to Connect
"settings.option.connectivity.lastfmScrobble.delay": "LastFM Scrobble Késleltetés (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "LastFM Now Playing engedélyezése",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "A közreműködő előadók eltávolítása a dal címéből (LastFM)",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Remove featuring artists from song title (LastFM)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Loopolt zeneszám szűrése (LastFM)",
// Refer to term.connect for the connect button
@ -276,11 +317,13 @@
"settings.header.experimental.description": "A Cider kísérleti beállításainak módosítása.",
"settings.option.experimental.compactUI": "Kompakt UI", // Toggle
"settings.option.experimental.close_button_hide": "A bezárás gomb rejtse el az alkalmazást",
// Refer to term.disabled & term.enabled
"settings.option.experimental.copy_log": "Napló másolása a vágólapra",
"settings.option.experimental.inline_playlists": "Inline Playlists and Albums",
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "A térbeli hangzás ki van kapcsolva, használatához kapcsolja be.",
"spatial.spatialProperties": "Térbeli hangzás",
"spatial.spatialProperties": "Térbeli hang",
"spatial.width": "Szélesség",
"spatial.height": "Magasság",
"spatial.depth": "Hosszúság",
@ -307,5 +350,5 @@
"remote.web.description": "Olvasd be ezt a QR-kódot a telefonoddal, hogy tudd vezérelni a lejátszót.",
// About
"about.thanks": "Köszönet a Cider Collective csapatának és minden közreműködőnek."
"about.thanks": "Köszönet a Cider Collective csapatának és minden hozzájárulónak."
}

359
src/i18n/in_ID.jsonc Normal file
View file

@ -0,0 +1,359 @@
{
// i18n Info
"i18n.languageName": "Bahasa Indonesia", // name of language in native language
"i18n.languageNameEnglish": "Indonesian", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@crystalshower", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cider",
"date.format": "${d} ${m}, ${y}",
// Dialogs
"dialog.cancel": "Batal",
"dialog.ok": "OK",
// Notification
"notification.updatingLibrarySongs": "Memperbarui Pustaka lagu...",
"notification.updatingLibraryAlbums": "Memperbarui Pustaka album...",
"notification.updatingLibraryArtists": "Memperbarui Pustaka artis...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts",
"term.itunes": "iTunes",
"term.github": "GitHub",
"term.discord": "Discord",
"term.learnMore": "Pelajari lebih lanjut",
"term.accountSettings": "Pengaturan Akun",
"term.logout": "Keluar",
"term.login": "Masuk",
"term.about": "Tentang",
"term.privateSession": "Sesi Pribadi",
"term.queue": "Antrian",
"term.history": "Riwayat",
"term.search": "Cari",
"term.library": "Pustaka",
"term.listenNow": "Dengarkan Sekarang",
"term.browse": "Telusuri",
"term.radio": "Radio",
"term.recentlyAdded": "Baru Ditambahkan",
"term.songs": "Lagu",
"term.albums": "Album",
"term.artists": "Artis",
"term.podcasts": "Podcasts",
"term.playlists": "Playlist",
"term.playlist": "Playlist",
"term.newPlaylist": "Playlist Baru",
"term.newPlaylistFolder": "Folder Playlist Baru",
"term.createNewPlaylist": "Buat Playlist Baru",
"term.createNewPlaylistFolder": "Buat Folder Playlist Baru",
"term.deletePlaylist": "Yakin ingin menghapus playlist ini?",
"term.play": "Mainkan",
"term.pause": "Jeda",
"term.previous": "Sebelumnya",
"term.next": "Selanjutnya",
"term.shuffle": "Acak",
"term.repeat": "Ulangi",
"term.volume": "Volume",
"term.mute": "Bisu",
"term.unmute": "Bunyikan",
"term.share": "Bagikan",
"term.share.success": "Disalin ke clipboard",
"term.settings": "Pengaturan",
"term.seeAll": "Lihat Semua",
"term.sortBy": "Urutkan Berdasarkan",
"term.sortBy.album": "Album",
"term.sortBy.artist": "Artis",
"term.sortBy.name": "Nama",
"term.sortBy.genre": "Genre",
"term.sortBy.releaseDate": "Tanggal Rilis",
"term.sortBy.duration": "Durasi",
"term.sortOrder": "A-Z",
"term.sortOrder.ascending": "Terkecil",
"term.sortOrder.descending": "Terbesar",
"term.viewAs": "Lihat Sebagai",
"term.viewAs.coverArt": "Cover Art",
"term.viewAs.list": "Daftar",
"term.size": "Ukuran",
"term.size.normal": "Normal",
"term.size.compact": "Kompak",
"term.enable": "Aktifkan",
"term.disable": "Nonaktifkan",
"term.enabled": "Diaktifkan",
"term.disabled": "Dinonaktikan",
"term.connect": "Sambungkan",
"term.connecting": "Menyambungkan",
"term.disconnect": "Terputus",
"term.authed": "Diotentikasi",
"term.confirm": "Konfirmasi?",
"term.more": "Selebihnya",
"term.less": "Lebih Sedikit",
"term.showMore": "Tampilkan lebih banyak",
"term.showLess": "Tampilkan lebih sedikit",
"term.topSongs": "Lagu Teratas",
"term.latestReleases": "Rilis Terbaru",
"term.time.added": "Ditambahkan",
"term.time.released": "Dirilis",
"term.time.updated": "Diperbarui",
"term.time.hours": "jam",
"term.time.hour": "jam",
"term.time.minutes": "menit",
"term.time.minute": "menit",
"term.time.seconds": "detik",
"term.time.second": "detik",
"term.fullscreenView": "Mode Layar Penuh",
"term.defaultView": "Mode Default",
"term.audioSettings": "Pengaturan Audio",
"term.clearAll": "Bersihkan Semua",
"term.recentStations": "Stasiun Terbaru",
"term.language": "Bahasa",
"term.funLanguages": "Senang-senang",
"term.noLyrics": "Memuat... / Lirik tidak ditermukan./ Instrumental.",
"term.copyright": "Hak cipta",
"term.rightsReserved": "Hak cipta dilindungi Undang-undang.",
"term.sponsor": "Sponsori proyek ini",
"term.ciderTeam": "Cider Team",
"term.developer": "Pengembang",
"term.socialTeam": "Social Team",
"term.socials": "Sosial",
"term.contributors": "Kontributor",
"term.equalizer": "Equalizer",
"term.reset": "Atur Ulang",
"term.tracks": "lagu", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "Video",
"term.menu": "Menu",
"term.check": "Cek",
"term.aboutArtist": "Tentang {{artistName}}", // e.g. 'About Doja Cat'
"term.topResult": "Hasil Teratas", // Search Results
"term.sharedPlaylists": "Playlist yang dibagikan", // Search Results
"term.people": "Orang", // Search Results
"term.newpreset.name": "Nama Preset EQ Baru", // Equalizer Preset
"term.addedpreset": "Preset Ditambahkan",
"term.deletepreset.warn": "Yakin ingin menghapus preset ini?",
"term.deletedpreset": "Preset dihapus",
"term.musicVideos": "Video Musik", // Search page friendlyTypes
"term.stations": "Stasiun",
"term.curators": "Kurator",
"term.appleCurators": "Kurator Apple",
"term.radioShows": "Acara Radio",
"term.recordLabels": "Label Rekaman",
"term.videoExtras": "Bonus Video",
"term.top": "Atas",
// Home
"home.title": "Beranda",
"home.recentlyPlayed": "Baru Dimainkan",
"home.recentlyAdded": "Baru Ditambahkan",
"home.artistsFeed": "Feed Artis Anda",
"home.artistsFeed.noArtist": "Ikuti beberapa artis terlebih dahulu dan rilisan terbaru mereka akan ada di sini",
"home.madeForYou": "Dibuat Untuk Kamu",
"home.friendsListeningTo": "Teman Sedang Mendengarkan",
"home.followedArtists": "Artis Diikuti",
// Errors
"error.appleMusicSubRequired": "Apple Music memerlukan langganan.",
"error.connectionError": "Terjadi masalah saat menyambungkan ke Apple Music.",
"error.noResults": "Tidak ada hasil.",
"error.noResults.description": "Coba pencarian baru.",
// Podcasts
"podcast.followOnCider": "Ikuti Di Cider",
"podcast.followedOnCider": "Mengikuti Di Cider",
"podcast.subscribeOnItunes": "Langganan Di iTunes",
"podcast.subscribedOnItunes": "Berlangganan Di iTunes",
"podcast.itunesStore": "iTunes Store",
"podcast.episodes": "Episode",
"podcast.playEpisode": "Mainkan Episode",
"podcast.website": "Website Podcast",
// Actions
"action.addToLibrary": "Tambahkan ke Pustaka",
"action.addToLibrary.success": "Ditambahkan ke Pustaka",
"action.addToLibrary.error": "Terjadi Kesalahan Saat Menambahkan Pustaka",
"action.removeFromLibrary": "Hapus dari Pustaka",
"action.removeFromLibrary.success": "Dihapus dari Pustaka",
"action.addToQueue": "Tambahkan ke Antrian",
"action.addToQueue.success": "Ditambahkan ke Antrian",
"action.addToQueue.error": "Terjadi Kesalahan Saat Menambahkan ke Antrean",
"action.removeFromQueue": "Hapus dari Antrian",
"action.removeFromQueue.success": "Dihapus dari Antrian",
"action.removeFromQueue.error": "Terjadi Kesalahan Saat Menghapus Antrian",
"action.createPlaylist": "Buat Playlist Baru",
"action.addToPlaylist": "Tambahkan ke Playlist",
"action.removeFromPlaylist": "Hapus dari Playlist",
"action.addToFavorites": "Tambahkan ke Favorit",
"action.follow": "Ikuti",
"action.follow.success": "Diikuti",
"action.follow.error": "Kesalahan Dalam Mengikuti",
"action.unfollow": "Berhenti Mengikuti",
"action.unfollow.success": "Sudah Tidak Mengikuti",
"action.unfollow.error": "Terjadi Kesalahan Saat Berhenti Mengikuti",
"action.playNext": "Mainkan Selanjutnya",
"action.playLater": "Mainkan Nanti",
"action.startRadio": "Mulai Radio",
"action.goToArtist": "Lihat Halaman Artis",
"action.goToAlbum": "Lihat Halaman Album",
"action.moveToTop": "Pindah ke Atas",
"action.share": "Bagikan",
"action.rename": "Ubah Nama",
"action.love": "Suka",
"action.unlove": "Batal Suka",
"action.dislike": "Tidak Suka",
"action.undoDislike": "Batalkan Tidak Suka",
"action.showWebRemoteQR": "Remot Web",
"action.playTracksNext": "Mainkan ${app.selectedMediaItems.length} lagu selanjutnya",
"action.playTracksLater": "Mainkan ${app.selectedMediaItems.length} lagu nanti",
"action.removeTracks": "Hapus ${self.selectedItems.length} lagu dari antrian",
"action.import": "Impor",
"action.export": "Ekspor",
"action.showAlbum": "Tampilkan Album Sepenuhnya",
"action.tray.minimize": "Sembunyikan ke Tray",
"action.tray.quit": "Keluar",
"action.tray.show": "Tampilkan",
"action.update": "Perbarui",
"action.copy": "Salin",
"action.newpreset": "Preset Baru...", // Equalizer Preset
"action.deletepreset": "Hapus Preset",
// Settings - General
"settings.header.general": "Umum",
"settings.header.general.description": "Sesuaikan pengaturan umum untuk Cider.",
"settings.option.general.language": "Bahasa",
// Language optgroups
"settings.option.general.language.main": "Bahasa",
"settings.option.general.language.fun": "Bahasa Candaan",
"settings.option.general.language.unsorted": "Tidak disortir",
// Update Cider
"settings.option.general.updateCider": "Perbarui Cider", // Button. Refer to term.check for the check button
"settings.option.general.updateCider.branch": "Branch Pembaruan Cider", // Dropdown
"settings.option.general.updateCider.branch.description": "Pilih branch untuk memperbarui Cider",
"settings.option.general.updateCider.branch.main": "Stable",
"settings.option.general.updateCider.branch.develop": "Development",
// Settings - Audio
"settings.header.audio": "Audio",
"settings.header.audio.description": "Sesuaikan pengaturan audio untuk Cider.",
"settings.option.audio.quality": "Kualitas Audio", // Dropdown
"settings.header.audio.quality.hireslossless": "Hi-Res Lossless",
"settings.header.audio.quality.hireslossless.description": "sampai dari 24-bit/192 kHz",
"settings.header.audio.quality.lossless": "Lossless",
"settings.header.audio.quality.lossless.description": "sampai dari 24-bit/48 kHz",
"settings.header.audio.quality.high": "Tinggi",
"settings.header.audio.quality.high.description": "256 kbps",
"settings.header.audio.quality.standard": "Standar",
"settings.header.audio.quality.standard.description": "64 kbps",
"settings.option.audio.seamlessTransition": "Transisi Audio Mulus", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Aktifkan Fungsi Lanjutan", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "Mengaktifkan fungsionalitas AudioContext memungkinkan fitur audio lanjutan seperti Normalisasi Audio, Equalizer dan Visualizer. Namun pada beberapa perangkat dapat menyebabkan tersendatnya audio.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Peningkatan Psikoakustik yang membuat semuanya terdengar lebih jelas dan lebih hidup | Dirancang oleh Maikiwi.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Kekuatan CAP", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Mengubah kekuatan pemrosesan yang dilakukan pada audio. (Agresif dapat menghasilkan hasil yang tidak diinginkan)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standar",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agresif",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalisasi Audio", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Menormalkan puncak volume untuk masing-masing lagu demi menciptakan pengalaman mendengarkan yang lebih seragam.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Spasialisasi Audio", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Atur ruang audio dan buat audio lebih 3 dimensi (NB: Bukan Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Visual",
"settings.header.visual.description": "Sesuaikan pengaturan visual untuk Cider.",
"settings.option.visual.windowBackgroundStyle": "Gaya Latar Belakang Jendela", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "Tidak Ada",
"settings.header.visual.windowBackgroundStyle.artwork": "Artwork",
"settings.header.visual.windowBackgroundStyle.image": "Gambar",
"settings.option.visual.animatedArtwork": "Artwork Bergerak", // Dropdown
"settings.header.visual.animatedArtwork.always": "Selalu",
"settings.header.visual.animatedArtwork.limited": "Terbatas untuk halaman dan entri khusus",
"settings.header.visual.animatedArtwork.disable": "Matikan di semua tempat",
"settings.option.visual.animatedArtworkQuality": "Kualitas Artwork Bergerak", // Dropdown
"settings.header.visual.animatedArtworkQuality.low": "Rendah",
"settings.header.visual.animatedArtworkQuality.medium": "Medium",
"settings.header.visual.animatedArtworkQuality.high": "Tinggi",
"settings.header.visual.animatedArtworkQuality.veryHigh": "Sangat Tinggi",
"settings.header.visual.animatedArtworkQuality.extreme": "Paling Tinggi",
"settings.option.visual.animatedWindowBackground": "Jendela Latar Belakang Bergerak", // Toggle
"settings.option.visual.hardwareAcceleration": "Akselerasi Perangkat Keras (HW Acceleration)", // Dropdown
"settings.option.visual.hardwareAcceleration.description": "Membutuhkan dibuka ulang",
"settings.header.visual.hardwareAcceleration.default": "Default",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "Tema",
// Settings - Visual - Theme name
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Gelap",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Tampilkan Info Pribadi", // Toggle
// Settings - Lyrics
"settings.header.lyrics": "Lyrics",
"settings.header.lyrics.description": "Sesuaikan pengaturan lirik untuk Cider.",
"settings.option.lyrics.enableMusixmatch": "Aktifkan Lirik Musixmatch", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "Aktifkan Mode Karaoke (khusus Musixmatch)", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Bahasa Terjemahan Musixmatch", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "Aktifkan Lirik Youtube untuk Video Musik", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "Konektivitas",
"settings.header.connectivity.description": "Sesuaikan pengaturan konektivitas untuk Cider.",
"settings.option.connectivity.discordRPC": "Discord Rich Presence", // Dropdown
"settings.option.connectivity.playbackNotifications": "Pemberitahuan Pemutaran", // Toggle
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "Tampilkan sebagai 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "Tampilkan sebagai 'Apple Music'",
"settings.option.connectivity.discordRPC.clearOnPause": "Sembunyikan Discord Rich Presence saat dijeda", // Toggle
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling", // Option to Connect
"settings.option.connectivity.lastfmScrobble.delay": "Delay Last.fm Scrobble (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Aktifkan Last.fm Now Playing",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Hapus featuring artist dari judul lagu (Last.fm)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filter lagu yang diulang (Last.fm)",
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "Eksperimental",
"settings.header.experimental.description": "Sesuaikan pengaturan eksperimental untuk Cider.",
"settings.option.experimental.compactUI": "UI Kompak", // Toggle
"settings.option.experimental.close_button_hide": "Tombol Tutup Menyembunyikan Aplikasi",
"settings.option.experimental.copy_log": "Salin log ke clipboard",
"settings.option.experimental.inline_playlists": "Playlist dan Album Sebaris",
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "Spasialisasi Audio dinonaktifkan. Untuk menggunakan, aktifkan terlebih dahulu.",
"spatial.spatialProperties": "Spatial Properties",
"spatial.width": "Lebar",
"spatial.height": "Tinggi",
"spatial.depth": "Kedalaman",
"spatial.gain": "Gain",
"spatial.roomMaterials": "Bahan Ruangan",
"spatial.roomDimensions": "Dimensi Ruangan",
"spatial.roomPositions": "Posisi Ruangan",
"spatial.setDimensions": "Atur Dimensi",
"spatial.setPositions": "Atur Posisi",
"spatial.up": "Atas",
"spatial.front": "Depan",
"spatial.left": "Kiri",
"spatial.right": "Kanan",
"spatial.back": "Belakang",
"spatial.down": "Bawah",
"spatial.listener": "Pendegar",
"spatial.audioSource": "Sumber Audio",
// Settings - Unfinished
"settings.header.unfinished": "Belum Diselesaikan",
// Web Remote
"remote.web.title": "Remote Cider",
"remote.web.description": "Pindai kode QR untuk memasangkan ponsel Anda dengan Cider.",
// About
"about.thanks": "Terima kasih yang sebesar-besarnya kepada Cider Collective Team dan semua kontributor kami."
}

View file

@ -1,4 +1,4 @@
{ // Base File
{
// i18n Info
"i18n.languageName": "Italiano", // name of language in native language
@ -19,6 +19,7 @@
"notification.updatingLibrarySongs": "Aggiornamento raccolta brani...",
"notification.updatingLibraryAlbums": "Aggornamento raccolta album...",
"notification.updatingLibraryArtists": "Aggiornamento raccolta artisti...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
@ -134,13 +135,14 @@
"home.madeForYou": "Per Te",
"home.friendsListeningTo": "Ascoltato da Amici",
"home.followedArtists": "Artisti Seguiti",
// Errors
"error.appleMusicSubRequired": "Apple Music ha bisogno di un abbonamento.",
"error.connectionError": "C'è stato un problema nella connessione a Apple Music.",
"error.noResults": "Nessun risultato.",
"error.noResults.description": "Prova un'altra ricerca.",
//Podcasts
// Podcasts
"podcast.followOnCider": "Segui in Cider",
"podcast.followedOnCider": "Seguiti in Cider",
"podcast.subscribeOnItunes": "Iscriviti in iTunes",
@ -191,7 +193,6 @@
"action.import": "Importa",
"action.export": "Esporta",
"action.showAlbum": "Mostra Album Intero",
// Waiting on Core for moving plugin to app.ts
"action.tray.minimize": "Minimizza nel tray",
"action.tray.quit": "Chiudi",
"action.tray.show": "Mostra",
@ -206,6 +207,8 @@
"settings.option.general.language.fun": "Lingue da Scherzo",
"settings.option.general.language.unsorted": "Non ordinato",
// Update Cider
// Settings - Audio
"settings.header.audio": "Audio",
"settings.header.audio.description": "Cambia le impostazioni di audio di Cider.",
@ -220,6 +223,7 @@
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizza il volume massimo nei brani per un'esperienza d'ascolto più uniforme.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Spazializzazione Audio", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spazializza l'audio per dare un effetto più tridimensionale (nota: questo non è Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Visuale",
"settings.header.visual.description": "Cambia le impostazioni visuali per Cider.",
@ -242,6 +246,9 @@
"settings.option.visual.hardwareAcceleration.description": "Richiede riavvio del'app",
"settings.header.visual.hardwareAcceleration.default": "Normale",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Settings - Visual - Theme name
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Mostra Informazione Personale", // Toggle
@ -277,8 +284,8 @@
"settings.option.experimental.closeButtonBehaviour.quit": "Chiudi Cider",
"settings.option.experimental.closeButtonBehaviour.minimizeTaskbar": "Minimizza",
"settings.option.experimental.closeButtonBehaviour.minimizeTray": "Minimizza Nel Tray",
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "Spazializzazione Audio è disattivata. Attivala prima.",
"spatial.spatialProperties" : "Proprietà Spaziali",

View file

@ -1,15 +1,16 @@
{
// i18n Info
"i18n.languageName": "日本語", // name of language in native language
"i18n.languageNameEnglish": "Japanese", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@maikirakiwi", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cider",
"date.format": "${y}年${m}月${d}日",
// i18n Info
"i18n.languageName": "日本語", // name of language in native language
"i18n.languageNameEnglish": "Japanese", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@maikirakiwi", // Authors, if you contribute to this file feel free to add your name seperated with a space
// Dialogs
"dialog.cancel": "キャンセル",
"dialog.ok": "OK",
@ -85,7 +86,7 @@
"term.less": "減らす",
"term.showMore": "もっと見る",
"term.showLess": "表示数を少なくする",
"term.topSongs" : "トップソング",
"term.topSongs": "トップソング",
"term.latestReleases": "ニューリリース",
"term.time.added": "追加日",
"term.time.released": "配信開始日",
@ -118,7 +119,6 @@
"term.menu": "メニュー",
"term.check": "確認",
"term.aboutArtist": "{{artistName}}について", // e.g. 'About Doja Cat'
"term.updateCider": "Cider 更新",
// Home
"home.title": "ホーム",
@ -129,13 +129,14 @@
"home.madeForYou": "あなたにおすすめ",
"home.friendsListeningTo": "友達が聴いている",
"home.followedArtists": "フォローしているアーティスト",
// Errors
"error.appleMusicSubRequired": "Apple Musicのサブスクリプションが必要です。",
"error.connectionError": "Apple Musicに接続できません。",
"error.noResults": "見つかりませんでした",
"error.noResults.description": "もう一度お試しください。",
//Podcasts
// Podcasts
"podcast.followOnCider": "Ciderでフォロー",
"podcast.followedOnCider": "フォロー中",
"podcast.subscribeOnItunes": "iTunesで購読",
@ -190,8 +191,17 @@
"action.tray.show": "表示",
"action.update": "アップデート",
"action.copy": "コピー",
"action.newpreset": "ニュープリセット", // Equalizer Preset
"action.deletepreset": "プリセットを削除", // Equalizer Preset
"action.newpreset": "ニュープリセット", // Equalizer Preset
"action.deletepreset": "プリセットを削除", // Equalizer Preset
// Settings - General
"settings.header.general": "一般",
"settings.header.general.description": "Ciderの一般設定",
// Language optgroups
// Update Cider
"settings.option.general.updateCider": "Cider 更新", // Button
// Settings - Audio
"settings.header.audio": "オーディオ",
@ -203,12 +213,12 @@
"settings.header.audio.quality.lossless.description": "(最大解像度 24 ビット48 kHz)",
"settings.header.audio.quality.enhanced": "エンハンスド",
"settings.header.audio.quality.high": "高品質",
"settings.header.audio.quality.low": "高効率",
"settings.header.audio.quality.standard": "高効率",
"settings.header.audio.quality.auto": "自動",
"settings.option.audio.seamlessTransition": "曲間なしで再生", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "先進的な機能", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "AudioContext 機能を有効にすると、オーディオノーマライズ、空間オーディオ、イコライザーなどの機能を使用できますが、音が途切れるかもしれません。", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider AEP", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider AEP™️", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "圧縮音源を高解像度に処理することによって、ロスレス相当の音質に向上させます。", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "AEPの強さ", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the strength of the processing done to the audio. (Aggressive may yield undesirable results)",
@ -218,6 +228,7 @@
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "さまざまな曲の音量を均一にし、より整った音を楽しめるようにする機能です。",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "オーディオ空間化", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "オーディオを空間に分散させる機能です。 (ドルビーアトモスではありません)",
// Settings - Visual
"settings.header.visual": "ビジュアル",
"settings.header.visual.description": "Ciderのビジュアル設定",
@ -239,11 +250,12 @@
"settings.option.visual.hardwareAcceleration.description": "アプリを再起動する必要があります",
"settings.header.visual.hardwareAcceleration.default": "既定",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Settings - Visual - Theme name
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "プロフィールを表示", // Toggle
// Settings - General (Reserved)
"settings.header.general": "一般",
"settings.header.general.description": "Ciderの一般設定",
// Settings - Lyrics
"settings.header.lyrics": "歌詞",
@ -272,27 +284,27 @@
"settings.header.experimental.description": "開発中の実験的な機能は不完全で不安定である可能性があります",
"settings.option.experimental.compactUI": "コンパクトインターフェース", // Toggle
"settings.option.experimental.close_button_hide": "「閉じる」ボタンでアプリを隠します", // Dropdown
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.spatialProperties" : "空間化のプロパティ",
"spatial.width" : "幅",
"spatial.height" : "高さ",
"spatial.depth" : "奥行",
"spatial.gain" : "ゲイン",
"spatial.roomMaterials" : "部屋のマテリアル",
"spatial.roomDimensions" : "部屋の大きさ",
"spatial.roomPositions" : "部屋の位置",
"spatial.setDimensions" : "大きさを設定",
"spatial.setPositions" : "位置を設定",
"spatial.up" : "上",
"spatial.front" : "前",
"spatial.left" : "左",
"spatial.right" : "右",
"spatial.back" : "後",
"spatial.down" : "下",
"spatial.listener" : "リスナー",
"spatial.audioSource" : "音源",
"spatial.spatialProperties": "空間化のプロパティ",
"spatial.width": "幅",
"spatial.height": "高さ",
"spatial.depth": "奥行",
"spatial.gain": "ゲイン",
"spatial.roomMaterials": "部屋のマテリアル",
"spatial.roomDimensions": "部屋の大きさ",
"spatial.roomPositions": "部屋の位置",
"spatial.setDimensions": "大きさを設定",
"spatial.setPositions": "位置を設定",
"spatial.up": "上",
"spatial.front": "前",
"spatial.left": "左",
"spatial.right": "右",
"spatial.back": "後",
"spatial.down": "下",
"spatial.listener": "リスナー",
"spatial.audioSource": "音源",
// Settings - Unfinished
"settings.header.unfinished": "未完成",
@ -303,5 +315,4 @@
//About
"about.thanks": "Cider Collective とご協力いただいた貢献者様に感謝申し上げます。"
}

View file

@ -1,4 +1,4 @@
{ // Base File
{
// i18n Info
"i18n.languageName": "한국어 (KR)", // name of language in native language
@ -19,6 +19,7 @@
"notification.updatingLibrarySongs": "라이브러리의 노래를 업데이트하는 중입니다...",
"notification.updatingLibraryAlbums": "라이브러리의 앨범을 업데이트하는 중입니다...",
"notification.updatingLibraryArtists": "라이브러리의 아티스트를 업데이트하는 중입니다...",
// Terms
"term.appleInc": "Apple Inc.", // Follows brand term
"term.appleMusic": "Apple Music", // Follows brand term
@ -127,7 +128,6 @@
"term.menu": "메뉴",
"term.check": "확인",
"term.aboutArtist": "{{artistName}}에 대하여", // e.g. 'About Doja Cat'
"term.updateCider": "Cider 업데이트",
"term.topResult": "Top Result", // Search Results
"term.sharedPlaylists": "공유 플레이리스트", // Search Results
"term.people": "프로필", // Search Results
@ -153,13 +153,14 @@
"home.madeForYou": "나만을 위한 추천",
"home.friendsListeningTo": "친구가 듣는 음악",
"home.followedArtists": "팔로우한 아티스트",
// Errors
"error.appleMusicSubRequired": "Apple Music은 구독을 필요로 합니다.",
"error.connectionError": "Apple Music에 연결하지 못했습니다.",
"error.noResults": "결과 없음",
"error.noResults.description": "다시 시도해주세요.",
//Podcasts
// Podcasts
"podcast.followOnCider": "Cider에서 팔로우하기",
"podcast.followedOnCider": "팔로우 중",
"podcast.subscribeOnItunes": "iTunes에서 구독",
@ -228,6 +229,9 @@
"settings.option.general.language.fun": "재미를 위한 언어",
"settings.option.general.language.unsorted": "미분류",
// Update Cider
"settings.option.general.updateCider": "Cider 업데이트", // Button
// Settings - Audio
"settings.header.audio": "오디오",
"settings.header.audio.description": "Cider의 오디오 기능을 설정합니다.",
@ -242,6 +246,7 @@
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "개별 트랙의 최대 볼륨을 정규화하여 보다 균일한 청취 경험을 제공합니다.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "오디오 공간화", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "오디오를 공간화하고 더욱 3차원적으로 만들어줍니다. (참고: 이 기능은 Dolby Atmos가 아닙니다.)",
// Settings - Visual
"settings.header.visual": "시각",
"settings.header.visual.description": "Cider의 시각 기능을 설정합니다.",
@ -304,8 +309,8 @@
"settings.option.experimental.close_button_hide": "닫기 버튼이 애플리케이션을 가릴 것입니다",
"settings.option.experimental.copy_log": "로그를 클립보드에 복사하기",
"settings.option.experimental.inline_playlists": "인라인 플레이리스트 및 앨범",
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "오디오 공간화가 비활성화되어있습니다. 사용하기 전에 먼저 활성화해주세요.",
"spatial.spatialProperties": "공간 설정",

View file

@ -1,15 +1,16 @@
{ // Base File
{
// i18n Info
"i18n.languageName": "Português ( brasileiro )", // name of language in native language
"i18n.languageNameEnglish": "Portuguese (Brazil)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cider",
"date.format": "${d} ${m}, ${y}",
// i18n Info
"i18n.languageName": "Português ( brasileiro )", // name of language in native language
"i18n.languageNameEnglish": "Portuguese (Brazil)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "", // Authors, if you contribute to this file feel free to add your name seperated with a space
// Dialogs
"dialog.cancel": "Cancelar",
"dialog.ok": "OK",
@ -105,6 +106,7 @@
"home.madeForYou": "Feito para Você",
"home.friendsListeningTo": "Amigos Ouvindo",
"home.followedArtists": "Artistas Seguidos",
// Errors
"error.appleMusicSubRequired": "Necessário uma assinatura Apple Music.",
@ -142,6 +144,15 @@
"action.dislike": "Não Gostar",
"action.undoDislike": "Deixar de Não Gostar",
"action.showWebRemoteQR": "Mostrar o QR para Página Remota",
// Settings - General
"settings.header.general": "Principal",
"settings.header.general.description": "Ajustar as definiçoes principais no Cider.",
// Language optgroups
// Update Cider
// Settings - Audio
"settings.header.audio": "Audio",
"settings.header.audio.description": "Ajustar as definições de audio no Cider.",
@ -156,6 +167,7 @@
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normaliza o volume alto para faixas individuais para criar uma experiência de audição mais uniforme.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Espacial", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Espacialize o áudio e torne o áudio mais tridimensional (nota: isto não é Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Visual",
"settings.header.visual.description": "Ajustar as Definições de Visual do Cider.",
@ -178,12 +190,10 @@
"settings.header.visual.hardwareAcceleration.default": "Normal",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Settings - Visual - Theme name
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Mostrar Informaçoes Pessoais", // Toggle
// Settings - General (Reserved)
"settings.header.general": "Principal",
"settings.header.general.description": "Ajustar as definiçoes principais no Cider.",
// Settings - Lyrics
"settings.header.lyrics": "Letras",
@ -211,8 +221,8 @@
"settings.header.experimental": "Experimental",
"settings.header.experimental.description": "Ajustar as definições experimental no Cider.",
"settings.option.experimental.compactUI": "UI Compacto", // Toggle
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.spatialProperties" : "Propriedades do Espacial",
"spatial.width" : "Largura",
@ -232,13 +242,12 @@
"spatial.listener" : "Ouvinte",
"spatial.audioSource" : "Fonte de Audio",
// Settings - Unfinished
"settings.header.unfinished": "Inacabado",
// Web Remote
"remote.web.title": "Cider Remoto",
"remote.web.description": "Digitalize o código QR para emparelhar seu telefone com esta instância Cider"
// About
}

330
src/i18n/sk_SK.jsonc Normal file
View file

@ -0,0 +1,330 @@
{
// i18n Info
"i18n.languageName": "Slovenčina (SK)", // name of language in native language
"i18n.languageNameEnglish": "Slovak (SK)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@jurosic-JurajJanosik", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cider",
"date.format": "${d} ${m}, ${y}",
// Dialogs
"dialog.cancel": "Zrušit",
"dialog.ok": "OK",
// Notification
"notification.updatingLibrarySongs": "Aktualizujem pesničky v knižnici...",
"notification.updatingLibraryAlbums": "Aktualizujem albumy v knižnici...",
"notification.updatingLibraryArtists": "Aktualizujem tvorcov v knižnici...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts",
"term.itunes": "iTunes",
"term.github": "GitHub",
"term.discord": "Discord",
"term.learnMore": "Zistiť viac",
"term.accountSettings": "Nastavenia účtu",
"term.logout": "Odhlásiť",
"term.login": "Prihlásiť",
"term.about": "About",
"term.privateSession": "Skuromn Počúvanie",
"term.queue": "Poradie",
"term.search": "Vyhládavať",
"term.library": "Knižnica",
"term.listenNow": "Počúvať teraz",
"term.browse": "Prehliadávať",
"term.radio": "Rádio",
"term.recentlyAdded": "Nedávno Pridané",
"term.songs": "Pesničky",
"term.albums": "Albumy",
"term.artists": "Tvorcovia",
"term.podcasts": "Podcasty",
"term.playlists": "Playlisty",
"term.playlist": "Playlist",
"term.newPlaylist": "Nový Playlist",
"term.newPlaylistFolder": "Nový Priečinok Playlistov",
"term.createNewPlaylist": "Urobiť Nový Playlist",
"term.createNewPlaylistFolder": "Urobiť Nový Priečinok Playlistov",
"term.deletePlaylist": "Ste si istý že chcete zmazat tento playlist?",
"term.play": "Play",
"term.pause": "Pause",
"term.previous": "Previous",
"term.next": "Next",
"term.shuffle": "Shuffle",
"term.repeat": "Repeat",
"term.volume": "Hlasitosť",
"term.mute": "Ztlmiť",
"term.unmute": "Vypnúť Ztlmenie",
"term.share": "Zdielať",
"term.settings": "Nastavenia",
"term.seeAll": "Vidieť Všetko",
"term.sortBy": "Zodariť Podľa",
"term.sortBy.album": "Album",
"term.sortBy.artist": "Tvorca",
"term.sortBy.name": "Názov",
"term.sortBy.genre": "Žáner",
"term.sortBy.releaseDate": "Dátum Vydania",
"term.sortBy.duration": "Dĺžka",
"term.sortOrder": "A-Z",
"term.sortOrder.ascending": "Vzostupne",
"term.sortOrder.descending": "Zostupne",
"term.viewAs": "Zobraziť Ako",
"term.viewAs.coverArt": "Náhľadovka",
"term.viewAs.list": "List",
"term.size": "Velkosť",
"term.size.normal": "Normálny",
"term.size.compact": "Kompaktný",
"term.enable": "Zapnúť",
"term.disable": "Vypnúť",
"term.enabled": "Zapnuté",
"term.disabled": "Vypnuté",
"term.connect": "Pripojiť",
"term.connecting": "Pripájam",
"term.disconnect": "Odpojiť",
"term.authed": "Authentikovaný",
"term.confirm": "Podvrdiť ?",
"term.more": "Viac",
"term.less": "Menej",
"term.showMore": "Ukázať viac",
"term.showLess": "Ukázať menej",
"term.topSongs" : "Top Pesničky",
"term.latestReleases": "Najnovšie vydania",
"term.time.added": "Pridané",
"term.time.released": "Vydané",
"term.time.updated": "Aktualizované",
"term.time.hours": "hodín",
"term.time.hour": "hodina",
"term.time.minutes": "minút",
"term.time.minute": "minúta",
"term.time.seconds": "sekúnd",
"term.time.second": "sekunda",
"term.fullscreenView": "Zobrazenie na celej obrazovke",
"term.defaultView": "Default View",
"term.audioSettings": "Nastavenia Zvuku",
"term.clearAll": "Vyčistiť Všetko",
"term.recentStations": "Nedávne Stanice",
"term.language": "Jazyk",
"term.funLanguages": "Zábava",
"term.noLyrics": "Načítavam... / Text nebol najdený./ Instrumental.",
"term.copyright": "Copyright",
"term.rightsReserved": "All Rights Reserved.",
"term.sponsor": "Sponzoruj tento projekt",
"term.ciderTeam": "Cider Team",
"term.developer": "Developer",
"term.socialTeam": "Social Team",
"term.socials": "Socials",
"term.contributors": "Contributors",
"term.equalizer": "Equalizer",
"term.reset": "Resetovať",
"term.tracks": "pesničiek", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "Videá",
"term.menu": "Menu",
"term.check": "Skontrolovať",
"term.aboutArtist": "Viac o {{artistName}}", // e.g. 'About Doja Cat'
// Home
"home.title": "Domov",
"home.recentlyPlayed": "Nedávno Prehrané",
"home.recentlyAdded": "Nedávno Pridané",
"home.artistsFeed": "Feed Tvojho Tvorcu",
"home.artistsFeed.noArtist": "Najprv sleduj niektorých tvorcov, ich pesničky potom budú tu",
"home.madeForYou": "Robené Pre Teba",
"home.friendsListeningTo": "Kamaráti počúvajú",
"home.followedArtists": "Sledovaný Tvorcovia",
// Errors
"error.appleMusicSubRequired": "Apple Music potrebuje subscription.",
"error.connectionError": "Pri pripojovaní ku Apple Music sa vyskytol problém",
"error.noResults": "Žiadne výsledky",
"error.noResults.description": "Skús nové vyhľádavanie",
// Podcasts
"podcast.followOnCider": "Sleduj na Cider",
"podcast.followedOnCider": "Sledované na Cider",
"podcast.subscribeOnItunes": "Odoberaj na iTunes",
"podcast.subscribedOnItunes": "Odoberane na iTunes",
"podcast.itunesStore": "iTunes Obchod",
"podcast.episodes": "Epizódy",
"podcast.playEpisode": "Prehraj Epizódu",
"podcast.website": "Stránka Podcastu",
// Actions
"action.addToLibrary": "Pridaj do Knižnice",
"action.addToLibrary.success": "Pridané do Knižnice",
"action.addToLibrary.error": "Pri pridávani do Knižnice sa vzskytol problém",
"action.removeFromLibrary": "Odstrániť z Knižnice",
"action.removeFromLibrary.success": "Odstránene z Knižnice",
"action.addToQueue": "Pridať do Poradia",
"action.addToQueue.success": "Pridané do Poradia",
"action.addToQueue.error": "Pri pridávaní do Poradia sa vyskytol problém",
"action.removeFromQueue": "Odstrániť z Poradia",
"action.removeFromQueue.success": "Odstránené z Poradia",
"action.removeFromQueue.error": "Pri odstranovaní z Poradia sa vyskytol probém",
"action.createPlaylist": "Urobiť nový Playlist",
"action.addToPlaylist": "Pridať do Playlistu",
"action.removeFromPlaylist": "Odstrániť z Playlistu",
"action.addToFavorites": "Pridať do Obľubéných",
"action.follow": "Sledovať",
"action.follow.success": "Sleduješ",
"action.follow.error": "Pri Sledovaní sa vyskytol problém",
"action.unfollow": "Zrušit Sledovanie",
"action.unfollow.success": "Sledovanie Zrušené",
"action.unfollow.error": "Pri zrušení sledovania sa vyskytol problém",
"action.playNext": "Hrať Ďalšie",
"action.playLater": "Hrať Neskor",
"action.startRadio": "Zapnúť Rádio",
"action.goToArtist": "Ku Tvorcovi",
"action.goToAlbum": "Ku Albumu",
"action.moveToTop": "Premiestniť Hore",
"action.share": "Zdielať",
"action.rename": "Premenovať",
"action.love": "Love",
"action.unlove": "Unlove",
"action.dislike": "Dislike",
"action.undoDislike": "Zrušiť dislike",
"action.showWebRemoteQR": "Web Remote",
"action.playTracksNext": "Hrať ${app.selectedMediaItems.length} pesničiek ďalej",
"action.playTracksLater": "Hrať ${app.selectedMediaItems.length} pesničiek neskôr",
"action.removeTracks": "Odstrániť ${self.selectedItems.length} pesničiek z poradia",
"action.import": "Importovať",
"action.export": "Exportovať",
"action.showAlbum": "Zobraziť Celý Album",
"action.tray.minimize": "Minimaizovať",
"action.tray.quit": "Odísť",
"action.tray.show": "Ukázať",
"action.update": "Aktualizovať",
// Settings - General
"settings.header.general": "Všeobecné",
"settings.header.general.description": "Zmeniť všeobecné nastavenia pre Cider.",
"settings.option.general.language": "Jazyk",
// Language optgroups
"settings.option.general.language.main": "Jazyky",
"settings.option.general.language.fun": "Zábanve Jazyky",
"settings.option.general.language.unsorted": "Nepotriedené",
// Update Cider
"settings.option.general.updateCider": "Aktualizovať Cider",
// Settings - Audio
"settings.header.audio": "Zvuk",
"settings.header.audio.description": "Zmeniť nastavenia zvuku pre Cider.",
"settings.option.audio.quality": "Kvalita zvuku", // Dropdown
"settings.header.audio.quality.high": "Vysoká",
"settings.header.audio.quality.low": "Nizká",
"settings.header.audio.quality.auto": "Automatické",
"settings.option.audio.seamlessTransition": "Hladký Prevod Zvuku", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Zapnút Pokročilé Nastavenia Zvuku", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "Zapnutie AudioContext funkcionality dovolí rozšírené funkcie zvuku ako Zvuková Normalizávia , Equalizéry a Visualízery, ale na niektorých systémoch to može spôsobiť problémy so zvukom.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoakustické Vylepšenia ktoré urobia zvuk viac bohatý a živý | Urobil Maikiwi.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Sila", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Zmení silu CAP (Agresívná môže spôsobiť nežiadané výsledky)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Štandardná",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agresívná",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalízacia Zvuku", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizuje silu zvuku v pesničkách pre hľadší počúvací zážitok",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Priestorový Zvuk", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Priestorový zvuk urobí zvuk 3-dimenzionálny (poznámka: Toto nie je Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Visuálne",
"settings.header.visual.description": "Zmenit Visuálne nastavenia pre Cider.",
"settings.option.visual.windowBackgroundStyle": "Štýl pozadia okna", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "Žiadne",
"settings.header.visual.windowBackgroundStyle.artwork": "Náhľadovka",
"settings.header.visual.windowBackgroundStyle.image": "Obrátok",
"settings.option.visual.animatedArtwork": "Animované Náhľadovky", // Dropdown
"settings.header.visual.animatedArtwork.always": "Vždy",
"settings.header.visual.animatedArtwork.limited": "Limitované pre stránky a špecialne vydania",
"settings.header.visual.animatedArtwork.disable": "Vypnuť Všade",
"settings.option.visual.animatedArtworkQuality": "Kvalita Animovanej Náhľadovky", // Dropdown
"settings.header.visual.animatedArtworkQuality.low": "Nízka",
"settings.header.visual.animatedArtworkQuality.medium": "Stredná",
"settings.header.visual.animatedArtworkQuality.high": "Vysoká",
"settings.header.visual.animatedArtworkQuality.veryHigh": "Veľmi Vysoká",
"settings.header.visual.animatedArtworkQuality.extreme": "Extrémna",
"settings.option.visual.animatedWindowBackground": "Pozadie Animováneho Okna", // Toggle
"settings.option.visual.hardwareAcceleration": "Hardvérova Akcelerácia", // Dropdown
"settings.option.visual.hardwareAcceleration.description": "Vyžaduje Reštart",
"settings.header.visual.hardwareAcceleration.default": "Predvoľba",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "Theme",
// Settings - Visual - Theme name
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Dark",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Zobraziť osobné informácie", // Toggle
// Settings - Lyrics
"settings.header.lyrics": "Text",
"settings.header.lyrics.description": "Zmenit nastavenia textu pre Cider.",
"settings.option.lyrics.enableMusixmatch": "Zapnúť Musixmatch Texty", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "Zapnúť Karaoke Režim (Iba pre Musixmatch)", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Predvolený jazyk pre Musixmatch prekladanie", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "Zapnúť Youtube Lyrics pre videá", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "Konektivita",
"settings.header.connectivity.description": "Zmeniť nastavenia konektivity pre Cider.",
"settings.option.connectivity.discordRPC": "Zobraziť status v Discord", // Dropdown
"settings.option.connectivity.playbackNotifications": "Notifikácie", // Toggle
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "Zobraziť ako 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "Zobraziť ako 'Apple Music'",
"settings.option.connectivity.discordRPC.clearOnPause": "Vypnút Discord status pri Pauze", // Toggle
"settings.option.connectivity.lastfmScrobble": "Last.fm zaznamenanie počúvanej hudby", // Option to Connect
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm Oneskorenie (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Zapnúť Last.fm Now Playing",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Odstrániť tvorcov z počúvanej pesničky (Last.fm)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filtrovať loopované pesničky (Last.fm)",
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "Experimentálne",
"settings.header.experimental.description": "Zmeniť experimentálne nastavenia pre Cider.",
"settings.option.experimental.compactUI": "Compact UI", // Toggle
"settings.option.experimental.close_button_hide": "Zatvoriť by malo skriť aplikáciu",
"settings.option.experimental.compactUI": "Kompaktný UI", // Toggle
"settings.option.experimental.close_button_hide": "Zatvaranie aplikácie ju malo skriť",
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "Priestorový Zvuk je vypnutý. Prosím najprv ho zapnite.",
"spatial.spatialProperties": "Špeciálne Nastavenia",
"spatial.width": "Šírka",
"spatial.height": "Výška",
"spatial.depth": "Hĺbka",
"spatial.gain": "Gain",
"spatial.roomMaterials": "Materiály Priestoru",
"spatial.roomDimensions": "Velkosť Priestoru",
"spatial.roomPositions": "Pozicia v Priestoru",
"spatial.setDimensions": "Nastaviť Rozmery",
"spatial.setPositions": "Nastavit Pozíciu",
"spatial.up": "Hore",
"spatial.front": "V predu",
"spatial.left": "V ľavo",
"spatial.right": "V pravo",
"spatial.back": "V zadu",
"spatial.down": "Dole",
"spatial.listener": "Listener",
"spatial.audioSource": "Zdroj zvuku",
// Settings - Unfinished
"settings.header.unfinished": "Nedokončené",
// Web Remote
"remote.web.title": "Cider Remote",
"remote.web.description": "Naskenujte QR kód aby ste si spárovali telefón s touto Cider session",
// About
"about.thanks": "Ďakujeme Cider Tímu, Komunite a Kontribútorom, bez vás by to nebolo možné."
}

View file

@ -1,7 +1,7 @@
{ // Base File
{
// i18n Info
"i18n.languageName": "Svenska (SE)", // name of language in native language
"i18n.languageName": "Svenska (SE)", // name of language in native language
"i18n.languageNameEnglish": "Swedish (SE)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@thisismemeboi", // Authors, if you contribute to this file feel free to add your name seperated with a space
@ -19,6 +19,7 @@
"notification.updatingLibrarySongs": "Uppdaterar låtar i biblioteket...",
"notification.updatingLibraryAlbums": "Uppdaterar album i biblioteket...",
"notification.updatingLibraryArtists": "Uppdaterar artister i biblioteket...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
@ -91,7 +92,7 @@
"term.less": "Mindre",
"term.showMore": "Visa mer",
"term.showLess": "Visa mindre",
"term.topSongs" : "Topplåtar",
"term.topSongs": "Topplåtar",
"term.latestReleases": "Senaste releaserna",
"term.time.added": "Tillagd",
"term.time.released": "Tillagd den",
@ -125,7 +126,6 @@
"term.menu": "Meny",
"term.check": "Sök efter uppdateringar",
"term.aboutArtist": "Om {{artistName}}", // e.g. 'About Doja Cat'
"term.updateCider": "Uppdatera Cider",
// Home
"home.title": "Hem",
@ -136,13 +136,14 @@
"home.madeForYou": "Skapat för dig",
"home.friendsListeningTo": "Vänner lyssnar på",
"home.followedArtists": "Följda artister",
// Errors
"error.appleMusicSubRequired": "Apple Music kräver en prenumeration.",
"error.connectionError": "Ojdå. Det gick inte att ansluta till Apple Music.",
"error.noResults": "Inga träffar.",
"error.noResults.description": "Prova en ny sökning.",
//Podcasts
// Podcasts
"podcast.followOnCider": "Följ på Cider",
"podcast.followedOnCider": "Följer på Cider",
"podcast.subscribeOnItunes": "Följ på iTunes",
@ -208,6 +209,9 @@
"settings.option.general.language.fun": "Roliga språk",
"settings.option.general.language.unsorted": "Osorterade",
// Update Cider
"settings.option.general.updateCider": "Uppdatera Cider", // Button
// Settings - Audio
"settings.header.audio": "Ljud",
"settings.header.audio.description": "Ändra Ciders ljudinställningar.",
@ -222,6 +226,7 @@
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normaliserar höga ljudnivåer för att förbättra ljudkvaliteten.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Spiralljud", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Gör ljudet mer 3D (Ej Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Visuellt",
"settings.header.visual.description": "Ändra Ciders visuella inställningar.",
@ -244,6 +249,9 @@
"settings.option.visual.hardwareAcceleration.description": "kräver omstart",
"settings.header.visual.hardwareAcceleration.default": "Standard",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Settings - Visual - Theme name
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Visa personlig information", // Toggle
@ -276,8 +284,8 @@
"settings.header.experimental.description": "Ändra Ciders experimentella inställningar.",
"settings.option.experimental.compactUI": "Kompakt gränssnitt", // Toggle
"settings.option.experimental.close_button_hide": "Stängknappen gömmer Cider istället",
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "Spiralljud är av. Akrtivera det först.",
"spatial.spatialProperties": "Spiralljudsintällningar",

View file

@ -1,4 +1,5 @@
{
// i18n Info
"i18n.languageName": "Türkçe", // name of language in native language
"i18n.languageNameEnglish": "Turkish", // name of language in English
@ -21,8 +22,8 @@
// Terms
"term.appleInc": "Apple",
"term.appleMusic": "Apple Müzik",
"term.applePodcasts": "Apple Podcastler",
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts",
"term.itunes": "iTunes",
"term.github": "GitHub",
"term.discord": "Discord",
@ -124,6 +125,25 @@
"term.time.second": "saniye",
"term.videos": "Video Klipler",
"term.menu": "Menü",
"term.check": "Şimdi Kontrol Et",
"term.aboutArtist": "About {{artistName}}", // e.g. 'About Doja Cat'
"term.updateCider": "Güncellemeleri Denetle",
"term.share.success": "Panoya Kopyalandı",
"term.topResult": "En İyi Sonuç", // Search Results
"term.sharedPlaylists": "Paylaşılan Listeler", // Search Results
"term.people": "Kişiler", // Search Results
"term.newpreset.name": "Yeni Önayar İsmi", // Equalizer Preset
"term.addedpreset": "Önayar Kaydedildi",
"term.deletepreset.warn": "Bu önayarı silmek istediğinize emin misiniz?",
"term.deletedpreset": "Önayar Silindi",
"term.musicVideos": "Video Klipler", // Search page friendlyTypes
"term.stations": "İstasyonlar",
"term.curators": "Editörler",
"term.appleCurators": "Apple Editörleri",
"term.radioShows": "Radio Şovları",
"term.recordLabels": "Kayıt Stüdyoları",
"term.videoExtras": "Ekstra Videolar",
"term.top": "En İyi",
// Home
"home.title": "Ana Sayfa",
@ -141,7 +161,7 @@
"error.noResults": "Hiç sonuç yok",
"error.noResults.description": "Tekrar deneyin.",
//Podcasts
// Podcasts
"podcast.followOnCider": "Cider'de Takip Et",
"podcast.followedOnCider": "Cider'de Takip Ediliyor",
"podcast.subscribeOnItunes": "itunes'de Abone Ol",
@ -193,8 +213,12 @@
"action.export": "Export",
"action.showAlbum": "Tüm Albümü Göster",
"action.tray.minimize": "Görev Çubuğuna Küçült",
"action.tray.quit": "'den Çık",
"action.tray.show": "'i Göster",
"action.tray.quit": ık",
"action.tray.show": "Göster",
"action.update": "Güncelle",
"action.copy": "Kopyala",
"action.newpreset": "Yeni Önayar...", // Equalizer Preset
"action.deletepreset": "Önayarı Sil",
// Settings - General
"settings.header.general": "Genel Ayarlar",
@ -206,16 +230,35 @@
"settings.option.general.language.fun": "Mizahi Diller",
"settings.option.general.language.unsorted": "Henüz Tamamlanmamış Diller",
// Update Cider
"settings.option.general.updateCider": "Güncellemeleri Kontrol Et", // Button. Refer to term.check for the check button
"settings.option.general.updateCider.branch": "Seçilen GitHub Versiyonu", // Dropdown
"settings.option.general.updateCider.branch.description": "Cider'in hangi versiyonuna güncelleneceğini seçin",
"settings.option.general.updateCider.branch.main": "Stabil",
"settings.option.general.updateCider.branch.develop": "Deneysel",
// Settings - Audio
"settings.header.audio": "Çalma / Oynatma",
"settings.header.audio.description": "Cider'in sizin için en iyi dinleme deneyimini sağlayabilmesi için ses ayarlarınızı yapın.",
"settings.option.audio.quality": "Ses Kalitesi", // Dropdown
"settings.header.audio.quality.hireslossless": "Yüksek Çözünürlüklü Kayıpsız",
"settings.header.audio.quality.hireslossless.description": "24-bit/192 kHz'e kadar",
"settings.header.audio.quality.lossless": "Kayıpsız",
"settings.header.audio.quality.lossless.description": "24-bit/48 kHz'e kadar",
"settings.header.audio.quality.high": "Yüksek Kalite",
"settings.header.audio.quality.low": "Yüksek Verimlilik",
"settings.header.audio.quality.high.description": "256 kbps",
"settings.header.audio.quality.standard": "Standart",
"settings.header.audio.quality.standard.description": "64 kbps",
"settings.header.audio.quality.auto": "Otomatik",
"settings.option.audio.seamlessTransition": "Kesintisiz Ses Geçişi", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Gelişmiş Ses Deneyimi", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "Gelişmiş ses deneyiminin etkinleştirilmesi, Ses Normalleştirme, Ekolayzer ve Görselleştirici gibi genişletilmiş ses özelliklerine izin verir, ancak bu durum bazı sistemlerde seste bozulmalara neden olabilir.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenalin Prosesörü™", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Müziğin hem daha zengin hem de daha canlı duyulmasını sağlayan Psikoakustik Geliştirme Sistemi | Maikiwi tarafından tasarlanmıştır.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Kuvveti", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Sese yapılan işlemin gücünü değiştirir. (Agresif istenmeyen sonuçlar doğurabilir)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standart",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agresif",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Ses Normalleştirme", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Ses normalleştirme alçak ve yüksek sesli şarkıları dengeler ve daha düzgün bir dinleme deneyimi sağlar.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Uzamsal Ses", // Toggle
@ -243,6 +286,12 @@
"settings.option.visual.hardwareAcceleration.description": "Etki etmesi için uygulamayı yeniden başlatmak gerekir.",
"settings.header.visual.hardwareAcceleration.default": "Varsayılan",
"settings.header.visual.hardwareAcceleration.webGPU": "Gelişmiş",
"settings.header.visual.theme": "Tema",
// Settings - Visual - Theme name
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Karanlık",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Kullanıcı Adımı Göster", // Toggle
@ -274,18 +323,18 @@
"settings.header.experimental": "Deneysel",
"settings.header.experimental.description": "Cider'deki deneysel özelliklere erişim sağlayın. (Not: Bazı özellikler düzgün çalışmayabilir.)",
"settings.option.experimental.compactUI": "Kompakt Arayüz", // Toggle
"settings.option.experimental.closeButtonBehaviour": "Kapat düğmesi davranışı",
"settings.option.experimental.closeButtonBehaviour.quit": "Cider'den çık",
"settings.option.experimental.closeButtonBehaviour.minimizeTaskbar": "Simge durumuna küçült",
"settings.option.experimental.closeButtonBehaviour.minimizeTray": "Görev çubuğuna küçült",
// Refer to term.disabled & term.enabled
"settings.option.experimental.close_button_hide": "Kapatma Düğmesi Cider'i Küçültür",
"settings.option.experimental.copy_log": "Günlüğü Panoya Kopyala",
"settings.option.experimental.inline_playlists": "Listeleri ve Albümleri Açılır Pencere İle göster",
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "Uzamsal ses devre dışı. Kullanabilmek için lütfen önce etkinleştirin.",
"spatial.spatialProperties" : "Uzamsal Özellikler",
"spatial.width" : "Genişlik",
"spatial.height" : "Yükseklik",
"spatial.depth" : "Derinlik",
"spatial.gain" : "Kazanç",
"spatial.roomMaterials" : "Oda Materyalleri",
"spatial.roomDimensions" : "Oda Ölçüleri",
"spatial.roomPositions" : "Oda Pozisyonu",
@ -299,7 +348,6 @@
"spatial.down" : "Aşağı",
"spatial.listener" : "Dinleyici",
"spatial.audioSource" : "Ses Kaynağı",
"spatial.gain" : "Kazanç",
// Settings - Unfinished
"settings.header.unfinished": "Geliştirme Aşamasında",
@ -310,5 +358,4 @@
//About
"about.thanks": "Cider Collective Ekibine ve tüm katkıda bulunanlara çok teşekkür ederiz."
}

View file

@ -1,15 +1,16 @@
{
// i18n Info
"i18n.languageName": "简体中文(中国)", // name of language in native language
"i18n.languageNameEnglish": "Simp. Chinese (China)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@maikirakiwi", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cider",
"date.format": "${y}年${m}月${d}日",
// i18n Info
"i18n.languageName": "简体中文(中国)", // name of language in native language
"i18n.languageNameEnglish": "Simp. Chinese (China)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@maikirakiwi", // Authors, if you contribute to this file feel free to add your name seperated with a space
// Dialogs
"dialog.cancel": "取消",
"dialog.ok": "确定",
@ -85,7 +86,7 @@
"term.less": "较少",
"term.showMore": "显示更多",
"term.showLess": "显示更少",
"term.topSongs" : "热门歌曲",
"term.topSongs": "热门歌曲",
"term.latestReleases": "最新发行",
"term.time.added": "添加于",
"term.time.released": "发行于",
@ -118,7 +119,6 @@
"term.menu": "菜单",
"term.check": "检查",
"term.aboutArtist": "关于{{artistName}}", // e.g. 'About Doja Cat'
"term.updateCider": "更新 Cider",
// Home
"home.title": "主页",
@ -136,7 +136,7 @@
"error.noResults": "没有结果",
"error.noResults.description": "尝试更改搜索条件。",
//Podcasts
// Podcasts
"podcast.followOnCider": "在 Cider 中追踪",
"podcast.followedOnCider": "已追踪",
"podcast.subscribeOnItunes": "在 iTunes 上订阅",
@ -146,7 +146,6 @@
"podcast.playEpisode": "播放单集",
"podcast.website": "Podcast 网站",
// Actions
"action.addToLibrary": "加入资料库",
"action.addToLibrary.success": "成功加入资料库",
@ -192,6 +191,14 @@
"action.tray.show": "显示",
"action.update": "更新",
// Settings - General
"settings.header.general": "通用",
"settings.header.general.description": "调整 Cider 的通用设置",
// Language optgroups
// Update Cider
"settings.option.general.updateCider": "更新 Cider", // Button
// Settings - Audio
"settings.header.audio": "音频",
@ -203,17 +210,18 @@
"settings.header.audio.quality.lossless.description": "(最高 24 位/48 kHz)",
"settings.header.audio.quality.enhanced": "数字增强",
"settings.header.audio.quality.high": "高音质",
"settings.header.audio.quality.low": "高效率",
"settings.header.audio.quality.standard": "高效率",
"settings.header.audio.quality.auto": "自动",
"settings.option.audio.seamlessTransition": "无缝播放", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "进阶功能", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "启用 AudioContext 将解锁例如音量标准化和音频空间化的功能,但可能会在小部分设备上出现音频上的卡顿。",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 数字增强引擎", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 数字增强引擎™️", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "将欺骗您的大脑来感知到近似无损音频的效果。",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音量标准化", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "使所感知到的音频响度统一",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "音频空间化", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "使所感知到的音频更有立体感 (注: 这不是杜比全景声)",
// Settings - Visual
"settings.header.visual": "外观",
"settings.header.visual.description": "调整 Cider 的外观",
@ -235,11 +243,11 @@
"settings.option.visual.hardwareAcceleration.description": "需要重启 Cider 才会生效",
"settings.header.visual.hardwareAcceleration.default": "默认",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Settings - Visual - Theme name
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "显示个人资料", // Toggle
// Settings - General (Reserved)
"settings.header.general": "通用",
"settings.header.general.description": "调整 Cider 的通用设置",
// Settings - Lyrics
"settings.header.lyrics": "歌词",
@ -268,27 +276,27 @@
"settings.header.experimental.description": "调整Cider的实验性功能",
"settings.option.experimental.compactUI": "紧凑型 UI", // Toggle
"settings.option.experimental.close_button_hide": "点击关闭按钮时仅隐藏窗口",
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.spatialProperties" : "空间属性",
"spatial.width" : "宽度",
"spatial.height" : "高度",
"spatial.depth" : "深度",
"spatial.spatialProperties": "空间属性",
"spatial.width": "宽度",
"spatial.height": "高度",
"spatial.depth": "深度",
"spatial.gain": "增益",
"spatial.roomMaterials" : "空间材质",
"spatial.roomDimensions" : "空间尺寸",
"spatial.roomPositions" : "空间位置",
"spatial.setDimensions" : "设置尺寸",
"spatial.setPositions" : "设置位置",
"spatial.up" : "上",
"spatial.front" : "前",
"spatial.left" : "左",
"spatial.right" : "右",
"spatial.back" : "后",
"spatial.down" : "下",
"spatial.listener" : "您",
"spatial.audioSource" : "音源",
"spatial.roomMaterials": "空间材质",
"spatial.roomDimensions": "空间尺寸",
"spatial.roomPositions": "空间位置",
"spatial.setDimensions": "设置尺寸",
"spatial.setPositions": "设置位置",
"spatial.up": "上",
"spatial.front": "前",
"spatial.left": "左",
"spatial.right": "右",
"spatial.back": "后",
"spatial.down": "下",
"spatial.listener": "您",
"spatial.audioSource": "音源",
// Settings - Unfinished
"settings.header.unfinished": "未完成",

View file

@ -1,7 +1,7 @@
{
// i18n Info
"i18n.languageName": "繁體中文(香港)", // name of language in native language
"i18n.languageName": "繁體中文(香港)", // name of language in native language
"i18n.languageNameEnglish": "Trad. Chinese (Hong Kong)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@kyw504100 @maikirakiwi", // Authors, if you contribute to this file feel free to add your name seperated with a space
@ -19,6 +19,7 @@
"notification.updatingLibrarySongs": "正在更新資料庫的歌曲...",
"notification.updatingLibraryAlbums": "正在更新資料庫的專輯...",
"notification.updatingLibraryArtists": "正在更新資料庫的藝人...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music", // Follows brand term
@ -93,7 +94,7 @@
"term.less": "較少",
"term.showMore": "顯示更多",
"term.showLess": "顯示較少",
"term.topSongs" : "熱門歌曲",
"term.topSongs": "熱門歌曲",
"term.latestReleases": "最新發行",
"term.time.added": "加入於",
"term.time.released": "發行於",
@ -127,14 +128,15 @@
"term.menu": "選項",
"term.check": "檢查",
"term.aboutArtist": "關於 {{artistName}}", // e.g. 'About Doja Cat'
"term.updateCider": "更新 Cider",
"term.topResult": "熱門搜尋結果", // Search Results
"term.topResult": "熱門搜尋結果", // Search Results
"term.sharedPlaylists": "播放列表", // Search Results
"term.people": "個人檔案", // Search Results
"term.newpreset.name": "新均衡器範本名稱", // Equalizer Preset
"term.addedpreset": "已新增",
"term.deletepreset.warn": "你確認要刪除這個範本?",
"term.deletedpreset": "已刪除",
"term.requestError": "處理請求時發生錯誤",
"term.song.link.generate": "正在生成 song.link 分享連結...",
"term.musicVideos": "MV", // Search page friendlyTypes
"term.stations": "電台",
//"term.curators": "Curators",
@ -153,13 +155,14 @@
"home.madeForYou": "為您推薦",
"home.friendsListeningTo": "朋友正在聆聽",
"home.followedArtists": "追蹤的藝人",
// Errors
"error.appleMusicSubRequired": "需要訂閱Apple Music以使用Cider",
"error.connectionError": "無法連接到 Apple Music。",
"error.noResults": "沒有結果",
"error.noResults.description": "請嘗試新的搜尋內容。",
//Podcasts
// Podcasts
"podcast.followOnCider": "在Cider上追蹤",
"podcast.followedOnCider": "已在Cider上追蹤",
"podcast.subscribeOnItunes": "在iTunes上訂閱",
@ -215,7 +218,7 @@
"action.tray.show": "顯示",
"action.update": "更新",
"action.copy": "複製",
"action.newpreset": "新增範本", //Equallizer preset
"action.newpreset": "新增範本", // Equallizer preset
"action.deletepreset": "刪除範本",
// Settings - General
@ -228,6 +231,13 @@
"settings.option.general.language.fun": "惡搞語言",
"settings.option.general.language.unsorted": "未分類",
// Update Cider
"settings.option.general.updateCider": "更新 Cider", // Button
"settings.option.general.updateCider.branch": "Cider 更新通道", // Dropdown
"settings.option.general.updateCider.branch.description": "選擇你想要接收來自哪個通道的更新",
"settings.option.general.updateCider.branch.main": "穩定",
"settings.option.general.updateCider.branch.develop": "測試",
// Settings - Audio
"settings.header.audio": "音訊",
"settings.header.audio.description": "調整Cider的音訊設定",
@ -237,17 +247,25 @@
"settings.header.audio.quality.lossless": "無損壓縮",
"settings.header.audio.quality.lossless.description": "(高達 24-bit/48 kHz",
"settings.header.audio.quality.high": "高素質",
"settings.header.audio.quality.low": "高效率",
"settings.header.audio.quality.auto": "自動",
//"settings.header.audio.quality.high.description": "256 kbps",
"settings.header.audio.quality.standard": "高效率",
//"settings.header.audio.quality.standard.description": "64 kbps",
"settings.option.audio.seamlessTransition": "無縫播放", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "進階功能", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "啟用 AudioContext 將解鎖類似音量平衡和均衡器的進階功能。但是會在一些電腦造成音樂卡頓。",
"settings.option.audio.enableAdvancedFunctionality.decryptLLPW": "無損壓縮解碼", // Toggle
"settings.option.audio.enableAdvancedFunctionality.decryptLLPW.description": "提供 Cider 解碼無損壓縮檔案的能力,但相應地會增加電腦的工作量。",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 數碼音訊增強處理™️", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "能夠欺騙你的大腦讓你感受到近似無損壓縮的音質 | 由 Maikiwi 設計",
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "音訊增強處理不兼容於空間音訊,請先停用空間音訊。",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "數碼音訊增強處理設定", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "將更改音訊處理的激進程度(激進型選項有可能會引起雜訊)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "標準型",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "激進型",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音量平衡", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "將平衡輕柔和響亮的歌曲,建立更統一的聆聽體驗。",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "空間音訊", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "將音訊進行空間化處理來製造一個更立體的聆聽體驗(注:此功能不是官方的杜比全景聲)",
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "空間音訊不兼容於音訊增強處理,請先停用音訊增強處理。",
// Settings - Visual
"settings.header.visual": "外觀",
"settings.header.visual.description": "調整Cider的外觀",
@ -314,24 +332,24 @@
// Spatialization Menu
"spatial.notTurnedOn": "請先在設定中啟用空間音訊。",
"spatial.spatialProperties" : "空間音訊屬性",
"spatial.width" : "闊度",
"spatial.height" : "高度",
"spatial.depth" : "深度",
"spatial.gain" : "增益",
"spatial.roomMaterials" : "空間材質",
"spatial.roomDimensions" : "空間大小",
"spatial.roomPositions" : "空間位置",
"spatial.setDimensions" : "大小設定",
"spatial.setPositions" : "位置設定",
"spatial.up" : "上方",
"spatial.front" : "前方",
"spatial.left" : "左方",
"spatial.right" : "右方",
"spatial.back" : "後方",
"spatial.down" : "下方",
"spatial.listener" : "觀眾",
"spatial.audioSource" : "音源",
"spatial.spatialProperties": "空間音訊屬性",
"spatial.width": "闊度",
"spatial.height": "高度",
"spatial.depth": "深度",
"spatial.gain": "增益",
"spatial.roomMaterials": "空間材質",
"spatial.roomDimensions": "空間大小",
"spatial.roomPositions": "空間位置",
"spatial.setDimensions": "大小設定",
"spatial.setPositions": "位置設定",
"spatial.up": "上方",
"spatial.front": "前方",
"spatial.left": "左方",
"spatial.right": "右方",
"spatial.back": "後方",
"spatial.down": "下方",
"spatial.listener": "觀眾",
"spatial.audioSource": "音源",
// Settings - Unfinished
"settings.header.unfinished": "未完成",

View file

@ -1,16 +1,16 @@
{
// i18n Info
"i18n.languageName": "繁體中文(台灣)", // name of language in native language
"i18n.languageNameEnglish": "Trad. Chinese (Taiwan)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@maikirakiwi @jay900604 @kyw504100", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info
"app.name": "Cider",
"date.format": "${y}年${m}月${d}日",
// i18n Info
"i18n.languageName": "繁體中文(台灣)", // name of language in native language
"i18n.languageNameEnglish": "Trad. Chinese (Taiwan)", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@maikirakiwi", // Authors, if you contribute to this file feel free to add your name seperated with a space
// Dialogs
"dialog.cancel": "取消",
"dialog.ok": "確定",
@ -19,6 +19,7 @@
"notification.updatingLibrarySongs": "正在更新資料庫的歌曲...",
"notification.updatingLibraryAlbums": "正在更新資料庫的專輯...",
"notification.updatingLibraryArtists": "正在更新資料庫的藝人...",
// Terms
"term.appleMusic": "Apple Music", // Follows brand term
"term.applePodcasts": "Apple Podcasts", // Follows brand term
@ -54,6 +55,7 @@
"term.mute": "靜音",
"term.unmute": "取消靜音",
"term.share": "分享",
"term.share.success": "已複製至剪貼簿",
"term.settings": "設定",
"term.seeAll": "顯示全部",
"term.sortBy": "排序",
@ -71,7 +73,7 @@
"term.viewAs.list": "列表",
"term.size": "大小",
"term.size.normal": "正常",
"term.size.compact": "緊",
"term.size.compact": "緊",
"term.enable": "啟用",
"term.disable": "停用",
"term.enabled": "已啟用",
@ -85,7 +87,7 @@
"term.less": "更少",
"term.showMore": "顯示更多",
"term.showLess": "顯示更少",
"term.topSongs" : "熱門歌曲",
"term.topSongs": "熱門歌曲",
"term.latestReleases": "最新發行",
"term.time.added": "加入於",
"term.time.released": "發行於",
@ -99,26 +101,26 @@
"term.fullscreenView": "全螢幕顯示",
"term.defaultView": "預設顯示",
"term.audioSettings": "音訊設定",
"term.spacializedAudioSetting": "音訊空間化設定",
"term.spacializedAudioSetting": "空間音訊設定",
"term.clearAll": "清空",
"term.recentStations": "最近收聽的廣播",
"term.language": "語言",
"term.noLyrics": "正在載入。。/ 無歌詞結果 / 純音樂",
"term.copyright": "版權聲明",
"term.rightsReserved": "保留所有權利。",
"term.sponsor": "贊助",
"term.sponsor": "贊助我們",
"term.socials": "社群平台",
"term.ciderTeam": "Cider 團隊",
"term.developer": "開發者",
"term.socialTeam": "公關團隊",
"term.contributors": "貢獻者",
"term.equalizer": "等化器",
"term.reset": "重",
"term.reset": "重",
"term.tracks": "首歌曲", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "影片",
"term.menu": "選單",
"term.check": "檢查",
"term.aboutArtist": "關於{{artistName}}", // e.g. 'About Doja Cat'
"term.updateCider": "更新 Cider",
// Home
"home.title": "首頁",
@ -129,13 +131,14 @@
"home.madeForYou": "為您推薦",
"home.friendsListeningTo": "朋友正在聆聽",
"home.followedArtists": "追蹤的藝人",
// Errors
"error.appleMusicSubRequired": "需要訂閱 Apple Music 以使用 Cider",
"error.connectionError": "無法連接到 Apple Music。",
"error.noResults": "沒有結果",
"error.noResults.description": "嘗試新的搜尋項目。",
//Podcasts
// Podcasts
"podcast.followOnCider": "在 Cider 上追蹤",
"podcast.followedOnCider": "已追蹤",
"podcast.subscribeOnItunes": "在 iTunes 上訂閱",
@ -182,49 +185,66 @@
"action.playTracksNext": "插播 ${app.selectedMediaItems.length} 首歌曲",
"action.playTracksLater": "最後播放 ${app.selectedMediaItems.length} 首歌曲",
"action.removeTracks": "從待播清單刪除 ${self.selectedItems.length} 首歌曲",
"action.import": "入",
"action.export": "出",
"action.import": "入",
"action.export": "出",
"action.showAlbum": "顯示專輯",
"action.tray.minimize": "最小化",
"action.tray.quit": "關閉",
"action.tray.show": "顯示",
"action.update": "更新",
"action.copy": "複製",
"action.newpreset": "新預設", // Equalizer Preset
"action.newpreset": "新預設", // Equalizer Preset
"action.deletepreset": "刪除預設", // Equalizer Preset
// Settings - General
"settings.header.general": "一般",
"settings.header.general.description": "調整 Cider 的一般設定",
// Language optgroups
"settings.option.general.language.main": "語言",
"settings.option.general.language.fun": "特殊語言",
"settings.option.general.language.unsorted": "未分類",
// Update Cider
"settings.option.general.updateCider": "更新 Cider", // Button
"settings.option.general.updateCider.branch": "Cider 更新通道", // Dropdown
"settings.option.general.updateCider.branch.description": "選擇您要接收 Cider 軟體更新的通道",
"settings.option.general.updateCider.branch.main": "穩定版(建議)",
"settings.option.general.updateCider.branch.develop": "開發者測試版(不穩定)",
// Settings - Audio
"settings.header.audio": "音訊",
"settings.header.audio.description": "調整 Cider 的音訊設定",
"settings.option.audio.quality": "音訊音質", // Dropdown
"settings.option.audio.quality": "音訊質", // Dropdown
"settings.header.audio.quality.hireslossless": "高品質無損壓縮",
"settings.header.audio.quality.hireslossless.description": "(高達 24-bit/192 kHz",
"settings.header.audio.quality.lossless": "無損壓縮",
"settings.header.audio.quality.lossless.description": "(高達 24-bit/48 kHz",
"settings.header.audio.quality.enhanced": "數位增强",
"settings.header.audio.quality.enhanced": "數位增",
"settings.header.audio.quality.high": "高品質",
"settings.header.audio.quality.low": "高效率",
"settings.header.audio.quality.standard": "高效率",
"settings.header.audio.quality.auto": "自動",
"settings.option.audio.seamlessTransition": "無間斷播放", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "進階機能", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "啟用 AudioContext 將解鎖類似音訊標準化和等化器的進階機能。但是會在部分電腦造成音樂卡頓。",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 數位增强音訊處理", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "將欺騙您的大腦使其感受近似保真壓縮的音質。| 由 Maikiwi 設計",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "數位增强音訊處理設置", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "將更改音訊處理的激進程度(增强選項有可能會引起雜訊)",
"settings.option.audio.enableAdvancedFunctionality": "進階音訊功能", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "啟用 AudioContext 將開啟類似音訊平衡和等化器的進階設定。但這並不一定適合每部電腦,可能會發生音樂卡頓。",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 數位增強音訊處理™️", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "將欺騙您的大腦讓您感受到近似保真壓縮的音質。| 由 Maikiwi 設計",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "數位增強音訊處理設定", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "將更改音訊處理的激進/振奮程度(增強選項有可能會引起雜訊)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "標準",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "增",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音訊標準化", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "將平衡輕柔和響亮的歌曲,建立更統一的聆聽體驗。",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "音訊空間化", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "增",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音訊平衡", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "將平衡輕柔和響亮的歌曲,建立更統一舒適的聆聽體驗。",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "空間音訊", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "將音訊進行空間化處理來製造一個更立體的聆聽體驗(註:此功能不是官方的杜比全景聲)",
// Settings - Visual
"settings.header.visual": "外觀",
"settings.header.visual.description": "調整 Cider 的外觀",
"settings.option.visual.windowBackgroundStyle": "視窗背景樣式", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "空白",
"settings.header.visual.windowBackgroundStyle.artwork": "專輯封面",
"settings.header.visual.windowBackgroundStyle.image": "圖片",
"settings.option.visual.animatedArtwork": "動態專輯封面", // Dropdown
"settings.header.visual.animatedArtwork.always": "總是顯示",
"settings.header.visual.animatedArtwork.limited": "只在藝人頁面和專輯封面顯示",
@ -237,14 +257,17 @@
"settings.header.visual.animatedArtworkQuality.extreme": "極高",
"settings.option.visual.animatedWindowBackground": "動態視窗背景", // Toggle
"settings.option.visual.hardwareAcceleration": "硬體加速", // Dropdown
"settings.option.visual.hardwareAcceleration.description": "需要重新啟動 Cider 才會生效",
"settings.option.visual.hardwareAcceleration.description": "需要重新啟動 Cider 才會套用",
"settings.header.visual.hardwareAcceleration.default": "預設",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "主題",
// Settings - Visual - Theme name
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "暗黑模式",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "顯示個人檔案", // Toggle
// Settings - General (Reserved)
"settings.header.general": "一般",
"settings.header.general.description": "調整 Cider 的一般設定",
// Settings - Lyrics
"settings.header.lyrics": "歌詞",
@ -258,6 +281,7 @@
"settings.header.connectivity": "外部連接",
"settings.header.connectivity.description": "調整 Cider 與外部的連接",
"settings.option.connectivity.discordRPC": "Discord 動態", // Dropdown
"settings.option.connectivity.playbackNotifications": "歌曲播放通知", // Toggle
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "顯示正在玩 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "顯示正在玩 'Apple Music'",
@ -271,13 +295,16 @@
// Settings - Experimental
"settings.header.experimental": "實驗性功能",
"settings.header.experimental.description": "調整 Cider 的實驗性功能",
"settings.option.experimental.compactUI": "緊凑型 UI", // Toggle
"settings.option.experimental.compactUI": "使用緊密的介面設計", // Toggle
"settings.option.experimental.closeButtonBehaviour": "關閉按鈕操作", // Dropdown
"settings.option.experimental.close_button_hide": "關閉按鈕會隱藏 Cider",
// Refer to term.disabled & term.enabled
"settings.option.experimental.close_button_hide": "關閉按鈕將 Cider 隱藏至系統列",
"settings.option.experimental.copy_log": "複製執行紀錄檔至剪貼簿",
"settings.option.experimental.inline_playlists": "將播放列表做為行内元素顯示",
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.spatialProperties" : "空間化屬性",
"spatial.notTurnedOn": "空間音訊目前是關閉狀態,請先啟用再使用。",
"spatial.spatialProperties" : "空間音訊屬性設定",
"spatial.width" : "寬度",
"spatial.height" : "高度",
"spatial.depth" : "深度",
@ -286,7 +313,7 @@
"spatial.roomDimensions" : "空間尺寸",
"spatial.roomPositions" : "空間位置",
"spatial.setDimensions" : "設定尺寸",
"spatial.setPositions" : "設定位置",
"spatial.setPositions" : "套用設定",
"spatial.up" : "上",
"spatial.front" : "前",
"spatial.left" : "左",
@ -297,7 +324,7 @@
"spatial.audioSource" : "音訊來源",
// Settings - Unfinished
"settings.header.unfinished": "未完成",
"settings.header.unfinished": "未開發完成的功能",
// Web Remote
"remote.web.title": "Cider 遠端操控",

View file

@ -19,6 +19,7 @@
"notification.updatingLibrarySongs": "更新緊資料庫嘅歌曲...",
"notification.updatingLibraryAlbums": "更新緊資料庫嘅專輯...",
"notification.updatingLibraryArtists": "更新緊資料庫嘅藝人...",
// Terms
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
@ -93,7 +94,7 @@
"term.less": "少啲",
"term.showMore": "顯示多啲",
"term.showLess": "顯示少啲",
"term.topSongs" : "熱門歌曲",
"term.topSongs": "熱門歌曲",
"term.latestReleases": "最新出嘅",
"term.time.added": "加入於",
"term.time.released": "發行於",
@ -127,8 +128,7 @@
"term.menu": "選項",
"term.check": "檢查",
"term.aboutArtist": "關於 {{artistName}}", // e.g. 'About Doja Cat'
"term.updateCider": "更新 Cider",
"term.topResult": "熱門搜尋結果", // Search Results
"term.topResult": "熱門搜尋結果", // Search Results
"term.sharedPlaylists": "播放清單", // Search Results
"term.people": "個人檔案", // Search Results
"term.newpreset.name": "新EQ範本嘅名", // Equalizer Preset
@ -153,13 +153,14 @@
"home.madeForYou": "為你而整",
"home.friendsListeningTo": "你啲Friend聽緊",
"home.followedArtists": "Follow左嘅藝人",
// Errors
"error.appleMusicSubRequired": "需要訂閱Apple Music先可以用Cider。",
"error.connectionError": "連接唔到Apple Music。",
"error.noResults": "冇結果。",
"error.noResults.description": "重新搵過啦。",
//Podcasts
// Podcasts
"podcast.followOnCider": "喺Cider上Follow",
"podcast.followedOnCider": "喺Cider上Follow左",
"podcast.subscribeOnItunes": "喺iTunes上訂閱",
@ -215,7 +216,7 @@
"action.tray.show": "顯示",
"action.update": "更新",
"action.copy": "複製",
"action.newpreset": "新增範本", // Equalizer Preset
"action.newpreset": "新增範本", // Equalizer Preset
"action.deletepreset": "刪除範本",
// Settings - General
@ -228,6 +229,9 @@
"settings.option.general.language.fun": "惡搞語言",
"settings.option.general.language.unsorted": "未分類",
// Update Cider
"settings.option.general.updateCider": "更新 Cider", // Button
// Settings - Audio
"settings.header.audio": "音訊",
"settings.header.audio.description": "調整Cider嘅音訊設定",
@ -242,6 +246,7 @@
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "平衡輕柔同響亮嘅歌曲,令你有統一嘅聆聽體驗。",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "空間音訊", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "空間化音訊,製造一個更立體嘅聆聽體驗(注意:呢個功能唔係官方嘅杜比全景聲)",
// Settings - Visual
"settings.header.visual": "外觀",
"settings.header.visual.description": "調整Cider嘅外觀",
@ -304,28 +309,28 @@
"settings.option.experimental.close_button_hide": "㩒交叉制嚟隱藏 Cider",
"settings.option.experimental.copy_log": "將log複製喺剪貼簿",
//"settings.option.experimental.inline_playlists": "Inline Playlists and Albums",
// Refer to term.disabled & term.enabled
// Refer to term.disabled & term.enabled
// Spatialization Menu
"spatial.notTurnedOn": "唔該喺設定入面啟用左空間音訊先。",
"spatial.spatialProperties" : "空間音訊屬性",
"spatial.width" : "幾闊",
"spatial.height" : "幾高",
"spatial.depth" : "幾深",
"spatial.gain" : "增益",
"spatial.roomMaterials" : "空間材質",
"spatial.roomDimensions" : "空間大小",
"spatial.roomPositions" : "空間位置",
"spatial.setDimensions" : "大小設定",
"spatial.setPositions" : "位置設定",
"spatial.up" : "上面",
"spatial.front" : "前面",
"spatial.left" : "左邊",
"spatial.right" : "右邊",
"spatial.back" : "後面",
"spatial.down" : "下面",
"spatial.listener" : "觀眾",
"spatial.audioSource" : "音源",
"spatial.spatialProperties": "空間音訊屬性",
"spatial.width": "幾闊",
"spatial.height": "幾高",
"spatial.depth": "幾深",
"spatial.gain": "增益",
"spatial.roomMaterials": "空間材質",
"spatial.roomDimensions": "空間大小",
"spatial.roomPositions": "空間位置",
"spatial.setDimensions": "大小設定",
"spatial.setPositions": "位置設定",
"spatial.up": "上面",
"spatial.front": "前面",
"spatial.left": "左邊",
"spatial.right": "右邊",
"spatial.back": "後面",
"spatial.down": "下面",
"spatial.listener": "觀眾",
"spatial.audioSource": "音源",
// Settings - Unfinished
"settings.header.unfinished": "未搞掂",

View file

@ -1,21 +1,18 @@
import {join} from "path";
import {app, BrowserWindow as bw, ipcMain, shell, ShareMenu, Menu, nativeImage} from "electron";
import {app, BrowserWindow as bw, ipcMain, ShareMenu, shell} from "electron";
import * as windowStateKeeper from "electron-window-state";
import * as express from "express";
import * as getPort from "get-port";
import {search} from "youtube-search-without-api-key";
import {existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync} from "fs";
import {Stream} from "stream";
import {generate as generateQR} from "qrcode-terminal";
import {hostname, networkInterfaces} from "os";
import {networkInterfaces} from "os";
import * as mm from 'music-metadata';
import fetch from 'electron-fetch'
import {wsapi} from "./wsapi";
import {jsonc} from "jsonc";
import {AppImageUpdater, NsisUpdater} from "electron-updater";
import {utils} from './utils';
import * as path from "path";
export class BrowserWindow {
@ -57,7 +54,6 @@ export class BrowserWindow {
"components/equalizer",
"components/add-to-playlist",
"components/queue",
"components/queue-item",
"components/mediaitem-scroller-horizontal",
"components/mediaitem-scroller-horizontal-large",
"components/mediaitem-scroller-horizontal-sp",
@ -65,7 +61,6 @@ export class BrowserWindow {
"components/mediaitem-list-item",
"components/mediaitem-hrect",
"components/mediaitem-square",
"components/mediaitem-square-sp",
"components/mediaitem-mvview",
"components/libraryartist-item",
"components/listennow-child",
@ -199,9 +194,9 @@ export class BrowserWindow {
res.render("main", this.EnvironmentVariables);
});
app.get("/api/playback/:action", (req, res)=>{
app.get("/api/playback/:action", (req, res) => {
const action = req.params.action;
switch(action) {
switch (action) {
case "playpause":
BrowserWindow.win.webContents.executeJavaScript("wsapi.togglePlayPause()")
res.send("Play/Pause toggle")
@ -287,9 +282,6 @@ export class BrowserWindow {
this.broadcastRemote()
remote.listen(this.remotePort, () => {
console.log(`Cider remote port: ${this.remotePort}`);
if (firstRequest) {
generateQR(`http://${hostname}:${this.remotePort}`);
}
firstRequest = false;
})
remote.get("/", (_req, res) => {
@ -537,22 +529,22 @@ export class BrowserWindow {
MusicKit.getInstance().play();
});
`)
})
});
//QR Code
ipcMain.handle('showQR', async (_event, _) => {
let url = `http://${BrowserWindow.getIP()}:${this.remotePort}`;
shell.openExternal(`https://cider.sh/pair-remote?url=${Buffer.from(encodeURI(url)).toString('base64')}`).catch(console.error);
})
});
ipcMain.on('get-remote-pair-url', (_event, _) => {
let url = `http://${BrowserWindow.getIP()}:${this.remotePort}`;
BrowserWindow.win.webContents.send('send-remote-pair-url', url);
})
});
if (process.platform === "darwin") {
app.setUserActivity('com.CiderCollective.remote.pair', {
ip: `${BrowserWindow.getIP()}`
}, `http://${BrowserWindow.getIP()}:${this.remotePort}`);
app.setUserActivity('com.CiderCollective.remote.pair', {
ip: `${BrowserWindow.getIP()}`
}, `http://${BrowserWindow.getIP()}:${this.remotePort}`);
}
// Get previews for normalization
ipcMain.on("getPreviewURL", (_event, url) => {
@ -565,14 +557,25 @@ export class BrowserWindow {
console.log('sc', SoundCheckTag)
BrowserWindow.win.webContents.send('SoundCheckTag', SoundCheckTag)
}).catch(err => {
console.log(err)
});
console.log(err)
});
});
ipcMain.on('check-for-update', async (_event) => {
const branch = utils.getStoreValue('general.update_branch')
let latestbranch = await fetch(`https://circleci.com/api/v1.1/project/gh/ciderapp/Cider/latest/artifacts?branch=${branch}&filter=successful`)
if (latestbranch.status != 200) {
console.log(`Error fetching latest artifact from the **${branch}** branch`)
return
}
let latestbranchjson = await latestbranch.json()
let base_url = latestbranchjson[0].url
base_url = base_url.substr(0, base_url.lastIndexOf('/'))
const options: any = {
provider: 'generic',
url: 'https://43-429851205-gh.circle-artifacts.com/0/%7E/Cider/dist/artifacts' //Base URL
url: `${base_url}`
}
/*
* Have to handle the auto updaters seperatly until we can support macOS. electron-builder limitation -q
@ -581,10 +584,10 @@ export class BrowserWindow {
const linux_autoUpdater = new AppImageUpdater(options) //Linux
await win_autoUpdater.checkForUpdatesAndNotify()
await linux_autoUpdater.checkForUpdatesAndNotify()
})
});
ipcMain.on('share-menu', async (_event, url) => {
if ( process.platform != 'darwin') return;
if (process.platform != 'darwin') return;
//https://www.electronjs.org/docs/latest/api/share-menu
console.log('[Share Sheet - App.ts]', url)
const options = {
@ -597,11 +600,6 @@ export class BrowserWindow {
})
/* *********************************************************************************************
* Window Events
* **********************************************************************************************/
@ -666,118 +664,6 @@ export class BrowserWindow {
shell.openExternal(x.url).catch(console.error);
return {action: "deny"};
});
/* *********************************************************************************************
* Menu
* **********************************************************************************************/
//@ts-ignore
console.log(path.join(__dirname, '../../src/renderer/views/svg/smartphone.svg'))
const isMac = process.platform === 'darwin';
//TODO: Figure out the icons
const remoteIcon = nativeImage.createFromPath(path.join(__dirname, '../../src/renderer/views/svg/smartphone.svg')).toPNG()
const soundIcon = nativeImage.createFromPath(path.join(__dirname, '../../src/renderer/views/svg/headphones.svg')).toPNG()
const aboutIcon = nativeImage.createFromPath(path.join(__dirname, '../../src/renderer/views/svg/info.svg')).toPNG()
const settingsIcon = nativeImage.createFromPath(path.join(__dirname, '../../src/renderer/views/svg/settings.svg')).toPNG()
const logoutIcon = nativeImage.createFromPath(path.join(__dirname, '../../src/renderer/views/svg/log-out.svg')).toPNG()
const ciderIcon = nativeImage.createFromPath(path.join(__dirname, '../../src/renderer/assets/logocute.png'))
const template = [
// { role: 'appMenu' }
...(isMac ? [{
label: app.name,
submenu: [
{ label: 'Web Remote', accelerator: 'CommandOrControl+W', sublabel: 'Opens in external window', click: () => BrowserWindow.win.webContents.executeJavaScript(`ipcRenderer.invoke('showQR')`)}, //accelerator
{ label: 'Audio Settings', accelerator: 'CommandOrControl+Shift+A', click: () => BrowserWindow.win.webContents.executeJavaScript(`app.modals.audioSettings = true`)},
{ label: 'About', accelerator: 'CommandOrControl+Shift+B', click: () => BrowserWindow.win.webContents.executeJavaScript(`app.appRoute('about'`)},
{ label: 'Settings', accelerator: 'CommandOrControl+,', click: () => BrowserWindow.win.webContents.executeJavaScript(`app.appRoute('settings')`)},
{ label: 'Logout', accelerator: 'CommandOrControl+Shift+O', click: () => BrowserWindow.win.webContents.executeJavaScript(`app.unauthorize(); document.location.reload()`)},
{ type: 'separator' },
{ role: 'quit' }
]
}] : []),
// { role: 'viewMenu' }
{
label: 'View',
submenu: [
{ role: 'reload' },
{ role: 'forceReload' },
{ role: 'toggleDevTools' },
{ type: 'separator' },
{ role: 'resetZoom' },
{ role: 'zoomIn' },
{ role: 'zoomOut' },
{ type: 'separator' },
{ role: 'togglefullscreen' }
]
},
// { role: 'windowMenu' }
{
label: 'Window',
submenu: [
{ role: 'minimize' },
{ role: 'zoom' },
...(isMac ? [
{ type: 'separator' },
{ role: 'front' },
{ type: 'separator' },
{ role: 'window' }
] : [
{ role: 'close' }
])
]
},
{
role: 'help',
submenu: [
{
label: 'Discord',
accelerator: 'CommandOrControl+Shift+D',
click: async () => {
const { shell } = require('electron')
await shell.openExternal('https://discord.gg/applemusic')
}
},
{
label: 'Donate',
accelerator: 'CommandOrControl+D',
icon: ciderIcon,
click: async () => {
const { shell } = require('electron')
await shell.openExternal('https://opencollective.com/ciderapp/')
}
},
{
label: 'Report a...',
submenu: [
{
label: 'Bug',
click: async () => {
const {shell} = require('electron')
await shell.openExternal("https://github.com/ciderapp/Cider/issues/new?assignees=&labels=bug%2Ctriage&template=bug_report.yaml&title=%5BBug%5D%3A+")
}
},
{
label: 'Feature Request',
click: async () => {
const {shell} = require('electron')
await shell.openExternal("https://github.com/ciderapp/Cider/issues/new?assignees=&labels=enhancement%2Ctriage&template=feature_request.yaml&title=%5BEnhancement%5D%3A+")
}
},
{
label: 'Translation Report/Request',
click: async () => {
const {shell} = require('electron')
await shell.openExternal("https://github.com/ciderapp/Cider/issues/new?assignees=&labels=%F0%9F%8C%90+Translations&template=translation.yaml&title=%5BTranslation%5D%3A+")
}
},
]
},
]
}
]
//@ts-ignore
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
}
/**

View file

@ -33,7 +33,7 @@ export class Plugins {
if (fs.existsSync(this.userPluginsPath)) {
fs.readdirSync(this.userPluginsPath).forEach(file => {
if (file.endsWith('.ts') || file.endsWith('.js')) {
const plugin = require(path.join(this.userPluginsPath, file)).default;
const plugin = require(path.join(this.userPluginsPath, file));
file = file.replace('.ts', '').replace('.js', '');
if (plugins[file] || plugin in plugins) {
console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`);

View file

@ -6,12 +6,13 @@ export class Store {
private defaults: any = {
"general": {
"close_button_hide": true,
"close_button_hide": false,
"open_on_startup": false,
"discord_rpc": 1, // 0 = disabled, 1 = enabled as Cider, 2 = enabled as Apple Music
"discord_rpc_clear_on_pause": true,
"language": "en_US", // electron.app.getLocale().replace('-', '_') this can be used in future
"playbackNotifications": true
"playbackNotifications": true,
"update_branch": "main"
},
"home": {
"followedArtists": [],
@ -26,18 +27,16 @@ export class Store {
},
"audio": {
"volume": 1,
"volumeStep": 0.1,
"maxVolume": 1,
"lastVolume": 1,
"muted": false,
"quality": "256",
"quality": "HIGH",
"seamless_audio": true,
"normalization": false,
"ciderPPE": false,
"ciderPPE_value": 0.5,
"spatial": false,
"maxVolume": 1,
"volumePrecision": 0.1,
"volumeRoundMax": 0.9,
"volumeRoundMin": 0.1,
"spatial_properties": {
"presets": [],
"gain": 0.8,
@ -61,10 +60,9 @@ export class Store {
'preset': "default",
'frequencies': [32, 63, 125, 250, 500, 1000, 2000, 4000, 8000, 16000],
'gain': [0,0,0,0,0,0,0,0,0,0],
'Q' : [1,1,1,1,1,1,1,1,1,1],
'preamp' : 0,
'mix' : 1,
'vibrantBass' : 0,
'Q': [1,1,1,1,1,1,1,1,1,1],
'mix': 1,
'vibrantBass': 0,
'presets': [],
'userGenerated': false
},

View file

@ -12,6 +12,8 @@ export class utils {
*/
private static paths: any = {
srcPath: path.join(__dirname, "../../src"),
rendererPath: path.join(__dirname, "../../src/renderer"),
mainPath: path.join(__dirname, "../../src/main"),
resourcePath: path.join(__dirname, "../../resources"),
i18nPath: path.join(__dirname, "../../src/i18n"),
ciderCache: path.resolve(app.getPath("userData"), "CiderCache"),

239
src/main/plugins/menubar.ts Normal file
View file

@ -0,0 +1,239 @@
import {app, Menu, shell} from "electron";
export default class Thumbar {
/**
* Private variables for interaction in plugins
*/
private _win: any;
private _app: any;
private _store: any;
/**
* Base Plugin Details (Eventually implemented into a GUI in settings)
*/
public name: string = 'Menubar Plugin';
public description: string = 'Creates the menubar';
public version: string = '1.0.0';
public author: string = 'Core / Quack';
/**
* Thumbnail Toolbar Assets
* NATIVE-IMAGE DOESN'T SUPPORT SVG
private icons: { [key: string]: Electron.NativeImage } = {
remoteIcon: nativeImage.createFromPath(join(utils.getPath('rendererPath'), 'views/svg/smartphone.svg')).toPNG(),
soundIcon: nativeImage.createFromPath(join(utils.getPath('rendererPath'), 'views/svg/headphones.svg')).toPNG(),
aboutIcon: nativeImage.createFromPath(join(utils.getPath('rendererPath'), 'views/svg/info.svg')).toPNG(),
settingsIcon: nativeImage.createFromPath(join(utils.getPath('rendererPath'), 'views/svg/settings.svg')).toPNG(),
logoutIcon: nativeImage.createFromPath(join(utils.getPath('rendererPath'), 'views/svg/log-out.svg')).toPNG(),
ciderIcon: nativeImage.createFromPath(join(utils.getPath('rendererPath'), 'assets/logocute.png')).toPNG(),
}
*/
/**
* Menubar Assets
* @private
*/
private isMac: boolean = process.platform === 'darwin';
private menubarTemplate: any = [
{
label: app.getName(),
submenu: [
{ role: 'about' },
{ type: 'separator' },
{ role: 'services' },
{ type: 'separator' },
{ role: 'hide' },
{ role: 'hideOthers' },
{ role: 'unhide' },
{ type: 'separator' },
{ role: 'quit' }
]
},
{
label: 'View',
submenu: [
{role: 'reload'},
{role: 'forceReload'},
{role: 'toggleDevTools'},
{type: 'separator'},
{role: 'resetZoom'},
{role: 'zoomIn'},
{role: 'zoomOut'},
{type: 'separator'},
{role: 'togglefullscreen'},
]
},
{
label: 'Window',
submenu: [
{role: 'minimize'},
{role: 'zoom'},
...(this.isMac ? [
{type: 'separator'},
{role: 'front'},
{type: 'separator'},
{role: 'window'}
] : [
{role: 'close'}
]),
{type: 'separator'},
{
label: 'Web Remote',
accelerator: 'CommandOrControl+Shift+W',
sublabel: 'Opens in external window',
click: () => this._win.webContents.executeJavaScript(`ipcRenderer.invoke('showQR')`)
},
{
label: 'Audio Settings',
accelerator: 'CommandOrControl+Shift+A',
click: () => this._win.webContents.executeJavaScript(`app.modals.audioSettings = true`)
},
{
label: 'Settings',
accelerator: 'CommandOrControl+,',
click: () => this._win.webContents.executeJavaScript(`app.appRoute('settings')`)
}
]
},
{
label: 'Controls',
submenu: [
{
label: 'Pause / Play',
accelerator: 'Space',
click: () => this._win.webContents.executeJavaScript(`MusicKitInterop.playPause()`)
},
{
label: 'Next',
accelerator: 'CommandOrControl+Right',
click: () => this._win.webContents.executeJavaScript(`MusicKitInterop.next()`)
},
{
label: 'Previous',
accelerator: 'CommandOrControl+Left',
click: () => this._win.webContents.executeJavaScript(`MusicKitInterop.previous()`)
},
{ type: 'separator' },
{
label: 'Volume Up',
accelerator: 'CommandOrControl+Up',
click: () => this._win.webContents.executeJavaScript(`app.volumeUp()`)
},
{
label: 'Volume Down',
accelerator: 'CommandOrControl+Down',
click: () => this._win.webContents.executeJavaScript(`app.volumeDown()`)
}
]
},
{
label: 'Account',
submenu: [
{
label: 'Account Settings',
click: () => this._win.webContents.executeJavaScript(`app.appRoute('apple-account-settings')`)
},
{
label: 'Sign Out',
click: () => this._win.webContents.executeJavaScript(`app.unauthorize()`)
}
]
},
{
label: 'Support',
role: 'help',
submenu: [
{
label: 'Discord',
click: () => shell.openExternal("https://discord.gg/AppleMusic").catch(console.error)
},
{
label: 'GitHub Wiki',
click: () => shell.openExternal("https://github.com/ciderapp/Cider/wiki/Troubleshooting").catch(console.error)
},
{
label: 'About',
click: () => this._win.webContents.executeJavaScript(`app.appRoute('about')`)
},
{type: 'separator'},
{
label: 'Report a...',
submenu: [
{
label: 'Bug',
click: () => shell.openExternal("https://github.com/ciderapp/Cider/issues/new?assignees=&labels=bug%2Ctriage&template=bug_report.yaml&title=%5BBug%5D%3A+").catch(console.error)
},
{
label: 'Feature Request',
click: () => shell.openExternal("https://github.com/ciderapp/Cider/issues/new?assignees=&labels=enhancement%2Ctriage&template=feature_request.yaml&title=%5BEnhancement%5D%3A+").catch(console.error)
},
{
label: 'Translation Report/Request',
click: () => shell.openExternal("https://github.com/ciderapp/Cider/issues/new?assignees=&labels=%F0%9F%8C%90+Translations&template=translation.yaml&title=%5BTranslation%5D%3A+").catch(console.error)
},
]
},
{type: 'separator'},
{
label: 'View License',
click: () => shell.openExternal("https://github.com/ciderapp/Cider/blob/main/LICENSE").catch(console.error)
},
{type: 'separator'},
{
label: 'Toggle Developer Tools',
accelerator: 'Option+CommandOrControl+I',
click: () => this._win.webContents.openDevTools()
},
{
label: 'Open Configuration File in Editor',
click: () => this._store.openInEditor()
}
]
}
]
/*******************************************************************************************
* Public Methods
* ****************************************************************************************/
/**
* Runs on plugin load (Currently run on application start)
*/
constructor(app: any, store: any) {
this._app = app;
this._store = store
console.debug(`[Plugin][${this.name}] Loading Complete.`);
}
/**
* Runs on app ready
*/
onReady(win: Electron.BrowserWindow): void {
this._win = win;
Menu.setApplicationMenu(Menu.buildFromTemplate(this.menubarTemplate))
}
/**
* Runs on app stop
*/
onBeforeQuit(): void {
console.debug(`[Plugin][${this.name}] Stopped.`);
}
/**
* Runs on playback State Change
* @param attributes Music Attributes (attributes.status = current state)
*/
onPlaybackStateDidChange(attributes: object): void {
}
/**
* Runs on song change
* @param attributes Music Attributes
*/
onNowPlayingItemDidChange(attributes: object): void {
}
}

View file

@ -20,7 +20,7 @@ export default class Thumbar {
/**
* Thumbnail Toolbar Assets
*/
private icons: { pause: Electron.NativeImage, play: Electron.NativeImage, next: Electron.NativeImage, previous: Electron.NativeImage } = {
private icons: { [key: string]: Electron.NativeImage } = {
pause: nativeImage.createFromPath(join(utils.getPath('resourcePath'), 'icons/thumbar', `${nativeTheme.shouldUseDarkColors ? 'light' : 'dark'}_pause.png`)),
play: nativeImage.createFromPath(join(utils.getPath('resourcePath'), 'icons/thumbar', `${nativeTheme.shouldUseDarkColors ? 'light' : 'dark'}_play.png`)),
next: nativeImage.createFromPath(join(utils.getPath('resourcePath'), 'icons/thumbar', `${nativeTheme.shouldUseDarkColors ? 'light' : 'dark'}_next.png`)),

View file

@ -0,0 +1,227 @@
import * as WebSocket from 'ws';
/**
* 0-pad a number.
* @param {Number} number
* @param {Number} length
* @returns String
*/
const pad = (number: number, length: number) => String(number).padStart(length, '0');
/**
* Convert seconds to a time string acceptable to Rainmeter
* https://github.com/tjhrulz/WebNowPlaying-BrowserExtension/blob/master/WebNowPlaying.js#L50-L59
* @param {Number} timeInSeconds
* @returns String
*/
const convertTimeToString = (timeInSeconds: number) => {
const timeInMinutes = timeInSeconds / 60;
if (timeInMinutes < 60) {
return timeInMinutes + ":" + pad(timeInSeconds % 60, 2);
}
return timeInMinutes / 60 + ":" + pad(timeInMinutes % 60, 2) + ":" + pad(timeInSeconds % 60, 2);
}
export default class WebNowPlaying {
/**
* Base Plugin Details (Eventually implemented into a GUI in settings)
*/
public name: string = 'WebNowPlaying';
public description: string = 'Song info and playback control for the Rainmeter WebNowPlaying plugin.';
public version: string = '1.0.0';
public author: string = 'Zennn <me@jozen.blue>';
private _win: any;
private ws: any = null;
private wsapiConn: any = null;
private playerName: string = 'Cider'/* Apple Music */;
constructor() {
console.debug(`[Plugin][${this.name}] Loading Complete.`);
}
sendSongInfo(attributes: any) {
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;
const fields = ['STATE', 'TITLE', 'ARTIST', 'ALBUM', 'COVER', 'DURATION', 'POSITION', 'VOLUME', 'REPEAT', 'SHUFFLE'];
fields.forEach((field) => {
try {
let value: any = '';
switch (field) {
case 'STATE':
value = attributes.status ? 1 : 2;
break;
case 'TITLE':
value = attributes.name;
break;
case 'ARTIST':
value = attributes.artistName;
break;
case 'ALBUM':
value = attributes.albumName;
break;
case 'COVER':
value = attributes.artwork.url.replace('{w}', attributes.artwork.width).replace('{h}', attributes.artwork.height);
break;
case 'DURATION':
value = convertTimeToString(attributes.durationInMillis / 1000);
break;
case 'POSITION':
value = convertTimeToString((attributes.durationInMillis - attributes.remainingTime) / 1000);
break;
case 'VOLUME':
value = attributes.volume * 100;
break;
case 'REPEAT':
value = attributes.repeatMode;
break;
case 'SHUFFLE':
value = attributes.shuffleMode;
break;
}
this.ws.send(`${field}:${value}`);
} catch (error) {
if (this.ws.readyState === WebSocket.OPEN) {
this.ws.send(`Error:Error updating ${field} for ${this.playerName}`);
this.ws.send(`ErrorD:${error}`);
}
}
});
}
fireEvent(evt: any) {
if (!evt.data) return;
let value = '';
if (evt.data.split(/ (.+)/).length > 1) {
value = evt.data.split(/ (.+)/)[1];
}
const eventName = evt.data.split(' ')[0].toLowerCase();
try {
switch (eventName) {
case 'playpause':
this._win.webContents.executeJavaScript('MusicKitInterop.playPause()').catch(console.error);
break;
case 'next':
this._win.webContents.executeJavaScript('MusicKitInterop.next()').catch(console.error);
break;
case 'previous':
this._win.webContents.executeJavaScript('MusicKitInterop.previous()').catch(console.error);
break;
case 'setposition':
this._win.webContents.executeJavaScript(`MusicKit.getInstance().seekToTime(${parseFloat(value)})`);
break;
case 'setvolume':
this._win.webContents.executeJavaScript(`MusicKit.getInstance().volume = ${parseFloat(value) / 100}`);
break;
case 'repeat':
this._win.webContents.executeJavaScript('wsapi.toggleRepeat()').catch(console.error);
break;
case 'shuffle':
this._win.webContents.executeJavaScript('wsapi.toggleShuffle()').catch(console.error);
break;
case 'togglethumbsup':
// not implemented
break;
case 'togglethumbsdown':
// not implemented
break;
case 'rating':
// not implemented
break;
}
} catch (error) {
console.debug(error);
if (this.ws.readyState === WebSocket.OPEN) {
this.ws.send(`Error:Error sending event to ${this.playerName}`);
this.ws.send(`ErrorD:${error}`);
}
}
}
/**
* Runs on app ready
*/
onReady(win: any) {
this._win = win;
// Connect to Rainmeter plugin and retry on disconnect.
const init = () => {
try {
this.ws = new WebSocket('ws://127.0.0.1:8974/');
let retry: NodeJS.Timeout;
this.ws.onopen = (() => {
console.info('[WebNowPlaying] Connected to Rainmeter');
this.ws.send(`PLAYER:${this.playerName}`);
}).bind(this);
this.ws.onclose = () => {
clearTimeout(retry);
retry = setTimeout(init, 2000);
};
this.ws.onerror = () => {
clearTimeout(retry);
this.ws.close();
};
this.ws.onmessage = this.fireEvent?.bind(this);
} catch (error) {
console.error(error);
}
};
init();
// Connect to wsapi. Only used to update progress.
try {
this.wsapiConn = new WebSocket('ws://127.0.0.1:26369/');
this.wsapiConn.onopen = () => {
console.info('[WebNowPlaying] Connected to wsapi');
};
this.wsapiConn.onmessage = (evt: { data: string; }) => {
const response = JSON.parse(evt.data);
if (response.type === 'playbackStateUpdate') {
this.sendSongInfo(response.data);
}
};
} catch (error) {
console.error(error);
}
console.debug(`[Plugin][${this.name}] Ready.`);
}
/**
* Runs on app stop
*/
onBeforeQuit() {
if (this.ws) {
this.ws.send('STATE:0');
this.ws.onclose = null; // disable onclose handler first to stop it from retrying
this.ws.close();
}
if (this.wsapiConn) {
this.wsapiConn.close();
}
console.debug(`[Plugin][${this.name}] Stopped.`);
}
/**
* Runs on playback State Change
* @param attributes Music Attributes (attributes.status = current state)
*/
onPlaybackStateDidChange(attributes: any) {
this.sendSongInfo(attributes);
}
/**
* Runs on song change
* @param attributes Music Attributes
*/
onNowPlayingItemDidChange(attributes: any) {
this.sendSongInfo(attributes);
}
}

View file

@ -30,7 +30,7 @@ var CiderAudio = {
CiderAudio.audioNodes.gainNode.disconnect(); } catch(e){}
try{ CiderAudio.audioNodes.spatialNode.disconnect();} catch(e){}
try{
CiderAudio.audioNodes.preampNode.disconnect();
// CiderAudio.audioNodes.preampNode.disconnect();
for (var i of CiderAudio.audioNodes.llpw){
i.disconnect();
}
@ -126,11 +126,10 @@ var CiderAudio = {
let VIBRANTBASSBANDS = app.cfg.audio.vibrantBass.frequencies;
let VIBRANTBASSGAIN = app.cfg.audio.vibrantBass.gain;
let VIBRANTBASSQ = app.cfg.audio.vibrantBass.Q;
LLPW_Q = [5, 1, 3.536, 1.25, 8.409, 1.25, 14.14, 7.071, 5, 0.625, 16.82, 20, 20, 20, 28.28, 28.28, 28.28, 20, 33.64, 33.64, 10, 28.28, 7.071, 3.856];
LLPW_GAIN = [0.38, -1.81, -0.23, -0.51, 0.4, 0.84, 0.36, -0.34, 0.27, -1.2, -0.42, -0.67, 0.81, 1.31, -0.71, 0.68, -1.04, 0.79, -0.73, -1.33, 1.17, 0.57, 0.35, 6.33];
LLPW_FREQUENCIES = [16.452, 24.636, 37.134, 74.483, 159.54, 308.18, 670.21, 915.81, 1200.7, 2766.4, 2930.6, 4050.6, 4409.1, 5395.2, 5901.6, 6455.5, 7164.1, 7724.1, 8449, 10573, 12368, 14198, 17910, 18916];
CiderAudio.audioNodes.audioBands = []; CiderAudio.audioNodes.vibrantbassNode = [];
CiderAudio.audioNodes.llpw = []; CiderAudio.audioNodes.llpwEnabled = 0;
let LLPW_Q = [5, 1, 3.536, 1.25, 8.409, 1.25, 14.14, 7.071, 5, 0.625, 16.82, 20, 20, 20, 28.28, 28.28, 28.28, 20, 33.64, 33.64, 10, 28.28, 7.071, 3.856];
let LLPW_GAIN = [0.38, -1.81, -0.23, -0.51, 0.4, 0.84, 0.36, -0.34, 0.27, -1.2, -0.42, -0.67, 0.81, 1.31, -0.71, 0.68, -1.04, 0.79, -0.73, -1.33, 1.17, 0.57, 0.35, 6.33];
let LLPW_FREQUENCIES = [16.452, 24.636, 37.134, 74.483, 159.54, 308.18, 670.21, 915.81, 1200.7, 2766.4, 2930.6, 4050.6, 4409.1, 5395.2, 5901.6, 6455.5, 7164.1, 7724.1, 8449, 10573, 12368, 14198, 17910, 18916];
CiderAudio.audioNodes.audioBands = []; CiderAudio.audioNodes.vibrantbassNode = []; CiderAudio.audioNodes.llpw = [];
for (i = 0; i < BANDS.length; i++) {
CiderAudio.audioNodes.audioBands[i] = CiderAudio.context.createBiquadFilter();
@ -147,19 +146,21 @@ var CiderAudio = {
CiderAudio.audioNodes.llpw[i].Q.value = LLPW_Q[i];
CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i] * app.cfg.audio.ciderPPE_value * CiderAudio.audioNodes.llpwEnabled;
}
/**
CiderAudio.audioNodes.preampNode = CiderAudio.context.createBiquadFilter();
CiderAudio.audioNodes.preampNode.type = 'highshelf';
CiderAudio.audioNodes.preampNode.frequency.value = 0; // allow all
CiderAudio.audioNodes.preampNode.gain.value = app.cfg.audio.equalizer.preamp;
CiderAudio.audioNodes.preampNode.frequency.value = 0; // Passthrough
CiderAudio.audioNodes.preampNode.gain.value = 0;
/** if (CiderAudio.audioNodes.llpwEnabled === 1) {CiderAudio.audioNodes.preampNode.gain.value = (-Math.max(...app.cfg.audio.equalizer.gain.concat(CiderAudio.audioNodes.llpw[23].gain.value)));}
else {CiderAudio.audioNodes.preampNode.gain.value = (-Math.max(...app.cfg.audio.equalizer.gain));}*/
for (i = 0; i < VIBRANTBASSBANDS.length; i++) {
CiderAudio.audioNodes.vibrantbassNode[i] = CiderAudio.context.createBiquadFilter();
CiderAudio.audioNodes.vibrantbassNode[i].type = 'peaking'; // 'peaking';
CiderAudio.audioNodes.vibrantbassNode[i].frequency.value = VIBRANTBASSBANDS[i];
CiderAudio.audioNodes.vibrantbassNode[i].Q.value = VIBRANTBASSQ[i];
CiderAudio.audioNodes.vibrantbassNode[i].gain.value = VIBRANTBASSGAIN[i] * app.cfg.audio.vibrantBass.multiplier;
}
CiderAudio.audioNodes.vibrantbassNode[i] = CiderAudio.context.createBiquadFilter();
CiderAudio.audioNodes.vibrantbassNode[i].type = 'peaking'; // 'peaking';
CiderAudio.audioNodes.vibrantbassNode[i].frequency.value = VIBRANTBASSBANDS[i];
CiderAudio.audioNodes.vibrantbassNode[i].Q.value = VIBRANTBASSQ[i];
CiderAudio.audioNodes.vibrantbassNode[i].gain.value = VIBRANTBASSGAIN[i] * app.cfg.audio.vibrantBass.multiplier;}
if (app.cfg.audio.spatial) {
try{
@ -171,18 +172,18 @@ var CiderAudio = {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);
}
// CiderAudio.audioNodes.preampNode.connect(CiderAudio.audioNodes.llpw[0]);
for (i = 1; i < LLPW_FREQUENCIES.length; i ++) {
CiderAudio.audioNodes.llpw[i-1].connect(CiderAudio.audioNodes.llpw[i]);
}
CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.preampNode);
CiderAudio.audioNodes.preampNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);
for (i = 1; i < VIBRANTBASSBANDS.length; i ++) {
CiderAudio.audioNodes.vibrantbassNode[i-1].connect(CiderAudio.audioNodes.vibrantbassNode[i]);
}
CiderAudio.audioNodes.vibrantbassNode[VIBRANTBASSBANDS.length-1].connect(CiderAudio.audioNodes.audioBands[0]);
for (i = 1; i < BANDS.length; i ++) {
CiderAudio.audioNodes.audioBands[i-1].connect(CiderAudio.audioNodes.audioBands[i]);
}

View file

@ -1,78 +1,5 @@
Vue.use(VueObserveVisibility);
var notyf = new Notyf();
// This is going to suck to code
var CiderContextMenu = {
Menu: function (event) {
this.items = []
},
async Create(event, menudata) {
var menuBackground = document.createElement("div");
var menu = document.createElement("div");
menu.classList.add("context-menu-body");
menu.classList.add("context-menu-open");
menuBackground.classList.add("context-menu");
menu.style.left = 0 + "px";
menu.style.top = 0 + "px";
menu.style.position = "absolute";
menu.style.zIndex = "99909";
menu.addEventListener("animationend", function () {
menu.classList.remove("context-menu-open");
}, {once: true});
function close() {
menuBackground.style.pointerEvents = "none";
menu.classList.add("context-menu-close");
menu.addEventListener("animationend", function () {
menuBackground.remove();
menu.remove();
}, {once: true});
}
// when menubackground is clicked, remove it
menuBackground.addEventListener("click", close);
menuBackground.addEventListener("contextmenu", close);
// add menu to menuBackground
menuBackground.appendChild(menu);
document.body.appendChild(menuBackground);
if (typeof menudata.items == "object") {
menudata.items = Object.values(menudata.items);
}
console.log(menudata);
// for each item in menudata create a menu item
for (var i = 0; i < menudata.items.length; i++) {
let item = document.createElement("button")
if (menudata.items[i]["disabled"] === true) {
continue
}
item.tabIndex = 0
item.classList.add("context-menu-item")
if (menudata.items[i]["icon"]) {
item.innerHTML += `<div class="sidebar-icon">${await app.getSvgIcon(menudata.items[i]["icon"])}</div>`
}
item.innerHTML += menudata.items[i].name
item.onclick = menudata.items[i].action
menu.appendChild(item)
}
menu.style.width = (menu.offsetWidth + 10) + "px";
menu.style.left = event.clientX + "px";
menu.style.top = event.clientY + "px";
// if menu would be off the screen, move it into view, but preserve the width
if (menu.offsetLeft + menu.offsetWidth > window.innerWidth) {
menu.style.left = (window.innerWidth - menu.offsetWidth) + "px";
}
if (menu.offsetTop + menu.offsetHeight > window.innerHeight) {
menu.style.top = (window.innerHeight - menu.offsetHeight) + "px";
}
return menuBackground;
}
}
const MusicKitObjects = {
LibraryPlaylist: function () {
@ -344,6 +271,25 @@ const app = new Vue({
},
},
methods: {
songLinkShare(amUrl) {
notyf.open({type: "info", message: app.getLz('term.song.link.generate')})
let self = this
httpRequest = new XMLHttpRequest();
httpRequest.open('GET', `https://api.song.link/v1-alpha.1/links?url=${amUrl}&userCountry=US`, true);
httpRequest.send();
httpRequest.onreadystatechange = function () {
if (httpRequest.readyState === 4) {
if (httpRequest.status === 200) {
let response = JSON.parse(httpRequest.responseText);
console.log(response);
self.copyToClipboard(response.pageUrl)
} else {
console.log('There was a problem with the request.');
notyf.error(app.getLz('term.requestError'))
}
}
}
},
mainMenuVisibility(val) {
if (val) {
(this.chrome.userinfo.id) ? this.chrome.menuOpened = !this.chrome.menuOpened : false
@ -670,23 +616,13 @@ const app = new Vue({
window.localStorage.setItem("currentQueue", JSON.stringify(app.mk.queue.items))
};
// Load saved quality
switch (app.cfg.audio.quality) {
case "extreme":
app.mk.bitrate = app.cfg.audio.quality = 990
break;
case "high":
app.mk.bitrate = app.cfg.audio.quality = 256
break;
case "low":
app.mk.bitrate = app.cfg.audio.quality = 64
break;
default:
// app.mk.bitrate = app.cfg.audio.quality
break;
if (typeof MusicKit.PlaybackBitrate[app.cfg.audio.quality] !== "string") {
app.mk.bitrate = MusicKit.PlaybackBitrate[app.cfg.audio.quality]
} else {
app.mk.bitrate = 256
app.cfg.audio.quality = "HIGH"
}
// load last played track
try {
let lastItem = window.localStorage.getItem("currentTrack")
@ -1252,10 +1188,24 @@ const app = new Vue({
return this.playerLCD.playbackDuration
}
},
convertToMins(time) {
let mins = Math.floor(time / 60)
let seconds = (Math.floor(time % 60) / 100).toFixed(2)
return `${mins}:${seconds.replace("0.", "")}`
convertTime(time) {
if (typeof time !== "number") {
time = parseInt(time)
}
const timeGates = {
600: 15,
3600: 14,
36000: 12,
}
for (let key in timeGates) {
if (time < key) {
return new Date(time * 1000).toISOString().substring(timeGates[key], 19)
}
}
return new Date(time * 1000).toISOString().substring(11, 19)
},
hashCode(str) {
let hash = 0,
@ -1934,7 +1884,7 @@ const app = new Vue({
self.library.backgroundNotification.show = false
self.searchLibrarySongs()
localStorage.setItem("librarySongs", JSON.stringify(library))
console.log(library)
// console.log(library)
}
}
@ -2042,7 +1992,7 @@ const app = new Vue({
self.library.backgroundNotification.show = false
localStorage.setItem("libraryAlbums", JSON.stringify(library))
self.searchLibraryAlbums(index)
console.log(library)
// console.log(library)
}
}
@ -2148,7 +2098,7 @@ const app = new Vue({
self.library.backgroundNotification.show = false
localStorage.setItem("libraryArtists", JSON.stringify(library))
self.searchLibraryArtists(index)
console.log(library)
// console.log(library)
}
}
@ -2334,7 +2284,7 @@ const app = new Vue({
this.mk.addToLibrary(id).then((data) => {
self.getLibrarySongsFull(true)
})
notyf.success('Added to library.');
notyf.success(app.getLz('action.addToLibrary.success'));
},
removeFromLibrary(kind, id) {
let self = this
@ -2346,7 +2296,7 @@ const app = new Vue({
}).then((data) => {
self.getLibrarySongsFull(true)
})
notyf.success('Removed from library.')
notyf.success(app.getLz('action.removeFromLibrary.success'))
},
async losslessBadge() {
@ -3083,23 +3033,6 @@ const app = new Vue({
})
self.$store.commit("setLCDArtwork", img)
})
// Vibrant.from(this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size)).getPalette().then(palette=>{
// let angle = "140deg"
// let gradient = ""
// let colors = Object.values(palette).filter(color=>color!=null)
// if(colors.length > 0){
// let stops = []
// colors.forEach(color=>{
// stops.push(`${self._rgbToRgb(color._rgb)} 0%`)
// })
// stops.push(`${self._rgbToRgb(colors[0]._rgb)} 100%`)
// gradient = `linear-gradient(${angle}, ${stops.join(", ")}`
// }
//
// document.querySelector("#app").style.setProperty("--bgColor", gradient)
// }).setQuantizer(Vibrant.Quantizer.WebWorker)
try {
clearInterval(bginterval);
} catch (err) {
@ -3124,47 +3057,6 @@ const app = new Vue({
}
}, 200)
},
// getNowPlayingArtwork(size = 600) {
// if (typeof this.mk.nowPlayingItem === "undefined") return;
// let interval = setInterval(() => {
// try {
// if (this.mk.nowPlayingItem && this.mk.nowPlayingItem["id"] != this.currentTrackIDBG && document.querySelector('.app-playback-controls .artwork')) {
// this.currentTrackIDBG = this.mk.nowPlayingItem["id"];
// if (document.querySelector('.app-playback-controls .artwork') != null) {
// clearInterval(interval);
// }
// if (app.mk.nowPlayingItem.attributes.artwork != null && app.mk.nowPlayingItem.attributes.artwork.url != null && app.mk.nowPlayingItem.attributes.artwork.url!= '' ) {
// document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${decodeURI((this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"])).replace('{w}', size).replace('{h}', size)}")`);
// try {
// clearInterval(interval);
// } catch (err) {
// }
// } else {
// this.setLibraryArt()
// }
// } else if (this.mk.nowPlayingItem["id"] == this.currentTrackID) {
// try {
// clearInterval(interval);
// } catch (err) {
// }
// }
// } catch (e) {
// if (this.mk.nowPlayingItem && this.mk.nowPlayingItem["id"] && document.querySelector('.app-playback-controls .artwork')) {
// this.setLibraryArt()
// try {
// clearInterval(interval);
// } catch (err) {
// }
// }
// }
// }, 200)
// },
async getCurrentArtURL() {
try {
this.currentArtUrl = '';
@ -3179,11 +3071,6 @@ const app = new Vue({
data = data.data.data[0];
if (data != null && data !== "" && data.attributes != null && data.attributes.artwork != null) {
this.currentArtUrl = (data["attributes"]["artwork"]["url"] ?? '').replace('{w}', 50).replace('{h}', 50);
// if (this.currentArtUrl != ""){
// let attr = MusicKitInterop.getAttributes();
// attr.artwork.url = this.currentArtUrl;
// ipcRenderer.send('forceUpdateRPC',attr)
// }
try {
document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${this.currentArtUrl}")`);
} catch (e) {
@ -3317,29 +3204,32 @@ const app = new Vue({
}
})
},
checkScrollDirectionIsUp(event) {
if (event.wheelDelta) {
return event.wheelDelta > 0;
}
return event.deltaY < 0;
},
volumeUp() {
if ((app.mk.volume + app.cfg.audio.volumeStep) > 1) {
app.mk.volume = app.cfg.audio.maxVolume;
console.log('setting max volume')
} else {
console.log('volume up')
app.mk.volume += app.cfg.audio.volumeStep;
}
},
volumeDown() {
if ((app.mk.volume - app.cfg.audio.volumeStep) < 0) {
app.mk.volume = 0;
console.log('setting volume to 0')
} else {
console.log('volume down')
app.mk.volume -= app.cfg.audio.volumeStep;
}
},
volumeWheel(event) {
if (this.cfg.audio.maxVolume < 1.0 && this.cfg.audio.maxVolume > 0.01) {
this.cfg.audio.volumePrecision = 0.01
this.cfg.audio.volumeRoundMax = this.cfg.audio.maxVolume - 0.01
this.cfg.audio.volumeRoundMin = 0.01
}
if (event.deltaY < 0) {
if (this.mk.volume < this.cfg.audio.maxVolume) {
if (this.mk.volume <= this.cfg.audio.volumeRoundMax) {
this.mk.volume += this.cfg.audio.volumePrecision
} else {
this.mk.volume = this.cfg.audio.maxVolume
}
}
} else if (event.deltaY > 0) {
if (this.mk.volume > 0) {
if (this.mk.volume >= this.cfg.audio.volumeRoundMin) {
this.mk.volume -= this.cfg.audio.volumePrecision
} else {
this.mk.volume = 0
}
}
}
app.checkScrollDirectionIsUp(event) ? app.volumeUp() : app.volumeDown()
},
muteButtonPressed() {
if (this.cfg.audio.muted) {
@ -3405,18 +3295,11 @@ const app = new Vue({
}
},
async nowPlayingContextMenu(event) {
// function revisedRandId() {
// return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(2, 10);
// }
let self = this
let data_type = this.mk.nowPlayingItem.playParams.kind
let item_id = this.mk.nowPlayingItem.attributes.playParams.id ?? this.mk.nowPlayingItem.id
let isLibrary = this.mk.nowPlayingItem.attributes.playParams.isLibrary ?? false
let params = {"fields[songs]": "inLibrary", "fields[albums]": "inLibrary", "relate": "library", "t": "1"}
// let res = await app.mkapi(data_type, isLibrary , item_id, params);
// if (res && res.relationships && res.relationships.library && res.relationships.library.data && res.relationships.library.data.length > 0) {
// item_id = res.relationships.library.data[0].id
// }
app.selectedMediaItems = []
app.select_selectMediaItem(item_id, data_type, 0, '12344', isLibrary)
let useMenu = "normal"
@ -3480,7 +3363,6 @@ const app = new Vue({
"disabled": false,
"action": function () {
app.addToLibrary(app.mk.nowPlayingItem.id);
// if (!isLibrary) {app.addToLibrary(item_id); this.mk.nowPlayingItem.attributes.playParams["isLibrary"] = true} else { app.removeFromLibrary(data_type,item_id); this.mk.nowPlayingItem.attributes.playParams["isLibrary"] = false};
}
},
{
@ -3501,26 +3383,24 @@ const app = new Vue({
app.copyToClipboard((u.data.data.length && u.data.data.length > 0) ? u.data.data[0].attributes.url : u.data.data.attributes.url)
})
}
},
{
"icon": "./assets/feather/share.svg",
"name": `${app.getLz('action.share')} (song.link)`,
"action": function () {
app.mkapi(app.mk.nowPlayingItem.attributes?.playParams?.kind ?? app.mk.nowPlayingItem.type ?? 'songs', false, app.mk.nowPlayingItem._songId ?? app.mk.nowPlayingItem.id ?? '').then(u => {
app.songLinkShare((u.data.data.length && u.data.data.length > 0) ? u.data.data[0].attributes.url : u.data.data.attributes.url)
})
}
}
]
}
}
if (this.contextExt) {
// if this.context-ext.normal is true append all options to the 'normal' menu which is a kvp of arrays
if (this.contextExt.normal) {
menus.normal.items = menus.normal.items.concat(this.contextExt.normal)
}
}
// isLibrary = await app.inLibrary([this.mk.nowPlayingItem])
// console.warn(isLibrary)
// if(isLibrary.length != 0) {
// if (isLibrary[0].attributes.inLibrary) {
// menus.normal.items.find(x => x.id == "addToLibrary").disabled = true
// }
// }else{
// menus.normal.items.find(x => x.id == "addToLibrary").disabled = true
// }
this.showMenuPanel(menus[useMenu], event)
try {

View file

@ -1,10 +1,10 @@
@import url("ameframework.css");
@import url("assets/fonts/Inter/inter.css");
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@100;300;400;500;700;900&display=swap');
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@100;300;400;500;700;900&display=swap");
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+HK:wght@100;300;400;500;700;900&display=swap");
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@100;300;400;500;700;900&display=swap");
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap");
@import url("less/ameframework.less");
@import url("less/bootstrap.less");
@import url("less/notyf.less");
@ -1126,51 +1126,53 @@ body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls > div.cl
width: 100%;
}
.app-chrome .app-chrome-item > .app-playback-controls .song-name {
font-weight: 600;
text-align: center;
font-size: 13px;
height: 1.3em;
line-height: 1.3em;
white-space: nowrap;
max-width: 360px;
.app-chrome .app-chrome-item > .app-playback-controls {
.song-name {
font-weight: 600;
text-align: center;
font-size: 13px;
height: 1.3em;
line-height: 1.3em;
white-space: nowrap;
max-width: 360px;
.song-name-normal {
height: inherit;
}
.song-name-normal {
height: inherit;
}
&.song-artist-marquee {
> marquee {
//margin-bottom: -3px;
&.song-artist-marquee {
> marquee {
//margin-bottom: -3px;
}
}
.explicit-icon {
background-image: url("./assets/explicit.svg");
height: 9px;
width: 13px;
filter: contrast(0);
background-repeat: no-repeat;
margin-left: 3px;
}
}
.explicit-icon {
background-image: url("./assets/explicit.svg");
height: 9px;
width: 13px;
filter: contrast(0);
background-repeat: no-repeat;
margin-left: 3px;
}
.lossless-icon {
background-image: url("http://localhost:9000/assets/lossless.svg");
height: 9px;
width: 36px;
filter: contrast(0);
background-repeat: no-repeat;
margin-left: 3px;
background-size: contain;
background-image: url("./assets/lossless.svg") !important;
}
.ppe-icon {
background-image: url("./assets/ppe.svg");
height: 12px;
width: 13px;
background-image: url("./assets/ppe.svg") !important;
}
.audio-type {
filter: contrast(0);
background-repeat: no-repeat;
background-size: contain;
height: 15px;
width: 15px;
position: absolute;
right: 0;
margin-bottom: 15px;
}
}
@ -5940,7 +5942,7 @@ body.no-gpu {
.modal-window {
height: 330px;
max-height: 330px;
width: 800px;
width: 740px;
max-width: 800px;
overflow: hidden;

View file

@ -50,17 +50,14 @@
<mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
</div>
<div class="playback-info">
<div class="song-name" style="-webkit-box-orient: horizontal;"
:class="[isElementOverflowing('#app-main > div.app-chrome > div.app-chrome--center > div > div > div.playback-info > div.song-name') ? 'marquee' : '']"
:style="[mk.nowPlayingItem['attributes']['contentRating'] == 'explicit' || mk.nowPlayingItem['attributes']['lossless'] == true ? {'margin-left' : '23px'} : {'margin-left' : '0px'} ]">
<div class="song-name"
:class="[isElementOverflowing('#app-main > div.app-chrome > div.app-chrome--center > div > div > div.playback-info > div.song-name') ? 'marquee' : '']">
{{ mk.nowPlayingItem["attributes"]["name"] }}
<div class="explicit-icon"
v-if="mk.nowPlayingItem['attributes']['contentRating'] == 'explicit'"
style="display: inline-block"></div>
<div class="ppe-icon"
v-if="app.cfg.advanced.ciderPPE == true"
style="display: inline-block"></div>
</div>
<div class="audio-type ppe-icon" v-if="cfg.advanced.ciderPPE == true"></div>
<div class="song-artist-album">
<div class="song-artist-album-content"
:class="[isElementOverflowing('#app-main > .app-chrome .app-chrome-item > .app-playback-controls > div >.song-artist-album > .song-artist-album-content') ? 'marquee' : '']"
@ -83,8 +80,8 @@
<div class="song-duration"
style="justify-content: space-between; height: 1px;"
:style="[chrome.progresshover ? {'display': 'flex'} : {'display' : 'none'} ]">
<p style="width: auto">{{ convertToMins(getSongProgress()) }}</p>
<p style="width: auto">{{ convertToMins(mk.currentPlaybackDuration) }}
<p style="width: auto">{{ convertTime(getSongProgress()) }}</p>
<p style="width: auto">{{ convertTime(mk.currentPlaybackDuration) }}
</p>
</div>
@ -111,7 +108,7 @@
<div class="app-chrome-item volume display--large">
<button class="volume-button--small volume" @click="muteButtonPressed()"
:class="{'active': this.cfg.audio.volume == 0}"></button>
<input type="range" class="" @wheel="volumeWheel" step="0.01" min="0" :max="cfg.audio.maxVolume"
<input type="range" @wheel="volumeWheel" :step="cfg.audio.volumeStep" min="0" :max="cfg.audio.maxVolume"
v-model="mk.volume" v-if="typeof mk.volume != 'undefined'" @change="checkMuteChange()">
</div>
<div class="app-chrome-item generic">

View file

@ -23,11 +23,6 @@
<input tabindex="0" type="range" class="eq-slider mini" orient="vertical" min="-15" max="15" step="1" v-model="$root.cfg.audio.equalizer.vibrantBass" @change="changeVibrantBass()">
Vibrant Bass
</div>
<div class="input-container mini">
<input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.preamp" @change="changePreamp()">
<input tabindex="0" type="range" class="eq-slider mini" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.preamp" @change="changePreamp()">
Preamp
</div>
<div class="input-container mini">
{{$root.cfg.audio.equalizer.mix}}
<input tabindex="0" type="range" class="eq-slider mini" orient="vertical" min="0" max="2" step="0.1" v-model="$root.cfg.audio.equalizer.mix" @change="changeMix()">
@ -128,7 +123,6 @@
this.frequencies = []
this.gain = []
this.Q = []
this.preamp = 0
this.mix = 1
this.vibrantBass = 0
this.userGenerated = true
@ -140,7 +134,6 @@
'frequencies': [32, 63, 125, 250, 500, 1000, 2000, 4000, 8000, 16000],
'gain': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'Q': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
'preamp': 0,
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
@ -150,7 +143,6 @@
'frequencies': [32, 75, 125, 197, 500, 1000, 2000, 3040, 8000, 16000],
'gain': [0, 2.1, 0, 0.8, 0, 0, 0, -1.5, 0, 0],
'Q': [1, 0.7, 1, 1.5, 1, 1, 1, 2, 1, 1],
'preamp': 0,
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
@ -160,7 +152,6 @@
'frequencies': [32, 63, 125, 250, 466, 1000, 2000, 4000, 8000, 20000],
'gain': [0, 0, 0, 0, -2, 0, 0, 0, 0, 10],
'Q': [1, 1, 1, 1, 0.6, 1, 1, 1, 1, 0.1],
'preamp': 0,
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
@ -170,7 +161,6 @@
'frequencies': [32, 75, 125, 220, 700, 1000, 2000, 4000, 10000, 16000],
'gain': [0, -8, 0, -0.1, -3, 0, 0, 0, 4, 0],
'Q': [1, 0.2, 1, 2.0, 1.4, 1, 1, 1, 0.1, 1],
'preamp': 0,
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
@ -180,7 +170,6 @@
'frequencies': [20, 63, 125, 250, 400, 1000, 2000, 4000, 8000, 20000],
'gain': [-22, 0, 0, 0, -3, 0, 1.8, 0, 0, 3.5],
'Q': [0.3, 1, 1, 1, 2.0, 1, 0.7, 1, 1, 0.8],
'preamp': 0,
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
@ -190,7 +179,6 @@
'frequencies': [20, 63, 155, 250, 500, 1000, 2000, 5000, 11000, 16000],
'gain': [-15, 0, -3, 0, 0, 0, 0, 3.1, 0, 0],
'Q': [0.5, 1, 2, 1, 1, 1, 1, 1.5, 0.1, 1],
'preamp': 0,
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
@ -200,7 +188,6 @@
'frequencies': [32, 63, 125, 250, 500, 1128, 2000, 4057, 8000, 16000],
'gain': [0, 0, 0, 0, 0, 2, 0, -6.4, 0, 0],
'Q': [1, 1, 1, 1, 1, 2, 1, 1, 1, 1],
'preamp': 0,
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
@ -210,7 +197,6 @@
'frequencies': [35, 63, 125, 250, 500, 800, 2000, 4000, 8000, 20000],
'gain': [5, 0, 0, 0, 0, -5, 0, 0, 0, 5],
'Q': [0.1, 1, 1, 1, 1, 0.6, 1, 1, 1, 0.2],
'preamp': 0,
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
@ -221,7 +207,6 @@
'frequencies': [45.53,88.06,116.18,161.3,247.05,295.6,365.79,495.13,716.85,960.76],
'gain': [-0.36,4.07,-1.3,1.92,0.77,-0.53,-1.33,0.44,0.46,-0.5],
'Q': [1.768,0.625,5,8.409,10,16.82,5.946,7.071,20,10],
'preamp': -2,
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
@ -232,7 +217,6 @@
'frequencies': [32, 63, 125, 250, 500, 1000, 2000, 4000, 8000, 16000],
'gain': [2.7, 2.2, 1.6, 1.4, 0.6, 0, 0, 0, 0, 0],
'Q': [1.4, 1.4, 1.4, 1.4, 1.4, 1, 1, 1, 1, 1],
'preamp': 0,
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
@ -242,7 +226,6 @@
'frequencies': [32, 63, 160, 250, 500, 1000, 2000, 3500, 8000, 20000],
'gain': [2.7, 2.2, 1.6, 1.4, 0.6, 0, 0, 0, 0, 0],
'Q': [0.7, 0.7, 0.7, 0.7, 0.7, 1, 1, 1, 1, 1],
'preamp': 0,
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
@ -335,16 +318,18 @@
CiderAudio.audioNodes.vibrantbassNode[i].gain.value = app.cfg.audio.vibrantBass.gain[i] * (app.cfg.audio.equalizer.vibrantBass / 10);
}
},
changePreamp() {
CiderAudio.audioNodes.preampNode.gain.value = app.cfg.audio.equalizer.preamp;
},
changeMix() {
for (var i = 0; i < 10; i++) {
CiderAudio.audioNodes.audioBands[i].gain.value = app.cfg.audio.equalizer.gain[i] * app.cfg.audio.equalizer.mix
}
},
changePreamp() {
/** if (CiderAudio.audioNodes.llpwEnabled === 1) {CiderAudio.audioNodes.preampNode.gain.value = (-Math.max(...app.cfg.audio.equalizer.gain.concat(CiderAudio.audioNodes.llpw[23].gain.value)));}
else {CiderAudio.audioNodes.preampNode.gain.value = (-Math.max(...app.cfg.audio.equalizer.gain));} */
},
changeGain(i) {
CiderAudio.audioNodes.audioBands[i].gain.value = app.cfg.audio.equalizer.gain[i] * app.cfg.audio.equalizer.mix
this.changePreamp()
},
changeFreq(i) {
CiderAudio.audioNodes.audioBands[i].frequency.value = app.cfg.audio.equalizer.frequencies[i]
@ -357,10 +342,10 @@
'frequencies': [32, 63, 125, 250, 500, 1000, 2000, 4000, 8000, 16000],
'gain': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'Q': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
'preamp': 0,
'mix': 1,
'vibrantBass': 0,
})
CiderAudio.audioNodes.preampNode.gain.value = 0;
if (app.cfg.audio.equalizer.userGenerated) {
this.saveSelectedPreset()
}
@ -375,7 +360,6 @@
newPreset.frequencies = eqSettings.frequencies
newPreset.gain = eqSettings.gain
newPreset.Q = eqSettings.Q
newPreset.preamp = eqSettings.preamp
newPreset.mix = eqSettings.mix
newPreset.vibrantBass = eqSettings.vibrantBass
app.cfg.audio.equalizer.presets.push(newPreset)
@ -393,14 +377,13 @@
preset.frequencies = app.cfg.audio.equalizer.frequencies
preset.gain = app.cfg.audio.equalizer.gain
preset.Q = app.cfg.audio.equalizer.Q
preset.preamp = app.cfg.audio.equalizer.preamp
preset.mix = app.cfg.audio.equalizer.mix
preset.vibrantBass = app.cfg.audio.equalizer.vibrantBass
notyf.success("Saved Preset")
},
exportPreset() {
const preset = app.cfg.audio.equalizer.presets.find(p => p.preset == app.cfg.audio.equalizer.preset)
const jsonObj = {"name": preset.name, "author": app.chrome.userinfo.attributes.name, "frequency": preset.frequencies, "gain": preset.gain, "q": preset.Q, "preamp": preset.preamp, "mix": preset.mix, "vibrantBass": preset.vibrantBass};
const jsonObj = {"name": preset.name, "author": app.chrome.userinfo.attributes.name, "frequency": preset.frequencies, "gain": preset.gain, "q": preset.Q, "mix": preset.mix, "vibrantBass": preset.vibrantBass};
ipcRenderer.send("export-eq", jsonObj)
},
importPreset() {
@ -411,7 +394,6 @@
newPreset.frequencies = result.frequency
newPreset.gain = result.gain
newPreset.Q = result.q
newPreset.preamp = result.preamp
newPreset.mix = result.mix
newPreset.vibrantBass = result.vibrantBass
app.cfg.audio.equalizer.presets.push(newPreset)
@ -423,7 +405,6 @@
},
applyPreset(preset) {
Object.assign(this.$root.cfg.audio.equalizer, preset)
this.changePreamp()
this.changeVibrantBass()
for (var i = 0; i < 10; i++) {
this.changeGain(i)

View file

@ -41,8 +41,8 @@
<div class="song-progress">
<div class="song-duration" style="justify-content: space-between; height: 1px;"
:style="[app.chrome.progresshover ? {'display': 'flex'} : {'display' : 'none'} ]">
<p style="width: auto">{{ app.convertToMins(app.getSongProgress()) }}</p>
<p style="width: auto">{{ app.convertToMins(app.mk.currentPlaybackDuration) }}</p>
<p style="width: auto">{{ app.convertTime(app.getSongProgress()) }}</p>
<p style="width: auto">{{ app.convertTime(app.mk.currentPlaybackDuration) }}</p>
</div>
<input type="range" step="0.01" min="0" :style="app.progressBarStyle()"
@ -80,7 +80,7 @@
<div class="app-chrome-item volume display--large">
<div class="input-container">
<button class="volume-button--small volume" @click="app.muteButtonPressed()" :class="{'active': app.cfg.audio.volume == 0}"></button>
<input type="range" class="slider" @wheel="app.volumeWheel" step="0.01" min="0" :max="$root.cfg.audio.maxVolume" v-model="app.mk.volume"
<input type="range" class="slider" @wheel="app.volumeWheel" :step="app.cfg.audio.volumeStep" min="0" :max="$root.cfg.audio.maxVolume" v-model="app.mk.volume"
v-if="typeof app.mk.volume != 'undefined'" @change="app.checkMuteChange()">
</div>
</div>

View file

@ -29,7 +29,7 @@
<div class="loadbar-sound"></div>
</div>
</div>
<div class="artwork" v-if="showArtwork == true">
<div class="artwork" v-if="showArtwork == true && (showIndex == false ||(showIndex == true && showIndexPlaylist != false)) ">
<mediaitem-artwork
:url="item.attributes.artwork ? item.attributes.artwork.url : ''"
:size="48"
@ -90,17 +90,17 @@
}
},
props: {
'item': {type: Object, required: true},
'parent': {type: String, required: false},
'index': {type: Number, required: false, default: -1},
'show-artwork': {type: Boolean, default: true},
'show-library-status': {type: Boolean, default: true},
'show-meta-data': {type: Boolean, default: false},
'show-duration': {type: Boolean, default: true},
'showIndex': {type: Boolean, required: false},
'showIndexPlaylist': {type: Boolean, required: false},
'contextExt': {type: Object, required: false},
'class-list': {type: String, required: false, default: ""},
'item': { type: Object, required: true },
'parent': { type: String, required: false },
'index': { type: Number, required: false, default: -1 },
'show-artwork': { type: Boolean, default: true },
'show-library-status': { type: Boolean, default: true },
'show-meta-data': { type: Boolean, default: false },
'show-duration': { type: Boolean, default: true },
'showIndex': { type: Boolean, required: false },
'showIndexPlaylist': { type: Boolean, required: false },
'contextExt': { type: Object, required: false },
'class-list': { type: String, required: false, default: "" },
},
mounted() {
let duration = this.item.attributes.durationInMillis ?? 0
@ -115,8 +115,8 @@
return color
},
async checkLibrary() {
if(this.addedToLibrary) {return this.addedToLibrary}
if(this.item.type.includes("library-playlists") || this.item.type.includes("station")) {
if (this.addedToLibrary) { return this.addedToLibrary }
if (this.item.type.includes("library-playlists") || this.item.type.includes("station")) {
this.addedToLibrary = true
return
}
@ -126,10 +126,10 @@
return this.addedToLibrary
},
getClasses() {
if(this.classList) {
if (this.classList) {
this.addClasses = {}
let classList = this.classList.split(' ')
for(let i = 0; i < classList.length; i++) {
for (let i = 0; i < classList.length; i++) {
this.addClasses[classList[i]] = true
}
}
@ -259,7 +259,7 @@
for (let kind in itemsToPlay) {
let ids = itemsToPlay[kind]
if (ids.length > 0) {
app.mk.playNext({[kind + "s"]: itemsToPlay[kind]})
app.mk.playNext({ [kind + "s"]: itemsToPlay[kind] })
}
}
console.log(itemsToPlay)
@ -281,7 +281,7 @@
for (let kind in itemsToPlay) {
let ids = itemsToPlay[kind]
if (ids.length > 0) {
app.mk.playLater({[kind + "s"]: itemsToPlay[kind]})
app.mk.playLater({ [kind + "s"]: itemsToPlay[kind] })
}
}
app.selectedMediaItems = []
@ -363,7 +363,7 @@
"name": app.getLz('action.playNext'),
"icon": "./assets/arrow-bend-up.svg",
"action": function () {
app.mk.playNext({[self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id})
app.mk.playNext({ [self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id })
app.mk.queue._reindex()
app.selectedMediaItems = []
}
@ -372,7 +372,7 @@
"name": app.getLz('action.playLater'),
"icon": "./assets/arrow-bend-down.svg",
"action": function () {
app.mk.playLater({[self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id})
app.mk.playLater({ [self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id })
app.mk.queue._reindex()
app.selectedMediaItems = []
}
@ -381,7 +381,7 @@
"icon": "./assets/feather/radio.svg",
"name": app.getLz('action.startRadio'),
"action": function () {
app.mk.setStationQueue({song: self.item.attributes.playParams.id ?? self.item.id}).then(() => {
app.mk.setStationQueue({ song: self.item.attributes.playParams.id ?? self.item.id }).then(() => {
app.mk.play()
app.selectedMediaItems = []
})
@ -405,12 +405,26 @@
"icon": "./assets/feather/share.svg",
"name": app.getLz('action.share'),
"action": function () {
if (!self.item.attributes.url && self.item.relationships){
if (self.item.relationships.catalog){
app.mkapi(self.item.attributes.playParams.kind, false, self.item.relationships.catalog.data[0].id).then(u => {self.app.copyToClipboard((u.data.data.length && u.data.data.length > 0)? u.data.data[0].attributes.url : u.data.data.attributes.url)})
if (!self.item.attributes.url && self.item.relationships) {
if (self.item.relationships.catalog) {
app.mkapi(self.item.attributes.playParams.kind, false, self.item.relationships.catalog.data[0].id).then(u => { self.app.copyToClipboard((u.data.data.length && u.data.data.length > 0) ? u.data.data[0].attributes.url : u.data.data.attributes.url) })
}
}else {
self.app.copyToClipboard(self.item.attributes.url)}
} else {
self.app.copyToClipboard(self.item.attributes.url)
}
}
},
{
"icon": "./assets/feather/share.svg",
"name": `${app.getLz('action.share')} (song.link)`,
"action": function () {
if (!self.item.attributes.url && self.item.relationships) {
if (self.item.relationships.catalog) {
app.mkapi(self.item.attributes.playParams.kind, false, self.item.relationships.catalog.data[0].id).then(u => { self.app.songLinkShare((u.data.data.length && u.data.data.length > 0) ? u.data.data[0].attributes.url : u.data.data.attributes.url) })
}
} else {
self.app.songLinkShare(self.item.attributes.url)
}
}
}
]
@ -430,30 +444,30 @@
try {
await this.checkLibrary().then(res => {
console.log(res)
if(res) {
if (res) {
menus.normal.items.find(x => x.id == 'addToLibrary').hidden = true
menus.normal.items.find(x => x.id == 'removeFromLibrary').hidden = false
}else{
} else {
menus.normal.items.find(x => x.id == 'addToLibrary').disabled = false
}
})
}catch(e) {
} catch (e) {
}
try{
let rating = await app.getRating(self.item)
if (rating == 0) {
menus.normal.headerItems.find(x => x.id == 'love').disabled = false
menus.normal.headerItems.find(x => x.id == 'dislike').disabled = false
} else if (rating == 1) {
menus.normal.headerItems.find(x => x.id == 'unlove').hidden = false
menus.normal.headerItems.find(x => x.id == 'love').hidden = true
} else if (rating == -1) {
menus.normal.headerItems.find(x => x.id == 'undo_dislike').hidden = false
menus.normal.headerItems.find(x => x.id == 'dislike').hidden = true
}
} catch(err) {
try {
let rating = await app.getRating(self.item)
if (rating == 0) {
menus.normal.headerItems.find(x => x.id == 'love').disabled = false
menus.normal.headerItems.find(x => x.id == 'dislike').disabled = false
} else if (rating == 1) {
menus.normal.headerItems.find(x => x.id == 'unlove').hidden = false
menus.normal.headerItems.find(x => x.id == 'love').hidden = true
} else if (rating == -1) {
menus.normal.headerItems.find(x => x.id == 'undo_dislike').hidden = false
menus.normal.headerItems.find(x => x.id == 'dislike').hidden = true
}
} catch (err) {
}
},
@ -474,7 +488,7 @@
},
async removeFromLibrary() {
let item = this.item
let params = {"fields[songs]": "inLibrary", "fields[albums]": "inLibrary", "relate": "library"}
let params = { "fields[songs]": "inLibrary", "fields[albums]": "inLibrary", "relate": "library" }
let id = item.id ?? item.attributes.playParams.id
let res = await app.mkapi(item.attributes.playParams.kind ?? item.type, item.attributes.playParams.isLibrary ?? false, item.attributes.playParams.id ?? item.id, params);
if (res && res.relationships && res.relationships.library && res.relationships.library.data && res.relationships.library.data.length > 0) {
@ -502,10 +516,10 @@
let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind;
console.log(item, parent, childIndex, kind, id, isLibrary, kind == "playlists", id.startsWith("p.") || id.startsWith("pl.u"))
app.mk.stop().then(() => {
if (parent != null && childIndex != null) {
app.queueParentandplayChild(parent, childIndex, item);
}
else if (kind.includes("playlist") && (id.startsWith("p.") || id.startsWith("pl."))){
if (parent != null && childIndex != null) {
app.queueParentandplayChild(parent, childIndex, item);
}
else if (kind.includes("playlist") && (id.startsWith("p.") || id.startsWith("pl."))) {
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
@ -514,58 +528,59 @@
array[j] = temp;
}
}
app.mk.setQueue({[truekind]: [item.attributes.playParams.id ?? item.id]}).then(function () {
app.mk.play().then(function (){
var playlistId = id
function getPlaylist(id, isLibrary){
if (isLibrary){
return this.app.mk.api.v3.music(`/v1/me/library/playlists/${id}`)
} else { return this.app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/playlists/${id}`)}
app.mk.setQueue({ [truekind]: [item.attributes.playParams.id ?? item.id] }).then(function () {
app.mk.play().then(function () {
var playlistId = id
function getPlaylist(id, isLibrary) {
if (isLibrary) {
return this.app.mk.api.v3.music(`/v1/me/library/playlists/${id}`)
} else { return this.app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/playlists/${id}`) }
}
try {
getPlaylist(id, isLibrary).then(res => {
//let query = res.relationships.tracks.data.map(item => new MusicKit.MediaItem(item));
//if (app.mk.shuffleMode == 1){shuffleArray(query); }
// console.log(query)
// app.mk.queue.append(query)
if (!res.data.relationships.tracks.next) {
return
} else {
getPlaylistTracks(res.data.relationships.tracks.next)
}
try {
getPlaylist(id, isLibrary).then(res => {
//let query = res.relationships.tracks.data.map(item => new MusicKit.MediaItem(item));
//if (app.mk.shuffleMode == 1){shuffleArray(query); }
// console.log(query)
// app.mk.queue.append(query)
if (!res.data.relationships.tracks.next) {
return
} else {
getPlaylistTracks(res.data.relationships.tracks.next)
}
function getPlaylistTracks(next) {
app.apiCall(app.musicBaseUrl + next, res => {
// if (res.id != playlistId || next.includes(playlistId)) {
// return
// }
console.log('nextres', res)
let query = res.data.map(item => new MusicKit.MediaItem(item))
if (app.mk.shuffleMode == 1){shuffleArray(query); console.log('shf')}
app.mk.queue.append(query)
function getPlaylistTracks(next) {
app.apiCall(app.musicBaseUrl + next, res => {
// if (res.id != playlistId || next.includes(playlistId)) {
// return
// }
console.log('nextres', res)
let query = res.data.map(item => new MusicKit.MediaItem(item))
if (app.mk.shuffleMode == 1) { shuffleArray(query); console.log('shf') }
app.mk.queue.append(query)
if (res.next) {
getPlaylistTracks(res.next)
}
})
if (res.next) {
getPlaylistTracks(res.next)
}
})
} catch (e) {}
}
})
} catch (e) { }
})
})
})
})
}
else {
app.playMediaItemById(item.attributes.playParams.id ?? item.id, item.attributes.playParams.kind ?? item.type, item.attributes.playParams.isLibrary ?? false, item.attributes.url)
}})
}
else {
app.playMediaItemById(item.attributes.playParams.id ?? item.id, item.attributes.playParams.kind ?? item.type, item.attributes.playParams.isLibrary ?? false, item.attributes.url)
}
})
},
route(){
route() {
let kind = (this.item.attributes.playParams ? (this.item.attributes.playParams.kind ?? (this.item.type ?? '')) : (this.item.type ?? ''));
if (kind.toLowerCase().includes('album') || kind.toLowerCase().includes('playlist')){
if (kind.toLowerCase().includes('album') || kind.toLowerCase().includes('playlist')) {
app.routeView(this.item)
} else {
this.playTrack()

View file

@ -1,244 +0,0 @@
<script type="text/x-template" id="mediaitem-square-large">
<div ref="main" style="position: relative; display: inline-flex;" @contextmenu="contextMenu">
<div @click.self='app.routeView(item)'
class="cd-mediaitem-square-large" ref="main2">
<div class="artwork">
<mediaitem-artwork
:url="item.attributes.artwork ? item.attributes.artwork.url : ''"
:video="(item.attributes != null && item.attributes.editorialVideo != null) ? (item.attributes.editorialVideo.motionDetailSquare ? item.attributes.editorialVideo.motionDetailSquare.video : (item.attributes.editorialVideo.motionSquareVideo1x1 ? item.attributes.editorialVideo.motionSquareVideo1x1.video : '')) : '' "
size="300"
:type="item.type"></mediaitem-artwork>
</div>
<div class="cd-mediaitem-square-large-overlay" @click.self='app.routeView(item)'>
<div class="button" style="
border-radius: 50%;
background: rgba(50,50,50,0.7);"
:style="[(!(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('radioStation') && !(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('song')) ? {'margin': '140px','position': 'absolute',
width: '40px',
height: '40px',} :
{margin: '35px', 'position': 'absolute',
width: '120px',
height: '120px',}]" @click="app.playMediaItem(item)">
<%- include("../svg/play.svg") %>
</div>
<div class="button" style="
border-radius: 50%;
background: rgba(50,50,50,0.7);"
:style="[(!(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('radioStation') && !(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('song')) ? {'position': 'absolute','margin': '140px',
width: '40px', 'margin-left': '10px',
height: '40px',} :
{display: 'none',margin: '35px','position': 'absolute',
width: '120px',
height: '120px',}]" @click="clickContext() ">
<%- include("../svg/more.svg") %>
</div>
</div>
<div class="title text-overflow-elipsis" @click='app.routeView(item)'>
{{ item.attributes.name ?? '' }}
</div>
<div class="subtitle text-overflow-elipsis item-navigate" v-if="item.attributes.artistName" :style = "{'z-index': ((item.attributes.editorialNotes == null) && item.attributes.artistName) ? '4' : ''}" @click="if(item.attributes.artistName)app.searchAndNavigate(item,'artist')">
{{ item.attributes.artistName ?? '' }}
</div>
</div>
<div class="cd-mediaitem-square-large-overlay" @click.self='app.routeView(item)' tabindex="0">
<div class="button" style="
border-radius: 50%;
background: rgba(50,50,50,0.7);"
:style="[(!(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('radioStation') && !(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('song')) ? {'margin': '140px','position': 'absolute',
width: '40px',
height: '40px',} :
{margin: '35px','position': 'absolute',
width: '120px',
height: '120px',}]" @click="app.playMediaItem(item)">
<%- include("../svg/play.svg") %>
</div>
<div class="button" style="
border-radius: 50%;
background: rgba(50,50,50,0.7);"
:style="[(!(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('radioStation') && !(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('song')) ? {'position': 'absolute','margin': '140px',
width: '40px', 'margin-left': '10px',
height: '40px',} :
{display: 'none',margin: '35px','position': 'absolute',
width: '120px',
height: '120px',}]" @click="console.log('as');contextMenu()">
<%- include("../svg/more.svg") %>
</div>
</div>
</div>
</script>
<script>
Vue.component('mediaitem-square-large', {
template: '#mediaitem-square-large',
props: ['item'],
data: function () {
return {
isVisible: false,
addedToLibrary: false,
app: this.$root,
}
},
methods: {
clickContext() {
var evt = document.createEvent('MouseEvent');
var rect = this.$refs.main2.getBoundingClientRect();
evt.initMouseEvent(
"contextmenu",
true /* bubble */, true /* cancelable */,
window, null,
0, 0, rect.x + 100, rect.y + 100, /* coordinates */
false, false, false, false, /* modifier keys */
0 /*left*/, null
);
this.$refs.main.dispatchEvent(evt);
},
async isInLibrary() {
if (this.item.type && !this.item.type.includes("library")) {
var params = {
"fields[playlists]": "inLibrary",
"fields[albums]": "inLibrary",
"relate": "library",
"extend": this.revisedRandId()
}
var res = await app.mkapi(this.item.attributes.playParams.kind ?? this.item.type, this.item.attributes.playParams.isLibrary ?? false, this.item.attributes.playParams.id ?? this.item.id, params);
this.addedToLibrary = (res && res.attributes && res.attributes.inLibrary) ? res.attributes.inLibrary : false
} else {
this.addedToLibrary = true
}
},
async removeFromLibrary(id) {
var params = {
"fields[playlists]": "inLibrary",
"fields[songs]": "inLibrary",
"fields[albums]": "inLibrary",
"relate": "library",
"extend": this.revisedRandId()
}
var id = this.item.id ?? this.item.attributes.playParams.id
var res = await app.mkapi(this.item.attributes.playParams.kind ?? this.item.type, this.item.attributes.playParams.isLibrary ?? false, this.item.attributes.playParams.id ?? this.item.id, params);
if (res && res.relationships && res.relationships.library && res.relationships.library.data && res.relationships.library.data.length > 0) {
id = res.relationships.library.data[0].id
}
let kind = this.item.attributes.playParams.kind ?? this.item.type ?? '';
var truekind = (!kind.endsWith("s")) ? (kind + "s") : kind;
app.mk.api.v3.music(`v1/me/library/${truekind}/${id.toString()}`,{},
{
fetchOptions: {
method: "DELETE"
}})
this.addedToLibrary = true
},
async contextMenu(event) {
if (!event) { event = this.$refs.main } else { console.log(event) }
let self = this
let useMenu = "normal"
await this.isInLibrary()
if (app.selectedMediaItems.length <= 1) {
app.selectedMediaItems = []
app.select_selectMediaItem(this.item.attributes.playParams.id ?? this.item.id, this.item.attributes.playParams.kind ?? this.item.type, this.index, this.guid, this.item.attributes.playParams.isLibrary ?? false)
} else {
useMenu = "multiple"
}
let menus = {
multiple: {
items: [
{
name: this.$root.getLz('action.playTracksNext').replace("${app.selectedMediaItems.length}", app.selectedMediaItems.length),
action: () => {
let itemsToPlay = {}
app.selectedMediaItems.forEach(item => {
if (!itemsToPlay[item.kind]) {
itemsToPlay[item.kind] = []
}
itemsToPlay[item.kind].push(item.id)
})
// loop through itemsToPlay
for (let kind in itemsToPlay) {
let ids = itemsToPlay[kind]
if (ids.length > 0) {
app.mk.playNext({ [kind + "s"]: itemsToPlay[kind] })
}
}
console.log(itemsToPlay)
app.selectedMediaItems = []
}
},
{
name: app.getLz('action.playTracksLater').replace("${app.selectedMediaItems.length}", app.selectedMediaItems.length),
action: () => {
let itemsToPlay = {}
app.selectedMediaItems.forEach(item => {
if (!itemsToPlay[item.kind]) {
itemsToPlay[item.kind] = []
}
itemsToPlay[item.kind].push(item.id)
})
// loop through itemsToPlay
for (let kind in itemsToPlay) {
let ids = itemsToPlay[kind]
if (ids.length > 0) {
app.mk.playLater({ [kind + "s"]: itemsToPlay[kind] })
}
}
app.selectedMediaItems = []
}
},
]
},
normal: {
items: [
{
"name": "Play Next",
"action": function () {
app.mk.playNext({[self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id})
app.mk.queue._reindex()
app.selectedMediaItems = []
}
},
{
"name": "Play Later",
"action": function () {
app.mk.playLater({[self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id})
app.mk.queue._reindex()
app.selectedMediaItems = []
}
},
{
"id": "addToPlaylist",
"name": "Add to Playlist...",
"action": function () {
app.promptAddToPlaylist()
}
},
{
"name": (this.addedToLibrary) ? "Remove from Library..." : "Add to Library...",
"action": async function () {
let item_id = self.item.attributes.playParams.id ?? self.item.id;
let data_type = self.item.attributes.playParams.kind ?? self.item.type;
if (self.addedToLibrary != true) {
console.log("add");
app.addToLibrary(item_id);
self.addedToLibrary = true
} else {
console.log("remove");
await self.removeFromLibrary(item_id);
self.addedToLibrary = false
}
;
}
},
{
"name": this.$root.getLz('term.share'),
"action": function () {
self.app.copyToClipboard(self.item.attributes.url)
}
}
]
}
}
CiderContextMenu.Create(event, menus[useMenu])
},
}
});
</script>

View file

@ -1,293 +0,0 @@
<script type="text/x-template" id="mediaitem-square-sp">
<div ref="main" style="position: relative; display: inline-flex;" @contextmenu="contextMenu" v-observe-visibility="{callback: visibilityChanged}" width="250px">
<div @click.self='app.routeView(item)' v-if="isVisible"
class="cd-mediaitem-square-sp" ref="main2"
:style="{'--spcolor' : (item.attributes.artwork.bgColor != null) ? ('#'+item.attributes.artwork.bgColor) : `black`}">
<div class="artwork">
<mediaitem-artwork
:url="item.attributes.artwork ? item.attributes.artwork.url : ''"
size="300"
:video="(item.attributes != null && item.attributes.editorialVideo != null) ? (item.attributes.editorialVideo.motionDetailSquare ? item.attributes.editorialVideo.motionDetailSquare.video : (item.attributes.editorialVideo.motionSquareVideo1x1 ? item.attributes.editorialVideo.motionSquareVideo1x1.video : '')) : '' "
:type="item.type"></mediaitem-artwork>
</div>
<div class="cd-mediaitem-square-large-overlay" @click.self='app.routeView(item)'>
<div class="button" style="
border-radius: 50%;
background: rgba(50,50,50,0.7);"
:style="[(!(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('radioStation') && !(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('song')) ? {'margin': '153px','position': 'absolute','margin-left': '153px',
width: '30px',
height: '30px',} :
{margin: '35px',display:'none',
width: '120px',
height: '120px',}]" @click="clickContext()">
<%- include("../svg/more.svg") %>
</div>
<div class="button" style="
border-radius: 50%;
background: rgba(50,50,50,0.7);"
:style="[(!(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('radioStation') && !(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('song')) ? {'position': 'absolute','margin': '153px',
width: '30px', 'margin-left': '8px',
height: '30px',} :
{margin: '35px','position': 'absolute',
width: '120px',
height: '120px',}]" @click="app.playMediaItem(item)">
<%- include("../svg/play.svg") %>
</div>
</div>
<div class="title text-overflow-elipsis"
:style="{'color' : (item.attributes.artwork.textColor1 != null) ? ('#'+item.attributes.artwork.textColor1) : `#eee`}"
style="font-weight: 600">
{{ item.attributes.name }}
</div>
<div class="subtitle text-overflow-elipsis "
:class="{'item-navigate': ((item.attributes.editorialNotes == null) && item.attributes.artistName)}"
:style="{ 'z-index': ((item.attributes.editorialNotes == null) && item.attributes.artistName) ? '4' : '' ,'color' : (item.attributes.artwork.textColor1 != null) ? ('#'+item.attributes.artwork.textColor1) : `#eee`}"
style="padding-left: 4px;padding-right: 4px; display: -webkit-box;-webkit-box-orient: vertical; -webkit-line-clamp: 2;white-space: normal;"
@click="subtitleSearchNavigate(item)"
>
{{ (item.attributes.editorialNotes != null) ? item.attributes.editorialNotes.short
:(item.attributes.artistName ?? '') }}
</div>
</div>
<div class="cd-mediaitem-square-large-overlay" @click.self='app.routeView(item)' tabindex="0" v-if="isVisible">
<div class="button" style="
border-radius: 50%;
background: rgba(50,50,50,0.7);"
:style="[(!(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('radioStation') && !(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('song')) ? {'margin': '153px','position': 'absolute','margin-left': '153px',
width: '30px',
height: '30px',} :
{margin: '35px','position': 'absolute', display: 'none',
width: '120px',
height: '120px',}]" @click="clickContext()">
<%- include("../svg/more.svg") %>
</div>
<div class="button" style="
border-radius: 50%;
background: rgba(50,50,50,0.7);"
:style="[(!(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('radioStation') && !(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('song')) ? {'position': 'absolute','margin': '153px',
width: '30px', 'margin-left': '8px',
height: '30px',} :
{margin: '35px','position': 'absolute',
width: '120px',
height: '120px',}]" @click="app.playMediaItem(item)">
<%- include("../svg/play.svg") %>
</div>
</div>
</div>
</script>
<script>
Vue.component('mediaitem-square-sp', {
template: '#mediaitem-square-sp',
props: ['item'],
data: function () {
return {
app: this.$root,
isVisible: true,
addedToLibrary : false,
}
},
methods: {
revisedRandId() {
return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(2, 10);
},
async isInLibrary() {
if (this.item.type && !this.item.type.includes("library")) {
var params = {"fields[playlists]": "inLibrary", "fields[albums]": "inLibrary", "relate": "library", "extend": this.revisedRandId()}
var res = await app.mkapi(this.item.attributes.playParams.kind ?? this.item.type, this.item.attributes.playParams.isLibrary ?? false, this.item.attributes.playParams.id ?? this.item.id, params);
res = res.data.data[0]
this.addedToLibrary = (res && res.attributes && res.attributes.inLibrary) ? res.attributes.inLibrary : false
} else {
this.addedToLibrary = true
}
},
async removeFromLibrary(id) {
var params = {"fields[playlists]": "inLibrary","fields[songs]": "inLibrary", "fields[albums]": "inLibrary", "relate": "library", "extend": this.revisedRandId()}
var id = this.item.id ?? this.item.attributes.playParams.id
var res = await app.mkapi(this.item.attributes.playParams.kind ?? this.item.type, this.item.attributes.playParams.isLibrary ?? false, this.item.attributes.playParams.id ?? this.item.id, params);
res = res.data.data[0]
if (res && res.relationships && res.relationships.library && res.relationships.library.data && res.relationships.library.data.length > 0) {
id = res.relationships.library.data[0].id
}
let kind = this.item.attributes.playParams.kind ?? this.item.type ?? '';
var truekind = (!kind.endsWith("s")) ? (kind + "s") : kind;
app.mk.api.v3.music(`v1/me/library/${truekind}/${id.toString()}`,{},
{
fetchOptions: {
method: "DELETE"
}})
this.addedToLibrary = true
},
subtitleSearchNavigate(item) {
if((item.attributes.editorialNotes == null) && item.attributes.artistName)app.searchAndNavigate(item,'artist')
},
clickContext() {
var evt = document.createEvent('MouseEvent');
var rect = this.$refs.main2.getBoundingClientRect();
evt.initMouseEvent(
"contextmenu",
true /* bubble */, true /* cancelable */,
window, null,
0, 0, rect.x + 100, rect.y + 100, /* coordinates */
false, false, false, false, /* modifier keys */
0 /*left*/, null
);
this.$refs.main.dispatchEvent(evt);
}
,
visibilityChanged: function (isVisible, entry) {
this.isVisible = isVisible
},
async contextMenu(event) {
if (!event) {
event = this.$refs.main
} else {
console.log(event)
}
let self = this
let useMenu = "normal"
await this.isInLibrary()
if (app.selectedMediaItems.length <= 1) {
app.selectedMediaItems = []
app.select_selectMediaItem(this.item.attributes.playParams.id ?? this.item.id, this.item.attributes.playParams.kind ?? this.item.type, this.index, this.guid, this.item.attributes.playParams.isLibrary ?? false)
} else {
useMenu = "multiple"
}
let menus = {
multiple: {
items: [
{
name: app.getLz('action.playTracksNext').replace("${app.selectedMediaItems.length}", app.selectedMediaItems.length),
action: () => {
let itemsToPlay = {}
app.selectedMediaItems.forEach(item => {
if (!itemsToPlay[item.kind]) {
itemsToPlay[item.kind] = []
}
itemsToPlay[item.kind].push(item.id)
})
// loop through itemsToPlay
for (let kind in itemsToPlay) {
let ids = itemsToPlay[kind]
if (ids.length > 0) {
app.mk.playNext({[kind + "s"]: itemsToPlay[kind]})
}
}
console.log(itemsToPlay)
app.selectedMediaItems = []
}
},
{
name: app.getLz('action.playTracksLater').replace("${app.selectedMediaItems.length}", app.selectedMediaItems.length),
action: () => {
let itemsToPlay = {}
app.selectedMediaItems.forEach(item => {
if (!itemsToPlay[item.kind]) {
itemsToPlay[item.kind] = []
}
itemsToPlay[item.kind].push(item.id)
})
// loop through itemsToPlay
for (let kind in itemsToPlay) {
let ids = itemsToPlay[kind]
if (ids.length > 0) {
app.mk.playLater({[kind + "s"]: itemsToPlay[kind]})
}
}
app.selectedMediaItems = []
}
},
]
},
normal: {
items: [
{
"name": "Play Next",
"action": function () {
app.mk.playNext({[self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id})
app.mk.queue._reindex()
app.selectedMediaItems = []
}
},
{
"name": "Play Later",
"action": function () {
app.mk.playLater({[self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id})
app.mk.queue._reindex()
app.selectedMediaItems = []
}
},
{
"id": "addToPlaylist",
"name": "Add to Playlist...",
"action": function () {
app.promptAddToPlaylist()
}
},
{
"id": "love",
"name": "Love",
"disabled": true,
"action": function () {
app.love(self.item)
}
},
{
"id": "unlove",
"name": "Unlove",
"disabled": true,
"action": function () {
app.unlove(self.item)
}
},
{
"id": "dislike",
"name": "Dislike",
"disabled": true,
"action": function () {
app.dislike(self.item)
}
},
{
"id": "undo_dislike",
"name": "Undo dislike",
"disabled": true,
"action": function () {
app.unlove(self.item)
}
},
{
"name": (this.addedToLibrary) ? "Remove from Library..." : "Add to Library...",
"action": async function () {
let item_id = self.item.attributes.playParams.id ?? self.item.id;
let data_type = self.item.attributes.playParams.kind ?? self.item.type;
if (self.addedToLibrary != true) { console.log("add"); app.addToLibrary(item_id); self.addedToLibrary = true}
else { console.log("remove"); await self.removeFromLibrary(item_id); self.addedToLibrary = false};
}
},
]
}
}
let rating = await app.getRating(self.item)
if(rating == 0) {
menus.normal.items.find(x => x.id == 'love').disabled = false
menus.normal.items.find(x => x.id == 'dislike').disabled = false
}else if(rating == 1) {
menus.normal.items.find(x => x.id == 'unlove').disabled = false
}else if(rating == -1) {
menus.normal.items.find(x => x.id == 'undo_dislike').disabled = false
}
if ((self.item.attributes.playParams.kind ?? self.item.type).includes("playlist")) {
// remove the add to playlist option by id "addToPlaylist" using the .filter() method
menus.normal.items = menus.normal.items.filter(function (item) {
return item.id != "addToPlaylist"
})
}
CiderContextMenu.Create(event, menus[useMenu])
},
}
});
</script>

View file

@ -402,6 +402,18 @@
}else {
self.app.copyToClipboard(self.item.attributes.url)}
}
},
{
"icon": "./assets/feather/share.svg",
"name": `${app.getLz('action.share')} (song.link)`,
"action": function () {
if (!self.item.attributes.url && self.item.relationships){
if (self.item.relationships.catalog){
app.mkapi(self.item.attributes.playParams.kind, false, self.item.relationships.catalog.data[0].id).then(u => {self.app.songLinkShare((u.data.data.length && u.data.data.length > 0)? u.data.data[0].attributes.url : u.data.data.attributes.url)})
}
}else {
self.app.songLinkShare(self.item.attributes.url)}
}
}
]
}

View file

@ -6,11 +6,15 @@
<span id="mini-pin">📌</span>
</div>
<div class="player-exit" title="Close" @click="app.miniPlayer(false)">
<svg fill="#323232e3" xmlns="http://www.w3.org/2000/svg" width="21" height="21" viewBox="0 0 21 21"
aria-role="presentation" focusable="false">
<path
d="M10.5 21C4.724 21 0 16.275 0 10.5S4.724 0 10.5 0 21 4.725 21 10.5 16.276 21 10.5 21zm-3.543-5.967a.96.96 0 00.693-.295l2.837-2.842 2.85 2.842c.167.167.41.295.693.295.552 0 1.001-.461 1.001-1.012 0-.281-.115-.512-.295-.704L11.899 10.5l2.85-2.855a.875.875 0 00.295-.68c0-.55-.45-.998-1.001-.998a.871.871 0 00-.668.295l-2.888 2.855-2.862-2.843a.891.891 0 00-.668-.281.99.99 0 00-1.001.986c0 .269.116.512.295.678L9.088 10.5l-2.837 2.843a.926.926 0 00-.295.678c0 .551.45 1.012 1.001 1.012z"
fill-rule="nonzero"/>
<svg fill="#323232e3" width="21" height="21" viewBox="0 0 21 21" aria-role="presentation" focusable="false" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient gradientUnits="userSpaceOnUse" cx="10.5" cy="10.5" r="10.5" id="gradient-0">
<stop offset="0" style="stop-color: rgba(168, 163, 163, 1)"/>
<stop offset="1" style="stop-color: rgba(118, 111, 111, 1)"/>
</radialGradient>
</defs>
<path d="M10.5 21C4.724 21 0 16.275 0 10.5S4.724 0 10.5 0 21 4.725 21 10.5 16.276 21 10.5 21zm-3.543-5.967a.96.96 0 00.693-.295l2.837-2.842 2.85 2.842c.167.167.41.295.693.295.552 0 1.001-.461 1.001-1.012 0-.281-.115-.512-.295-.704L11.899 10.5l2.85-2.855a.875.875 0 00.295-.68c0-.55-.45-.998-1.001-.998a.871.871 0 00-.668.295l-2.888 2.855-2.862-2.843a.891.891 0 00-.668-.281.99.99 0 00-1.001.986c0 .269.116.512.295.678L9.088 10.5l-2.837 2.843a.926.926 0 00-.295.678c0 .551.45 1.012 1.001 1.012z"
fill-rule="nonzero" style="stroke-miterlimit: 11; vector-effect: non-scaling-stroke; stroke-width: 31px; fill: url(#gradient-0);"/>
</svg>
</div>
<div class="col artwork-col">
@ -44,8 +48,8 @@
<div class="song-progress">
<div class="song-duration" style="justify-content: space-between; height: 1px; margin-bottom: 1px;"
:style="[app.chrome.progresshover ? {'display': 'flex'} : {'display' : 'none'} ]">
<p style="width: auto">{{ app.convertToMins(app.getSongProgress()) }}</p>
<p style="width: auto">{{ app.convertToMins(app.mk.currentPlaybackDuration) }}</p>
<p style="width: auto">{{ app.convertTime(app.getSongProgress()) }}</p>
<p style="width: auto">{{ app.convertTime(app.mk.currentPlaybackDuration) }}</p>
</div>
<input type="range" step="0.01" min="0" :style="app.progressBarStyle()"
@ -83,7 +87,7 @@
<div class="app-chrome-item volume display--large">
<div class="input-container">
<button class="volume-button--small volume" @click="app.muteButtonPressed()" :class="{'active': app.cfg.audio.volume == 0}"></button>
<input type="range" class="slider" @wheel="app.volumeWheel" step="0.01" min="0" max="1" v-model="app.mk.volume"
<input type="range" class="slider" @wheel="app.volumeWheel" :step="app.cfg.audio.volumeStep" min="0" :max="app.cfg.audio.maxVolume" v-model="app.mk.volume"
v-if="typeof app.mk.volume != 'undefined'" @change="app.checkMuteChange()">
</div>
</div>

View file

@ -1,65 +0,0 @@
<script type="text/x-template" id="queue-item">
<template>
<div v-observe-visibility="{callback: visibilityChanged}"
@contextmenu="contextMenu"
class="cd-mediaitem-list-item">
<template v-if="isVisible">
<div class="artwork">
<mediaitem-artwork
:url="item.attributes.artwork ? item.attributes.artwork.url : ''"
size="34"
:type="item.type"></mediaitem-artwork>
</div>
<div class="info-rect" :style="{'padding-left': '16px'}">
<div class="title text-overflow-elipsis">
{{ item.attributes.name }}
</div>
<div class="subtitle text-overflow-elipsis" style="-webkit-box-orient: horizontal;">
<template v-if="item.attributes.artistName" >
<div class="artist item-navigate text-overflow-elipsis" @click="app.searchAndNavigate(item,'artist')">
{{ item.attributes.artistName }}
</div>
<template v-if="item.attributes.albumName">&nbsp;—&nbsp;</template>
<template v-if="item.attributes.albumName">
<div class="artist item-navigate text-overflow-elipsis" @click="app.searchAndNavigate(item,'album')">
{{ item.attributes.albumName }}
</div>
</template>
</template>
</div>
</div>
<div class="duration">
{{ msToMinSec(item.attributes.durationInMillis ?? 0) }}
</div>
</template>
</div>
</template>
</script>
<script>
Vue.component('queue-item', {
template: '#queue-item',
props: ['item'],
data: function () {
return {}
},
methods: {
contextMenu(event) {
let self = this
CiderContextMenu.Create(event, {
items: [{
"name": $root.getLz('action.removeFromQueue'),
"action": function () {
}
}]
});
},
msToMinSec(ms) {
var minutes = Math.floor(ms / 60000);
var seconds = ((ms % 60000) / 1000).toFixed(0);
return minutes + ":" + (seconds < 10 ? '0' : '') + seconds;
},
}
});
</script>

View file

@ -0,0 +1,88 @@
<script type="text/x-template" id="add-to-playlist">
<template>
<div class="modal-fullscreen addtoplaylist-panel" @click.self="app.resetState()" @contextmenu.self="app.resetState()">
<div class="modal-window">
<div class="modal-header">
<div class="modal-title">{{app.getLz('action.addToPlaylist')}}</div>
<button class="close-btn" @click="app.resetState()"></button>
</div>
<div class="modal-content">
<button class="playlist-item"
@click="app.addSelectedToNewPlaylist()" style="width:100%;">
<div class="icon"><%- include("../svg/plus.svg") %></div>
<div class="name">{{app.getLz('action.createPlaylist')}}</div>
</button>
<sidebar-playlist :playlist-select="playlistSelect" v-for="item in $root.getPlaylistFolderChildren('p.playlistsroot')" :item="item">
</sidebar-playlist>
</div>
<div class="modal-search">
<div class="search-input-container" style="width:100%;margin: 16px 0;">
<div class="search-input--icon"></div>
<input type="search"
ref="searchInput"
style="width:100%;"
spellcheck="false"
:placeholder="app.getLz('term.search') + '...'"
v-model="searchQuery"
@input="search()"
class="search-input">
</div>
</div>
</div>
</div>
</template>
</script>
<script>
Vue.component('add-to-playlist', {
template: '#add-to-playlist',
data: function () {
return {
playlistSorted: [],
searchQuery: "",
focused: "",
app: this.$root,
}
},
props: {
playlists: {
type: Array,
required: true
}
},
mounted() {
this.search()
this.$refs.searchInput.focus()
this.$refs.searchInput.addEventListener('keydown', (e) => {
if (e.keyCode == 13) {
if (this.focused != "") {
this.addToPlaylist(this.focused)
}
}
})
},
methods: {
playlistSelect(playlist) {
if(playlist.type != "library-playlist-folders") {
this.addToPlaylist(playlist.id)
}
},
addToPlaylist(id) {
app.addSelectedToPlaylist(id)
},
search() {
this.focused = ""
if (this.searchQuery == "") {
this.playlistSorted = this.playlists
} else {
this.playlistSorted = this.playlists.filter(playlist => {
return playlist.attributes.name.toLowerCase().indexOf(this.searchQuery.toLowerCase()) > -1
})
if (this.playlistSorted.length == 1) {
this.focused = this.playlistSorted[0].id
}
}
},
}
});
</script>

View file

@ -87,6 +87,12 @@
role: app.getLz('term.developer'),
avatar: 'https://avatars.githubusercontent.com/u/27716185?v=4'
},
{
name: 'Maikiwi',
link: 'https://github.com/maikirakiwi',
role: app.getLz('term.developer'),
avatar: 'https://avatars.githubusercontent.com/u/74925636?v=4'
},
{
name: 'Void',
link: 'https://twitter.com/MoonyVoid',

View file

@ -35,11 +35,10 @@
<div class="md-option-segment md-option-segment_auto">
<select class="md-select" style="width:180px;" v-model="app.cfg.audio.quality"
v-on:change="changeAudioQuality">
<!-- // <option value="9216">{{$root.getLz('settings.header.audio.quality.hireslossless')}}</option> -->
<!-- <option value="2304">{{$root.getLz('settings.header.audio.quality.lossless')}}</option> -->
<option value="256">{{$root.getLz('settings.header.audio.quality.high')}}</option>
<option value="64">{{$root.getLz('settings.header.audio.quality.low')}}</option>
<option value="auto">{{$root.getLz('settings.header.audio.quality.auto')}}</option>
<!-- // <option value="">{{$root.getLz('settings.header.audio.quality.hireslossless')}}</option> -->
<!-- <option value="">{{$root.getLz('settings.header.audio.quality.lossless')}}</option> -->
<option value="HIGH">{{$root.getLz('settings.header.audio.quality.high')}} ({{$root.getLz('settings.header.audio.quality.high.description')}})</option>
<option value="STANDARD">{{$root.getLz('settings.header.audio.quality.standard')}} ({{$root.getLz('settings.header.audio.quality.standard.description')}})</option>
</select>
</div>
</div>
@ -69,7 +68,7 @@
<small>{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPE.description')}}</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<input type="checkbox" v-model="app.cfg.advanced.ciderPPE" switch/>
<input type="checkbox" v-model="app.cfg.advanced.ciderPPE" v-on:change="ciderPPE" switch/>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext && app.cfg.advanced.ciderPPE === true">
@ -79,10 +78,10 @@
<small>{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description')}}</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<button class="md-btn" :disabled="app.cfg.audio.ciderPPE_value === 0.5" v-model="app.cfg.audio.ciderPPE_value" onclick="app.cfg.audio.ciderPPE_value = 0.5; ciderPPECompatibility">
<button class="md-btn" :disabled="app.cfg.audio.ciderPPE_value === 0.5" v-model="app.cfg.audio.ciderPPE_value" onclick="app.cfg.audio.ciderPPE_value = 0.5">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard')}}
</button>
<button class="md-btn" style="margin-top: 5px;" :disabled="app.cfg.audio.ciderPPE_value === 0.55" v-model="app.cfg.audio.ciderPPE_value" onclick="app.cfg.audio.ciderPPE_value = 0.55; ciderPPECompatibility">
<button class="md-btn" style="margin-top: 5px;" :disabled="app.cfg.audio.ciderPPE_value === 0.55" v-model="app.cfg.audio.ciderPPE_value" onclick="app.cfg.audio.ciderPPE_value = 0.55">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive')}}
</button>
</div>
@ -656,7 +655,7 @@
</div>
<div class="md-option-line">
<div class="md-option-segment">
{{$root.getLz('term.updateCider')}}
{{$root.getLz('settings.option.general.updateCider')}}
</div>
<div class="md-option-segment md-option-segment_auto">
<button class="md-btn" @click="app.checkForUpdate()">
@ -664,6 +663,22 @@
</button>
</div>
</div>
<div class="md-option-line">
<div class="md-option-segment">
{{$root.getLz('settings.option.general.updateCider.branch')}}<br>
<small>({{$root.getLz('settings.option.general.updateCider.branch.description')}})</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<select class="md-select" style="width:180px;" v-model="app.cfg.general.update_branch">
<option value="main">
{{$root.getLz('settings.option.general.updateCider.branch.main')}}
</option>
<option value="develop">
{{$root.getLz('settings.option.general.updateCider.branch.develop')}}
</option>
</select>
</div>
</div>
<div class="md-option-line">
<div class="md-option-segment">
{{$root.getLz('settings.option.experimental.copy_log')}}
@ -805,17 +820,23 @@
CiderAudio.normalizerOff()
}
},
ciderPPECompatibility: function () {
if (app.cfg.audio.spatial) {
notyf.error("CAP is not compatible with Spatialization. Please disable Spatialization to continue.")
ciderPPE: function () {
if (app.cfg.advanced.ciderPPE) {
if (app.cfg.audio.spatial) {
app.cfg.advanced.ciderPPE = false;
notyf.error(app.getLz('settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility'))
}
}
},
},
toggleSpatial: function () {
if (app.cfg.audio.spatial) {
if (!app.cfg.audio.advanced.ciderPPE) {
CiderAudio.spatialOn()}
if (!app.cfg.advanced.ciderPPE) {
CiderAudio.spatialOn()
}
else {
notyf.error("Spatialization is not compatible with CAP. Please disable CAP to continue.")
CiderAudio.spatialOff()
app.cfg.audio.spatial = false;
notyf.error(app.getLz('settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility'))
}
} else {
CiderAudio.spatialOff()
@ -823,7 +844,8 @@
},
changeAudioQuality: function () {
app.mk.bitrate = app.cfg.audio.quality
1
app.mk.bitrate = MusicKit.PlaybackBitrate[app.cfg.audio.quality];
},
toggleUserInfo: function () {
app.chrome.hideUserInfo = !app.cfg.visual.showuserinfo

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Before After
Before After