Merge branch 'develop' of https://github.com/Swiftzerr/Cider
Conflicts: .gitignore src/i18n/README.md src/i18n/en_OWO.jsonc src/i18n/en_PISS.jsonc src/i18n/en_SGA.jsonc src/i18n/en_US.jsonc src/i18n/ja_JP.jsonc src/i18n/ko_KR.jsonc src/i18n/zh_CN.jsonc src/i18n/zh_HK.jsonc src/i18n/zh_TW.jsonc src/i18n/zh_yue.jsonc src/main/base/app.ts src/main/base/browserwindow.ts src/main/base/store.ts src/main/base/utils.ts src/main/plugins/thumbar.ts src/renderer/audio/audio.js src/renderer/index.js src/renderer/style.less src/renderer/views/app/chrome-top.ejs src/renderer/views/pages/settings.ejs
This commit is contained in:
commit
4cd7e9729f
42 changed files with 4256 additions and 2573 deletions
|
@ -15,7 +15,7 @@ jobs:
|
|||
- yarn-packages-{{ checksum "yarn.lock" }}
|
||||
- run:
|
||||
name: Install Dependencies
|
||||
command: yarn install --frozen-lockfile --cache-folder ~/.cache/yarn
|
||||
command: yarn install --cache-folder ~/.cache/yarn
|
||||
- save_cache:
|
||||
name: Save Yarn Package Cache
|
||||
key: yarn-packages-{{ checksum "yarn.lock" }}
|
||||
|
@ -34,6 +34,9 @@ jobs:
|
|||
sudo apt-get install -y wine32
|
||||
- store_test_results:
|
||||
path: test-results
|
||||
- run:
|
||||
name: Append Commit SHA to Version
|
||||
command: yarn circle:append-sha
|
||||
- run:
|
||||
name: Generate Builds (Linux)
|
||||
command: yarn dist -l -p never
|
||||
|
|
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1,6 +1,8 @@
|
|||
# Building
|
||||
dist
|
||||
build
|
||||
.flatpak*
|
||||
yarn-cache
|
||||
|
||||
# Misc
|
||||
.idea
|
||||
|
@ -135,7 +137,6 @@ dist
|
|||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
yarn.lock
|
||||
.pnp.*
|
||||
.yarn/*
|
||||
.yarn/cache
|
||||
|
@ -316,3 +317,4 @@ src/renderer/workbox-962786f2.js.map
|
|||
keys.sh
|
||||
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
|
|
|
@ -25,7 +25,8 @@
|
|||
"dist": "yarn build && electron-builder",
|
||||
"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-sha": "node resources/appendCommitToVersion"
|
||||
},
|
||||
"dependencies": {
|
||||
"@sentry/electron": "^2.5.4",
|
||||
|
@ -34,7 +35,6 @@
|
|||
"electron-fetch": "^1.7.4",
|
||||
"electron-log": "^4.4.4",
|
||||
"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",
|
||||
|
@ -47,7 +47,6 @@
|
|||
"music-metadata": "^7.11.4",
|
||||
"node-gyp": "^8.4.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",
|
||||
|
|
20
resources/appendCommitToVersion.js
Normal file
20
resources/appendCommitToVersion.js
Normal file
|
@ -0,0 +1,20 @@
|
|||
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);
|
||||
|
||||
|
||||
// https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables
|
||||
package.version = `${package.version}.${process.env['CIRCLE_BUILD_NUM']}`
|
||||
|
||||
|
||||
fs.writeFile('package.json', JSON.stringify(package), err => {
|
||||
// error checking
|
||||
if(err) throw err;
|
||||
console.log("VERSION CHANGED");
|
||||
});
|
|
@ -17,3 +17,51 @@ been modified, the ones not mentioned in the list need modifying.
|
|||
|
||||
* `settings.option.experimental.closeButtonBehaviour`: Changed to `close_button_hide` - Should be "Close Button Should Hide the Application". `.quit`, `.minimizeTaskbar` and `.minimizeTray` have been removed. Translations done for en_US.
|
||||
* `action.update`: Added for `en_US`.
|
||||
* `term.topResult`: "Top Result" - Added for `en_US`.
|
||||
* `term.sharedPlaylists`: "Shared Playlists" - Added for `en_US`.
|
||||
* `term.people`: "People" - Added for `en_US`.
|
||||
|
||||
Updated 02/02/2022 17:16 UTC
|
||||
|
||||
* `term.newpreset.name`: Added for `en_US`.
|
||||
* `term.addedpreset`: Added for `en_US`.
|
||||
* `term.deletepreset.warn`: Added for `en_US`.
|
||||
* `term.deletedpreset`: Added for `en_US`.
|
||||
* `term.musicVideos`: Added for `en_US`.
|
||||
* `term.stations`: Added for `en_US`.
|
||||
* `term.curators`: Added for `en_US`.
|
||||
* `term.appleCurators`: Added for `en_US`.
|
||||
* `term.radioShows`: Added for `en_US`.
|
||||
* `term.recordLabels`: Added for `en_US`.
|
||||
* `term.videoExtras`: Added for `en_US`.
|
||||
* `term.top`: Added for `en_US`.
|
||||
* `action.newpreset`: Added for `en_US`.
|
||||
* `action.deletepreset`: Added for `en_US`.
|
||||
|
||||
Updated 04/02/2022 10:00 UTC
|
||||
|
||||
* `term.history`: Added for `en_US`.
|
||||
* `action.copy`: Added for `en_US`.
|
||||
* `settings.header.visual.theme`: Added for `en_US`.
|
||||
* `settings.option.visual.theme.default`: Added for `en_US`.
|
||||
* `settings.option.visual.theme.dark`: Added for `en_US`.
|
||||
* `settings.option.experimental.copy_log`: Added for `en_US`.
|
||||
* `settings.option.experimental.inline_playlists`: Added for `en_US`.
|
||||
|
||||
Update 05/02/2022 09:00 UTC
|
||||
|
||||
* `settings.header.audio.quality.hireslossless`: Added for `en_US`.
|
||||
* `settings.header.audio.quality.hireslossless.description`: Added for `en_US`.
|
||||
* `settings.header.audio.quality.lossless`: Added for `en_US`.
|
||||
* `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`.
|
347
src/i18n/en_OWO.jsonc
Normal file
347
src/i18n/en_OWO.jsonc
Normal file
|
@ -0,0 +1,347 @@
|
|||
{ // 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 @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",
|
||||
"term.applePodcasts": "Appwe Pawdcasts",
|
||||
"term.itunes": "iTuwunes",
|
||||
"term.github": "GitHuwub",
|
||||
"term.discord": "Discowd",
|
||||
"term.learnMore": "Weawn moar",
|
||||
"term.accountSettings": "Accownt Settings",
|
||||
"term.logout": "Wogout",
|
||||
"term.login": "Wogin",
|
||||
"term.about": "Abowt",
|
||||
"term.privateSession": "Pwivate Session OwO",
|
||||
"term.queue": "Quwue",
|
||||
"term.search": "Seawch",
|
||||
"term.library": "Wibwawy",
|
||||
"term.listenNow": "Wisten Nao",
|
||||
"term.browse": "Bwowse",
|
||||
"term.radio": "Wadio",
|
||||
"term.recentlyAdded": "Wecentwy Added",
|
||||
"term.songs": "Sawngs",
|
||||
"term.albums": "Awbums",
|
||||
"term.artists": "Awtists",
|
||||
"term.podcasts": "Pawdcasts",
|
||||
"term.playlists": "Pwaywists",
|
||||
"term.playlist": "Pwaywist",
|
||||
"term.newPlaylist": "Nyew Pwaywist",
|
||||
"term.newPlaylistFolder": "New Pwaywist Fowdew",
|
||||
"term.createNewPlaylist": "Cweate New Pwaywist",
|
||||
"term.createNewPlaylistFolder": "Cweate New Pwaywist Fowdew",
|
||||
"term.deletePlaylist": "Awe chu suwe chu wan to dewete dis pwaywist?",
|
||||
"term.play": "Pway",
|
||||
"term.pause": "Pawse",
|
||||
"term.previous": "Pwevious",
|
||||
"term.next": "Next",
|
||||
"term.shuffle": "Shuffwe",
|
||||
"term.repeat": "Wepeat",
|
||||
"term.volume": "Vowume",
|
||||
"term.mute": "Muwute",
|
||||
"term.unmute": "Unmuwute",
|
||||
"term.share": "Shawe",
|
||||
"term.share.success": "Copied to cwipboawd",
|
||||
"term.settings": "Settings",
|
||||
"term.seeAll": "See Aww",
|
||||
"term.sortBy": "Sowt By",
|
||||
"term.sortBy.album": "Awbum",
|
||||
"term.sortBy.artist": "Awtist",
|
||||
"term.sortBy.name": "Name",
|
||||
"term.sortBy.genre": "Genwe",
|
||||
"term.sortBy.releaseDate": "Wewease Date",
|
||||
"term.sortBy.duration": "Duwation",
|
||||
"term.sortOrder": "A-Z",
|
||||
"term.sortOrder.ascending": "Ascending",
|
||||
"term.sortOrder.descending": "Descending",
|
||||
"term.viewAs": "View As",
|
||||
"term.viewAs.coverArt": "Covew Awt",
|
||||
"term.viewAs.list": "Wist",
|
||||
"term.size": "Size",
|
||||
"term.size.normal": "Nowmaw",
|
||||
"term.size.compact": "Wittwe",
|
||||
"term.enable": "Enabwe",
|
||||
"term.disable": "Disabwe",
|
||||
"term.enabled": "Enabwed",
|
||||
"term.disabled": "Disabwed",
|
||||
"term.connect": "Connect",
|
||||
"term.connecting": "Connecting",
|
||||
"term.disconnect": "Disconnect",
|
||||
"term.authed": "Authed",
|
||||
"term.confirm": "Confiwm?",
|
||||
"term.more": "Moar",
|
||||
"term.less": "Wess",
|
||||
"term.showMore": "Show moar",
|
||||
"term.showLess": "Show wess",
|
||||
"term.topSongs": "Top Songs",
|
||||
"term.latestReleases": "Watest Weweases",
|
||||
"term.time.added": "Added",
|
||||
"term.time.released": "Weweased",
|
||||
"term.time.updated": "Updated",
|
||||
"term.time.hours": "houws",
|
||||
"term.time.hour": "houw",
|
||||
"term.time.minutes": "minuwtes",
|
||||
"term.time.minute": "minuwte",
|
||||
"term.time.seconds": "seconds",
|
||||
"term.time.second": "second",
|
||||
"term.fullscreenView": "Fuwwwscween View",
|
||||
"term.defaultView": "Defauwt View",
|
||||
"term.audioSettings": "Audiowo Settings",
|
||||
"term.clearAll": "Cweaw Aww",
|
||||
"term.recentStations": "Wecent Stations",
|
||||
"term.language": "Wanguage",
|
||||
"term.funLanguages": "Fun",
|
||||
"term.noLyrics": "Woading... / Wywics not found./ Instwumentaw.",
|
||||
"term.copyright": "Copywight",
|
||||
"term.rightsReserved": "All Wights Wesewved.",
|
||||
"term.sponsor": "Sponsow dis pwoject",
|
||||
"term.ciderTeam": "Cidew Team",
|
||||
"term.developer": "Devewopew",
|
||||
"term.socialTeam": "Sociaw Team",
|
||||
"term.socials": "Sociaws",
|
||||
"term.contributors": "Contwibutows",
|
||||
"term.equalizer": "Equawizew",
|
||||
"term.reset": "Weset",
|
||||
"term.tracks": "twacks", // Assume x amount of tracks. e.g. 50 tracks
|
||||
"term.videos": "Videowos",
|
||||
"term.menu": "Menuwu",
|
||||
"term.check": "Check",
|
||||
"term.aboutArtist": "About {{artistName}}", // e.g. 'About Doja Cat'
|
||||
"term.topResult": "Top Wesuwt", // Search Results
|
||||
"term.sharedPlaylists": "Shawed Pwaywists", // Search Results
|
||||
"term.people": "Peopwe", // Search Results
|
||||
"term.newpreset.name": "New EQ Pweset Name", // Equalizer Preset
|
||||
"term.addedpreset": "Added Pweset",
|
||||
"term.deletepreset.warn": "Awe chu suwe chu want to dewete dis pweset?",
|
||||
"term.deletedpreset": "Wemoved pweset",
|
||||
"term.musicVideos": "Music Videowos", // Search page friendlyTypes
|
||||
"term.stations": "Stations",
|
||||
"term.curators": "Cuwatows",
|
||||
"term.appleCurators": "Appwe Cuwatows",
|
||||
"term.radioShows": "Wadio Shows",
|
||||
"term.recordLabels": "Wecowd Wabews",
|
||||
"term.videoExtras": "Videowo Extwas",
|
||||
"term.top": "Top",
|
||||
|
||||
// Home
|
||||
"home.title": "Home",
|
||||
"home.recentlyPlayed": "Wecentwy Pwayed",
|
||||
"home.recentlyAdded": "Wecentwy Added",
|
||||
"home.artistsFeed": "Youw Awtists Feed",
|
||||
"home.artistsFeed.noArtist": "Fowwow some awtists fiwst and theiw watest weleases wiww be here",
|
||||
"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
|
||||
"podcast.followOnCider": "Fowwow On Cidew",
|
||||
"podcast.followedOnCider": "Fowwowing On Cidew",
|
||||
"podcast.subscribeOnItunes": "Subscwibe On iTuwunes",
|
||||
"podcast.subscribedOnItunes": "Subscwibed On iTuwunes",
|
||||
"podcast.itunesStore": "iTuwunes Stowe",
|
||||
"podcast.episodes": "Episowodes",
|
||||
"podcast.playEpisode": "Pway Episowode",
|
||||
"podcast.website": "Pawdcast Website",
|
||||
|
||||
// Actions
|
||||
"action.addToLibrary": "Add to Wibwawy",
|
||||
"action.addToLibrary.success": "Added to Wibwawy",
|
||||
"action.addToLibrary.error": "Ewwow Adding to Wibwawy",
|
||||
"action.removeFromLibrary": "Wemove fwom Wibwawy",
|
||||
"action.removeFromLibrary.success": "Wemoved fwom Wibwawy",
|
||||
"action.addToQueue": "Add to Quwue",
|
||||
"action.addToQueue.success": "Added to Quwue",
|
||||
"action.addToQueue.error": "Ewwow Adding to Quwue",
|
||||
"action.removeFromQueue": "Wemove fwom Quwue",
|
||||
"action.removeFromQueue.success": "Wemoved fwom Quwue",
|
||||
"action.removeFromQueue.error": "Ewwow Wemoving fwom Quwue",
|
||||
"action.createPlaylist": "Cweate a New Pwaywist",
|
||||
"action.addToPlaylist": "Add to Pwaywist",
|
||||
"action.removeFromPlaylist": "Wemove fwom Pwaywist",
|
||||
"action.addToFavorites": "Add to Favowites",
|
||||
"action.follow": "Fowwow",
|
||||
"action.follow.success": "Fowwowed",
|
||||
"action.follow.error": "Ewwow Fowwowing",
|
||||
"action.unfollow": "Unfowwow",
|
||||
"action.unfollow.success": "Unfowwowed",
|
||||
"action.unfollow.error": "Ewwow Unfowwowing",
|
||||
"action.playNext": "Pway Next",
|
||||
"action.playLater": "Pway Watew",
|
||||
"action.startRadio": "Stawt Wadio",
|
||||
"action.goToArtist": "Go to Awtist",
|
||||
"action.goToAlbum": "Go to Awbum",
|
||||
"action.moveToTop": "Move to top",
|
||||
"action.share": "Shawe",
|
||||
"action.rename": "Wename",
|
||||
"action.love": "Wuv",
|
||||
"action.unlove": "Unwuv",
|
||||
"action.dislike": "Diswike",
|
||||
"action.undoDislike": "Undo diswike",
|
||||
"action.showWebRemoteQR": "Web Wiimote",
|
||||
"action.playTracksNext": "Pway ${app.selectedMediaItems.length} twacks next",
|
||||
"action.playTracksLater": "Pway ${app.selectedMediaItems.length} twacks latew",
|
||||
"action.removeTracks": "Wemove ${self.selectedItems.length} twacks fwom quwue",
|
||||
"action.import": "Impowt",
|
||||
"action.export": "Expowt",
|
||||
"action.showAlbum": "Show Compwete Awbum",
|
||||
"action.tray.minimize": "Minimize to Tway",
|
||||
"action.tray.quit": "Quit",
|
||||
"action.tray.show": "Show",
|
||||
"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.",
|
||||
"settings.option.audio.quality": "Audiowo Quawity", // Dropdown
|
||||
"settings.header.audio.quality.hireslossless": "Hi-res losswess",
|
||||
"settings.header.audio.quality.hireslossless.description": "(uwp to 24-bit/192 khz)",
|
||||
"settings.header.audio.quality.lossless": "Losswess",
|
||||
"settings.header.audio.quality.lossless.description": "(uwp to 24-bit/48 khz)",
|
||||
"settings.header.audio.quality.high": "High",
|
||||
"settings.header.audio.quality.low": "Low", // keeping as low because confusion with the word wow
|
||||
"settings.header.audio.quality.auto": "Autowo",
|
||||
"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.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.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",
|
||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audiowo Nowmawization", // Toggle
|
||||
"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.",
|
||||
"settings.option.visual.windowBackgroundStyle": "Window Backgwound Stywe", // Toggle
|
||||
"settings.header.visual.windowBackgroundStyle.none": "None",
|
||||
"settings.header.visual.windowBackgroundStyle.artwork": "Awtwowk",
|
||||
"settings.header.visual.windowBackgroundStyle.image": "Image",
|
||||
"settings.option.visual.animatedArtwork": "Animated Awtwowk", // Dropdown
|
||||
"settings.header.visual.animatedArtwork.always": "Awways",
|
||||
"settings.header.visual.animatedArtwork.limited": "Wimited to pages and speciaw entwies",
|
||||
"settings.header.visual.animatedArtwork.disable": "Disabwe evewywhewe",
|
||||
"settings.option.visual.animatedArtworkQuality": "Animated Awtwowk Quawity", // Dropdown
|
||||
"settings.header.visual.animatedArtworkQuality.low": "Low",
|
||||
"settings.header.visual.animatedArtworkQuality.medium": "Medium",
|
||||
"settings.header.visual.animatedArtworkQuality.high": "High",
|
||||
"settings.header.visual.animatedArtworkQuality.veryHigh": "Vewy High",
|
||||
"settings.header.visual.animatedArtworkQuality.extreme": "Extweme",
|
||||
"settings.option.visual.animatedWindowBackground": "Animated Window Backgwound", // Toggle
|
||||
"settings.option.visual.hardwareAcceleration": "Hawdwawe Accewewation", // Dropdown
|
||||
"settings.option.visual.hardwareAcceleration.description": "Wequiwes wewaunch",
|
||||
"settings.header.visual.hardwareAcceleration.default": "Defauwt",
|
||||
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
|
||||
// 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.",
|
||||
"settings.option.lyrics.enableMusixmatch": "Enabwe Musixmatch Wywics", // Toggle
|
||||
"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.",
|
||||
"settings.option.connectivity.discordRPC": "Discowd Wich Pwesence", // Dropdown
|
||||
"settings.option.connectivity.playbackNotifications": "Pwayback Notifications", // Toggle
|
||||
// Refer to term.disabled for the disabled option
|
||||
"settings.header.connectivity.discordRPC.cider": "Disway as 'Cider'",
|
||||
"settings.header.connectivity.discordRPC.appleMusic": "Dispway as 'Apple Music'",
|
||||
"settings.option.connectivity.discordRPC.clearOnPause": "Cweaw Discowd Wich Pwesence on Paws", // Toggle
|
||||
"settings.option.connectivity.lastfmScrobble": "Wast.fm Scwobbwing", // Option to Connect
|
||||
"settings.option.connectivity.lastfmScrobble.delay": "Wast.fm Scwobble Deway (%)",
|
||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Enabwe Wast.fm Nao Pwaying",
|
||||
"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.",
|
||||
"spatial.spatialProperties": "Spatiaw Pwopewties",
|
||||
"spatial.width": "Width",
|
||||
"spatial.height": "Height",
|
||||
"spatial.depth": "Depth",
|
||||
"spatial.gain": "Gain",
|
||||
"spatial.roomMaterials": "Woom Matewiaws",
|
||||
"spatial.roomDimensions": "Woom Dimensions",
|
||||
"spatial.roomPositions": "Woom Positions",
|
||||
"spatial.setDimensions": "Set Dimensions",
|
||||
"spatial.setPositions": "Set Positions",
|
||||
"spatial.up": "Up",
|
||||
"spatial.front": "Fwont",
|
||||
"spatial.left": "Weft",
|
||||
"spatial.right": "Wight",
|
||||
"spatial.back": "Back",
|
||||
"spatial.down": "Down",
|
||||
"spatial.listener": "Wistenew",
|
||||
"spatial.audioSource": "Audiowo Souwce",
|
||||
|
||||
// Settings - Unfinished
|
||||
"settings.header.unfinished": "Unfinished",
|
||||
|
||||
// Web Remote
|
||||
"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."
|
||||
}
|
|
@ -1,10 +1,9 @@
|
|||
{ // Base File
|
||||
|
||||
// i18n Info
|
||||
"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", // Authors, if you contribute to this file feel free to add your name seperated with a space
|
||||
"i18n.authors": "@SoNothingMC @saboooor", // Authors, if you contribute to this file feel free to add your name seperated with a space
|
||||
|
||||
// App info
|
||||
"app.name": "piss",
|
||||
|
@ -19,6 +18,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",
|
||||
|
@ -32,7 +32,8 @@
|
|||
"term.login": "piss in",
|
||||
"term.about": "piss info",
|
||||
"term.privateSession": "piss in private",
|
||||
"term.queue": "to be pissed",
|
||||
"term.queue": "the toilet",
|
||||
"term.history": "the sewage",
|
||||
"term.search": "find piss",
|
||||
"term.library": "obtained piss",
|
||||
"term.listenNow": "piss now",
|
||||
|
@ -60,6 +61,7 @@
|
|||
"term.mute": "piss without sound",
|
||||
"term.unmute": "piss with sound",
|
||||
"term.share": "piss on your friends",
|
||||
"term.share.success": "copied piss, go piss on your friends",
|
||||
"term.settings": "pissettings",
|
||||
"term.seeAll": "all of the piss",
|
||||
"term.sortBy": "piss by",
|
||||
|
@ -121,9 +123,25 @@
|
|||
"term.equalizer": "advanced piss configuration",
|
||||
"term.reset": "repiss",
|
||||
"term.tracks": "pisses", // Assume x amount of tracks. e.g. 50 tracks
|
||||
"term.videos": "piss videos 😳",
|
||||
"term.videos": "piss videos",
|
||||
"term.menu": "piss menu",
|
||||
"term.check": "piss!",
|
||||
"term.aboutArtist": "about pisser {{artistName}}", // e.g. 'About Doja Cat'
|
||||
"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
|
||||
"term.addedpreset": "pissed prepiss",
|
||||
"term.deletepreset.warn": "are you sure you want to unpiss this prepiss?",
|
||||
"term.deletedpreset": "unpissed prepiss",
|
||||
"term.musicVideos": "piss music videos", // Search page friendlyTypes
|
||||
"term.stations": "pisses",
|
||||
"term.curators": "pissators",
|
||||
"term.appleCurators": "piss pissators",
|
||||
"term.radioShows": "shows that piss everywhere",
|
||||
"term.recordLabels": "piss labels",
|
||||
"term.videoExtras": "extra piss videos",
|
||||
"term.top": "topiss",
|
||||
|
||||
// Home
|
||||
"home.title": "piss central",
|
||||
|
@ -134,6 +152,7 @@
|
|||
"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.",
|
||||
|
@ -154,8 +173,8 @@
|
|||
"action.addToLibrary": "obtain piss",
|
||||
"action.addToLibrary.success": "piss obtained",
|
||||
"action.addToLibrary.error": "error obtaining piss",
|
||||
"action.removeFromLibrary": "unobtain piss",
|
||||
"action.removeFromLibrary.success": "piss unobtained",
|
||||
"action.removeFromLibrary": "dump piss",
|
||||
"action.removeFromLibrary.success": "piss dumped",
|
||||
"action.addToQueue": "add to toilet",
|
||||
"action.addToQueue.success": "added to toilet",
|
||||
"action.addToQueue.error": "error adding to toilet",
|
||||
|
@ -191,10 +210,13 @@
|
|||
"action.import": "impiss",
|
||||
"action.export": "expiss",
|
||||
"action.showAlbum": "show complete piss collection",
|
||||
// Waiting on Core for moving plugin to app.ts
|
||||
"action.tray.minimize": "piss off to tray",
|
||||
"action.tray.quit": "piss off",
|
||||
"action.tray.show": "piss back",
|
||||
"action.update": "piss!",
|
||||
"action.copy": "copiss",
|
||||
"action.newpreset": "new prepiss...", // Equalizer Preset
|
||||
"action.deletepreset": "unpiss prepiss",
|
||||
|
||||
// Settings - General
|
||||
"settings.header.general": "general",
|
||||
|
@ -206,20 +228,31 @@
|
|||
"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",
|
||||
"settings.option.audio.quality": "piss quality", // Dropdown
|
||||
"settings.header.audio.quality.hireslossless": "ungodly piss",
|
||||
"settings.header.audio.quality.hireslossless.description": "(up to 24-pisses/192 piss hertz)",
|
||||
"settings.header.audio.quality.lossless": "colorful piss",
|
||||
"settings.header.audio.quality.lossless.description": "(up to 24-pisses/48 piss hertz)",
|
||||
"settings.header.audio.quality.enhanced": "enhanced piss",
|
||||
"settings.header.audio.quality.high": "nice piss",
|
||||
"settings.header.audio.quality.low": "piss with blood",
|
||||
"settings.header.audio.quality.auto": "automatic piss",
|
||||
"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.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",
|
||||
|
@ -242,6 +275,11 @@
|
|||
"settings.option.visual.hardwareAcceleration.description": "you need to relaunch Cider",
|
||||
"settings.header.visual.hardwareAcceleration.default": "default piss",
|
||||
"settings.header.visual.hardwareAcceleration.webGPU": "WebPISS",
|
||||
"settings.header.visual.theme": "colored piss",
|
||||
|
||||
// Settings - Visual - Theme name
|
||||
"settings.option.visual.theme.default": "regular piss",
|
||||
"settings.option.visual.theme.dark": "black piss",
|
||||
// Refer to term.disabled for the disabled option
|
||||
"settings.option.visual.showPersonalInfo": "show yourself to the pissiverse", // Toggle
|
||||
|
||||
|
@ -273,12 +311,11 @@
|
|||
"settings.header.experimental": "piss lab",
|
||||
"settings.header.experimental.description": "mitochondria is the powerhouse of the cell",
|
||||
"settings.option.experimental.compactUI": "compact piss", // Toggle
|
||||
"settings.option.experimental.closeButtonBehaviour": "piss off button behaviour",
|
||||
"settings.option.experimental.closeButtonBehaviour.quit": "ask cider to piss off",
|
||||
"settings.option.experimental.closeButtonBehaviour.minimizeTaskbar": "piss off to the taskbar",
|
||||
"settings.option.experimental.closeButtonBehaviour.minimizeTray": "piss off to the tray",
|
||||
// Refer to term.disabled & term.enabled
|
||||
"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
|
||||
// Spatialization Menu
|
||||
"spatial.notTurnedOn": "3D piss is not on. turn it on lol",
|
||||
"spatial.spatialProperties": "3D properties",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
|
||||
// i18n Info
|
||||
"i18n.languageName": "┤ᖋ|:ᖋᔮᒣ╎ᔮ ᖋ|:i!⍑ᖋᕊᒷᒣ", // name of language in native language
|
||||
"i18n.languageNameEnglish": "Galactic Alphabet", // name of language in English
|
||||
|
@ -19,6 +18,7 @@
|
|||
"notification.updatingLibrarySongs": "⚍i!↸ᖋᒣ╎リ┤ |:╎ᕊ∷ᖋ∷॥ ϟᒍリ┤ϟ...",
|
||||
"notification.updatingLibraryAlbums": "⚍i!↸ᖋᒣ╎リ┤ |:╎ᕊ∷ᖋ∷॥ ᖋ|:ᕊ⚍ᒲϟ...",
|
||||
"notification.updatingLibraryArtists": "⚍i!↸ᖋᒣ╎リ┤ |:╎ᕊ∷ᖋ∷॥ ᖋ∷ᒣ╎ϟᒣϟ...",
|
||||
|
||||
// Terms
|
||||
"term.appleInc": "ᖋi!i!|:ᒷ ╎リᔮ.",
|
||||
"term.appleMusic": "ᖋi!i!|:ᒷ ᒲ⚍ϟ╎ᔮ",
|
||||
|
@ -33,6 +33,7 @@
|
|||
"term.about": "ᖋᕊᒍ⚍ᒣ",
|
||||
"term.privateSession": "I!∷╎⍊ᖋᒣᒷ ϟᒷϟϟ╎ᒍリ",
|
||||
"term.queue": "ᑑ⚍ᒷ⚍ᒷ",
|
||||
"term.history": "⍑╎ϟᒣᒍ∷॥",
|
||||
"term.search": "ϟᒷᖋ∷ᔮ⍑",
|
||||
"term.library": "|:╎ᕊ∷ᖋ∷॥",
|
||||
"term.listenNow": "|:╎ϟᒣᒷリ",
|
||||
|
@ -45,6 +46,11 @@
|
|||
"term.podcasts": "I!ᒍ↸ᔮᖋϟᒣϟ",
|
||||
"term.playlists": "i!|:ᖋ॥|:╎ϟᒣϟ",
|
||||
"term.playlist": "i!|:ᖋ॥|:╎ϟᒣ",
|
||||
"term.newPlaylist": "リᒷ∴ i!|:ᖋ॥|:╎ϟᒣ",
|
||||
"term.newPlaylistFolder": "リᒷ∴ i!|:ᖋ॥|:╎ϟᒣ ⎓ᒍ|:↸ᒷ∷",
|
||||
"term.createNewPlaylist": "ᔮ∷ᒷᖋᒣᒷ リᒷ∴ i!|:ᖋ॥|:╎ϟᒣ",
|
||||
"term.createNewPlaylistFolder": "ᔮ∷ᒷᖋᒣᒷ リᒷ∴ i!|:ᖋ॥|:╎ϟᒣ ⎓ᒍ|:↸ᒷ∷",
|
||||
"term.deletePlaylist": "ᖋ∷ᒷ ॥ᒍ⚍ ϟ⚍∷ᒷ ॥ᒍ⚍ ∴ᖋリᒣ ᒣᒍ ↸ᒷ|:ᒷᒣᒷ ᒣ⍑╎ϟ i!|:ᖋ॥|:╎ϟᒣ?",
|
||||
"term.play": "i!|:ᖋ॥",
|
||||
"term.pause": "I!ᖋ⚍ϟᒷ",
|
||||
"term.previous": "I!∷ᒷ⍊╎ᒍ⚍ϟ",
|
||||
|
@ -55,6 +61,7 @@
|
|||
"term.mute": "ᒲ⚍ᒣᒷ",
|
||||
"term.unmute": "⚍リᒲ⚍ᒣᒷ",
|
||||
"term.share": "ϟ⍑ᖋ∷ᒷ",
|
||||
"term.share.success": "ᔮᒍi!╎ᒷ↸ ᒣᒍ ᔮ|:╎i!ᕊᒍᖋ∷↸",
|
||||
"term.settings": "ϟᒷᒣᒣ╎リ┤ϟ",
|
||||
"term.seeAll": "ϟᒷᒷ ᖋ|:|:",
|
||||
"term.sortBy": "ϟᒍ∷ᒣ ᕊ॥",
|
||||
|
@ -118,7 +125,23 @@
|
|||
"term.tracks": "ᒣ∷ᖋᔮ·ǀ·ϟ", // Assume x amount of tracks. e.g. 50 tracks
|
||||
"term.videos": "⍊╎↸ᒷᒍ",
|
||||
"term.menu": "ᒲᒷ⚍リ",
|
||||
"term.showAlbum": "ϟ⍑ᒍ∴ ᔮᒍᒲi!|:ᒷᒣᒷ ᖋ|:ᕊ⚍ᒲ",
|
||||
"term.check": "ᔮ⍑ᒷᔮ·ǀ·",
|
||||
"term.aboutArtist": "ᖋᕊᒍ⚍ᒣ {{artistName}}", // e.g. 'About Doja Cat'
|
||||
"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.musicVideos": "ᒲ⚍ϟ╎ᔮ ⍊╎↸ᒷᒍϟ", // Search page friendlyTypes
|
||||
"term.stations": "ϟᒣᖋᒣ╎ᒍリϟ",
|
||||
"term.curators": "ᔮ⚍∷ᖋᒣᒍ∷ϟ",
|
||||
"term.appleCurators": "ᖋi!i!|:ᒷ ᔮ⚍∷ᖋᒣᒍ∷ϟ",
|
||||
"term.radioShows": "∷ᖋ↸╎ᒍ ϟ⍑ᒍ∴ϟ",
|
||||
"term.recordLabels": "∷ᒷᔮᒍ∷↸ |:ᖋᕊᒷ|:ϟ",
|
||||
"term.videoExtras": "⍊╎↸ᒷᒍ ᒷ/ᒣ∷ᖋϟ",
|
||||
"term.top": "ᒣᒍi!",
|
||||
|
||||
// Home
|
||||
"home.title": "⍑ᒍᒲᒷ",
|
||||
|
@ -129,6 +152,7 @@
|
|||
"home.madeForYou": "ᒲᖋ↸ᒷ ⎓ᒍ∷ ॥ᒍ⚍",
|
||||
"home.friendsListeningTo": "⎓∷╎ᒷリ↸ϟ |:╎ϟᒣᒷリ╎リ┤ ᒣᒍ",
|
||||
"home.followedArtists": "⎓ᒍ|:|:ᒍ∴ᒷ↸ ᖋ∷ᒣ╎ϟᒣϟ",
|
||||
|
||||
// Errors
|
||||
"error.appleMusicSubRequired": "ᖋi!i!|:ᒷ ᒲ⚍ϟ╎ᔮ ∷ᒷᑑ⚍╎∷ᒷϟ ᖋ ϟ⚍ᕊϟᔮ∷╎i!ᒣ╎ᒍリ.",
|
||||
"error.connectionError": "ᒣ⍑ᒷ∷ᒷ ∴ᖋϟ ᖋ i!∷ᒍᕊ|:ᒷᒲ ᔮᒍリリᒷᔮᒣ╎リ┤ ᒣᒍ ᖋi!i!|:ᒷ ᒲ⚍ϟ╎ᔮ.",
|
||||
|
@ -185,6 +209,14 @@
|
|||
"action.removeTracks": "∷ᒷᒲᒍ⍊ᒷ ${self.selectedItems.length} ᒣ∷ᖋᔮ·ǀ·ϟ ⎓∷ᒍᒲ ᑑ⚍ᒷ⚍ᒷ",
|
||||
"action.import": "╎ᒲi!ᒍ∷ᒣ",
|
||||
"action.export": "ᒷ/i!ᒍ∷ᒣ",
|
||||
"action.showAlbum": "ϟ⍑ᒍ∴ ᔮᒍᒲi!|:ᒷᒣᒷ ᖋ|:ᕊ⚍ᒲ",
|
||||
"action.tray.minimize": "ᒲ╎リ╎ᒲ╎∩ᒷ ᒣᒍ ᒣ∷ᖋ॥",
|
||||
"action.tray.quit": "ᑑ⚍╎ᒣ",
|
||||
"action.tray.show": "ϟ⍑ᒍ∴",
|
||||
"action.update": "⚍i!↸ᖋᒣᒷ",
|
||||
"action.copy": "ᔮᒍi!॥",
|
||||
"action.newpreset": "リᒷ∴ i!∷ᒷϟᒷᒣ...", // Equalizer Preset
|
||||
"action.deletepreset": "↸ᒷ|:ᒷᒣᒷ i!∷ᒷϟᒷᒣ",
|
||||
|
||||
// Settings - General
|
||||
"settings.header.general": "┤ᒷリᒷ∷ᖋ|:",
|
||||
|
@ -196,20 +228,30 @@
|
|||
"settings.option.general.language.fun": "⎓⚍リ |:ᖋリ┤⚍ᖋ┤ᒷϟ",
|
||||
"settings.option.general.language.unsorted": "⚍リϟᒍ∷ᒣᒷ↸",
|
||||
|
||||
// Update Cider
|
||||
"settings.option.general.updateCider": "⚍i!↸ᖋᒣᒷ ᔮ╎↸ᒷ∷",
|
||||
|
||||
// Settings - Audio
|
||||
"settings.header.audio": "ᖋ⚍↸╎ᒍ",
|
||||
"settings.header.audio.description": "ᖋ↸⋮⚍ϟᒣ ᒣ⍑ᒷ ᖋ⚍↸╎ᒍ ϟᒷᒣᒣ╎リ┤ϟ ⎓ᒍ∷ ᔮ╎↸ᒷ∷.",
|
||||
"settings.option.audio.quality": "ᖋ⚍↸╎ᒍ ᑑ⚍ᖋ|:╎ᒣ॥", // Dropdown
|
||||
"settings.header.audio.quality.hireslossless": "⍑╎-∷ᒷϟ |:ᒍϟϟ|:ᒷϟϟ",
|
||||
"settings.header.audio.quality.hireslossless.description": "(⚍i! ᒣᒍ 24-ᕊ╎ᒣ/192 ·ǀ·⍑∩)",
|
||||
"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.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.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 - Visual
|
||||
"settings.header.visual": "⍊╎ϟ⚍ᖋ|:",
|
||||
"settings.header.visual.description": "ᖋ↸⋮⚍ϟᒣ ᒣ⍑ᒷ ⍊╎ϟ⚍ᖋ| ϟᒷᒣᒣ╎リ┤ϟ ⎓ᒍ∷ ᔮ╎↸ᒷ∷.",
|
||||
|
@ -232,6 +274,11 @@
|
|||
"settings.option.visual.hardwareAcceleration.description": "∷ᒷᑑ⚍╎∷ᒷϟ ∷ᒷ|:ᖋ⚍リᔮ⍑",
|
||||
"settings.header.visual.hardwareAcceleration.default": "↸ᒷ⎓ᖋ⚍|:ᒣ",
|
||||
"settings.header.visual.hardwareAcceleration.webGPU": "∴ᒷᕊ┤i!⚍",
|
||||
"settings.header.visual.theme": "ᒣ⍑ᒷᒲᒷ",
|
||||
|
||||
// Settings - Visual - Theme name
|
||||
"settings.option.visual.theme.default": "ᔮ╎↸ᒷ∷",
|
||||
"settings.option.visual.theme.dark": "↸ᖋ∷·ǀ·",
|
||||
// Refer to term.disabled for the disabled option
|
||||
"settings.option.visual.showPersonalInfo": "ϟ⍑ᒍ∴ i!ᒷ∷ϟᒍリᖋ|: ╎リ⎓ᒍ", // Toggle
|
||||
|
||||
|
@ -252,24 +299,24 @@
|
|||
"settings.header.connectivity.discordRPC.cider": "↸╎ϟi!|:ᖋ॥ ᖋϟ 'ᔮ╎↸ᒷ∷'",
|
||||
"settings.header.connectivity.discordRPC.appleMusic": "↸╎ϟi!|:ᖋ॥ ᖋϟ 'ᖋi!i!|:ᒷ ᒲ⚍ϟ╎ᔮ'",
|
||||
"settings.option.connectivity.discordRPC.clearOnPause": "ᔮ|:ᒷᖋ∷ ↸╎ϟᔮᒍ∷↸ ∷╎ᔮ⍑ i!∷ᒷϟᒷリᔮᒷ ᒍリ i!ᖋ⚍ϟᒷ", // Toggle
|
||||
"settings.option.connectivity.lastfmScrobble": "|:ᖋϟᒣ⎓ᒲ ϟᔮ∷ᒍᕊᕊ|:╎リ┤", // Option to Connect
|
||||
"settings.option.connectivity.lastfmScrobble.delay": "|:ᖋϟᒣ⎓ᒲ ϟᔮ∷ᒍᕊᕊ|:ᒷ ↸ᒷ|:ᖋ॥ (%)",
|
||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "ᒷリᖋᕊ|:ᒷ |:ᖋϟᒣ⎓ᒲ リᒍ∴ i!|:ᖋ॥╎リ┤",
|
||||
"settings.option.connectivity.lastfmScrobble.removeFeatured": "∷ᒷᒲᒍ⍊ᒷ ⎓ᒷᖋᒣ⚍∷╎リ┤ ᖋ∷ᒣ╎ϟᒣϟ ⎓∷ᒍᒲ ϟᒍリ┤ ᒣ╎ᒣ|:ᒷ (|:ᖋϟᒣ⎓ᒲ)",
|
||||
"settings.option.connectivity.lastfmScrobble.filterLoop": "⎓╎|:ᒣᒷ∷ |:ᒍᒍi!ᒷ↸ ᒣ∷ᖋᔮ·ǀ· (|:ᖋϟᒣ⎓ᒲ)",
|
||||
"settings.option.connectivity.lastfmScrobble": "|:ᖋϟᒣ.⎓ᒲ ϟᔮ∷ᒍᕊᕊ|:╎リ┤", // Option to Connect
|
||||
"settings.option.connectivity.lastfmScrobble.delay": "|:ᖋϟᒣ.⎓ᒲ ϟᔮ∷ᒍᕊᕊ|:ᒷ ↸ᒷ|:ᖋ॥ (%)",
|
||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "ᒷリᖋᕊ|:ᒷ |:ᖋϟᒣ.⎓ᒲ リᒍ∴ i!|:ᖋ॥╎リ┤",
|
||||
"settings.option.connectivity.lastfmScrobble.removeFeatured": "∷ᒷᒲᒍ⍊ᒷ ⎓ᒷᖋᒣ⚍∷╎リ┤ ᖋ∷ᒣ╎ϟᒣϟ ⎓∷ᒍᒲ ϟᒍリ┤ ᒣ╎ᒣ|:ᒷ (|:ᖋϟᒣ.⎓ᒲ)",
|
||||
"settings.option.connectivity.lastfmScrobble.filterLoop": "⎓╎|:ᒣᒷ∷ |:ᒍᒍi!ᒷ↸ ᒣ∷ᖋᔮ·ǀ· (|:ᖋϟᒣ.⎓ᒲ)",
|
||||
// Refer to term.connect for the connect button
|
||||
|
||||
// Settings - Experimental
|
||||
"settings.header.experimental": "ᒷ/i!ᒷ∷╎ᒲᒷリᒣᖋ|:",
|
||||
"settings.header.experimental.description": "ᖋ↸⋮⚍ϟᒣ ᒣ⍑ᒷ ᒷ/i!ᒷ∷╎ᒲᒷリᒣᖋ|: ϟᒷᒣᒣ╎リ┤ϟ ⎓ᒍ∷ ᔮ╎↸ᒷ∷.",
|
||||
"settings.option.experimental.compactUI": "ᔮᒍᒲi!ᖋᔮᒣ ⚍╎", // Toggle
|
||||
"settings.option.experimental.closeButtonBehaviour": "ᔮ|:ᒍϟᒷ ᕊ⚍ᒣᒣᒍリ ᕊᒷ⍑ᖋ⍊╎ᒍ⚍∷",
|
||||
"settings.option.experimental.closeButtonBehaviour.quit": "ᑑ⚍╎ᒣ ᔮ╎↸ᒷ∷",
|
||||
"settings.option.experimental.closeButtonBehaviour.minimizeTaskbar": "ᒲ╎リ╎ᒲ╎∩ᒷ ᒣᒍ ᒣᖋϟ·ǀ·ᕊᖋ∷",
|
||||
"settings.option.experimental.closeButtonBehaviour.minimizeTray": "ᒲ╎リ╎ᒲ╎∩ᒷ ᒣᒍ ϟ॥ϟᒣᒷᒲ ᒣ∷ᖋ॥",
|
||||
// Refer to term.disabled & term.enabled
|
||||
"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
|
||||
// Spatialization Menu
|
||||
"spatial.notTurnedOn": "ᖋ⚍↸╎ᒍ ϟi!ᖋᒣ╎ᖋ|:╎∩ᖋᒣ╎ᒍリ ╎ϟ ↸╎ϟᖋᕊ|:ᒷ↸. ᒣᒍ ⚍ϟᒷ, i!|:ᒷᖋϟᒷ ᒷリᖋᕊ|:ᒷ ╎ᒣ ⎓╎∷ϟᒣ.",
|
||||
"spatial.spatialProperties": "ϟi!ᖋᒣ╎ᖋ|: i!∷ᒍi!ᒷ∷ᒣ╎ᒷϟ",
|
||||
"spatial.width": "∴╎↸ᒣ⍑",
|
||||
"spatial.height": "⍑ᒷ╎┤⍑ᒣ",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{ // Base File
|
||||
|
||||
// i18n Info
|
||||
"i18n.languageName": "English (US)", // name of language in native language
|
||||
"i18n.languageNameEnglish": "English (US)", // name of language in English
|
||||
|
@ -19,6 +18,7 @@
|
|||
"notification.updatingLibrarySongs": "Updating library songs...",
|
||||
"notification.updatingLibraryAlbums": "Updating library albums...",
|
||||
"notification.updatingLibraryArtists": "Updating library artists...",
|
||||
|
||||
// Terms
|
||||
"term.appleInc": "Apple Inc.",
|
||||
"term.appleMusic": "Apple Music",
|
||||
|
@ -29,10 +29,11 @@
|
|||
"term.learnMore": "Learn more",
|
||||
"term.accountSettings": "Account Settings",
|
||||
"term.logout": "Logout",
|
||||
"term.login": "Login",
|
||||
"term.login": "Log In",
|
||||
"term.about": "About",
|
||||
"term.privateSession": "Private Session",
|
||||
"term.queue": "Queue",
|
||||
"term.history": "History",
|
||||
"term.search": "Search",
|
||||
"term.library": "Library",
|
||||
"term.listenNow": "Listen Now",
|
||||
|
@ -60,6 +61,7 @@
|
|||
"term.mute": "Mute",
|
||||
"term.unmute": "Unmute",
|
||||
"term.share": "Share",
|
||||
"term.share.success": "Copied to clipboard",
|
||||
"term.settings": "Settings",
|
||||
"term.seeAll": "See All",
|
||||
"term.sortBy": "Sort By",
|
||||
|
@ -125,7 +127,21 @@
|
|||
"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
|
||||
"term.newpreset.name": "New 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",
|
||||
|
@ -136,6 +152,7 @@
|
|||
"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.",
|
||||
|
@ -197,6 +214,9 @@
|
|||
"action.tray.quit": "Quit",
|
||||
"action.tray.show": "Show",
|
||||
"action.update": "Update",
|
||||
"action.copy": "Copy",
|
||||
"action.newpreset": "New Preset...", // Equalizer Preset
|
||||
"action.deletepreset": "Delete Preset",
|
||||
|
||||
// Settings - General
|
||||
"settings.header.general": "General",
|
||||
|
@ -208,20 +228,39 @@
|
|||
"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.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.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.",
|
||||
|
@ -244,6 +283,11 @@
|
|||
"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": "Show Personal Info", // Toggle
|
||||
|
||||
|
@ -276,8 +320,10 @@
|
|||
"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",
|
||||
// Refer to term.disabled & term.enabled
|
||||
"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",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{ // Base File
|
||||
|
||||
// i18n Info
|
||||
"i18n.languageName": "Español (ES)", // name of language in native language
|
||||
"i18n.languageNameEnglish": "Spanish (Spain)", // name of language in English
|
||||
|
@ -19,6 +18,7 @@
|
|||
"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",
|
||||
|
@ -125,7 +125,6 @@
|
|||
"term.menu": "Menú",
|
||||
"term.check": "Comprobar",
|
||||
"term.aboutArtist": "Más sobre {{artistName}}", // e.g. 'About Doja Cat'
|
||||
"term.updateCider": "Actualizar Cider",
|
||||
|
||||
// Home
|
||||
"home.title": "Inicio",
|
||||
|
@ -136,6 +135,7 @@
|
|||
"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.",
|
||||
|
@ -208,6 +208,9 @@
|
|||
"settings.option.general.language.fun": "Idiomas divertidos",
|
||||
"settings.option.general.language.unsorted": "Sin clasificar",
|
||||
|
||||
// Update Cider
|
||||
"settings.option.general.updateCider": "Actualizar Cider", // Button
|
||||
|
||||
// Settings - Audio
|
||||
"settings.header.audio": "Audio",
|
||||
"settings.header.audio.description": "Ajustes del audio de Cider.",
|
||||
|
@ -222,6 +225,7 @@
|
|||
"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.",
|
||||
|
@ -276,8 +280,8 @@
|
|||
"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
|
||||
|
||||
// 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",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{ // Base File
|
||||
|
||||
// i18n Info
|
||||
"i18n.languageName": "Français", // name of language in native language
|
||||
"i18n.languageNameEnglish": "French", // name of language in English
|
||||
|
@ -19,6 +18,7 @@
|
|||
"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",
|
||||
|
@ -33,6 +33,7 @@
|
|||
"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",
|
||||
|
@ -45,6 +46,11 @@
|
|||
"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",
|
||||
|
@ -56,6 +62,7 @@
|
|||
"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",
|
||||
|
@ -111,13 +118,30 @@
|
|||
"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",
|
||||
"action.showAlbum": "Afficher l'album complet",
|
||||
"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",
|
||||
|
||||
// Home
|
||||
"home.title": "Accueil",
|
||||
|
@ -128,6 +152,7 @@
|
|||
"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.",
|
||||
|
@ -156,6 +181,7 @@
|
|||
"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",
|
||||
|
@ -183,6 +209,14 @@
|
|||
"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 - General
|
||||
"settings.header.general": "Général",
|
||||
|
@ -194,20 +228,31 @@
|
|||
"settings.option.general.language.fun": "Langues amusantes",
|
||||
"settings.option.general.language.unsorted": "Non trié",
|
||||
|
||||
// Update Cider
|
||||
"settings.option.general.updateCider": "Mettre à jour Cider", // Button
|
||||
|
||||
// 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.",
|
||||
|
@ -230,6 +275,11 @@
|
|||
"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 - Visual - Theme name
|
||||
"settings.option.visual.theme.default": "Cider",
|
||||
"settings.option.visual.theme.dark": "Sombre",
|
||||
// Refer to term.disabled for the disabled option
|
||||
"settings.option.visual.showPersonalInfo": "Afficher vos informations personnelles", // Toggle
|
||||
|
||||
|
@ -261,13 +311,13 @@
|
|||
"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.closeButtonBehaviour": "Comportement du bouton de fermeture",
|
||||
"settings.option.experimental.closeButtonBehaviour.quit": "Quitter Cider",
|
||||
"settings.option.experimental.closeButtonBehaviour.minimizeTaskbar": "Réduire dans la barre des tâches",
|
||||
"settings.option.experimental.closeButtonBehaviour.minimizeTray": "Réduire dans la barre d'outils",
|
||||
// Refer to term.disabled & term.enabled
|
||||
"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",
|
||||
|
@ -291,10 +341,9 @@
|
|||
"settings.header.unfinished": "Inachevée",
|
||||
|
||||
// Web Remote
|
||||
"remote.web.title": "Cider 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."
|
||||
}
|
||||
|
|
@ -1,10 +1,9 @@
|
|||
{ // Base File
|
||||
|
||||
// i18n Info
|
||||
"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 +18,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 +46,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 +60,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",
|
||||
|
@ -104,38 +105,53 @@
|
|||
"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.",
|
||||
|
@ -153,11 +169,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 +198,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 +278,11 @@
|
|||
"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 +290,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 +306,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 +315,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 +348,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."
|
||||
}
|
|
@ -1,15 +1,15 @@
|
|||
{
|
||||
// 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
|
||||
|
||||
// App info
|
||||
"app.name": "Cider",
|
||||
|
||||
"date.format": "${y}年${m}月${d}日",
|
||||
|
||||
// Dialogs
|
||||
"dialog.cancel": "キャンセル",
|
||||
"dialog.ok": "OK",
|
||||
|
@ -118,7 +118,6 @@
|
|||
"term.menu": "メニュー",
|
||||
"term.check": "確認",
|
||||
"term.aboutArtist": "{{artistName}}について", // e.g. 'About Doja Cat'
|
||||
"term.updateCider": "Cider 更新",
|
||||
|
||||
// Home
|
||||
"home.title": "ホーム",
|
||||
|
@ -129,6 +128,7 @@
|
|||
"home.madeForYou": "あなたにおすすめ",
|
||||
"home.friendsListeningTo": "友達が聴いている",
|
||||
"home.followedArtists": "フォローしているアーティスト",
|
||||
|
||||
// Errors
|
||||
"error.appleMusicSubRequired": "Apple Musicのサブスクリプションが必要です。",
|
||||
"error.connectionError": "Apple Musicに接続できません。",
|
||||
|
@ -189,21 +189,36 @@
|
|||
"action.tray.quit": "終了",
|
||||
"action.tray.show": "表示",
|
||||
"action.update": "アップデート",
|
||||
"action.copy": "コピー",
|
||||
"action.newpreset": "ニュープリセット", // Equalizer Preset
|
||||
"action.deletepreset": "プリセットを削除", // Equalizer Preset
|
||||
|
||||
// Settings - Audio
|
||||
"settings.header.audio": "オーディオ",
|
||||
"settings.header.audio.description": "Ciderのオーディオ設定",
|
||||
"settings.option.audio.quality": "音質", // Dropdown
|
||||
"settings.header.audio.quality.hireslossless": "ハイレゾロスレス",
|
||||
"settings.header.audio.quality.hireslossless.description": "(最大解像度 24 ビット/192 kHz)",
|
||||
"settings.header.audio.quality.lossless": "ロスレス",
|
||||
"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.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)",
|
||||
"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 - Visual
|
||||
"settings.header.visual": "ビジュアル",
|
||||
"settings.header.visual.description": "Ciderのビジュアル設定",
|
||||
|
@ -227,6 +242,7 @@
|
|||
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
|
||||
// Refer to term.disabled for the disabled option
|
||||
"settings.option.visual.showPersonalInfo": "プロフィールを表示", // Toggle
|
||||
|
||||
// Settings - General (Reserved)
|
||||
"settings.header.general": "一般",
|
||||
"settings.header.general.description": "Ciderの一般設定",
|
||||
|
@ -253,13 +269,16 @@
|
|||
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Remove featuring artists from song title (LastFM)",
|
||||
// Refer to term.connect for the connect button
|
||||
|
||||
// Settings - General - Update Cider
|
||||
"settings.option.general.updateCider": "Cider 更新", // Button
|
||||
|
||||
// Settings - Experimental
|
||||
"settings.header.experimental": "試験的な機能",
|
||||
"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": "幅",
|
||||
|
@ -289,5 +308,4 @@
|
|||
|
||||
//About
|
||||
"about.thanks": "Cider Collective とご協力いただいた貢献者様に感謝申し上げます。"
|
||||
|
||||
}
|
|
@ -1,40 +1,41 @@
|
|||
{ // Base File
|
||||
|
||||
// i18n Info
|
||||
"i18n.languageName": "한국어", // name of language in native language
|
||||
"i18n.languageNameEnglish": "Korean", // name of language in English
|
||||
"i18n.languageName": "한국어 (KR)", // name of language in native language
|
||||
"i18n.languageNameEnglish": "Korean (KR)", // name of language in English
|
||||
"i18n.category": "main", // main = real language, fun = fun community languages
|
||||
"i18n.authors": "@sj8923", // Authors, if you contribute to this file feel free to add your name seperated with a space
|
||||
"i18n.authors": "@Hazealign", // 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}일",
|
||||
"date.format": "${y}. ${m}. ${d}",
|
||||
|
||||
// Dialogs
|
||||
"dialog.cancel": "취소",
|
||||
"dialog.ok": "확인",
|
||||
|
||||
// Notification
|
||||
"notification.updatingLibrarySongs": "라이브러리 곡 업데이트 중...",
|
||||
"notification.updatingLibraryAlbums": "라이브러리 앨범 업데이트 중...",
|
||||
"notification.updatingLibraryArtists": "라이브러리 아티스트 업데이트 중...",
|
||||
"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.appleInc": "Apple Inc.", // Follows brand term
|
||||
"term.appleMusic": "Apple Music", // Follows brand term
|
||||
"term.applePodcasts": "Apple Podcasts", // Follows brand term
|
||||
"term.itunes": "iTunes", // Follows brand term
|
||||
"term.github": "GitHub", // Follows brand term
|
||||
"term.discord": "Discord", // Follows brand term
|
||||
"term.learnMore": "더 알아보기",
|
||||
"term.accountSettings": "계정 설정",
|
||||
"term.logout": "로그아웃",
|
||||
"term.login": "로그인",
|
||||
"term.about": "정보",
|
||||
"term.privateSession": "개인 세션",
|
||||
"term.queue": "대기열",
|
||||
"term.history": "청취 기록",
|
||||
"term.search": "검색",
|
||||
"term.library": "라이브러리",
|
||||
"term.library": "보관함",
|
||||
"term.listenNow": "지금 듣기",
|
||||
"term.browse": "둘러보기",
|
||||
"term.radio": "라디오",
|
||||
|
@ -43,76 +44,77 @@
|
|||
"term.albums": "앨범",
|
||||
"term.artists": "아티스트",
|
||||
"term.podcasts": "팟캐스트",
|
||||
"term.playlists": "플레이리스트",
|
||||
"term.playlist": "플레이리스트",
|
||||
"term.newPlaylist": "새 플레이리스트",
|
||||
"term.newPlaylistFolder": "새 플레이리스트 폴더",
|
||||
"term.createNewPlaylist": "새 플레이리스트 만들기",
|
||||
"term.createNewPlaylistFolder": "새 플레이리스트 폴더 만들기",
|
||||
"term.deletePlaylist": "정말 플레이리스트를 삭제하시겠습니까?",
|
||||
"term.playlists": "재생 목록",
|
||||
"term.playlist": "재생 목록",
|
||||
"term.newPlaylist": "새 재생 목록",
|
||||
"term.newPlaylistFolder": "새 재생 목록 폴더",
|
||||
"term.createNewPlaylist": "새 재생 목록 만들기",
|
||||
"term.createNewPlaylistFolder": "새 재생 목록 폴더 만들기",
|
||||
"term.deletePlaylist": "정말로 이 재생 목록을 삭제하시겠습니까?",
|
||||
"term.play": "재생",
|
||||
"term.pause": "정지",
|
||||
"term.pause": "일시 정지",
|
||||
"term.previous": "이전",
|
||||
"term.next": "다음",
|
||||
"term.shuffle": "셔플",
|
||||
"term.repeat": "반복재생",
|
||||
"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": "정렬",
|
||||
"term.sortBy.album": "앨범명",
|
||||
"term.sortBy.artist": "아티스트 이름",
|
||||
"term.sortBy.name": "제목",
|
||||
"term.sortBy.genre": "장르",
|
||||
"term.sortBy.releaseDate": "출시일",
|
||||
"term.sortBy.duration": "재생시간",
|
||||
"term.sortOrder": "ㄱ-ㅎ",
|
||||
"term.sortBy.releaseDate": "발매일",
|
||||
"term.sortBy.duration": "길이",
|
||||
"term.sortOrder": "A-Z",
|
||||
"term.sortOrder.ascending": "오름차순",
|
||||
"term.sortOrder.descending": "내림차순",
|
||||
"term.viewAs": "표시방식",
|
||||
"term.viewAs": "표시",
|
||||
"term.viewAs.coverArt": "커버 아트",
|
||||
"term.viewAs.list": "리스트",
|
||||
"term.size": "크기",
|
||||
"term.size.normal": "일반",
|
||||
"term.size.normal": "표준",
|
||||
"term.size.compact": "컴팩트",
|
||||
"term.enable": "활성화",
|
||||
"term.disable": "비활성화",
|
||||
"term.enabled": "활성화",
|
||||
"term.disabled": "비활성화",
|
||||
"term.enable": "켜기",
|
||||
"term.disable": "끄기",
|
||||
"term.enabled": "켜짐",
|
||||
"term.disabled": "꺼짐",
|
||||
"term.connect": "연결",
|
||||
"term.connecting": "연결 중",
|
||||
"term.disconnect": "연결 끊김",
|
||||
"term.disconnect": "연결 해제",
|
||||
"term.authed": "인증됨",
|
||||
"term.confirm": "확인하시겠습니까 ?",
|
||||
"term.more": "더",
|
||||
"term.less": "적게",
|
||||
"term.confirm": "진행하시겠습니까?",
|
||||
"term.more": "추가",
|
||||
"term.less": "줄이기",
|
||||
"term.showMore": "더 보기",
|
||||
"term.showLess": "적게 보기",
|
||||
"term.topSongs" : "인기곡",
|
||||
"term.latestReleases": "최신곡",
|
||||
"term.time.added": "추가",
|
||||
"term.time.released": "발매일",
|
||||
"term.time.updated": "업데이트일",
|
||||
"term.showLess": "덜 보기",
|
||||
"term.topSongs": "많이 듣는 노래",
|
||||
"term.latestReleases": "최근 발매된 노래",
|
||||
"term.time.added": "추가됨",
|
||||
"term.time.released": "발매됨",
|
||||
"term.time.updated": "업데이트됨",
|
||||
"term.time.hours": "시간",
|
||||
"term.time.hour": "시간",
|
||||
"term.time.minutes": "분",
|
||||
"term.time.minute": "분",
|
||||
"term.time.seconds": "초",
|
||||
"term.time.second": "초",
|
||||
"term.fullscreenView": "전체화면",
|
||||
"term.defaultView": "기본화면",
|
||||
"term.fullscreenView": "전체 화면 보기",
|
||||
"term.defaultView": "윈도우 보기",
|
||||
"term.audioSettings": "오디오 설정",
|
||||
"term.clearAll": "비우기",
|
||||
"term.clearAll": "모두 지우기",
|
||||
"term.recentStations": "최근 스테이션",
|
||||
"term.language": "언어",
|
||||
"term.funLanguages": "재미있는",
|
||||
"term.noLyrics": "불러오는 중... / 가사를 찾을 수 없습니다/ 연주곡",
|
||||
"term.copyright": "Copyright", // Used in Korea w/o translation
|
||||
"term.funLanguages": "재미를 위한 언어",
|
||||
"term.noLyrics": "로딩 중... / 가사를 찾지 못했습니다. / Instrumental 곡일 수 있습니다.",
|
||||
"term.copyright": "저작권",
|
||||
"term.rightsReserved": "All Rights Reserved.",
|
||||
"term.sponsor": "이 프로젝트를 후원하세요",
|
||||
"term.sponsor": "이 프로젝트를 후원하기",
|
||||
"term.ciderTeam": "Cider 팀",
|
||||
"term.developer": "개발자",
|
||||
"term.socialTeam": "소셜 팀",
|
||||
|
@ -120,56 +122,71 @@
|
|||
"term.contributors": "기여자",
|
||||
"term.equalizer": "이퀄라이저",
|
||||
"term.reset": "초기화",
|
||||
"term.tracks": "트랙", // Assume x amount of tracks. e.g. 50 tracks
|
||||
"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 업데이트",
|
||||
"term.aboutArtist": "{{artistName}}에 대하여", // e.g. 'About Doja Cat'
|
||||
"term.topResult": "Top Result", // Search Results
|
||||
"term.sharedPlaylists": "공유 플레이리스트", // Search Results
|
||||
"term.people": "프로필", // Search Results
|
||||
"term.newpreset.name": "새 이퀄라이저 프리셋", // Equalizer Preset
|
||||
"term.addedpreset": "추가된 프리셋",
|
||||
"term.deletepreset.warn": "정말로 프리셋을 삭제하시겠습니까?",
|
||||
"term.deletedpreset": "프리셋 삭제",
|
||||
"term.musicVideos": "뮤직 비디오", // Search page friendlyTypes
|
||||
"term.stations": "스테이션",
|
||||
"term.curators": "큐레이터",
|
||||
"term.appleCurators": "애플 큐레이터",
|
||||
"term.radioShows": "라디오 쇼",
|
||||
"term.recordLabels": "레코드 레이블",
|
||||
"term.videoExtras": "추가 비디오",
|
||||
"term.top": "Top",
|
||||
|
||||
// Home
|
||||
"home.title": "홈",
|
||||
"home.recentlyPlayed": "최근 재생된 항목",
|
||||
"home.recentlyPlayed": "최근 재생한 항목",
|
||||
"home.recentlyAdded": "최근 추가된 항목",
|
||||
"home.artistsFeed": "내 아티스트 피드",
|
||||
"home.artistsFeed.noArtist": "아티스트를 팔로우하면 최근 발매곡이 표시됩니다",
|
||||
"home.artistsFeed": "아티스트 피드",
|
||||
"home.artistsFeed.noArtist": "좋아하는 아티스트를 팔로우해보세요.",
|
||||
"home.madeForYou": "나만을 위한 추천",
|
||||
"home.friendsListeningTo": "친구들이 듣는",
|
||||
"home.friendsListeningTo": "친구가 듣는 음악",
|
||||
"home.followedArtists": "팔로우한 아티스트",
|
||||
|
||||
// Errors
|
||||
"error.appleMusicSubRequired": "애플뮤직 구독이 필요합니다.",
|
||||
"error.connectionError": "애플뮤직 연결에 문제가 발생했습니다.",
|
||||
"error.noResults": "결과 없음.",
|
||||
"error.noResults.description": "새로 검색해주세요.",
|
||||
"error.appleMusicSubRequired": "Apple Music은 구독을 필요로 합니다.",
|
||||
"error.connectionError": "Apple Music에 연결하지 못했습니다.",
|
||||
"error.noResults": "결과 없음",
|
||||
"error.noResults.description": "다시 시도해주세요.",
|
||||
|
||||
// Podcasts
|
||||
"podcast.followOnCider": "Cider 팔로우",
|
||||
"podcast.followedOnCider": "Cider 팔로우됨",
|
||||
"podcast.subscribeOnItunes": "iTunes 구독하기",
|
||||
"podcast.subscribedOnItunes": "iTunes 구독 중",
|
||||
"podcast.itunesStore": "iTunes 스토어",
|
||||
"podcast.episodes": "에피소드",
|
||||
"podcast.playEpisode": "에피소드 재생",
|
||||
"podcast.website": "팟캐스트 웹사이트",
|
||||
"podcast.followOnCider": "Cider에서 팔로우하기",
|
||||
"podcast.followedOnCider": "팔로우 중",
|
||||
"podcast.subscribeOnItunes": "iTunes에서 구독",
|
||||
"podcast.subscribedOnItunes": "구독 중",
|
||||
"podcast.itunesStore": "iTunes Store",
|
||||
"podcast.episodes": "방송",
|
||||
"podcast.playEpisode": "재생",
|
||||
"podcast.website": "팟캐스트 사이트",
|
||||
|
||||
// Actions
|
||||
"action.addToLibrary": "보관함에 추가",
|
||||
"action.addToLibrary.success": "보관함에 추가됨",
|
||||
"action.addToLibrary.error": "보관함에 추가 실패",
|
||||
"action.addToLibrary.error": "보관함에 추가하는데 실패함",
|
||||
"action.removeFromLibrary": "보관함에서 삭제",
|
||||
"action.removeFromLibrary.success": "보관함에서 삭제됨",
|
||||
"action.addToQueue": "대기열에 추가",
|
||||
"action.addToQueue.success": "대기열에 추가됨",
|
||||
"action.addToQueue.error": "대기열에 추가 실패",
|
||||
"action.addToQueue.error": "대기열에 추가하는데 실패함",
|
||||
"action.removeFromQueue": "대기열에서 삭제",
|
||||
"action.removeFromQueue.success": "대기열에서 삭제됨",
|
||||
"action.removeFromQueue.error": "대기열에서 삭제 실패",
|
||||
"action.createPlaylist": "새 플레이리스트",
|
||||
"action.addToPlaylist": "플레이리스트에 추가...",
|
||||
"action.removeFromPlaylist": "플레이리스트에서 삭제",
|
||||
"action.addToFavorites": "선호항목에 추가",
|
||||
"action.removeFromQueue.error": "대기열에서 삭제하는데 실패함",
|
||||
"action.createPlaylist": "새 재생 목록 만들기",
|
||||
"action.addToPlaylist": "재생 목록에 추가",
|
||||
"action.removeFromPlaylist": "재생 목록에서 삭제",
|
||||
"action.addToFavorites": "즐겨찾기에 추가",
|
||||
"action.follow": "팔로우",
|
||||
"action.follow.success": "팔로우됨",
|
||||
"action.follow.success": "팔로우 중",
|
||||
"action.follow.error": "팔로우 실패",
|
||||
"action.unfollow": "언팔로우",
|
||||
"action.unfollow.success": "언팔로우됨",
|
||||
|
@ -179,112 +196,126 @@
|
|||
"action.startRadio": "스테이션 생성",
|
||||
"action.goToArtist": "아티스트 보기",
|
||||
"action.goToAlbum": "앨범 보기",
|
||||
"action.moveToTop": "맨 위로 이동",
|
||||
"action.share": "공유하기",
|
||||
"action.rename": "이름 편집하기",
|
||||
"action.moveToTop": "위로 가기",
|
||||
"action.share": "공유",
|
||||
"action.rename": "편집",
|
||||
"action.love": "좋아요",
|
||||
"action.unlove": "좋아요 취소",
|
||||
"action.dislike": "비슷한 항목의 제안 줄이기",
|
||||
"action.undoDislike": "비슷한 항목의 제안 줄이기 실행 취소",
|
||||
"action.dislike": "싫어요",
|
||||
"action.undoDislike": "싫어요 취소",
|
||||
"action.showWebRemoteQR": "웹 리모트",
|
||||
"action.playTracksNext": "${app.selectedMediaItems.length} 바로 다음에 재생",
|
||||
"action.playTracksLater": "${app.selectedMediaItems.length} 맨 나중에 재생",
|
||||
"action.removeTracks": "${self.selectedItems.length} 대기열에서 삭제",
|
||||
"action.import": "가져오기",
|
||||
"action.playTracksNext": "다음 ${app.selectedMediaItems.length}곡 재생",
|
||||
"action.playTracksLater": "나중에 ${app.selectedMediaItems.length}곡 재생",
|
||||
"action.removeTracks": "${self.selectedItems.length}곡을 대기열에서 삭제",
|
||||
"action.import": "불러오기",
|
||||
"action.export": "내보내기",
|
||||
"action.showAlbum": "전체 앨범 보기",
|
||||
"action.tray.minimize": "트레이로 최소화",
|
||||
"action.tray.minimize": "트레이에 최소화",
|
||||
"action.tray.quit": "종료",
|
||||
"action.tray.show": "", // None is Better in Korean
|
||||
"action.tray.show": "보기",
|
||||
"action.update": "업데이트",
|
||||
"action.copy": "복사",
|
||||
"action.newpreset": "새 프리셋", // Equalizer Preset
|
||||
"action.deletepreset": "프리셋 삭제",
|
||||
|
||||
// Settings - General
|
||||
"settings.header.general": "일반 설정",
|
||||
"settings.header.general.description": "Cider를 위한 일반 설정을 조절합니다.",
|
||||
"settings.header.general": "일반",
|
||||
"settings.header.general.description": "Cider의 일반 기능을 설정합니다.",
|
||||
"settings.option.general.language": "언어",
|
||||
|
||||
// Language optgroups
|
||||
"settings.option.general.language.main": "언어",
|
||||
"settings.option.general.language.fun": "실험적인 언어",
|
||||
"settings.option.general.language.unsorted": "정리되지않음",
|
||||
"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를 위한 오디오 설정을 조절하세요.",
|
||||
"settings.option.audio.quality": "오디오 품질", // Dropdown
|
||||
"settings.header.audio.quality.high": "높음",
|
||||
"settings.header.audio.description": "Cider의 오디오 기능을 설정합니다.",
|
||||
"settings.option.audio.quality": "오디오 음질", // Dropdown
|
||||
"settings.header.audio.quality.high": "고품질",
|
||||
"settings.header.audio.quality.low": "낮음",
|
||||
"settings.header.audio.quality.auto": "자동",
|
||||
"settings.option.audio.seamlessTransition": "간격 없는 재생", // Toggle
|
||||
"settings.option.audio.enableAdvancedFunctionality": "실험적인 기능", // Toggle
|
||||
"settings.option.audio.enableAdvancedFunctionality.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": "소리를 공간 음향으로 만들고 3d효과를 줍니다. (주의: 돌비 애트모스가 아님)",
|
||||
"settings.option.audio.seamlessTransition": "크로스페이드 기능", // Toggle
|
||||
"settings.option.audio.enableAdvancedFunctionality": "추가 기능 설정", // Toggle
|
||||
"settings.option.audio.enableAdvancedFunctionality.description": "AudioContext 기능을 활성화하여 오디오 정규화, 이퀄라이저, 비쥬얼라이저 등의 기능을 쓸 수 있게 해줍니다. 일부 시스템에서는 오디오가 끊길 수 있습니다.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "오디오 정규화", // Toggle
|
||||
"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를 위한 시각 효과 설정을 조절하세요.",
|
||||
"settings.option.visual.windowBackgroundStyle": "창 배경 설정", // Toggle
|
||||
"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.artwork": "앨범 아트",
|
||||
"settings.header.visual.windowBackgroundStyle.image": "이미지",
|
||||
"settings.option.visual.animatedArtwork": "움직이는 아트워크", // Dropdown
|
||||
"settings.header.visual.animatedArtwork.always": "활성화",
|
||||
"settings.header.visual.animatedArtwork.limited": "특정 페이지에 한정",
|
||||
"settings.header.visual.animatedArtwork.disable": "비활성화",
|
||||
"settings.option.visual.animatedArtworkQuality": "움직이는 아트워크 품질", // Dropdown
|
||||
"settings.option.visual.animatedArtwork": "애니메이션 앨범 표지", // Dropdown
|
||||
"settings.header.visual.animatedArtwork.always": "항상 활성화",
|
||||
"settings.header.visual.animatedArtwork.limited": "페이지나 특정 화면에서만 활성화",
|
||||
"settings.header.visual.animatedArtwork.disable": "항상 비활성화",
|
||||
"settings.option.visual.animatedArtworkQuality": "애니메이션 앨범 표지 화질", // Dropdown
|
||||
"settings.header.visual.animatedArtworkQuality.low": "낮음",
|
||||
"settings.header.visual.animatedArtworkQuality.medium": "중간",
|
||||
"settings.header.visual.animatedArtworkQuality.high": "높음",
|
||||
"settings.header.visual.animatedArtworkQuality.veryHigh": "매우 높음",
|
||||
"settings.header.visual.animatedArtworkQuality.extreme": "최고",
|
||||
"settings.option.visual.animatedWindowBackground": "움직이는 창 배경", // Toggle
|
||||
"settings.header.visual.animatedArtworkQuality.extreme": "최상",
|
||||
"settings.option.visual.animatedWindowBackground": "움직이는 윈도우 배경", // Toggle
|
||||
"settings.option.visual.hardwareAcceleration": "하드웨어 가속", // Dropdown
|
||||
"settings.option.visual.hardwareAcceleration.description": "재실행 필요",
|
||||
"settings.option.visual.hardwareAcceleration.description": "재시작을 필요로 합니다.",
|
||||
"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": "ID 표시", // Toggle
|
||||
"settings.option.visual.showPersonalInfo": "개인 정보 보기", // Toggle
|
||||
|
||||
// Settings - Lyrics
|
||||
"settings.header.lyrics": "가사",
|
||||
"settings.header.lyrics.description": "Cider를 위한 가사 설정을 조절하세요.",
|
||||
"settings.option.lyrics.enableMusixmatch": "Musixmatch 가사", // Toggle
|
||||
"settings.option.lyrics.enableMusixmatchKaraoke": "노래방 모드 (Musixmatch만)", // Toggle
|
||||
"settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch 선호 번역 언어", // Dropdown
|
||||
"settings.option.lyrics.enableYoutubeLyrics": "뮤직비디오 재생 시 유튜브에서 가사 가져오기", // Toggle
|
||||
"settings.header.lyrics.description": "Cider의 가사 기능을 설정합니다.",
|
||||
"settings.option.lyrics.enableMusixmatch": "Musixmatch 가사 활성화", // Toggle
|
||||
"settings.option.lyrics.enableMusixmatchKaraoke": "노래방 모드 활성화 (Musixmatch만 가능)", // Toggle
|
||||
"settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch 번역 선호 언어", // Dropdown
|
||||
"settings.option.lyrics.enableYoutubeLyrics": "뮤직 비디오에 대한 유튜브 자막 활성화", // Toggle
|
||||
|
||||
// Settings - Connectivity
|
||||
"settings.header.connectivity": "연결",
|
||||
"settings.header.connectivity.description": "Cider를 위한 연결 설정을 조절하세요.",
|
||||
"settings.option.connectivity.discordRPC": "Discord 상태 표시", // Dropdown
|
||||
"settings.option.connectivity.playbackNotifications": "재생 상태 표시", // Toggle
|
||||
"settings.header.connectivity": "연동",
|
||||
"settings.header.connectivity.description": "Cider의 연동 기능을 설정합니다.",
|
||||
"settings.option.connectivity.discordRPC": "Discord Rich Presence", // 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'으로 표시",
|
||||
"settings.option.connectivity.discordRPC.clearOnPause": "일시 정지 상태에서 Discord 상태 표시 끄기", // Toggle
|
||||
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling", // Option to Connect
|
||||
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble 지연 (%)",
|
||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Last.fm Now Playing 활성",
|
||||
"settings.option.connectivity.lastfmScrobble.removeFeatured": "곡 이름에서 피쳐링 아티스트 빼기 (Last.fm)",
|
||||
"settings.option.connectivity.lastfmScrobble.filterLoop": "반복 재생 트랙 제거 (Last.fm)",
|
||||
"settings.header.connectivity.discordRPC.cider": "'Cider'로 표시하기",
|
||||
"settings.header.connectivity.discordRPC.appleMusic": "'Apple Music'으로 표시하기",
|
||||
"settings.option.connectivity.discordRPC.clearOnPause": "일시 정지 시 Discord Rich Presence을 끄기", // Toggle
|
||||
"settings.option.connectivity.lastfmScrobble": "Last.fm 스크로블링", // Option to Connect
|
||||
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm 스크로블 딜레이 (%)",
|
||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Last.fm Now Playing 기능 활성화",
|
||||
"settings.option.connectivity.lastfmScrobble.removeFeatured": "곡 제목에서 피쳐링 아티스트를 제외하기 (Last.fm)",
|
||||
"settings.option.connectivity.lastfmScrobble.filterLoop": "루프 트랙을 필터하기 (Last.fm)",
|
||||
// Refer to term.connect for the connect button
|
||||
|
||||
// Settings - Experimental
|
||||
"settings.header.experimental": "실험 기능",
|
||||
"settings.header.experimental.description": "Cider를 위한 실험 기능을 조절하세요.",
|
||||
"settings.header.experimental": "실험실",
|
||||
"settings.header.experimental.description": "Cider의 실험적 기능을 설정합니다.",
|
||||
"settings.option.experimental.compactUI": "컴팩트 UI", // Toggle
|
||||
"settings.option.experimental.close_button_hide": "닫기 버튼으로 프로그램 숨기기",
|
||||
// Refer to term.disabled & term.enabled
|
||||
"settings.option.experimental.close_button_hide": "닫기 버튼이 애플리케이션을 가릴 것입니다",
|
||||
"settings.option.experimental.copy_log": "로그를 클립보드에 복사하기",
|
||||
"settings.option.experimental.inline_playlists": "인라인 플레이리스트 및 앨범",
|
||||
|
||||
// Refer to term.disabled & term.enabled
|
||||
// Spatialization Menu
|
||||
"spatial.notTurnedOn": "먼저 공간 음향 설정을 활성화해주세요.",
|
||||
"spatial.spatialProperties": "공간 속성",
|
||||
"spatial.width": "너비",
|
||||
"spatial.notTurnedOn": "오디오 공간화가 비활성화되어있습니다. 사용하기 전에 먼저 활성화해주세요.",
|
||||
"spatial.spatialProperties": "공간 설정",
|
||||
"spatial.width": "길이",
|
||||
"spatial.height": "높이",
|
||||
"spatial.depth": "깊이",
|
||||
"spatial.gain": "게인",
|
||||
"spatial.gain": "출력",
|
||||
"spatial.roomMaterials": "방 재질",
|
||||
"spatial.roomDimensions": "방 차원",
|
||||
"spatial.roomPositions": "방 위치",
|
||||
|
@ -292,20 +323,20 @@
|
|||
"spatial.setPositions": "위치 설정",
|
||||
"spatial.up": "위",
|
||||
"spatial.front": "앞",
|
||||
"spatial.left": "왼쪽",
|
||||
"spatial.right": "오른쪽",
|
||||
"spatial.left": "좌",
|
||||
"spatial.right": "우",
|
||||
"spatial.back": "뒤",
|
||||
"spatial.down": "아래",
|
||||
"spatial.listener": "청취자",
|
||||
"spatial.audioSource": "오디오 출처",
|
||||
"spatial.listener": "사용자",
|
||||
"spatial.audioSource": "오디오 소스",
|
||||
|
||||
// Settings - Unfinished
|
||||
"settings.header.unfinished": "미완성",
|
||||
|
||||
// Web Remote
|
||||
"remote.web.title": "Cider 리모트",
|
||||
"remote.web.description": "Cider 인스턴스와 휴대 전화를 연결하려면 QR 코드를 스캔해주세요",
|
||||
"remote.web.description": "QR 코드를 스캔해서 Cider와 스마트폰을 연결하기",
|
||||
|
||||
// About
|
||||
"about.thanks": "Cider 컬렉티브 팀과 우리의 모든 기여자들께 대단히 감사를 표합니다."
|
||||
"about.thanks": "Cider Collective Team과 모든 기여자들에게 감사합니다."
|
||||
}
|
311
src/i18n/sk_SK.jsonc
Normal file
311
src/i18n/sk_SK.jsonc
Normal file
|
@ -0,0 +1,311 @@
|
|||
{ // Base File
|
||||
|
||||
// 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", // 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": "Osobný Session",
|
||||
"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": "Normal",
|
||||
"term.size.compact": "Compact",
|
||||
"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'
|
||||
"term.updateCider": "Aktualizovať Cider",
|
||||
|
||||
// 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é",
|
||||
|
||||
// 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.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",
|
||||
// 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",
|
||||
// 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é."
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
{ // Base File
|
||||
|
||||
// i18n Info
|
||||
"i18n.languageName": "Svenska (SE)", // name of language in native language
|
||||
"i18n.languageNameEnglish": "Swedish (SE)", // name of language in English
|
||||
|
@ -19,6 +18,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",
|
||||
|
@ -125,7 +125,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,6 +135,7 @@
|
|||
"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.",
|
||||
|
@ -208,6 +208,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 +225,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.",
|
||||
|
@ -276,8 +280,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",
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
{
|
||||
// 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
|
||||
|
||||
// App info
|
||||
"app.name": "Cider",
|
||||
|
||||
"date.format": "${y}年${m}月${d}日",
|
||||
|
||||
// Dialogs
|
||||
"dialog.cancel": "取消",
|
||||
"dialog.ok": "确定",
|
||||
|
@ -118,7 +118,6 @@
|
|||
"term.menu": "菜单",
|
||||
"term.check": "检查",
|
||||
"term.aboutArtist": "关于{{artistName}}", // e.g. 'About Doja Cat'
|
||||
"term.updateCider": "更新 Cider",
|
||||
|
||||
// Home
|
||||
"home.title": "主页",
|
||||
|
@ -146,7 +145,6 @@
|
|||
"podcast.playEpisode": "播放单集",
|
||||
"podcast.website": "Podcast 网站",
|
||||
|
||||
|
||||
// Actions
|
||||
"action.addToLibrary": "加入资料库",
|
||||
"action.addToLibrary.success": "成功加入资料库",
|
||||
|
@ -192,21 +190,28 @@
|
|||
"action.tray.show": "显示",
|
||||
"action.update": "更新",
|
||||
|
||||
|
||||
// Settings - Audio
|
||||
"settings.header.audio": "音频",
|
||||
"settings.header.audio.description": "调整 Cider 的音频设置",
|
||||
"settings.option.audio.quality": "音质", // Dropdown
|
||||
"settings.header.audio.quality.hireslossless": "高解析度无损",
|
||||
"settings.header.audio.quality.hireslossless.description": "(最高 24 位/192 kHz)",
|
||||
"settings.header.audio.quality.lossless": "无损",
|
||||
"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.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 的外观",
|
||||
|
@ -230,10 +235,14 @@
|
|||
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
|
||||
// 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 - General - Update Cider
|
||||
"settings.option.general.updateCider": "更新 Cider", // Button
|
||||
|
||||
// Settings - Lyrics
|
||||
"settings.header.lyrics": "歌词",
|
||||
"settings.header.lyrics.description": "调整 Cider 的歌词设置",
|
||||
|
@ -261,8 +270,8 @@
|
|||
"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": "宽度",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
|
||||
// i18n Info
|
||||
"i18n.languageName": "繁體中文(香港)", // name of language in native language
|
||||
"i18n.languageNameEnglish": "Trad. Chinese (Hong Kong)", // name of language in English
|
||||
|
@ -19,6 +18,7 @@
|
|||
"notification.updatingLibrarySongs": "正在更新資料庫的歌曲...",
|
||||
"notification.updatingLibraryAlbums": "正在更新資料庫的專輯...",
|
||||
"notification.updatingLibraryArtists": "正在更新資料庫的藝人...",
|
||||
|
||||
// Terms
|
||||
"term.appleInc": "Apple Inc.",
|
||||
"term.appleMusic": "Apple Music", // Follows brand term
|
||||
|
@ -33,6 +33,7 @@
|
|||
"term.about": "關於",
|
||||
"term.privateSession": "私人模式",
|
||||
"term.queue": "待播清單",
|
||||
"term.history": "歷史紀錄",
|
||||
"term.search": "搜尋",
|
||||
"term.library": "資料庫",
|
||||
"term.listenNow": "立即聆聽",
|
||||
|
@ -45,6 +46,11 @@
|
|||
"term.podcasts": "Podcasts",
|
||||
"term.playlists": "播放列表",
|
||||
"term.playlist": "播放列表",
|
||||
"term.newPlaylist": "新播放列表",
|
||||
"term.newPlaylistFolder": "新資料夾",
|
||||
"term.createNewPlaylist": "新增播放列表",
|
||||
"term.createNewPlaylistFolder": "新增資料夾",
|
||||
"term.deletePlaylist": "你確認要刪除這個播放列表?",
|
||||
"term.play": "播放",
|
||||
"term.pause": "暫停",
|
||||
"term.previous": "上一首",
|
||||
|
@ -55,6 +61,7 @@
|
|||
"term.mute": "靜音",
|
||||
"term.unmute": "取消靜音",
|
||||
"term.share": "分享",
|
||||
"term.share.success": "已複製至剪貼簿",
|
||||
"term.settings": "設定",
|
||||
"term.seeAll": "顯示全部",
|
||||
"term.sortBy": "排序",
|
||||
|
@ -118,7 +125,23 @@
|
|||
"term.tracks": "首歌曲", // Assume x amount of tracks. e.g. 50 tracks
|
||||
"term.videos": "影片",
|
||||
"term.menu": "選項",
|
||||
"term.showAlbum": "顯示完整的專輯",
|
||||
"term.check": "檢查",
|
||||
"term.aboutArtist": "關於 {{artistName}}", // e.g. 'About Doja Cat'
|
||||
"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.musicVideos": "MV", // Search page friendlyTypes
|
||||
"term.stations": "電台",
|
||||
//"term.curators": "Curators",
|
||||
//"term.appleCurators": "Apple Curators",
|
||||
"term.radioShows": "廣播單集",
|
||||
"term.recordLabels": "唱片公司",
|
||||
"term.videoExtras": "影片特輯",
|
||||
//"term.top": "Top",
|
||||
|
||||
// Home
|
||||
"home.title": "主頁",
|
||||
|
@ -129,6 +152,7 @@
|
|||
"home.madeForYou": "為您推薦",
|
||||
"home.friendsListeningTo": "朋友正在聆聽",
|
||||
"home.followedArtists": "追蹤的藝人",
|
||||
|
||||
// Errors
|
||||
"error.appleMusicSubRequired": "需要訂閱Apple Music以使用Cider",
|
||||
"error.connectionError": "無法連接到 Apple Music。",
|
||||
|
@ -185,6 +209,14 @@
|
|||
"action.removeTracks": "從待播清單刪除 ${self.selectedItems.length} 首歌曲",
|
||||
"action.import": "匯入",
|
||||
"action.export": "匯出",
|
||||
"action.showAlbum": "顯示完整的專輯",
|
||||
"action.tray.minimize": "縮小至系統托盤",
|
||||
"action.tray.quit": "結束",
|
||||
"action.tray.show": "顯示",
|
||||
"action.update": "更新",
|
||||
"action.copy": "複製",
|
||||
"action.newpreset": "新增範本", //Equallizer preset
|
||||
"action.deletepreset": "刪除範本",
|
||||
|
||||
// Settings - General
|
||||
"settings.header.general": "一般",
|
||||
|
@ -196,20 +228,30 @@
|
|||
"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的音訊設定",
|
||||
"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.high": "高素質",
|
||||
"settings.header.audio.quality.low": "高效率",
|
||||
"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.decryptLLPW": "無損壓縮解碼", // Toggle
|
||||
"settings.option.audio.enableAdvancedFunctionality.decryptLLPW.description": "提供 Cider 解碼無損壓縮檔案的能力,但相應地會增加電腦的工作量。",
|
||||
"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的外觀",
|
||||
|
@ -232,6 +274,11 @@
|
|||
"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": "預設",
|
||||
"settings.option.visual.theme.dark": "午夜暗",
|
||||
// Refer to term.disabled for the disabled option
|
||||
"settings.option.visual.showPersonalInfo": "顯示個人檔案", // Toggle
|
||||
|
||||
|
@ -252,24 +299,24 @@
|
|||
"settings.header.connectivity.discordRPC.cider": "顯示為'Cider'",
|
||||
"settings.header.connectivity.discordRPC.appleMusic": "顯示為'Apple Music'",
|
||||
"settings.option.connectivity.discordRPC.clearOnPause": "暫停時清除 Discord 狀態", // Toggle
|
||||
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling 記錄", // Option to Connect
|
||||
"settings.option.connectivity.lastfmScrobble.delay": "LastFM Scrobble 延遲 (%)",
|
||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "啟用 LastFM 正在播放",
|
||||
"settings.option.connectivity.lastfmScrobble.removeFeatured": "從歌名中移除藝人推薦 (LastFM)",
|
||||
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filter looped track (LastFM)",
|
||||
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling 記錄", // Option to Connect
|
||||
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble 延遲 (%)",
|
||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "啟用 Last.fm 正在播放",
|
||||
"settings.option.connectivity.lastfmScrobble.removeFeatured": "從歌名中移除藝人推薦 (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": "實驗性功能",
|
||||
"settings.header.experimental.description": "調整Cider的實驗性功能",
|
||||
"settings.option.experimental.compactUI": "緊凑型 UI", // Toggle
|
||||
"settings.option.experimental.closeButtonBehaviour": "關閉按鈕行為",
|
||||
"settings.option.experimental.closeButtonBehaviour.quit": "結束 Cider",
|
||||
"settings.option.experimental.closeButtonBehaviour.minimizeTaskbar": "縮小至工作列",
|
||||
"settings.option.experimental.closeButtonBehaviour.minimizeTray": "縮小至系統托盤",
|
||||
// Refer to term.disabled & term.enabled
|
||||
"settings.option.experimental.close_button_hide": "以關閉按鈕來隱藏 Cider",
|
||||
"settings.option.experimental.copy_log": "複製運行記錄檔至剪貼簿",
|
||||
//"settings.option.experimental.inline_playlists": "Inline Playlists and Albums",
|
||||
|
||||
// Refer to term.disabled & term.enabled
|
||||
// Spatialization Menu
|
||||
"spatial.notTurnedOn": "請先在設定中啟用空間音訊。",
|
||||
"spatial.spatialProperties": "空間音訊屬性",
|
||||
"spatial.width": "闊度",
|
||||
"spatial.height": "高度",
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
{
|
||||
// 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
|
||||
"i18n.authors": "@maikirakiwi @jay900604", // 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}日",
|
||||
|
||||
// Dialogs
|
||||
"dialog.cancel": "取消",
|
||||
|
@ -19,6 +18,7 @@
|
|||
"notification.updatingLibrarySongs": "正在更新資料庫的歌曲...",
|
||||
"notification.updatingLibraryAlbums": "正在更新資料庫的專輯...",
|
||||
"notification.updatingLibraryArtists": "正在更新資料庫的藝人...",
|
||||
|
||||
// Terms
|
||||
"term.appleMusic": "Apple Music", // Follows brand term
|
||||
"term.applePodcasts": "Apple Podcasts", // Follows brand term
|
||||
|
@ -54,6 +54,7 @@
|
|||
"term.mute": "靜音",
|
||||
"term.unmute": "取消靜音",
|
||||
"term.share": "分享",
|
||||
"term.share.success": "已複製至剪貼簿",
|
||||
"term.settings": "設定",
|
||||
"term.seeAll": "顯示全部",
|
||||
"term.sortBy": "排序",
|
||||
|
@ -71,7 +72,7 @@
|
|||
"term.viewAs.list": "列表",
|
||||
"term.size": "大小",
|
||||
"term.size.normal": "正常",
|
||||
"term.size.compact": "緊凑",
|
||||
"term.size.compact": "緊密",
|
||||
"term.enable": "啟用",
|
||||
"term.disable": "停用",
|
||||
"term.enabled": "已啟用",
|
||||
|
@ -96,18 +97,18 @@
|
|||
"term.time.minute": "分鐘",
|
||||
"term.time.seconds": "秒",
|
||||
"term.time.second": "秒",
|
||||
"term.fullscreenView": "全螢幕顯示歌詞",
|
||||
"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.socials": "社群",
|
||||
"term.sponsor": "贊助我們",
|
||||
"term.socials": "社群平台",
|
||||
"term.ciderTeam": "Cider 團隊",
|
||||
"term.developer": "開發者",
|
||||
"term.socialTeam": "公關團隊",
|
||||
|
@ -119,7 +120,6 @@
|
|||
"term.menu": "選單",
|
||||
"term.check": "檢查",
|
||||
"term.aboutArtist": "關於{{artistName}}", // e.g. 'About Doja Cat'
|
||||
"term.updateCider": "更新 Cider",
|
||||
|
||||
// Home
|
||||
"home.title": "首頁",
|
||||
|
@ -130,9 +130,10 @@
|
|||
"home.madeForYou": "為您推薦",
|
||||
"home.friendsListeningTo": "朋友正在聆聽",
|
||||
"home.followedArtists": "追蹤的藝人",
|
||||
|
||||
// Errors
|
||||
"error.appleMusicSubRequired": "需要訂閱 Apple Music 以使用 Cider",
|
||||
"error.connectionError": "無法連線到 Apple Music。",
|
||||
"error.connectionError": "無法連接到 Apple Music。",
|
||||
"error.noResults": "沒有結果",
|
||||
"error.noResults.description": "嘗試新的搜尋項目。",
|
||||
|
||||
|
@ -190,12 +191,18 @@
|
|||
"action.tray.quit": "關閉",
|
||||
"action.tray.show": "顯示",
|
||||
"action.update": "更新",
|
||||
"action.copy": "複製",
|
||||
"action.newpreset": "新增預設", // Equalizer Preset
|
||||
"action.deletepreset": "刪除預設", // Equalizer Preset
|
||||
|
||||
// Language optgroups
|
||||
"settings.option.general.language.main": "語言",
|
||||
"settings.option.general.language.fun": "惡搞語言",
|
||||
"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 的音訊設定",
|
||||
|
@ -204,18 +211,23 @@
|
|||
"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.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.decryptLLPW": "無損壓縮解碼", // Toggle
|
||||
"settings.option.audio.enableAdvancedFunctionality.decryptLLPW.description": "提供 Cider 解碼無損壓縮檔案的能力,但相對應的也會提升對電腦效能的使用率。",
|
||||
"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.audioNormalization.description": "將平衡輕柔和響亮的歌曲,建立更統一舒適的聆聽體驗。",
|
||||
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "空間音訊", // Toggle
|
||||
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "將音訊進行空間化處理來製造一個更立體的聆聽體驗(註:此功能不是官方的杜比全景聲)。",
|
||||
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "將音訊進行空間化處理來製造一個更立體的聆聽體驗(註:此功能不是官方的杜比全景聲)",
|
||||
|
||||
// Settings - Visual
|
||||
"settings.header.visual": "外觀",
|
||||
|
@ -223,6 +235,7 @@
|
|||
"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": "只在藝人頁面和專輯封面顯示",
|
||||
|
@ -238,7 +251,10 @@
|
|||
"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
|
||||
|
||||
|
@ -258,6 +274,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 +288,16 @@
|
|||
// Settings - Experimental
|
||||
"settings.header.experimental": "實驗性功能",
|
||||
"settings.header.experimental.description": "調整 Cider 的實驗性功能",
|
||||
"settings.option.experimental.compactUI": "緊凑的介面", // 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.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 +306,7 @@
|
|||
"spatial.roomDimensions" : "空間尺寸",
|
||||
"spatial.roomPositions" : "空間位置",
|
||||
"spatial.setDimensions" : "設定尺寸",
|
||||
"spatial.setPositions" : "設定位置",
|
||||
"spatial.setPositions" : "套用設定",
|
||||
"spatial.up" : "上",
|
||||
"spatial.front" : "前",
|
||||
"spatial.left" : "左",
|
||||
|
@ -297,7 +317,7 @@
|
|||
"spatial.audioSource" : "音訊來源",
|
||||
|
||||
// Settings - Unfinished
|
||||
"settings.header.unfinished": "未完成",
|
||||
"settings.header.unfinished": "未開發完成的功能",
|
||||
|
||||
// Web Remote
|
||||
"remote.web.title": "Cider 遠端操控",
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
{
|
||||
|
||||
// i18n Info
|
||||
"i18n.languageName": "廣東話(香港﹚", // name of language in native language
|
||||
"i18n.languageName": "廣東話(香港)", // name of language in native language
|
||||
"i18n.languageNameEnglish": "Cantonese (Hong Kong)", // name of language in English
|
||||
"i18n.category": "main", // main = real language, fun = fun community languages
|
||||
"i18n.authors": "@tszngaiyip @strikesnc", // Authors, if you contribute to this file feel free to add your name seperated with a space
|
||||
|
@ -19,6 +18,7 @@
|
|||
"notification.updatingLibrarySongs": "更新緊資料庫嘅歌曲...",
|
||||
"notification.updatingLibraryAlbums": "更新緊資料庫嘅專輯...",
|
||||
"notification.updatingLibraryArtists": "更新緊資料庫嘅藝人...",
|
||||
|
||||
// Terms
|
||||
"term.appleInc": "Apple Inc.",
|
||||
"term.appleMusic": "Apple Music",
|
||||
|
@ -33,6 +33,7 @@
|
|||
"term.about": "關於",
|
||||
"term.privateSession": "無痕模式",
|
||||
"term.queue": "待播清單",
|
||||
"term.history": "播放歷史",
|
||||
"term.search": "搵野",
|
||||
"term.library": "資料庫",
|
||||
"term.listenNow": "即刻聽",
|
||||
|
@ -45,6 +46,11 @@
|
|||
"term.podcasts": "Podcasts",
|
||||
"term.playlists": "播放清單",
|
||||
"term.playlist": "播放清單",
|
||||
"term.newPlaylist": "新播放清單",
|
||||
"term.newPlaylistFolder": "新資料夾",
|
||||
"term.createNewPlaylist": "新增播放清單",
|
||||
"term.createNewPlaylistFolder": "新增資料夾",
|
||||
"term.deletePlaylist": "你係咪要刪除呢個播放清單?",
|
||||
"term.play": "播放",
|
||||
"term.pause": "暫停",
|
||||
"term.previous": "前一首",
|
||||
|
@ -55,6 +61,7 @@
|
|||
"term.mute": "靜音",
|
||||
"term.unmute": "取消靜音",
|
||||
"term.share": "分享",
|
||||
"term.share.success": "複製咗喺剪貼簿",
|
||||
"term.settings": "設定",
|
||||
"term.seeAll": "睇哂全部",
|
||||
"term.sortBy": "排序",
|
||||
|
@ -118,7 +125,23 @@
|
|||
"term.tracks": "首歌", // Assume x amount of tracks. e.g. 50 tracks
|
||||
"term.videos": "影片",
|
||||
"term.menu": "選項",
|
||||
"term.showAlbum": "顯示完整嘅專輯",
|
||||
"term.check": "檢查",
|
||||
"term.aboutArtist": "關於 {{artistName}}", // e.g. 'About Doja Cat'
|
||||
"term.topResult": "熱門搜尋結果", // Search Results
|
||||
"term.sharedPlaylists": "播放清單", // Search Results
|
||||
"term.people": "個人檔案", // Search Results
|
||||
"term.newpreset.name": "新EQ範本嘅名", // Equalizer Preset
|
||||
"term.addedpreset": "新增咗",
|
||||
"term.deletepreset.warn": "你係咪要刪除呢個範本?",
|
||||
"term.deletedpreset": "刪除咗",
|
||||
"term.musicVideos": "MV", // Search page friendlyTypes
|
||||
"term.stations": "電台",
|
||||
//"term.curators": "Curators",
|
||||
//"term.appleCurators": "Apple Curators",
|
||||
"term.radioShows": "電台單集",
|
||||
"term.recordLabels": "唱片公司",
|
||||
"term.videoExtras": "相關嘅片",
|
||||
//"term.top": "Top",
|
||||
|
||||
// Home
|
||||
"home.title": "主頁",
|
||||
|
@ -129,6 +152,7 @@
|
|||
"home.madeForYou": "為你而整",
|
||||
"home.friendsListeningTo": "你啲Friend聽緊",
|
||||
"home.followedArtists": "Follow左嘅藝人",
|
||||
|
||||
// Errors
|
||||
"error.appleMusicSubRequired": "需要訂閱Apple Music先可以用Cider。",
|
||||
"error.connectionError": "連接唔到Apple Music。",
|
||||
|
@ -185,6 +209,14 @@
|
|||
"action.removeTracks": "喺待播清單到刪除 ${self.selectedItems.length} 首歌曲",
|
||||
"action.import": "匯入",
|
||||
"action.export": "匯出",
|
||||
"action.showAlbum": "顯示完整嘅專輯",
|
||||
"action.tray.minimize": "收埋喺系統托盤",
|
||||
"action.tray.quit": "結束",
|
||||
"action.tray.show": "顯示",
|
||||
"action.update": "更新",
|
||||
"action.copy": "複製",
|
||||
"action.newpreset": "新增範本", // Equalizer Preset
|
||||
"action.deletepreset": "刪除範本",
|
||||
|
||||
// Settings - General
|
||||
"settings.header.general": "一般",
|
||||
|
@ -196,6 +228,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嘅音訊設定",
|
||||
|
@ -210,6 +245,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嘅外觀",
|
||||
|
@ -232,6 +268,11 @@
|
|||
"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": "預設",
|
||||
"settings.option.visual.theme.dark": "黑色",
|
||||
// Refer to term.disabled for the disabled option
|
||||
"settings.option.visual.showPersonalInfo": "顯示個人檔案", // Toggle
|
||||
|
||||
|
@ -252,24 +293,24 @@
|
|||
"settings.header.connectivity.discordRPC.cider": "顯示為'Cider'",
|
||||
"settings.header.connectivity.discordRPC.appleMusic": "顯示為'Apple Music'",
|
||||
"settings.option.connectivity.discordRPC.clearOnPause": "暫停時清除 Discord 狀態", // Toggle
|
||||
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling 記錄", // Option to Connect
|
||||
"settings.option.connectivity.lastfmScrobble.delay": "LastFM Scrobble 延遲 (%)",
|
||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "啟用 LastFM 正在播放",
|
||||
"settings.option.connectivity.lastfmScrobble.removeFeatured": "從歌名中移除藝人推薦 (LastFM)",
|
||||
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filter looped track (LastFM)",
|
||||
"settings.option.connectivity.lastfmScrobble": "Last.FM Scrobbling 記錄", // Option to Connect
|
||||
"settings.option.connectivity.lastfmScrobble.delay": "Last.FM Scrobble 延遲 (%)",
|
||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "啟用 Last.FM 正在播放",
|
||||
"settings.option.connectivity.lastfmScrobble.removeFeatured": "從歌名中移除藝人推薦 (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": "實驗性功能",
|
||||
"settings.header.experimental.description": "調整Cider嘅實驗性功能",
|
||||
"settings.option.experimental.compactUI": "逼啲既 UI", // Toggle
|
||||
"settings.option.experimental.closeButtonBehaviour": "關閉按鈕行為",
|
||||
"settings.option.experimental.closeButtonBehaviour.quit": "熄左Cider佢",
|
||||
"settings.option.experimental.closeButtonBehaviour.minimizeTaskbar": "收埋Cider喺工作列",
|
||||
"settings.option.experimental.closeButtonBehaviour.minimizeTray": "收埋Cider喺系統托盤",
|
||||
// Refer to term.disabled & term.enabled
|
||||
"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
|
||||
// Spatialization Menu
|
||||
"spatial.notTurnedOn": "唔該喺設定入面啟用左空間音訊先。",
|
||||
"spatial.spatialProperties": "空間音訊屬性",
|
||||
"spatial.width": "幾闊",
|
||||
"spatial.height": "幾高",
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import {app, Menu, nativeImage, Tray} from 'electron';
|
||||
import {app, Menu, nativeImage, Tray, ipcMain, clipboard, shell} from 'electron';
|
||||
import {readFileSync} from "fs";
|
||||
import * as path from 'path';
|
||||
import {utils} from './utils'
|
||||
import * as log from 'electron-log';
|
||||
import {utils} from './utils';
|
||||
|
||||
export class AppEvents {
|
||||
private protocols: string[] = [
|
||||
|
@ -24,6 +26,7 @@ export class AppEvents {
|
|||
* @returns {void}
|
||||
*/
|
||||
private start(): void {
|
||||
AppEvents.initLogging()
|
||||
console.info('[AppEvents] App started');
|
||||
|
||||
/**********************************************************************************************************************
|
||||
|
@ -169,6 +172,18 @@ export class AppEvents {
|
|||
let url = arg.split('//')[1]
|
||||
console.warn(`[LinkHandler] Attempting to load url: ${url}`);
|
||||
utils.getWindow().webContents.send('play', 'url', url)
|
||||
} else if (arg.includes('/debug/appdata')) {
|
||||
shell.openPath(app.getPath('userData'))
|
||||
} else if (arg.includes('/debug/logs')) {
|
||||
shell.openPath(app.getPath('logs'))
|
||||
} else if (arg.includes('/discord')) {
|
||||
shell.openExternal('https://discord.gg/applemusic')
|
||||
} else if (arg.includes('/github')) {
|
||||
shell.openExternal('https://github.com/ciderapp/cider')
|
||||
} else if (arg.includes('/donate')) {
|
||||
shell.openExternal('https://opencollective.com/ciderapp')
|
||||
} else if (arg.includes('/beep')) {
|
||||
shell.beep()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -264,7 +279,7 @@ export class AppEvents {
|
|||
|
||||
const menu = Menu.buildFromTemplate([
|
||||
{
|
||||
label: (visible ? this.i18n['action.tray.minimize'] : this.i18n['action.tray.show'].includes("{appName}") ? `${this.i18n['action.tray.show'].replace("{appName}", app.getName())}` : `${this.i18n['action.tray.show']} ${app.getName()}`),
|
||||
label: (visible ? this.i18n['action.tray.minimize'] : `${this.i18n['action.tray.show']} ${app.getName()}`),
|
||||
click: () => {
|
||||
if (utils.getWindow()) {
|
||||
if (visible) {
|
||||
|
@ -284,4 +299,18 @@ export class AppEvents {
|
|||
])
|
||||
this.tray.setContextMenu(menu)
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes logging in the application
|
||||
* @private
|
||||
*/
|
||||
private static initLogging() {
|
||||
log.transports.console.format = '[{h}:{i}:{s}.{ms}] [{level}] {text}';
|
||||
Object.assign(console, log.functions);
|
||||
|
||||
ipcMain.on('fetch-log', (_event) => {
|
||||
const data = readFileSync(log.transports.file.getFile().path, {encoding: 'utf8', flag: 'r'});
|
||||
clipboard.writeText(data)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,31 +1,24 @@
|
|||
import * as path from "path";
|
||||
import {app, BrowserWindow as bw, ipcMain, shell} from "electron";
|
||||
import {join} from "path";
|
||||
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 * as yt from "youtube-search-without-api-key";
|
||||
import * as fs from "fs";
|
||||
import {search} from "youtube-search-without-api-key";
|
||||
import {existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync} from "fs";
|
||||
import {Stream} from "stream";
|
||||
import * as qrcode from "qrcode-terminal";
|
||||
import * as os 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 {NsisUpdater} from "electron-updater";
|
||||
import {utils} from './utils'
|
||||
import {AppImageUpdater, NsisUpdater} from "electron-updater";
|
||||
import {utils} from './utils';
|
||||
|
||||
|
||||
export class BrowserWindow {
|
||||
public static win: any | undefined = null;
|
||||
private devMode: boolean = !app.isPackaged;
|
||||
|
||||
private paths: any = {
|
||||
srcPath: path.join(__dirname, "../../src"),
|
||||
resourcePath: path.join(__dirname, "../../resources"),
|
||||
ciderCache: path.resolve(app.getPath("userData"), "CiderCache"),
|
||||
themes: path.resolve(app.getPath("userData"), "Themes"),
|
||||
plugins: path.resolve(app.getPath("userData"), "Plugins"),
|
||||
};
|
||||
private audioStream: any = new Stream.PassThrough();
|
||||
private clientPort: number = 0;
|
||||
private remotePort: number = 6942;
|
||||
|
@ -33,11 +26,55 @@ export class BrowserWindow {
|
|||
env: {
|
||||
platform: process.platform,
|
||||
dev: app.isPackaged,
|
||||
components: [
|
||||
"pages/podcasts",
|
||||
"pages/apple-account-settings",
|
||||
"pages/library-songs",
|
||||
"pages/browse",
|
||||
"pages/settings",
|
||||
"pages/listen_now",
|
||||
"pages/home",
|
||||
"pages/artist-feed",
|
||||
"pages/cider-playlist",
|
||||
"pages/playlist-inline",
|
||||
"pages/recordLabel",
|
||||
"pages/collection-list",
|
||||
"pages/apple-curator",
|
||||
"pages/artist",
|
||||
"pages/search",
|
||||
"pages/about",
|
||||
"pages/library-videos",
|
||||
"components/mediaitem-artwork",
|
||||
"components/artwork-material",
|
||||
"components/menu-panel",
|
||||
"components/sidebar-playlist",
|
||||
"components/spatial-properties",
|
||||
"components/audio-settings",
|
||||
"components/qrcode-modal",
|
||||
"components/equalizer",
|
||||
"components/add-to-playlist",
|
||||
"components/queue",
|
||||
"components/mediaitem-scroller-horizontal",
|
||||
"components/mediaitem-scroller-horizontal-large",
|
||||
"components/mediaitem-scroller-horizontal-sp",
|
||||
"components/mediaitem-scroller-horizontal-mvview",
|
||||
"components/mediaitem-list-item",
|
||||
"components/mediaitem-hrect",
|
||||
"components/mediaitem-square",
|
||||
"components/mediaitem-mvview",
|
||||
"components/libraryartist-item",
|
||||
"components/listennow-child",
|
||||
"components/mediaitem-mvview-sp",
|
||||
"components/animatedartwork-view",
|
||||
"components/lyrics-view",
|
||||
"components/fullscreen",
|
||||
"components/miniplayer",
|
||||
]
|
||||
},
|
||||
};
|
||||
private options: any = {
|
||||
icon: path.join(
|
||||
this.paths.resourcePath,
|
||||
icon: join(
|
||||
utils.getPath('resourcePath'),
|
||||
`icons/icon.` + (process.platform === "win32" ? "ico" : "png")
|
||||
),
|
||||
width: 1024,
|
||||
|
@ -48,11 +85,13 @@ export class BrowserWindow {
|
|||
minHeight: 390,
|
||||
frame: false,
|
||||
title: "Cider",
|
||||
vibrancy: "dark",
|
||||
vibrancy: "fullscreen-ui",
|
||||
transparent: process.platform === "darwin",
|
||||
hasShadow: false,
|
||||
show: false,
|
||||
backgroundColor: "#1E1E1E",
|
||||
titleBarStyle: 'hidden',
|
||||
trafficLightPosition: {x: 15, y: 20},
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
sandbox: true,
|
||||
|
@ -62,7 +101,7 @@ export class BrowserWindow {
|
|||
plugins: true,
|
||||
nodeIntegrationInWorker: false,
|
||||
webSecurity: false,
|
||||
preload: path.join(this.paths.srcPath, "./preload/cider-preload.js"),
|
||||
preload: join(utils.getPath('srcPath'), "./preload/cider-preload.js"),
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -71,7 +110,7 @@ export class BrowserWindow {
|
|||
*/
|
||||
async createWindow(): Promise<Electron.BrowserWindow> {
|
||||
this.clientPort = await getPort({port: 9000});
|
||||
this.verifyFiles();
|
||||
BrowserWindow.verifyFiles();
|
||||
|
||||
// Load the previous state with fallback to defaults
|
||||
const windowState = windowStateKeeper({
|
||||
|
@ -101,7 +140,7 @@ export class BrowserWindow {
|
|||
/**
|
||||
* Verifies the files for the renderer to use (Cache, library info, etc.)
|
||||
*/
|
||||
private verifyFiles(): void {
|
||||
private static verifyFiles(): void {
|
||||
const expectedDirectories = ["CiderCache"];
|
||||
const expectedFiles = [
|
||||
"library-songs.json",
|
||||
|
@ -112,19 +151,19 @@ export class BrowserWindow {
|
|||
];
|
||||
for (let i = 0; i < expectedDirectories.length; i++) {
|
||||
if (
|
||||
!fs.existsSync(
|
||||
path.join(app.getPath("userData"), expectedDirectories[i])
|
||||
!existsSync(
|
||||
join(app.getPath("userData"), expectedDirectories[i])
|
||||
)
|
||||
) {
|
||||
fs.mkdirSync(
|
||||
path.join(app.getPath("userData"), expectedDirectories[i])
|
||||
mkdirSync(
|
||||
join(app.getPath("userData"), expectedDirectories[i])
|
||||
);
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < expectedFiles.length; i++) {
|
||||
const file = path.join(this.paths.ciderCache, expectedFiles[i]);
|
||||
if (!fs.existsSync(file)) {
|
||||
fs.writeFileSync(file, JSON.stringify([]));
|
||||
const file = join(utils.getPath('ciderCache'), expectedFiles[i]);
|
||||
if (!existsSync(file)) {
|
||||
writeFileSync(file, JSON.stringify([]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -135,8 +174,8 @@ export class BrowserWindow {
|
|||
private startWebServer(): void {
|
||||
const app = express();
|
||||
|
||||
app.use(express.static(path.join(this.paths.srcPath, "./renderer/")));
|
||||
app.set("views", path.join(this.paths.srcPath, "./renderer/views"));
|
||||
app.use(express.static(join(utils.getPath('srcPath'), "./renderer/")));
|
||||
app.set("views", join(utils.getPath('srcPath'), "./renderer/views"));
|
||||
app.set("view engine", "ejs");
|
||||
let firstRequest = true;
|
||||
app.use((req, res, next) => {
|
||||
|
@ -155,6 +194,53 @@ export class BrowserWindow {
|
|||
res.render("main", this.EnvironmentVariables);
|
||||
});
|
||||
|
||||
app.get("/api/playback/:action", (req, res) => {
|
||||
const action = req.params.action;
|
||||
switch (action) {
|
||||
case "playpause":
|
||||
BrowserWindow.win.webContents.executeJavaScript("wsapi.togglePlayPause()")
|
||||
res.send("Play/Pause toggle")
|
||||
break;
|
||||
case "play":
|
||||
BrowserWindow.win.webContents.executeJavaScript("MusicKit.getInstance().play()")
|
||||
res.send("Playing")
|
||||
break;
|
||||
case "pause":
|
||||
BrowserWindow.win.webContents.executeJavaScript("MusicKit.getInstance().pause()")
|
||||
res.send("Paused")
|
||||
break;
|
||||
case "stop":
|
||||
BrowserWindow.win.webContents.executeJavaScript("MusicKit.getInstance().stop()")
|
||||
res.send("Stopped")
|
||||
break;
|
||||
case "next":
|
||||
BrowserWindow.win.webContents.executeJavaScript("MusicKit.getInstance().skipToNextItem()")
|
||||
res.send("Next")
|
||||
break;
|
||||
case "previous":
|
||||
BrowserWindow.win.webContents.executeJavaScript("MusicKit.getInstance().skipToPreviousItem()")
|
||||
res.send("Previous")
|
||||
break;
|
||||
default: {
|
||||
res.send("Invalid action")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
app.get("/themes/:theme", (req, res) => {
|
||||
const theme = req.params.theme.toLowerCase();
|
||||
const themePath = join(utils.getPath('srcPath'), "./renderer/themes/", theme);
|
||||
const userThemePath = join(utils.getPath('themes'), theme);
|
||||
if (existsSync(userThemePath)) {
|
||||
res.sendFile(userThemePath);
|
||||
} else if (existsSync(themePath)) {
|
||||
res.sendFile(themePath);
|
||||
} else {
|
||||
res.send(`// Theme not found - ${userThemePath}`);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
app.get("/audio.webm", (req, res) => {
|
||||
try {
|
||||
req.socket.setTimeout(Number.MAX_SAFE_INTEGER);
|
||||
|
@ -183,13 +269,12 @@ export class BrowserWindow {
|
|||
});
|
||||
|
||||
/*
|
||||
* Remote Client (I had no idea how to add it to our existing express server, so I just made another one) -@quacksire
|
||||
* TODO: Broadcast the remote so that /web-remote/ can connect
|
||||
* https://github.com/ciderapp/Apple-Music-Electron/blob/818ed18940ff600d76eb59d22016723a75885cd5/resources/functions/handler.js#L1173
|
||||
* Remote Client -@quacksire
|
||||
* https://github.com/ciderapp/Apple-Music-Electron/blob/818189ed40ff600d76eb59d22016723a75885cd5/resources/functions/handler.js#L1173
|
||||
*/
|
||||
const remote = express();
|
||||
remote.use(express.static(path.join(this.paths.srcPath, "./web-remote/")))
|
||||
remote.set("views", path.join(this.paths.srcPath, "./web-remote/views"));
|
||||
remote.use(express.static(join(utils.getPath('srcPath'), "./web-remote/")))
|
||||
remote.set("views", join(utils.getPath('srcPath'), "./web-remote/views"));
|
||||
remote.set("view engine", "ejs");
|
||||
getPort({port: 6942}).then((port) => {
|
||||
this.remotePort = port;
|
||||
|
@ -197,17 +282,6 @@ export class BrowserWindow {
|
|||
this.broadcastRemote()
|
||||
remote.listen(this.remotePort, () => {
|
||||
console.log(`Cider remote port: ${this.remotePort}`);
|
||||
if (firstRequest) {
|
||||
console.log("---- Ignore Me ;) ---");
|
||||
qrcode.generate(`http://${os.hostname}:${this.remotePort}`);
|
||||
console.log("---- Ignore Me ;) ---");
|
||||
/*
|
||||
*
|
||||
* USING https://www.npmjs.com/package/qrcode-terminal for terminal
|
||||
* WE SHOULD USE https://www.npmjs.com/package/qrcode for the remote (or others) for showing to user via an in-app dialog
|
||||
* -@quacksire
|
||||
*/
|
||||
}
|
||||
firstRequest = false;
|
||||
})
|
||||
remote.get("/", (_req, res) => {
|
||||
|
@ -281,16 +355,24 @@ export class BrowserWindow {
|
|||
event.returnValue = process.platform;
|
||||
});
|
||||
|
||||
ipcMain.on("get-themes", (event, _key) => {
|
||||
if (existsSync(utils.getPath("themes"))) {
|
||||
event.returnValue = readdirSync(utils.getPath("themes"));
|
||||
} else {
|
||||
event.returnValue = [];
|
||||
}
|
||||
});
|
||||
|
||||
ipcMain.on("get-i18n", (event, key) => {
|
||||
event.returnValue = utils.getLocale(key);
|
||||
});
|
||||
|
||||
ipcMain.on("get-i18n-listing", event => {
|
||||
let i18nFiles = fs.readdirSync(path.join(__dirname, "../../src/i18n")).filter(file => file.endsWith(".jsonc"));
|
||||
let i18nFiles = readdirSync(join(__dirname, "../../src/i18n")).filter(file => file.endsWith(".jsonc"));
|
||||
// read all the files and parse them
|
||||
let i18nListing = []
|
||||
for (let i = 0; i < i18nFiles.length; i++) {
|
||||
const i18n: { [index: string]: Object } = jsonc.parse(fs.readFileSync(path.join(__dirname, `../../src/i18n/${i18nFiles[i]}`), "utf8"));
|
||||
const i18n: { [index: string]: Object } = jsonc.parse(readFileSync(join(__dirname, `../../src/i18n/${i18nFiles[i]}`), "utf8"));
|
||||
i18nListing.push({
|
||||
"code": i18nFiles[i].replace(".jsonc", ""),
|
||||
"nameNative": i18n["i18n.languageName"] ?? i18nFiles[i].replace(".jsonc", ""),
|
||||
|
@ -311,75 +393,75 @@ export class BrowserWindow {
|
|||
});
|
||||
|
||||
ipcMain.on("put-library-songs", (_event, arg) => {
|
||||
fs.writeFileSync(
|
||||
path.join(this.paths.ciderCache, "library-songs.json"),
|
||||
writeFileSync(
|
||||
join(utils.getPath('ciderCache'), "library-songs.json"),
|
||||
JSON.stringify(arg)
|
||||
);
|
||||
});
|
||||
|
||||
ipcMain.on("put-library-artists", (_event, arg) => {
|
||||
fs.writeFileSync(
|
||||
path.join(this.paths.ciderCache, "library-artists.json"),
|
||||
writeFileSync(
|
||||
join(utils.getPath('ciderCache'), "library-artists.json"),
|
||||
JSON.stringify(arg)
|
||||
);
|
||||
});
|
||||
|
||||
ipcMain.on("put-library-albums", (_event, arg) => {
|
||||
fs.writeFileSync(
|
||||
path.join(this.paths.ciderCache, "library-albums.json"),
|
||||
writeFileSync(
|
||||
join(utils.getPath('ciderCache'), "library-albums.json"),
|
||||
JSON.stringify(arg)
|
||||
);
|
||||
});
|
||||
|
||||
ipcMain.on("put-library-playlists", (_event, arg) => {
|
||||
fs.writeFileSync(
|
||||
path.join(this.paths.ciderCache, "library-playlists.json"),
|
||||
writeFileSync(
|
||||
join(utils.getPath('ciderCache'), "library-playlists.json"),
|
||||
JSON.stringify(arg)
|
||||
);
|
||||
});
|
||||
|
||||
ipcMain.on("put-library-recentlyAdded", (_event, arg) => {
|
||||
fs.writeFileSync(
|
||||
path.join(this.paths.ciderCache, "library-recentlyAdded.json"),
|
||||
writeFileSync(
|
||||
join(utils.getPath('ciderCache'), "library-recentlyAdded.json"),
|
||||
JSON.stringify(arg)
|
||||
);
|
||||
});
|
||||
|
||||
ipcMain.on("get-library-songs", (event) => {
|
||||
let librarySongs = fs.readFileSync(
|
||||
path.join(this.paths.ciderCache, "library-songs.json"),
|
||||
let librarySongs = readFileSync(
|
||||
join(utils.getPath('ciderCache'), "library-songs.json"),
|
||||
"utf8"
|
||||
);
|
||||
event.returnValue = JSON.parse(librarySongs);
|
||||
});
|
||||
|
||||
ipcMain.on("get-library-artists", (event) => {
|
||||
let libraryArtists = fs.readFileSync(
|
||||
path.join(this.paths.ciderCache, "library-artists.json"),
|
||||
let libraryArtists = readFileSync(
|
||||
join(utils.getPath('ciderCache'), "library-artists.json"),
|
||||
"utf8"
|
||||
);
|
||||
event.returnValue = JSON.parse(libraryArtists);
|
||||
});
|
||||
|
||||
ipcMain.on("get-library-albums", (event) => {
|
||||
let libraryAlbums = fs.readFileSync(
|
||||
path.join(this.paths.ciderCache, "library-albums.json"),
|
||||
let libraryAlbums = readFileSync(
|
||||
join(utils.getPath('ciderCache'), "library-albums.json"),
|
||||
"utf8"
|
||||
);
|
||||
event.returnValue = JSON.parse(libraryAlbums);
|
||||
});
|
||||
|
||||
ipcMain.on("get-library-playlists", (event) => {
|
||||
let libraryPlaylists = fs.readFileSync(
|
||||
path.join(this.paths.ciderCache, "library-playlists.json"),
|
||||
let libraryPlaylists = readFileSync(
|
||||
join(utils.getPath('ciderCache'), "library-playlists.json"),
|
||||
"utf8"
|
||||
);
|
||||
event.returnValue = JSON.parse(libraryPlaylists);
|
||||
});
|
||||
|
||||
ipcMain.on("get-library-recentlyAdded", (event) => {
|
||||
let libraryRecentlyAdded = fs.readFileSync(
|
||||
path.join(this.paths.ciderCache, "library-recentlyAdded.json"),
|
||||
let libraryRecentlyAdded = readFileSync(
|
||||
join(utils.getPath('ciderCache'), "library-recentlyAdded.json"),
|
||||
"utf8"
|
||||
);
|
||||
event.returnValue = JSON.parse(libraryRecentlyAdded);
|
||||
|
@ -387,14 +469,14 @@ export class BrowserWindow {
|
|||
|
||||
ipcMain.handle("getYTLyrics", async (_event, track, artist) => {
|
||||
const u = track + " " + artist + " official video";
|
||||
return await yt.search(u);
|
||||
return await search(u);
|
||||
});
|
||||
|
||||
ipcMain.on("close", () => {
|
||||
ipcMain.on("close", (_event) => {
|
||||
BrowserWindow.win.close();
|
||||
});
|
||||
|
||||
ipcMain.on("maximize", () => {
|
||||
ipcMain.on("maximize", (_event) => {
|
||||
// listen for maximize event
|
||||
if (BrowserWindow.win.isMaximized()) {
|
||||
BrowserWindow.win.unmaximize();
|
||||
|
@ -447,14 +529,23 @@ export class BrowserWindow {
|
|||
MusicKit.getInstance().play();
|
||||
});
|
||||
`)
|
||||
})
|
||||
});
|
||||
|
||||
//QR Code
|
||||
ipcMain.handle('showQR', async (event, _) => {
|
||||
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}`);
|
||||
}
|
||||
// Get previews for normalization
|
||||
ipcMain.on("getPreviewURL", (_event, url) => {
|
||||
|
||||
|
@ -470,15 +561,45 @@ export class BrowserWindow {
|
|||
});
|
||||
});
|
||||
|
||||
ipcMain.on('check-for-update', async (_event, url) => {
|
||||
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}`
|
||||
}
|
||||
const autoUpdater = new NsisUpdater(options) //Windows Only (for now) -q
|
||||
await autoUpdater.checkForUpdatesAndNotify()
|
||||
/*
|
||||
* Have to handle the auto updaters seperatly until we can support macOS. electron-builder limitation -q
|
||||
*/
|
||||
const win_autoUpdater = new NsisUpdater(options) //Windows
|
||||
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;
|
||||
//https://www.electronjs.org/docs/latest/api/share-menu
|
||||
console.log('[Share Sheet - App.ts]', url)
|
||||
const options = {
|
||||
title: 'Share',
|
||||
urls: [url]
|
||||
};
|
||||
// @ts-ignore
|
||||
const shareMenu = new ShareMenu(options);
|
||||
shareMenu.popup();
|
||||
})
|
||||
|
||||
|
||||
/* *********************************************************************************************
|
||||
* Window Events
|
||||
* **********************************************************************************************/
|
||||
|
@ -545,10 +666,14 @@ export class BrowserWindow {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets ip
|
||||
* @private
|
||||
*/
|
||||
private static getIP(): string {
|
||||
let ip: string = '';
|
||||
let alias = 0;
|
||||
const ifaces: any = os.networkInterfaces();
|
||||
const ifaces: any = networkInterfaces();
|
||||
for (let dev in ifaces) {
|
||||
ifaces[dev].forEach((details: any) => {
|
||||
if (details.family === 'IPv4') {
|
||||
|
|
|
@ -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,16 +27,15 @@ export class Store {
|
|||
},
|
||||
"audio": {
|
||||
"volume": 1,
|
||||
"volumeStep": 0.02,
|
||||
"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,
|
||||
|
@ -60,7 +60,6 @@ export class Store {
|
|||
'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,
|
||||
'presets': [],
|
||||
|
@ -142,11 +141,11 @@ export class Store {
|
|||
* IPC Handler
|
||||
*/
|
||||
private ipcHandler(): void {
|
||||
electron.ipcMain.handle('getStoreValue', (event, key, defaultValue) => {
|
||||
electron.ipcMain.handle('getStoreValue', (_event, key, defaultValue) => {
|
||||
return (defaultValue ? Store.cfg.get(key, true) : Store.cfg.get(key));
|
||||
});
|
||||
|
||||
electron.ipcMain.handle('setStoreValue', (event, key, value) => {
|
||||
electron.ipcMain.handle('setStoreValue', (_event, key, value) => {
|
||||
Store.cfg.set(key, value);
|
||||
});
|
||||
|
||||
|
@ -154,7 +153,7 @@ export class Store {
|
|||
event.returnValue = Store.cfg.store
|
||||
})
|
||||
|
||||
electron.ipcMain.on('setStore', (event, store) => {
|
||||
electron.ipcMain.on('setStore', (_event, store) => {
|
||||
Store.cfg.store = store
|
||||
})
|
||||
}
|
||||
|
|
|
@ -3,9 +3,33 @@ import * as path from "path";
|
|||
import {jsonc} from "jsonc";
|
||||
import {Store} from "./store";
|
||||
import {BrowserWindow as bw} from "./browserwindow";
|
||||
import {app} from "electron";
|
||||
|
||||
export class utils {
|
||||
|
||||
/**
|
||||
* Paths for the application to use
|
||||
*/
|
||||
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"),
|
||||
themes: path.resolve(app.getPath("userData"), "Themes"),
|
||||
plugins: path.resolve(app.getPath("userData"), "Plugins"),
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the path
|
||||
* @returns {string}
|
||||
* @param name
|
||||
*/
|
||||
static getPath(name: string): string {
|
||||
return this.paths[name];
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the i18n locale for the given language.
|
||||
* @param language {string} The language to fetch the locale for.
|
||||
|
@ -13,10 +37,10 @@ export class utils {
|
|||
* @returns {string | Object} The locale value.
|
||||
*/
|
||||
static getLocale(language: string, key?: string): string | object {
|
||||
let i18n: { [index: string]: Object } = jsonc.parse(fs.readFileSync(path.join(__dirname, "../../src/i18n/en_US.jsonc"), "utf8"));
|
||||
let i18n: { [index: string]: Object } = jsonc.parse(fs.readFileSync(path.join(this.paths.i18nPath, "en_US.jsonc"), "utf8"));
|
||||
|
||||
if (language !== "en_US" && fs.existsSync(path.join(__dirname, `../../src/i18n/${language}.jsonc`))) {
|
||||
i18n = Object.assign(i18n, jsonc.parse(fs.readFileSync(path.join(__dirname, `../../src/i18n/${language}.jsonc`), "utf8")));
|
||||
if (language !== "en_US" && fs.existsSync(path.join(this.paths.i18nPath, `${language}.jsonc`))) {
|
||||
i18n = Object.assign(i18n, jsonc.parse(fs.readFileSync(path.join(this.paths.i18nPath, `${language}.jsonc`), "utf8")));
|
||||
}
|
||||
|
||||
if (key) {
|
||||
|
@ -58,4 +82,25 @@ export class utils {
|
|||
static getWindow(): Electron.BrowserWindow {
|
||||
return bw.win
|
||||
}
|
||||
|
||||
/**
|
||||
* Playback Functions
|
||||
*/
|
||||
static playback = {
|
||||
pause: () => {
|
||||
bw.win.webContents.executeJavaScript("MusicKitInterop.pause()")
|
||||
},
|
||||
play: () => {
|
||||
bw.win.webContents.executeJavaScript("MusicKitInterop.play()")
|
||||
},
|
||||
playPause: () => {
|
||||
bw.win.webContents.executeJavaScript("MusicKitInterop.playPause()")
|
||||
},
|
||||
next: () => {
|
||||
bw.win.webContents.executeJavaScript("MusicKitInterop.next()")
|
||||
},
|
||||
previous: () => {
|
||||
bw.win.webContents.executeJavaScript("MusicKitInterop.previous()")
|
||||
}
|
||||
}
|
||||
}
|
239
src/main/plugins/menubar.ts
Normal file
239
src/main/plugins/menubar.ts
Normal 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 {
|
||||
|
||||
}
|
||||
|
||||
}
|
133
src/main/plugins/thumbar.ts
Normal file
133
src/main/plugins/thumbar.ts
Normal file
|
@ -0,0 +1,133 @@
|
|||
import {nativeImage, nativeTheme} from "electron";
|
||||
import {utils} from "../base/utils";
|
||||
import {join} from "path";
|
||||
|
||||
export default class Thumbar {
|
||||
/**
|
||||
* Private variables for interaction in plugins
|
||||
*/
|
||||
private _win: any;
|
||||
private _app: any;
|
||||
|
||||
/**
|
||||
* Base Plugin Details (Eventually implemented into a GUI in settings)
|
||||
*/
|
||||
public name: string = 'Thumbnail Toolbar Plugin';
|
||||
public description: string = 'Creates and managed the thumbnail toolbar buttons and their events';
|
||||
public version: string = '1.0.0';
|
||||
public author: string = 'Core';
|
||||
|
||||
/**
|
||||
* Thumbnail Toolbar Assets
|
||||
*/
|
||||
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`)),
|
||||
previous: nativeImage.createFromPath(join(utils.getPath('resourcePath'), 'icons/thumbar', `${nativeTheme.shouldUseDarkColors ? 'light' : 'dark'}_previous.png`)),
|
||||
}
|
||||
|
||||
/*******************************************************************************************
|
||||
* Private Methods
|
||||
* ****************************************************************************************/
|
||||
|
||||
/**
|
||||
* Blocks non-windows systems from running this plugin
|
||||
* @private
|
||||
* @decorator
|
||||
*/
|
||||
private static windowsOnly(_target: any, _propertyKey: string, descriptor: PropertyDescriptor) {
|
||||
if (process.platform !== 'win32') {
|
||||
descriptor.value = function () {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the thumbnail toolbar
|
||||
*/
|
||||
@Thumbar.windowsOnly
|
||||
private updateButtons(attributes: any) {
|
||||
|
||||
console.log(attributes)
|
||||
|
||||
if (!attributes) {
|
||||
return
|
||||
}
|
||||
|
||||
const buttons = [
|
||||
{
|
||||
tooltip: 'Previous',
|
||||
icon: this.icons.previous,
|
||||
click() {
|
||||
utils.playback.previous()
|
||||
}
|
||||
},
|
||||
{
|
||||
tooltip: attributes.status ? 'Pause' : 'Play',
|
||||
icon: attributes.status ? this.icons.pause : this.icons.play,
|
||||
click() {
|
||||
utils.playback.playPause()
|
||||
}
|
||||
},
|
||||
{
|
||||
tooltip: 'Next',
|
||||
icon: this.icons.next,
|
||||
click() {
|
||||
utils.playback.next()
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
if (!attributes.playParams || attributes.playParams.id === 'no-id-found') {
|
||||
this._win.setThumbarButtons([])
|
||||
} else {
|
||||
this._win.setThumbarButtons(buttons);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************************
|
||||
* Public Methods
|
||||
* ****************************************************************************************/
|
||||
|
||||
/**
|
||||
* Runs on plugin load (Currently run on application start)
|
||||
*/
|
||||
constructor(app: any, _store: any) {
|
||||
this._app = app;
|
||||
console.debug(`[Plugin][${this.name}] Loading Complete.`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs on app ready
|
||||
*/
|
||||
onReady(win: Electron.BrowserWindow): void {
|
||||
this._win = win;
|
||||
console.debug(`[Plugin][${this.name}] Ready.`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 {
|
||||
this.updateButtons(attributes)
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs on song change
|
||||
* @param attributes Music Attributes
|
||||
*/
|
||||
onNowPlayingItemDidChange(attributes: object): void {
|
||||
this.updateButtons(attributes)
|
||||
}
|
||||
|
||||
}
|
1
src/renderer/assets/ppe.svg
Normal file
1
src/renderer/assets/ppe.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-codesandbox"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="7.5 4.21 12 6.81 16.5 4.21"></polyline><polyline points="7.5 19.79 7.5 14.6 3 12"></polyline><polyline points="21 12 16.5 14.6 16.5 19.79"></polyline><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>
|
After Width: | Height: | Size: 638 B |
|
@ -8,6 +8,8 @@ var CiderAudio = {
|
|||
audioBands : null,
|
||||
preampNode : null,
|
||||
vibrantbassNode: null,
|
||||
llpw: null,
|
||||
llpwEnabled: null
|
||||
},
|
||||
init: function (cb = function () { }) {
|
||||
//AudioOutputs.fInit = true;
|
||||
|
@ -29,14 +31,29 @@ var CiderAudio = {
|
|||
try{ CiderAudio.audioNodes.spatialNode.disconnect();} catch(e){}
|
||||
try{
|
||||
CiderAudio.audioNodes.preampNode.disconnect();
|
||||
CiderAudio.audioNodes.vibrantbassNode.disconnect();
|
||||
CiderAudio.audioNodes.audioBands[0].disconnect();
|
||||
CiderAudio.audioNodes.audioBands[9].disconnect();
|
||||
for (var i of CiderAudio.audioNodes.llpw){
|
||||
i.disconnect();
|
||||
}
|
||||
for (var i of CiderAudio.audioNodes.vibrantbassNode){
|
||||
i.disconnect();
|
||||
}
|
||||
for (var i of CiderAudio.audioNodes.audioBands){
|
||||
i.disconnect();
|
||||
}
|
||||
} catch(e){}
|
||||
try{
|
||||
CiderAudio.audioNodes = {
|
||||
gainNode : null,
|
||||
spatialNode : null,
|
||||
spatialInput: null,
|
||||
audioBands : null,
|
||||
preampNode : null,
|
||||
vibrantbassNode: null,
|
||||
}
|
||||
} catch (e) {}
|
||||
CiderAudio.source.connect(CiderAudio.context.destination);} catch(e){}
|
||||
},
|
||||
connectContext: function (mediaElem){
|
||||
|
||||
if (!CiderAudio.context){
|
||||
CiderAudio.context = new (window.AudioContext || window.webkitAudioContext);
|
||||
}
|
||||
|
@ -109,7 +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;
|
||||
CiderAudio.audioNodes.audioBands = []; CiderAudio.audioNodes.vibrantbassNode = [];
|
||||
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();
|
||||
|
@ -119,18 +139,27 @@ var CiderAudio = {
|
|||
CiderAudio.audioNodes.audioBands[i].gain.value = GAIN[i] * app.cfg.audio.equalizer.mix;
|
||||
}
|
||||
|
||||
for (i = 0; i < LLPW_FREQUENCIES.length; i++) {
|
||||
CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter();
|
||||
CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking';
|
||||
CiderAudio.audioNodes.llpw[i].frequency.value = LLPW_FREQUENCIES[i];
|
||||
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
|
||||
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].gain.value = VIBRANTBASSGAIN[i] * app.cfg.audio.vibrantBass.multiplier;}
|
||||
|
||||
|
||||
if (app.cfg.audio.spatial) {
|
||||
try{
|
||||
|
@ -142,13 +171,18 @@ var CiderAudio = {
|
|||
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.preampNode);
|
||||
}
|
||||
|
||||
CiderAudio.audioNodes.preampNode.connect(CiderAudio.audioNodes.vibrantbassNode[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.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]);
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -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");
|
||||
|
||||
|
@ -68,10 +68,6 @@ body[loading] {
|
|||
}
|
||||
}
|
||||
|
||||
body[platform='linux'] {
|
||||
background: #222;
|
||||
}
|
||||
|
||||
body.notransparency::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
|
@ -83,6 +79,14 @@ body.notransparency::before {
|
|||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAAAUVBMVEWFhYWDg4N3d3dtbW17e3t1dXWBgYGHh4d5eXlzc3OLi4ubm5uVlZWPj4+NjY19fX2JiYl/f39ra2uRkZGZmZlpaWmXl5dvb29xcXGTk5NnZ2c8TV1mAAAAG3RSTlNAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAvEOwtAAAFVklEQVR4XpWWB67c2BUFb3g557T/hRo9/WUMZHlgr4Bg8Z4qQgQJlHI4A8SzFVrapvmTF9O7dmYRFZ60YiBhJRCgh1FYhiLAmdvX0CzTOpNE77ME0Zty/nWWzchDtiqrmQDeuv3powQ5ta2eN0FY0InkqDD73lT9c9lEzwUNqgFHs9VQce3TVClFCQrSTfOiYkVJQBmpbq2L6iZavPnAPcoU0dSw0SUTqz/GtrGuXfbyyBniKykOWQWGqwwMA7QiYAxi+IlPdqo+hYHnUt5ZPfnsHJyNiDtnpJyayNBkF6cWoYGAMY92U2hXHF/C1M8uP/ZtYdiuj26UdAdQQSXQErwSOMzt/XWRWAz5GuSBIkwG1H3FabJ2OsUOUhGC6tK4EMtJO0ttC6IBD3kM0ve0tJwMdSfjZo+EEISaeTr9P3wYrGjXqyC1krcKdhMpxEnt5JetoulscpyzhXN5FRpuPHvbeQaKxFAEB6EN+cYN6xD7RYGpXpNndMmZgM5Dcs3YSNFDHUo2LGfZuukSWyUYirJAdYbF3MfqEKmjM+I2EfhA94iG3L7uKrR+GdWD73ydlIB+6hgref1QTlmgmbM3/LeX5GI1Ux1RWpgxpLuZ2+I+IjzZ8wqE4nilvQdkUdfhzI5QDWy+kw5Wgg2pGpeEVeCCA7b85BO3F9DzxB3cdqvBzWcmzbyMiqhzuYqtHRVG2y4x+KOlnyqla8AoWWpuBoYRxzXrfKuILl6SfiWCbjxoZJUaCBj1CjH7GIaDbc9kqBY3W/Rgjda1iqQcOJu2WW+76pZC9QG7M00dffe9hNnseupFL53r8F7YHSwJWUKP2q+k7RdsxyOB11n0xtOvnW4irMMFNV4H0uqwS5ExsmP9AxbDTc9JwgneAT5vTiUSm1E7BSflSt3bfa1tv8Di3R8n3Af7MNWzs49hmauE2wP+ttrq+AsWpFG2awvsuOqbipWHgtuvuaAE+A1Z/7gC9hesnr+7wqCwG8c5yAg3AL1fm8T9AZtp/bbJGwl1pNrE7RuOX7PeMRUERVaPpEs+yqeoSmuOlokqw49pgomjLeh7icHNlG19yjs6XXOMedYm5xH2YxpV2tc0Ro2jJfxC50ApuxGob7lMsxfTbeUv07TyYxpeLucEH1gNd4IKH2LAg5TdVhlCafZvpskfncCfx8pOhJzd76bJWeYFnFciwcYfubRc12Ip/ppIhA1/mSZ/RxjFDrJC5xifFjJpY2Xl5zXdguFqYyTR1zSp1Y9p+tktDYYSNflcxI0iyO4TPBdlRcpeqjK/piF5bklq77VSEaA+z8qmJTFzIWiitbnzR794USKBUaT0NTEsVjZqLaFVqJoPN9ODG70IPbfBHKK+/q/AWR0tJzYHRULOa4MP+W/HfGadZUbfw177G7j/OGbIs8TahLyynl4X4RinF793Oz+BU0saXtUHrVBFT/DnA3ctNPoGbs4hRIjTok8i+algT1lTHi4SxFvONKNrgQFAq2/gFnWMXgwffgYMJpiKYkmW3tTg3ZQ9Jq+f8XN+A5eeUKHWvJWJ2sgJ1Sop+wwhqFVijqWaJhwtD8MNlSBeWNNWTa5Z5kPZw5+LbVT99wqTdx29lMUH4OIG/D86ruKEauBjvH5xy6um/Sfj7ei6UUVk4AIl3MyD4MSSTOFgSwsH/QJWaQ5as7ZcmgBZkzjjU1UrQ74ci1gWBCSGHtuV1H2mhSnO3Wp/3fEV5a+4wz//6qy8JxjZsmxxy5+4w9CDNJY09T072iKG0EnOS0arEYgXqYnXcYHwjTtUNAcMelOd4xpkoqiTYICWFq0JSiPfPDQdnt+4/wuqcXY47QILbgAAAABJRU5ErkJggg==);
|
||||
}
|
||||
|
||||
body.stopanimation * {
|
||||
animation: unset !important;
|
||||
|
||||
.loadbar-sound {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
*,
|
||||
*:before,
|
||||
*:after {
|
||||
|
@ -159,6 +163,7 @@ body.notransparency::before {
|
|||
z-index: 1;
|
||||
}
|
||||
}
|
||||
|
||||
//&::before {
|
||||
// position: absolute;
|
||||
// top: -50%;
|
||||
|
@ -493,9 +498,11 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
|||
}
|
||||
|
||||
.app-sidebar-footer {
|
||||
border-top: 1px solid rgba(200, 200, 200, 0.15);
|
||||
padding: 11px;
|
||||
|
||||
.app-playback-controls {
|
||||
margin: 0 auto;
|
||||
.control-buttons {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
@ -655,7 +662,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
|||
}
|
||||
|
||||
.usermenu-container {
|
||||
bottom: 66px;
|
||||
top: 0px;
|
||||
#cmenu.container();
|
||||
|
||||
.usermenu-body {
|
||||
|
@ -869,6 +876,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
|||
.app-chrome .app-chrome--left {
|
||||
width: 30%;
|
||||
justify-content: left;
|
||||
-webkit-app-region: drag;
|
||||
}
|
||||
|
||||
.app-chrome .app-chrome--center {
|
||||
|
@ -986,18 +994,31 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
|||
height: 100%;
|
||||
}
|
||||
|
||||
.app-chrome .app-chrome-item > .app-title {
|
||||
width: 100px;
|
||||
.app-chrome .app-chrome-item > .app-mainmenu {
|
||||
width: 110px;
|
||||
font-size: 13px;
|
||||
background: url("./AppHeader.svg");
|
||||
background-size: 95px;
|
||||
background: url("./assets/AppChromeBtn.svg");
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
height: 100%;
|
||||
height: 70%;
|
||||
margin-right: 16px;
|
||||
margin-left: 16px;
|
||||
image-rendering: -webkit-optimize-contrast;
|
||||
-webkit-app-region: drag;
|
||||
margin-top: 1.5px;
|
||||
border: 0px;
|
||||
border-radius: 6px;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--selected);
|
||||
}
|
||||
|
||||
&:active, &.active {
|
||||
background-color: var(--selected-click);
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-image: url("./assets/AppChromeBtn-Open.svg");
|
||||
}
|
||||
}
|
||||
|
||||
.app-chrome .app-chrome-item > .window-controls {
|
||||
|
@ -1051,6 +1072,44 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
|||
height: 100%;
|
||||
}
|
||||
|
||||
body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls > div.minimize {
|
||||
height: 12px;
|
||||
width: 12px;
|
||||
background-color: rgb(255, 92, 92);
|
||||
border-radius: 50%;
|
||||
display: inline-block;
|
||||
margin: auto 4px;
|
||||
color: rgb(130, 0, 5);
|
||||
-webkit-app-region: no-drag;
|
||||
background-image: unset;
|
||||
}
|
||||
|
||||
body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls {
|
||||
width: 67px;
|
||||
}
|
||||
|
||||
body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls > div.minmax {
|
||||
height: 12px;
|
||||
width: 12px;
|
||||
background-color: rgb(255, 189, 76);
|
||||
border-radius: 50%;
|
||||
display: inline-block;
|
||||
margin: auto 4px;
|
||||
-webkit-app-region: no-drag;
|
||||
background-image: unset;
|
||||
}
|
||||
|
||||
body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls > div.close {
|
||||
height: 12px;
|
||||
width: 12px;
|
||||
background-color: rgb(0, 202, 86);
|
||||
border-radius: 50%;
|
||||
display: inline-block;
|
||||
margin: auto 4px auto 4px;
|
||||
-webkit-app-region: no-drag;
|
||||
background-image: unset;
|
||||
}
|
||||
|
||||
.app-chrome .app-chrome-item.playback-controls {
|
||||
width: 80%;
|
||||
height: 90%;
|
||||
|
@ -1067,7 +1126,8 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
|||
width: 100%;
|
||||
}
|
||||
|
||||
.app-chrome .app-chrome-item > .app-playback-controls .song-name {
|
||||
.app-chrome .app-chrome-item > .app-playback-controls {
|
||||
.song-name {
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
font-size: 13px;
|
||||
|
@ -1089,13 +1149,33 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
|||
.explicit-icon {
|
||||
background-image: url("./assets/explicit.svg");
|
||||
height: 9px;
|
||||
width: 36px;
|
||||
width: 13px;
|
||||
filter: contrast(0);
|
||||
background-repeat: no-repeat;
|
||||
margin-left: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
.lossless-icon {
|
||||
background-image: url("./assets/lossless.svg") !important;
|
||||
}
|
||||
|
||||
.ppe-icon {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
.app-chrome .app-chrome-item > .app-playback-controls .song-duration p {
|
||||
font-weight: 400;
|
||||
font-size: 10px;
|
||||
|
@ -1107,15 +1187,19 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
|||
|
||||
.app-playback-controls:hover .marquee {
|
||||
animation: unset;
|
||||
|
||||
&.song-artist {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.song-artist {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
&.song-name {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
&::after {
|
||||
content: none !important;
|
||||
display: none;
|
||||
|
@ -1125,23 +1209,25 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
|||
|
||||
.marquee {
|
||||
animation: marquee 15s linear infinite;
|
||||
|
||||
&.song-artist {
|
||||
overflow: unset;
|
||||
}
|
||||
|
||||
.song-artist {
|
||||
overflow: unset;
|
||||
}
|
||||
|
||||
&.song-name {
|
||||
overflow: unset;
|
||||
}
|
||||
|
||||
&::after {
|
||||
content: attr(data-value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.app-chrome .app-chrome-item > .app-playback-controls .song-progress {
|
||||
@bgColor: transparent;
|
||||
//height: 16px;
|
||||
|
@ -1241,13 +1327,16 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
|||
&:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: var(--hover);
|
||||
}
|
||||
|
||||
&:active {
|
||||
background: var(--selected-click);
|
||||
transform: scale(0.95);
|
||||
}
|
||||
|
||||
.svg-icon {
|
||||
--url: url('views/svg/more.svg') !important;
|
||||
}
|
||||
|
@ -1275,6 +1364,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
|||
display: flex;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.app-chrome .app-chrome-item > .app-playback-controls > div > .song-artist-album {
|
||||
font-weight: 400;
|
||||
font-size: 12px;
|
||||
|
@ -1326,7 +1416,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
}
|
||||
|
||||
/* Window is smaller <= 1023px width */
|
||||
@media only screen and (max-width: 1023px) {
|
||||
@media only screen and (max-width: 1120px) {
|
||||
.display--small {
|
||||
display: inherit !important;;
|
||||
|
||||
|
@ -1382,7 +1472,6 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
}
|
||||
|
||||
|
||||
|
||||
.display--large {
|
||||
display: none !important;
|
||||
}
|
||||
|
@ -2164,6 +2253,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
border: 1px solid rgba(100, 100, 100, 0.35);
|
||||
border-top: 1px solid rgba(100, 100, 100, 0.5);
|
||||
color: #eee;
|
||||
white-space: nowrap;
|
||||
transition: transform 0.2s var(--appleEase), box-shadow 0.2s var(--appleEase);
|
||||
|
||||
&.md-btn-block {
|
||||
|
@ -2185,6 +2275,11 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
border-top: 1px solid rgb(220 53 69 / 50%);
|
||||
}
|
||||
|
||||
&.md-btn-small {
|
||||
padding: 6px 8px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
filter: brightness(125%);
|
||||
}
|
||||
|
@ -2211,6 +2306,27 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
}
|
||||
}
|
||||
|
||||
.btn-group {
|
||||
display:inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
> .md-btn {
|
||||
border-radius:0px;
|
||||
width:100%;
|
||||
}
|
||||
> .md-btn:first-child {
|
||||
border-top-left-radius: 6px;
|
||||
border-bottom-left-radius: 6px;
|
||||
}
|
||||
> .md-btn:last-child {
|
||||
border-top-right-radius: 6px;
|
||||
border-bottom-right-radius: 6px;
|
||||
}
|
||||
> .md-btn:not(:first-child):not(:last-child) {
|
||||
border-radius: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.md-ico-play {
|
||||
content: url("./assets/play.svg");
|
||||
width: 10px;
|
||||
|
@ -2776,6 +2892,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
top: 0;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.close-btn {
|
||||
width: 50px;
|
||||
height: 42px;
|
||||
|
@ -2851,8 +2968,6 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Album / Playlist Page */
|
||||
.playlist-page {
|
||||
--bgColor: transparent;
|
||||
|
@ -3062,6 +3177,47 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
margin: 6px;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
&.inline-playlist {
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 6;
|
||||
position: sticky;
|
||||
margin-top: calc(var(--navigationBarHeight) * -1);
|
||||
|
||||
.floating-header {
|
||||
opacity: 1;
|
||||
top: 0px;
|
||||
z-index: 6;
|
||||
padding: 1em;
|
||||
backdrop-filter: unset;
|
||||
background: black;
|
||||
h3 {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.playlist-inner {
|
||||
background: black;
|
||||
width: 80%;
|
||||
height: 100%;
|
||||
overflow: overlay;
|
||||
box-shadow: var(--ciderShadow-Generic);
|
||||
border-radius: var(--mediaItemRadius) var(--mediaItemRadius) 0px 0px;
|
||||
|
||||
.close-btn {
|
||||
position: sticky;
|
||||
top: 16px;
|
||||
left: 16px;
|
||||
margin-left: 16px;
|
||||
z-index: 7;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes playlistArtworkFadeIn {
|
||||
|
@ -3072,6 +3228,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
opacity: 0.7;
|
||||
}
|
||||
}
|
||||
|
||||
// Collection Page
|
||||
.collection-page {
|
||||
padding-bottom: 128px;
|
||||
|
@ -3145,6 +3302,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
|
||||
.header-content {
|
||||
z-index: 1;
|
||||
margin-top: -16px;
|
||||
}
|
||||
|
||||
|
||||
|
@ -3205,7 +3363,6 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
width: 200px;
|
||||
height: 200px;
|
||||
margin: 32px;
|
||||
margin-top: -5px;
|
||||
position: relative;
|
||||
|
||||
.overlay-play {
|
||||
|
@ -3264,6 +3421,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
transition: transform 0s var(--appleEase), box-shadow 0.2s var(--appleEase);
|
||||
}
|
||||
}
|
||||
|
||||
.artist-title {
|
||||
|
||||
.artist-play {
|
||||
|
@ -3412,11 +3570,13 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
-webkit-app-region: no-drag;
|
||||
|
||||
.menu-header-body {
|
||||
padding: 6px;
|
||||
display: flex;
|
||||
background: rgb(200 200 200 / 10%);
|
||||
|
||||
.menu-option-header {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
|
@ -3443,6 +3603,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.menu-panel-body {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
|
@ -3540,6 +3701,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
height: 32px;
|
||||
width: 32px;
|
||||
}
|
||||
|
||||
.infinity {
|
||||
content: url("./assets/infinity.svg");
|
||||
margin: auto;
|
||||
|
@ -3720,15 +3882,33 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
/* CSS.gg
|
||||
*/
|
||||
@keyframes load-bar {
|
||||
10% {box-shadow: inset 0 -4px 0}
|
||||
20% {box-shadow: inset 0 -10px 0}
|
||||
30% {box-shadow: inset 0 -12px 0}
|
||||
40% {box-shadow: inset 0 -8px 0}
|
||||
50% {box-shadow: inset 0 -4px 0}
|
||||
60% {box-shadow: inset 0 -6px 0}
|
||||
80% {box-shadow: inset 0 -12px 0}
|
||||
90% {box-shadow: inset 0 -6px 0}
|
||||
to {box-shadow: inset 0 -2px 0}
|
||||
10% {
|
||||
box-shadow: inset 0 -4px 0
|
||||
}
|
||||
20% {
|
||||
box-shadow: inset 0 -10px 0
|
||||
}
|
||||
30% {
|
||||
box-shadow: inset 0 -12px 0
|
||||
}
|
||||
40% {
|
||||
box-shadow: inset 0 -8px 0
|
||||
}
|
||||
50% {
|
||||
box-shadow: inset 0 -4px 0
|
||||
}
|
||||
60% {
|
||||
box-shadow: inset 0 -6px 0
|
||||
}
|
||||
80% {
|
||||
box-shadow: inset 0 -12px 0
|
||||
}
|
||||
90% {
|
||||
box-shadow: inset 0 -6px 0
|
||||
}
|
||||
to {
|
||||
box-shadow: inset 0 -2px 0
|
||||
}
|
||||
}
|
||||
|
||||
.loadbar-sound,
|
||||
|
@ -3740,6 +3920,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
height: 28px;
|
||||
box-shadow: inset 0 -12px 0;
|
||||
}
|
||||
|
||||
.loadbar-sound {
|
||||
margin-left: 22px;
|
||||
margin-top: -16px;
|
||||
|
@ -3748,16 +3929,19 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
color: var(--keyColor);
|
||||
display: block;
|
||||
}
|
||||
|
||||
.loadbar-sound::after,
|
||||
.loadbar-sound::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: 0
|
||||
}
|
||||
|
||||
.loadbar-sound::before {
|
||||
left: -4.5px;
|
||||
animation-delay: -2.4s
|
||||
}
|
||||
|
||||
.loadbar-sound::after {
|
||||
right: -4.2px;
|
||||
animation-delay: -3.7s
|
||||
|
@ -4486,7 +4670,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
height: 50vh;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
@media only screen and (max-width: 1121px) {
|
||||
.display--large {
|
||||
display: flex !important;
|
||||
}
|
||||
|
@ -4877,7 +5061,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
height: 50vh;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
@media only screen and (max-width: 1121px) {
|
||||
.display--large {
|
||||
display: flex !important;
|
||||
}
|
||||
|
@ -5105,6 +5289,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
z-index: 3;
|
||||
opacity: 0;
|
||||
padding: 3%;
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
@ -5250,6 +5435,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
height: 300px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.grid-body {
|
||||
display: grid;
|
||||
grid-auto-flow: column dense;
|
||||
|
@ -5286,6 +5472,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
font-size: 1.0em;
|
||||
background: rgb(255 255 255 / 3%);
|
||||
}
|
||||
|
||||
.settings-option-body {
|
||||
margin: 16px;
|
||||
}
|
||||
|
@ -5755,7 +5942,7 @@ body.no-gpu {
|
|||
.modal-window {
|
||||
height: 330px;
|
||||
max-height: 330px;
|
||||
width: 800px;
|
||||
width: 740px;
|
||||
max-width: 800px;
|
||||
overflow: hidden;
|
||||
|
||||
|
@ -5799,6 +5986,7 @@ body.no-gpu {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
display: block;
|
||||
|
||||
|
@ -5812,12 +6000,14 @@ body.no-gpu {
|
|||
justify-items: center;
|
||||
font-size: 0.7em;
|
||||
}
|
||||
|
||||
.input-container.mini {
|
||||
display: inline-grid;
|
||||
width: 43px;
|
||||
justify-items: center;
|
||||
font-size: 0.7em;
|
||||
}
|
||||
|
||||
.freq-header {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
@ -5827,14 +6017,17 @@ body.no-gpu {
|
|||
margin-left: 25%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
input.eq-slider {
|
||||
-webkit-appearance: slider-vertical;
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
input[type="number"] {
|
||||
padding: unset;
|
||||
width: 55px;
|
||||
}
|
||||
|
||||
.header input.eq-slider {
|
||||
-webkit-appearance: slider-vertical;
|
||||
width: 5%;
|
||||
|
@ -5849,5 +6042,17 @@ body.no-gpu {
|
|||
}
|
||||
}
|
||||
|
||||
body[platform='darwin'] {
|
||||
#window-controls-container {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.app-chrome .app-chrome-item > .app-mainmenu {
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
-webkit-app-region: drag;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@import url("less/compact.less");
|
||||
|
|
141
src/renderer/views/app/chrome-top.ejs
Normal file
141
src/renderer/views/app/chrome-top.ejs
Normal file
|
@ -0,0 +1,141 @@
|
|||
<div class="app-chrome" :style="{'display': chrome.topChromeVisible ? '' : 'none'}">
|
||||
<div class="app-chrome--left">
|
||||
<div class="app-chrome-item full-height" v-if="chrome.windowControlPosition == 'left'">
|
||||
<div class="window-controls">
|
||||
<div class="close" @click="ipcRenderer.send('close')"></div>
|
||||
<div class="minimize" @click="ipcRenderer.send('minimize')"></div>
|
||||
<div class="minmax restore" v-if="chrome.maximized"
|
||||
@click="ipcRenderer.send('maximize')">
|
||||
</div>
|
||||
<div class="minmax" v-else @click="ipcRenderer.send('maximize')"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="app-chrome-item full-height" v-else>
|
||||
<button class="app-mainmenu"
|
||||
@blur="mainMenuVisibility(false)"
|
||||
@click="mainMenuVisibility(true)"
|
||||
:class="{active: chrome.menuOpened}"></button>
|
||||
</div>
|
||||
<div class="app-chrome-item display--large">
|
||||
<button class="playback-button--small shuffle" v-if="mk.shuffleMode == 0"
|
||||
@click="mk.shuffleMode = 1"></button>
|
||||
<button class="playback-button--small shuffle active" v-else
|
||||
@click="mk.shuffleMode = 0"></button>
|
||||
</div>
|
||||
<div class="app-chrome-item display--large">
|
||||
<button class="playback-button previous" @click="prevButton()"></button>
|
||||
</div>
|
||||
<div class="app-chrome-item display--large">
|
||||
<button class="playback-button pause" @click="mk.pause()" v-if="mk.isPlaying"></button>
|
||||
<button class="playback-button play" @click="mk.play()" v-else></button>
|
||||
</div>
|
||||
<div class="app-chrome-item display--large">
|
||||
<button class="playback-button next" @click="mk.skipToNextItem()"></button>
|
||||
</div>
|
||||
<div class="app-chrome-item display--large">
|
||||
<button class="playback-button--small repeat" v-if="mk.repeatMode == 0"
|
||||
@click="mk.repeatMode = 1"></button>
|
||||
<button class="playback-button--small repeat repeatOne" @click="mk.repeatMode = 2"
|
||||
v-else-if="mk.repeatMode == 1"></button>
|
||||
<button class="playback-button--small repeat active" @click="mk.repeatMode = 0"
|
||||
v-else-if="mk.repeatMode == 2"></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="app-chrome--center">
|
||||
<div class="app-chrome-item playback-controls">
|
||||
<template v-if="mkReady()">
|
||||
<div class="app-playback-controls" @mouseover="chrome.progresshover = true"
|
||||
@mouseleave="chrome.progresshover = false" @contextmenu="nowPlayingContextMenu">
|
||||
<div class="artwork" @click="drawer.open = false; fullscreen(true)">
|
||||
<mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
|
||||
</div>
|
||||
<div class="playback-info">
|
||||
<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>
|
||||
<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' : '']"
|
||||
style="display: inline-block; -webkit-box-orient: horizontal; white-space: nowrap;">
|
||||
<div class="item-navigate song-artist" style="display: inline-block"
|
||||
@click="getNowPlayingItemDetailed(`artist`)">
|
||||
{{ mk.nowPlayingItem["attributes"]["artistName"] }}
|
||||
</div>
|
||||
<div class="song-artist item-navigate" style="display: inline-block"
|
||||
@click="getNowPlayingItemDetailed('album')"
|
||||
v-if="mk.nowPlayingItem['attributes']['albumName'] != ''">
|
||||
<div class="separator" style="display: inline-block;">{{"—"}}</div>
|
||||
{{(mk.nowPlayingItem["attributes"]["albumName"]) ?
|
||||
(mk.nowPlayingItem["attributes"]["albumName"]) : "" }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="song-progress">
|
||||
<div class="song-duration"
|
||||
style="justify-content: space-between; height: 1px;"
|
||||
:style="[chrome.progresshover ? {'display': 'flex'} : {'display' : 'none'} ]">
|
||||
<p style="width: auto">{{ convertTime(getSongProgress()) }}</p>
|
||||
<p style="width: auto">{{ convertTime(mk.currentPlaybackDuration) }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<input type="range" step="0.01" min="0" :style="progressBarStyle()"
|
||||
@input="playerLCD.desiredDuration = $event.target.value;playerLCD.userInteraction = true"
|
||||
@mouseup="mk.seekToTime($event.target.value);playerLCD.desiredDuration = 0;playerLCD.userInteraction = false"
|
||||
:max="mk.currentPlaybackDuration" :value="getSongProgress()">
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="mk.nowPlayingItem['attributes']['playParams']">
|
||||
<div class="actions">
|
||||
<button class="lcdMenu" @click="nowPlayingContextMenu">
|
||||
<div class="svg-icon"></div>
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="app-chrome--right">
|
||||
<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" @wheel="volumeWheel" :step="cfg.audio.volumeStep" min="0" max="1"
|
||||
v-model="mk.volume" v-if="typeof mk.volume != 'undefined'" @change="checkMuteChange()">
|
||||
</div>
|
||||
<div class="app-chrome-item generic">
|
||||
<button class="playback-button--small miniplayer"
|
||||
@click="drawer.open = false; miniPlayer(true)"></button>
|
||||
</div>
|
||||
<div class="app-chrome-item generic">
|
||||
<button class="playback-button--small queue" :class="{'active': drawer.panel == 'queue'}"
|
||||
@click="invokeDrawer('queue')"></button>
|
||||
</div>
|
||||
<div class="app-chrome-item generic">
|
||||
<template v-if="lyrics && lyrics != [] && lyrics.length > 0">
|
||||
<button class="playback-button--small lyrics"
|
||||
:class="{'active': drawer.panel == 'lyrics'}"
|
||||
@click="invokeDrawer('lyrics')"></button>
|
||||
</template>
|
||||
|
||||
</div>
|
||||
<div class="app-chrome-item full-height" id="window-controls-container" v-if="chrome.windowControlPosition == 'right'">
|
||||
<div class="window-controls">
|
||||
<div class="minimize" @click="ipcRenderer.send('minimize')"></div>
|
||||
<div class="minmax restore" v-if="chrome.maximized"
|
||||
@click="ipcRenderer.send('maximize')">
|
||||
</div>
|
||||
<div class="minmax" v-else @click="ipcRenderer.send('maximize')"></div>
|
||||
<div class="close" @click="ipcRenderer.send('close')"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -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)
|
||||
|
|
|
@ -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()"
|
||||
|
|
|
@ -410,7 +410,21 @@
|
|||
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)}
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -561,7 +575,8 @@
|
|||
}
|
||||
else {
|
||||
app.playMediaItemById(item.attributes.playParams.id ?? item.id, item.attributes.playParams.kind ?? item.type, item.attributes.playParams.isLibrary ?? false, item.attributes.url)
|
||||
}})
|
||||
}
|
||||
})
|
||||
},
|
||||
route() {
|
||||
let kind = (this.item.attributes.playParams ? (this.item.attributes.playParams.kind ?? (this.item.type ?? '')) : (this.item.type ?? ''));
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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)}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -44,8 +44,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()"
|
||||
|
|
|
@ -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"> — </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>
|
88
src/renderer/views/components/share-sheet.ejs
Normal file
88
src/renderer/views/components/share-sheet.ejs
Normal 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>
|
|
@ -6,6 +6,9 @@
|
|||
</div>
|
||||
<div class="settings-option-body">
|
||||
<div class="md-option-line">
|
||||
<div class="md-option-segment">
|
||||
{{$root.getLz('term.accountSettings')}}
|
||||
</div>
|
||||
<div class="md-option-segment md-option-segment_auto">
|
||||
<button class="md-btn" @click="app.appRoute('apple-account-settings')">
|
||||
{{$root.getLz('term.accountSettings')}}
|
||||
|
@ -32,10 +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="990">Extreme</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>
|
||||
|
@ -58,6 +61,31 @@
|
|||
switch/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext">
|
||||
<div class="md-option-segment">
|
||||
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPE')}}
|
||||
<br>
|
||||
<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" v-on:change="ciderPPE" switch/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext && app.cfg.advanced.ciderPPE === true">
|
||||
<div class="md-option-segment">
|
||||
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength')}}
|
||||
<br>
|
||||
<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">
|
||||
{{$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">
|
||||
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive')}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext">
|
||||
<div class="md-option-segment">
|
||||
{{$root.getLz('term.equalizer')}}
|
||||
|
@ -94,6 +122,18 @@
|
|||
<span>{{$root.getLz('settings.header.visual')}}</span>
|
||||
</div>
|
||||
<div class="settings-option-body">
|
||||
<div class="md-option-line">
|
||||
<div class="md-option-segment">
|
||||
{{$root.getLz('settings.header.visual.theme')}}
|
||||
</div>
|
||||
<div class="md-option-segment md-option-segment_auto">
|
||||
<select class="md-select" @change="$root.setTheme($root.cfg.visual.theme)" v-model="$root.cfg.visual.theme">
|
||||
<option value="default.less">{{$root.getLz('settings.option.visual.theme.default')}}</option>
|
||||
<option value="dark.less">{{$root.getLz('settings.option.visual.theme.dark')}}</option>
|
||||
<option v-for="theme in themes" :value="theme">{{ theme }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-option-line">
|
||||
<div class="md-option-segment">
|
||||
{{$root.getLz('settings.option.visual.windowBackgroundStyle')}}
|
||||
|
@ -581,6 +621,15 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md-option-line">
|
||||
<div class="md-option-segment">
|
||||
{{$root.getLz('settings.option.experimental.inline_playlists')}}
|
||||
</div>
|
||||
<div class="md-option-segment md-option-segment_auto">
|
||||
<input type="checkbox" v-model="app.cfg.advanced.experiments.includes('inline-playlists')" @click="app.cfg.advanced.experiments.includes('inline-playlists') ? removeExperiment('inline-playlists') : addExperiment('inline-playlists')" switch/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md-option-line">
|
||||
<div class="md-option-segment">
|
||||
{{$root.getLz('term.language')}}
|
||||
|
@ -606,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()">
|
||||
|
@ -614,22 +663,39 @@
|
|||
</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')}}
|
||||
</div>
|
||||
<div class="md-option-segment md-option-segment_auto">
|
||||
<button class="md-btn" @click="copyLogs">
|
||||
{{$root.getLz('action.copy')}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="opacity: 0.5; pointer-events: none">
|
||||
<div class="md-option-header">
|
||||
<span>{{$root.getLz('settings.header.unfinished')}}</span>
|
||||
</div>
|
||||
<div class="settings-option-body">
|
||||
<div class="md-option-line">
|
||||
<div class="md-option-segment">
|
||||
Theme
|
||||
</div>
|
||||
<div class="md-option-segment md-option-segment_auto">
|
||||
<select class="md-select">
|
||||
<option value="0">Cider</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md-option-line">
|
||||
<div class="md-option-segment">
|
||||
Theme Options
|
||||
|
@ -691,7 +757,8 @@
|
|||
props: [],
|
||||
data: function () {
|
||||
return {
|
||||
app: this.$root
|
||||
app: this.$root,
|
||||
themes: ipcRenderer.sendSync("get-themes")
|
||||
}
|
||||
},
|
||||
mounted: function () {
|
||||
|
@ -704,6 +771,10 @@
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
copyLogs() {
|
||||
ipcRenderer.send('fetch-log')
|
||||
notyf.success(app.getLz('term.share.success'));
|
||||
},
|
||||
getLanguages: function () {
|
||||
let langs = this.$root.lzListing
|
||||
let categories = {
|
||||
|
@ -738,6 +809,7 @@
|
|||
CiderAudio.spatialOn()
|
||||
}
|
||||
} else {
|
||||
app.cfg.advanced.ciderPPE = false;
|
||||
CiderAudio.off();
|
||||
}
|
||||
},
|
||||
|
@ -748,15 +820,32 @@
|
|||
CiderAudio.normalizerOff()
|
||||
}
|
||||
},
|
||||
ciderPPE: function () {
|
||||
if (app.cfg.advanced.ciderPPE) {
|
||||
if (app.cfg.audio.spatial) {
|
||||
app.cfg.advanced.ciderPPE = false;
|
||||
notyf.error("CAP is not compatible with Spatialization. Please disable Spatialization to continue.")
|
||||
}
|
||||
}
|
||||
},
|
||||
toggleSpatial: function () {
|
||||
if (app.cfg.audio.spatial) {
|
||||
if (!app.cfg.advanced.ciderPPE) {
|
||||
CiderAudio.spatialOn()
|
||||
}
|
||||
else {
|
||||
CiderAudio.spatialOff()
|
||||
app.cfg.audio.spatial = false;
|
||||
notyf.error("Spatialization is not compatible with CAP. Please disable CAP to continue.")
|
||||
}
|
||||
} else {
|
||||
CiderAudio.spatialOff()
|
||||
}
|
||||
|
||||
},
|
||||
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue