Merge branch 'upcoming' of https://github.com/ciderapp/Cider into upcoming

This commit is contained in:
yazninja 2022-01-24 22:32:55 +08:00
commit 3b5ca7b8c8
22 changed files with 764 additions and 100 deletions

View file

@ -38,6 +38,7 @@
"electron-window-state": "^5.0.3",
"express": "^4.17.2",
"get-port": "^5.1.1",
"jsonc": "^2.0.0",
"lastfmapi": "^0.1.1",
"mdns-js": "github:bitfocus/node-mdns-js",
"mpris-service": "^2.1.2",
@ -135,12 +136,12 @@
"backgroundColor": "transparent",
"setBuildNumber": true
},
"nsis": {
"nsis": {
"oneClick": false,
"perMachine": false,
"allowToChangeInstallationDirectory": true,
"license": "LICENSE",
"deleteAppDataOnUninstall": true
"license": "LICENSE",
"deleteAppDataOnUninstall": true
},
"win": {
"target": [

8
src/i18n/README.md Normal file
View file

@ -0,0 +1,8 @@
# Cider i18n
Some notes about Cider's i18n support.
* Localization files are stored in jsonc format aka "JSON with Comments"
* The default language is English.
* The default language is used for messages that are not translated.
* Try when possible to keep the messages the similar in length to the English ones.
* Most of the strings in the content area are provided and translated by Apple themselves, and do not need to be translated.
* The language Apple Music uses are dependent on the storefront region.

View file

@ -4,6 +4,12 @@
// Dialogs
"dialog.cancel": "Ακύρωση",
"dialog.ok": "ΟΚ",
// Notification
"notification.updatingLibrarySongs": "Ενημέρωση βιβλιοθήκης τραγουδιών...",
"notification.updatingLibraryAlbums": "Ενημέρωση βιβλιοθήκης άλμπουμ...",
"notification.updatingLibraryArtists": "Ενημέρωση βιβλιοθήκης καλλιτεχνών...",
// Terms
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts",
@ -19,6 +25,9 @@
"term.queue": "Ουρά",
"term.search": "Εύρεση",
"term.library": "Βιβλιοθήκη",
"term.listenNow": "Ακρόαση",
"term.browse": "Περιήγηση",
"term.radio": "Ράδιο",
"term.recentlyAdded": "Πρόσφατες Προσθήκες",
"term.songs": "Τραγούδια",
"term.albums": "Άλμπουμ",
@ -38,6 +47,27 @@
"term.share": "Κοινή Χρήση",
"term.settings": "Ρυθμίσεις",
"term.seeAll": "Προβολή Όλων",
"term.sortBy": "Ταξινόμηση Κατά",
"term.sortBy.album": "Άλμπουμ",
"term.sortBy.artist": "Καλλιτέχνη",
"term.sortBy.name": "Όνομα",
"term.sortBy.genre": "Είδος",
"term.sortBy.releaseDate": "Ημερομηνία Κυκλοφορίας",
"term.sortBy.duration": "Διάρκεια",
"term.sortOrder": "Α-Ω",
"term.sortOrder.ascending": "Αύξουσα",
"term.sortOrder.descending": "Φθίνουσα",
"term.viewAs": "Προβολή Ως",
"term.viewAs.coverArt": "Εξώφυλλο",
"term.viewAs.list": "Λίστα",
"term.size.normal": "Κανονικό",
"term.size.compact": "Συμπαγή",
"term.enable": "Ενεργοποίηση",
"term.disable": "Απενεργοποίηση",
"term.enabled": "Ενεργοποιημένο",
"term.disabled": "Απενεργοποιημένο",
"term.connect": "Σύνδεση",
// Home
"home.title": "Αρχική",
"home.recentlyPlayed": "Έπαιξαν Πρόσφατα",
@ -48,6 +78,7 @@
"home.followedArtists": "Καλλιτέχνες που Ακολουθείτε",
// Errors
"error.appleMusicSubRequired": "Το Apple Music απαιτεί μια συνδρομή.",
// Actions
"action.addToLibrary": "Προσθήκη στη Βιβλιοθήκη",
"action.addToLibrary.success": "Προστέθηκε στη Βιβλιοθήκη",
@ -60,6 +91,8 @@
"action.removeFromQueue": "Αφαίρεση από την Ουρά",
"action.removeFromQueue.success": "Αφαιρέθηκε από την Ουρά",
"action.removeFromQueue.error": "Σφάλμα Αφαίρεσης από την Ουρά",
"action.addToPlaylist": "Προσθήκη σε Λίστα",
"action.addToFavorites": "Προσθήκη στα Αγαπημένα",
"action.follow": "Ακολούθηση",
"action.follow.success": "Ακολουθήθηκε",
"action.follow.error": "Σφάλμα Ακολούθησης",
@ -68,28 +101,82 @@
"action.unfollow.error": "Σφάλμα Διακοπής Ακολούθησης ",
"action.playNext": "Αναπαραγωγή ως Επόμενου",
"action.playLater": "Αναπαραγωγή Αργότερα",
"action.startRadio": "Έναρξη Σταθμού",
"action.startRadio": "Έναρξη Ραδιοφώνου",
"action.goToArtist": "Μετάβαση σε Καλλιτέχνη",
"action.goToAlbum": "Μετάβαση σε Άλμπουμ",
"action.moveToTop": "Μετακίνηση στη κορυφή",
"action.share": "Κοινή Χρήση",
"action.rename": "Μετονομασία",
"action.love": "Μου αρέσει πολύ",
"action.unlove": "Αναίρεση \"Μου Αρέσει\"",
"action.dislike": "Δεν μου αρέσει",
"action.undoDislike": "Αναίρεση \"Δεν μου αρέσει\"",
// Settings
"action.showWebRemoteQR": "Εμφάνιση Web Remote QR",
// Settings - Audio
"settings.header.audio": "Ήχος",
"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": "Ενεργοποιώντας τη λειτουργικότητα 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": "Πιο τρισδιάστατος και χωρικοποιημένος ήχος (σημείωση: Αυτό δεν είναι Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Οπτικά",
"settings.header.visual.description": "Προσαρμογή οπτικών ρυθμίσεων για το Cider.",
"settings.option.visual.windowBackgroundStyle": "Στυλ Φόντου Παραθύρου", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "Κανένα",
"settings.header.visual.windowBackgroundStyle.artwork": "Εξώφυλλο",
"settings.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.extreme": "Πολύ Υψηλή",
"settings.option.visual.animatedWindowBackground": "Κινούμενο Φόντο Παραθύρου", // Toggle
"settings.option.visual.hardwareAcceleration": "Επιτάχυνση Υλικού", // Dropdown
"settings.header.visual.hardwareAcceleration.default": "Προεπιλογή",
"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 - 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": "Ενεργοποίηση Στίχων Youtube για Μουσικά Βίντεο", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "Σύνδεση",
"settings.header.connectivity.description": "Προσαρμογή ρυθμίσεων σύνδεσης για το Cider.",
"settings.option.connectivity.discordRPC": "Discord Rich Presence", // Dropdown
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "Εμφάνιση ως 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "Εμφάνιση ως 'Apple Music'",
"settings.header.connectivity.discordRPC.clearOnPause": "Εκκαθάριση του Discord Rich Presence στην Παύση", // Toggle
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling", // Option to Connect
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "Πειραματικές",
"settings.header.experimental.description": "Προσαρμογή πειραματικών ρυθμίσεων για το Cider."
"settings.header.experimental.description": "Προσαρμογή πειραματικών ρυθμίσεων για το Cider.",
"settings.option.experimental.compactUI": "Συμπαγής Διεπαφή", // Toggle
// Refer to term.disabled & term.enabled
// Web Remote
"remote.web.title": "Cider Remote",
"remote.web.description": "Σαρώστε τον κωδικό QR για σύζευξη του Cider με το κινητό σας"
}

3
src/i18n/en_GB.jsonc Normal file
View file

@ -0,0 +1,3 @@
{
"home.friendsListeningTo": "Bruv's Listening To"
}

View file

@ -1,9 +1,15 @@
{
{ // Base File
// App info
"app.name": "Cider",
// Dialogs
"dialog.cancel": "Cancel",
"dialog.ok": "OK",
// Notification
"notification.updatingLibrarySongs": "Updating library songs...",
"notification.updatingLibraryAlbums": "Updating library albums...",
"notification.updatingLibraryArtists": "Updating library artists...",
// Terms
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts",
@ -19,6 +25,9 @@
"term.queue": "Queue",
"term.search": "Search",
"term.library": "Library",
"term.listenNow": "Listen Now",
"term.browse": "Browse",
"term.radio": "Radio",
"term.recentlyAdded": "Recently Added",
"term.songs": "Songs",
"term.albums": "Albums",
@ -38,6 +47,27 @@
"term.share": "Share",
"term.settings": "Settings",
"term.seeAll": "See All",
"term.sortBy": "Sort By",
"term.sortBy.album": "Album",
"term.sortBy.artist": "Artist",
"term.sortBy.name": "Name",
"term.sortBy.genre": "Genre",
"term.sortBy.releaseDate": "Release Date",
"term.sortBy.duration": "Duration",
"term.sortOrder": "A-Z",
"term.sortOrder.ascending": "Ascending",
"term.sortOrder.descending": "Descending",
"term.viewAs": "View As",
"term.viewAs.coverArt": "Cover Art",
"term.viewAs.list": "List",
"term.size.normal": "Normal",
"term.size.compact": "Compact",
"term.enable": "Enable",
"term.disable": "Disable",
"term.enabled": "Enabled",
"term.disabled": "Disabled",
"term.connect": "Connect",
// Home
"home.title": "Home",
"home.recentlyPlayed": "Recently Played",
@ -48,6 +78,7 @@
"home.followedArtists": "Followed Artists",
// Errors
"error.appleMusicSubRequired": "Apple Music requires a subscription.",
// Actions
"action.addToLibrary": "Add to Library",
"action.addToLibrary.success": "Added to Library",
@ -60,6 +91,8 @@
"action.removeFromQueue": "Remove from Queue",
"action.removeFromQueue.success": "Removed from Queue",
"action.removeFromQueue.error": "Error Removing from Queue",
"action.addToPlaylist": "Add to Playlist",
"action.addToFavorites": "Add to Favorites",
"action.follow": "Follow",
"action.follow.success": "Followed",
"action.follow.error": "Error Following",
@ -71,25 +104,79 @@
"action.startRadio": "Start Radio",
"action.goToArtist": "Go to Artist",
"action.goToAlbum": "Go to Album",
"action.moveToTop": "Move to top",
"action.share": "Share",
"action.rename": "Rename",
"action.love": "Love",
"action.unlove": "Unlove",
"action.dislike": "Dislike",
"action.undoDislike": "Undo dislike",
// Settings
"action.showWebRemoteQR": "Show Web Remote QR",
// 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.high": "High",
"settings.header.audio.quality.low": "Low",
"settings.header.audio.quality.auto": "Auto",
"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.audioNormalization": "Audio Normalization", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatialization", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialize audio and make audio more 3-dimensional (note: This is not Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Visual",
"settings.header.visual.description": "Adjust the visual settings for Cider.",
"settings.option.visual.windowBackgroundStyle": "Window Background Style", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "None",
"settings.header.visual.windowBackgroundStyle.artwork": "Artwork",
"settings.option.visual.animatedArtwork": "Animated Artwork", // Dropdown
"settings.header.visual.animatedArtwork.always": "Always",
"settings.header.visual.animatedArtwork.limited": "Limited to pages and special entries",
"settings.header.visual.animatedArtwork.disable": "Disable everywhere",
"settings.option.visual.animatedArtworkQuality": "Animated Artwork Quality", // Dropdown
"settings.header.visual.animatedArtworkQuality.low": "Low",
"settings.header.visual.animatedArtworkQuality.medium": "Medium",
"settings.header.visual.animatedArtworkQuality.high": "High",
"settings.header.visual.animatedArtworkQuality.extreme": "Extreme",
"settings.option.visual.animatedWindowBackground": "Animated Window Background", // Toggle
"settings.option.visual.hardwareAcceleration": "Hardware Acceleration", // Dropdown
"settings.header.visual.hardwareAcceleration.default": "Default",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Show Personal Info", // Toggle
// Settings - General (Reserved)
"settings.header.general": "General",
"settings.header.general.description": "Adjust the general settings for Cider.",
// Settings - Lyrics
"settings.header.lyrics": "Lyrics",
"settings.header.lyrics.description": "Adjust the lyrics settings for Cider.",
"settings.option.lyrics.enableMusixmatch": "Enable Musixmatch Lyrics", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "Enable Karaoke Mode (Musixmatch only)", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch Translation Preferred Language", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "Enable Youtube Lyrics for Music Videos", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "Connectivity",
"settings.header.connectivity.description": "Adjust the connectivity settings for Cider.",
"settings.option.connectivity.discordRPC": "Discord Rich Presence", // Dropdown
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "Display as 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "Display as 'Apple Music'",
"settings.header.connectivity.discordRPC.clearOnPause": "Clear Discord Rich Presence on Pause", // Toggle
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling", // Option to Connect
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "Experimental",
"settings.header.experimental.description": "Adjust the experimental settings for Cider.",
"settings.option.experimental.compactUI": "Compact UI", // Toggle
// Refer to term.disabled & term.enabled
// Web Remote
"remote.web.title": "Cider Remote",
"remote.web.description": "Scan the QR code to pair your phone up with this Cider instance"
}

View file

@ -4,6 +4,12 @@
// Dialogs
"dialog.cancel": "キャンセル",
"dialog.ok": "OK",
// Notification
"notification.updatingLibrarySongs": "ライブラリの更新中...",
"notification.updatingLibraryAlbums": "ライブラリの更新中...",
"notification.updatingLibraryArtists": "ライブラリの更新中...",
// Terms
"term.appleMusic": "Apple Music", // Follows brand term
"term.applePodcasts": "Apple Podcasts", // Follows brand term
@ -14,7 +20,7 @@
"term.accountSettings": "アカウント設定",
"term.logout": "サインアウト",
"term.login": "サインイン",
"term.about": "アプリについて",
"term.about": "Ciderについて",
"term.privateSession": "プライベートセッション",
"term.queue": "次はこちら",
"term.search": "検索",
@ -37,7 +43,28 @@
"term.unmute": "ミュート解除",
"term.share": "共有",
"term.settings": "設定",
"term.seeAll": "全部表示",
"term.seeAll": "すべてを表示",
"term.sortBy": "並べ替え",
"term.sortBy.album": "アルバム",
"term.sortBy.artist": "アーティスト",
"term.sortBy.name": "曲名",
"term.sortBy.genre": "ジャンル",
"term.sortBy.releaseDate": "配信開始日",
"term.sortBy.duration": "時間",
"term.sortOrder": "アルファベット順",
"term.sortOrder.ascending": "A-Z順",
"term.sortOrder.descending": "Z-A順",
"term.viewAs": "表示",
"term.viewAs.coverArt": "カバーアート",
"term.viewAs.list": "リスト",
"term.size.normal": "普通",
"term.size.compact": "コンパクト",
"term.enable": "ON",
"term.disable": "OFF",
"term.enabled": "ON",
"term.disabled": "OFF",
"term.connect": "接続",
// Home
"home.title": "ホーム",
"home.recentlyPlayed": "最近の再生",
@ -51,7 +78,7 @@
// Actions
"action.addToLibrary": "ライブラリに追加",
"action.addToLibrary.success": "ライブラリに追加されました",
"action.addToLibrary.error": "ついか",
"action.addToLibrary.error": "ライブラリへの追加に失敗しました",
"action.removeFromLibrary": "ライブラリから削除",
"action.removeFromLibrary.success": "ライブラリから削除されました",
"action.addToQueue": "キューに追加",
@ -76,20 +103,73 @@
"action.unlove": "ラブを解除",
"action.dislike": "これに似たものをすすめない",
"action.undoDislike": "「これと似た曲のおすすめを減らす」を取り消す",
// Settings
"action.showWebRemoteQR": "WEBリモコンQRコードを表示",
// Settings - Audio
"settings.header.audio": "オーディオ",
"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": "AudioContext 機能を有効にすると、オーディオノーマライズ、空間オーディオ、イコライザーなどの機能を使用できますが、音が途切れるかもしれません。", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "オーディオノーマライズ", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "さまざまな曲の音量を均一にし、より整った音を楽しめるようにする機能です。",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "オーディオ空間化", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "オーディオを空間に分散させる機能です。 (ドルビーアトモスではありません)",
// Settings - Visual
"settings.header.visual": "ビジュアル",
"settings.header.visual.description": "Ciderのビジュアル設定",
"settings.option.visual.windowBackgroundStyle": "アプリウインドウの背景スタイル", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "なし",
"settings.header.visual.windowBackgroundStyle.artwork": "アートワーク",
"settings.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.extreme": "最高",
"settings.option.visual.animatedWindowBackground": "アプリウィンドウの背景をアニメーション化", // Toggle
"settings.option.visual.hardwareAcceleration": "ハードウェア アクセラレーション", // Dropdown
"settings.header.visual.hardwareAcceleration.default": "既定",
"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 - Lyrics
"settings.header.lyrics": "歌詞",
"settings.header.lyrics.description": "歌詞の表示設定",
"settings.option.lyrics.enableMusixmatch": "Musixmatchで歌詞を表示する", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "カラオケモードを有効にする (Musixmatchのみ)", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "歌詞の優先言語", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "YouTubeの歌詞をミュージックビデオに使用する", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "アプリと連携",
"settings.header.connectivity.description": "Ciderの連携設定",
"settings.option.connectivity.discordRPC": "Discord Rich Presence", // Dropdown
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "'Cider' を表示する",
"settings.header.connectivity.discordRPC.appleMusic": "'Apple Music' を表示する",
"settings.header.connectivity.discordRPC.clearOnPause": "一時停止時にDiscord Rich Presenceをクリアする", // Toggle
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling", // Option to Connect
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "試験的な機能",
"settings.header.experimental.description": "Ciderの試験的な機能",
"settings.header.experimental.description": "開発中の実験的な機能は不完全で不安定である可能性があります",
"settings.option.experimental.compactUI": "コンパクトインターフェース", // Toggle
// Refer to term.disabled & term.enabled
// Web Remote
"remote.web.title": "Cider リモート",
"remote.web.description": "QRコードを使用して、Ciderとスマートフォンをペアリングする",
}

View file

@ -91,5 +91,5 @@
"settings.header.connectivity": "Diğer Servisler",
"settings.header.connectivity.description": "Cider'i diğer servislere bağlayarak deneyiminizi zenginleştirin.",
"settings.header.experimental": "Deneysel",
"settings.header.experimental.description": "Cider'deki deneysel özelliklere erişim sağlayın. (Not: Bazı özellikler düzgün çalışmayabilir.)",
"settings.header.experimental.description": "Cider'deki deneysel özelliklere erişim sağlayın. (Not: Bazı özellikler düzgün çalışmayabilir.)"
}

View file

@ -4,6 +4,12 @@
// Dialogs
"dialog.cancel": "取消",
"dialog.ok": "确定",
// Notification
"notification.updatingLibrarySongs": "正在更新资料库的歌曲信息...",
"notification.updatingLibraryAlbums": "正在更新资料库的专辑信息...",
"notification.updatingLibraryArtists": "正在更新资料库的艺人信息...",
// Terms
"term.appleMusic": "Apple Music", // Follows brand term
"term.applePodcasts": "Apple Podcasts", // Follows brand term
@ -18,11 +24,11 @@
"term.privateSession": "私人聆听",
"term.queue": "队列",
"term.search": "搜索",
"term.library": "音乐库",
"term.library": "资料库",
"term.recentlyAdded": "最近添加",
"term.songs": "歌曲",
"term.albums": "专辑",
"term.artists": "歌手",
"term.artists": "艺人",
"term.podcasts": "播客",
"term.playlists": "播放列表",
"term.playlist": "播放列表",
@ -38,22 +44,45 @@
"term.share": "分享",
"term.settings": "设置",
"term.seeAll": "查看全部",
"term.sortBy": "排序",
"term.sortBy.album": "专辑",
"term.sortBy.artist": "艺人",
"term.sortBy.name": "歌名",
"term.sortBy.genre": "类型",
"term.sortBy.releaseDate": "发行日期",
"term.sortBy.duration": "时长",
"term.sortOrder": "字母排序",
"term.sortOrder.ascending": "升序",
"term.sortOrder.descending": "倒序",
"term.viewAs": "显示模式",
"term.viewAs.coverArt": "专辑封面",
"term.viewAs.list": "列表",
"term.size.normal": "正常",
"term.size.compact": "紧凑",
"term.enable": "启用",
"term.disable": "禁用",
"term.enabled": "已启用",
"term.disabled": "已禁用",
"term.connect": "连接",
// Home
"home.title": "主页",
"home.recentlyPlayed": "最近播放",
"home.recentlyAdded": "最近添加",
"home.artistsFeed": "您的歌手推荐",
"home.madeForYou": "为您量身定制",
"home.artistsFeed": "艺人推荐",
"home.madeForYou": "专属推荐",
"home.friendsListeningTo": "朋友正在听",
"home.followedArtists": "关注的歌手",
"home.followedArtists": "关注的艺人",
// Errors
"error.appleMusicSubRequired": "需要订阅Apple Music以使用Cider",
"error.appleMusicSubRequired": "需要订阅 Apple Music 以使用 Cider",
// Actions
"action.addToLibrary": "加入音乐库",
"action.addToLibrary.success": "成功加入音乐库",
"action.addToLibrary.error": "加入音乐库的过程发生了错误",
"action.removeFromLibrary": "从音乐库中移除",
"action.removeFromLibrary.success": "已从音乐库中移除",
"action.addToLibrary": "加入资料库",
"action.addToLibrary.success": "成功加入资料库",
"action.addToLibrary.error": "加入资料库的过程发生了错误",
"action.removeFromLibrary": "从资料库中移除",
"action.removeFromLibrary.success": "已从资料库中移除",
"action.addToQueue": "加入队列",
"action.addToQueue.success": "成功加入队列",
"action.addToQueue.error": "加入队列的过程发生了错误",
@ -69,27 +98,79 @@
"action.playNext": "下一首播放",
"action.playLater": "最后播放",
"action.startRadio": "开始电台",
"action.goToArtist": "前往歌手",
"action.goToArtist": "前往艺人",
"action.goToAlbum": "前往专辑",
"action.share": "分享歌曲",
"action.love": "喜欢",
"action.unlove": "取消喜欢",
"action.unlove": "",
"action.dislike": "减少此类建议",
"action.undoDislike": "撤销减少此类建议",
// Settings
"action.undoDislike": "增加此类建议",
"action.showWebRemoteQR": "显示远程控制的二维码",
// Settings - Audio
"settings.header.audio": "音频",
"settings.header.audio.description": "调整Cider的音质",
"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": "启用 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": "使所感知到的音频更有立体感 (注: 这不是杜比全景声)",
// Settings - Visual
"settings.header.visual": "外观",
"settings.header.visual.description": "调整Cider的外观",
"settings.header.visual.description": "调整 Cider 的外观",
"settings.option.visual.windowBackgroundStyle": "窗口背景样式", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "无",
"settings.header.visual.windowBackgroundStyle.artwork": "专辑封面",
"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.extreme": "极高",
"settings.option.visual.animatedWindowBackground": "动态窗口背景", // Toggle
"settings.option.visual.hardwareAcceleration": "硬件加速", // Dropdown
"settings.header.visual.hardwareAcceleration.default": "默认",
"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.header.general.description": "调整 Cider 的通用设置",
// Settings - Lyrics
"settings.header.lyrics": "歌词",
"settings.header.lyrics.description": "调整Cider的歌词设置",
"settings.header.lyrics.description": "调整 Cider 的歌词设置",
"settings.option.lyrics.enableMusixmatch": "启用 Musixmatch 歌词", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "启用卡拉 OK 模式(仅 Musixmatch", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch 歌词语言偏好", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "播放 MV 时使用 YouTube 歌词", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "外部连接",
"settings.header.connectivity.description": "调整Cider与外部的连接",
"settings.header.connectivity.description": "调整Cider与外部应用的交互设置",
"settings.option.connectivity.discordRPC": "Discord 动态", // Dropdown
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "显示正在玩 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "显示正在玩 'Apple Music'",
"settings.header.connectivity.discordRPC.clearOnPause": "暂停时清除Discord 动态", // Toggle
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling 记录", // Option to Connect
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "实验性功能",
"settings.header.experimental.description": "调整Cider的实验性功能",
"settings.option.experimental.compactUI": "紧凑型UI", // Toggle
// Refer to term.disabled & term.enabled
// Web Remote
"remote.web.title": "Cider 远程控制",
"remote.web.description": "扫描以下的二维码以控制 Cider"
}

180
src/i18n/zh_HK.jsonc Normal file
View file

@ -0,0 +1,180 @@
{
// App info
"app.name": "Cider",
// Dialogs
"dialog.cancel": "取消",
"dialog.ok": "確認",
// Notification
"notification.updatingLibrarySongs": "正在更新資料庫的歌曲...",
"notification.updatingLibraryAlbums": "正在更新資料庫的專輯...",
"notification.updatingLibraryArtists": "正在更新資料庫的藝人...",
// Terms
"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.search": "搜尋",
"term.library": "資料庫",
"term.recentlyAdded": "最近加入",
"term.songs": "歌曲",
"term.albums": "專輯",
"term.artists": "藝人",
"term.podcasts": "Podcasts",
"term.playlists": "播放列表",
"term.playlist": "播放列表",
"term.play": "播放",
"term.pause": "暫停",
"term.previous": "上一首",
"term.next": "下一首",
"term.shuffle": "隨機播放",
"term.repeat": "重複播放",
"term.volume": "音量",
"term.mute": "靜音",
"term.unmute": "取消靜音",
"term.share": "分享",
"term.settings": "設定",
"term.seeAll": "顯示全部",
"term.sortBy": "排序",
"term.sortBy.album": "專輯",
"term.sortBy.artist": "藝人",
"term.sortBy.name": "歌名",
"term.sortBy.genre": "音樂風格",
"term.sortBy.releaseDate": "發行日期",
"term.sortBy.duration": "時長",
"term.sortOrder": "字母排序",
"term.sortOrder.ascending": "順序",
"term.sortOrder.descending": "倒序",
"term.viewAs": "顯示模式",
"term.viewAs.coverArt": "專輯封面",
"term.viewAs.list": "列表",
"term.size.normal": "正常",
"term.size.compact": "緊凑",
"term.enable": "啟用",
"term.disable": "停用",
"term.enabled": "已啟用",
"term.disabled": "已停用",
"term.connect": "連結",
// Home
"home.title": "主頁",
"home.recentlyPlayed": "最近播放",
"home.recentlyAdded": "最近加入",
"home.artistsFeed": "藝人動態",
"home.madeForYou": "為您推薦",
"home.friendsListeningTo": "朋友正在聆聽",
"home.followedArtists": "追蹤的藝人",
// Errors
"error.appleMusicSubRequired": "需要訂閱Apple Music以使用Cider",
// Actions
"action.addToLibrary": "加入資料庫",
"action.addToLibrary.success": "成功加入資料庫",
"action.addToLibrary.error": "加入資料庫的過程發生錯誤",
"action.removeFromLibrary": "從資料庫刪除",
"action.removeFromLibrary.success": "已從資料庫刪除",
"action.addToQueue": "加入播放清單",
"action.addToQueue.success": "成功加入播放清單",
"action.addToQueue.error": "加入播放清單的過程發生錯誤",
"action.removeFromQueue": "從播放清單刪除",
"action.removeFromQueue.success": "已從播放清單刪除",
"action.removeFromQueue.error": "從播放清單刪除的過程中發生錯誤",
"action.addToPlaylist": "加至播放列表",
"action.addToFavorites": "加至收藏",
"action.follow": "追蹤",
"action.follow.success": "追蹤中",
"action.follow.error": "追蹤的過程發生錯誤",
"action.unfollow": "取消追蹤",
"action.unfollow.success": "已取消追蹤",
"action.unfollow.error": "取消追蹤的過程發生錯誤",
"action.playNext": "下一首",
"action.playLater": "稍後播放",
"action.startRadio": "建立電台",
"action.goToArtist": "前往藝人",
"action.goToAlbum": "前往專輯",
"action.moveToTop": "移動到頂部",
"action.share": "分享歌曲",
"action.rename": "重新命名",
"action.love": "喜愛",
"action.unlove": "取消喜愛",
"action.dislike": "減少此類建議",
"action.undoDislike": "還原減小此類建議",
"action.showWebRemoteQR": "顯示遙距控制二維碼",
// Settings - Audio
"settings.header.audio": "音訊",
"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": "啟用 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": "將音訊進行空間化處理來製造一個更立體的聆聽體驗(注:此功能不是官方的杜比全景聲)",
// Settings - Visual
"settings.header.visual": "外觀",
"settings.header.visual.description": "調整Cider的外觀",
"settings.option.visual.windowBackgroundStyle": "窗口背景樣式", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "空白",
"settings.header.visual.windowBackgroundStyle.artwork": "專輯封面",
"settings.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.extreme": "極高",
"settings.option.visual.animatedWindowBackground": "動態窗口背景", // Toggle
"settings.option.visual.hardwareAcceleration": "硬體加速", // Dropdown
"settings.header.visual.hardwareAcceleration.default": "默認",
"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 - Lyrics
"settings.header.lyrics": "歌詞",
"settings.header.lyrics.description": "調整Cider的歌詞設定",
"settings.option.lyrics.enableMusixmatch": "啟用 Musixmatch 歌詞", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "啟用卡拉OK模式僅限Musixmatch", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch 歌詞語言偏好", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "播放MV時使用YouTube歌詞", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "外部連結",
"settings.header.connectivity.description": "調整Cider與外部的連結",
"settings.option.connectivity.discordRPC": "Discord 狀態", // Dropdown
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "顯示為'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "顯示為'Apple Music'",
"settings.header.connectivity.discordRPC.clearOnPause": "暫停時清除 Discord 狀態", // Toggle
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling 記錄", // Option to Connect
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "實驗性功能",
"settings.header.experimental.description": "調整Cider的實驗性功能",
"settings.option.experimental.compactUI": "緊凑型UI", // Toggle
// Refer to term.disabled & term.enabled
// Web Remote
"remote.web.title": "遙距控制 Cider",
"remote.web.description": "掃描以下的二維碼以控制 Cider",
}

View file

@ -1,9 +1,15 @@
{
// App info
"app.name": "Cider",
// Dialogs
"dialog.cancel": "取消",
"dialog.ok": "OK",
// Notification
"notification.updatingLibrarySongs": "正在更新資料庫的歌曲...",
"notification.updatingLibraryAlbums": "正在更新資料庫的專輯...",
"notification.updatingLibraryArtists": "正在更新資料庫的藝人...",
// Terms
"term.appleMusic": "Apple Music", // Follows brand term
"term.applePodcasts": "Apple Podcasts", // Follows brand term
@ -38,6 +44,27 @@
"term.share": "分享",
"term.settings": "設定",
"term.seeAll": "顯示全部",
"term.sortBy": "排序",
"term.sortBy.album": "專輯",
"term.sortBy.artist": "藝人",
"term.sortBy.name": "歌名",
"term.sortBy.genre": "音樂風格",
"term.sortBy.releaseDate": "發行日期",
"term.sortBy.duration": "時長",
"term.sortOrder": "字母排序",
"term.sortOrder.ascending": "升序",
"term.sortOrder.descending": "降序",
"term.viewAs": "顯示模式",
"term.viewAs.coverArt": "專輯封面",
"term.viewAs.list": "列表",
"term.size.normal": "正常",
"term.size.compact": "緊凑",
"term.enable": "啟用",
"term.disable": "停用",
"term.enabled": "已啟用",
"term.disabled": "已停用",
"term.connect": "連接",
// Home
"home.title": "主頁",
"home.recentlyPlayed": "最近播放",
@ -76,20 +103,74 @@
"action.unlove": "取消喜愛",
"action.dislike": "減少此類建議",
"action.undoDislike": "還原減小此類建議",
// Settings
"action.showWebRemoteQR": "顯示遠程遙控行動條碼",
// Settings - Audio
"settings.header.audio": "音訊",
"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": "啟用 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": "將音訊進行空間化處理來製造一個更立體的聆聽體驗(注:此功能不是官方的杜比全景聲)",
// Settings - Visual
"settings.header.visual": "外觀",
"settings.header.visual.description": "調整Cider的外觀",
"settings.option.visual.windowBackgroundStyle": "窗口背景樣式", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "空白",
"settings.header.visual.windowBackgroundStyle.artwork": "專輯封面",
"settings.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.extreme": "極高",
"settings.option.visual.animatedWindowBackground": "動態窗口背景", // Toggle
"settings.option.visual.hardwareAcceleration": "硬體加速", // Dropdown
"settings.header.visual.hardwareAcceleration.default": "默認",
"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 - Lyrics
"settings.header.lyrics": "歌詞",
"settings.header.lyrics.description": "調整Cider的歌詞設定",
"settings.option.lyrics.enableMusixmatch": "啟用 Musixmatch 歌詞", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "啟用K歌模式僅限Musixmatch", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch 歌詞語言偏好", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "播放MV時使用YouTube歌詞", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "外部連接",
"settings.header.connectivity.description": "調整Cider與外部的連接",
"settings.option.connectivity.discordRPC": "Discord 動態", // Dropdown
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "顯示正在玩 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "顯示正在玩 'Apple Music'",
"settings.header.connectivity.discordRPC.clearOnPause": "暫停時清除 Discord 動態", // Toggle
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling 記錄", // Option to Connect
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "實驗性功能",
"settings.header.experimental.description": "調整Cider的實驗性功能",
"settings.option.experimental.compactUI": "緊凑型UI", // Toggle
// Refer to term.disabled & term.enabled
// Web Remote
"remote.web.title": "Cider 遠控",
"remote.web.description": "掃描以下的行動條碼以控制 Cider"
}

View file

@ -9,7 +9,8 @@ export class ConfigStore {
"close_behavior": 0, // 0 = close, 1 = minimize, 2 = minimize to tray
"startup_behavior": 0, // 0 = nothing, 1 = open on startup
"discord_rpc": 1, // 0 = disabled, 1 = enabled as Cider, 2 = enabled as Apple Music
"discordClearActivityOnPause": 1 // 0 = disabled, 1 = enabled
"discordClearActivityOnPause": 1, // 0 = disabled, 1 = enabled
"language" : "en_US"
},
"home": {
"followedArtists": [],

View file

@ -12,6 +12,7 @@ import * as os from "os";
import * as mm from 'music-metadata';
import fetch from 'electron-fetch'
import {wsapi} from "./wsapi";
import * as jsonc from "jsonc";
export class Win {
win: any | undefined = null;
@ -287,6 +288,24 @@ export class Win {
event.returnValue = process.platform;
});
console.warn(path.join(__dirname, "../../src/i18n/en_US.jsonc"))
electron.ipcMain.on("get-i18n", (event, key) => {
let i18nBase = fs.readFileSync(path.join(__dirname, "../../src/i18n/en_US.jsonc"), "utf8");
i18nBase = jsonc.parse(i18nBase)
try {
let i18n = fs.readFileSync(path.join(__dirname, `../../src/i18n/${key}.jsonc`), "utf8");
i18n = jsonc.parse(i18n)
Object.assign(i18nBase, i18n)
}catch(e) {
console.error(e);
event.returnValue = e;
}
event.returnValue = i18nBase;
});
electron.ipcMain.on("get-gpu-mode", (event) => {
event.returnValue = process.platform;
});
@ -392,6 +411,10 @@ export class Win {
this.win.maximize();
}
});
electron.ipcMain.on("unmaximize", () => {
// listen for maximize event
this.win.unmaximize();
});
electron.ipcMain.on("minimize", () => {
// listen for minimize event
@ -403,9 +426,12 @@ export class Win {
this.win.webContents.setZoomFactor(parseFloat(scale));
});
electron.ipcMain.on("windowmin", (event, width, height) => {
this.win.setMinimumSize(width,height);
})
// Set scale
electron.ipcMain.on("windowresize", (event, width, height, lock = false) => {
this.win.setMinimumSize(250,250);
this.win.setContentSize(width, height);
this.win.setResizable(!lock);
});

View file

@ -134,9 +134,7 @@ const app = new Vue({
platform: "",
mk: {},
quickPlayQuery: "",
lz: {
},
lz: ipcRenderer.sendSync("get-i18n", "en_US"),
search: {
term: "",
hints: [],
@ -339,6 +337,12 @@ const app = new Vue({
},
},
methods: {
setLz(lang) {
if(lang == "") {
lang = this.cfg.general.language
}
this.lz = ipcRenderer.sendSync("get-i18n", lang)
},
getLz(message) {
if(this.lz[message]) {
return this.lz[message]
@ -499,6 +503,7 @@ const app = new Vue({
},
async init() {
let self = this
this.setLz(this.cfg.general.language)
clearTimeout(this.hangtimer)
this.mk = MusicKit.getInstance()
let needsReload = (typeof localStorage["music.ampwebplay.media-user-token"] == "undefined")
@ -3320,10 +3325,12 @@ const app = new Vue({
if (flag) {
this.tmpWidth = window.innerWidth;
this.tmpHeight = window.innerHeight;
ipcRenderer.send('setFullScreen', false);
ipcRenderer.send('windowresize', 364, 364, false)
ipcRenderer.send('unmaximize');
ipcRenderer.send('windowmin', 250, 250)
ipcRenderer.send('windowresize', 300, 300, false)
app.appMode = 'mini';
} else {
ipcRenderer.send('windowmin', 844, 410)
ipcRenderer.send('windowresize', this.tmpWidth, this.tmpHeight, false)
app.appMode = 'player';
}

View file

@ -3075,6 +3075,12 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
transition: opacity 0.1s var(--appleEase);
}
&.animated .artist-header .more-btn-round {
position: absolute;
bottom: 22px !important;
right: 28px;
}
.artist-header {
//background: linear-gradient(45deg, var(--keyColor), #0e0e0e);
color: white;
@ -3088,6 +3094,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
z-index: 1;
}
.artworkContainer {
position: absolute;
top: 0;
@ -3112,7 +3119,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
.more-btn-round {
position: absolute;
bottom: 84px;
bottom: 82px;
right: 28px;
}
@ -3205,8 +3212,6 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
}
}
.artist-title {
position: relative;
top: -19px;
.artist-play {
transform: translateY(3px);
@ -3229,7 +3234,12 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
.artist-body {
padding: 0px var(--contentInnerPadding) 0px var(--contentInnerPadding);
margin-top: -137px;
margin-top: -140px;
}
&.animated > .artist-body {
padding: 0px var(--contentInnerPadding) 0px var(--contentInnerPadding);
margin-top: -57px;
}
.showmoreless {

View file

@ -3,6 +3,7 @@
v-observe-visibility="{callback: visibilityChanged}">
<img :src="app.getMediaItemArtwork(url, size, width)"
decoding="async" loading="lazy"
:style="{background: bgcolor}"
class="mediaitem-artwork--img">
<div v-if="video && isVisible && getVideoPriority()" class="animatedartwork-view-box">
<animatedartwork-view :priority="getVideoPriority()" :video="video"></animatedartwork-view>
@ -22,6 +23,10 @@
type: [String, Number],
required: false
},
bgcolor: {
type: String,
default: ''
},
url: {
type: String,
default: ''

View file

@ -28,6 +28,7 @@
<mediaitem-artwork
:url="item.attributes.artwork ? item.attributes.artwork.url : ''"
:size="48"
:bgcolor="getBgColor()"
:type="item.type"></mediaitem-artwork>
<button class="overlay-play" @click="playTrack()"><%- include("../svg/play.svg") %></button>
</div>
@ -102,6 +103,10 @@
this.getClasses()
},
methods: {
getBgColor() {
let color = `#${(this.item.attributes.artwork != null && this.item.attributes.artwork.bgColor != null) ? (this.item.attributes.artwork.bgColor) : ``}`
return color
},
async checkLibrary() {
if(this.addedToLibrary) {return this.addedToLibrary}
if(this.item.type.includes("library-playlists") || this.item.type.includes("station")) {

View file

@ -11,6 +11,7 @@
: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="size"
shadow="subtle"
:bgcolor="getBgColor()"
:type="item.type"></mediaitem-artwork>
</div>
<button class="menu-btn" v-if="!nomenu.includes(item.type)"
@ -75,22 +76,8 @@
},
methods: {
getBgColor() {
let color = `#${(this.item.attributes.artwork != null && this.item.attributes.artwork.bgColor != null) ? (this.item.attributes.artwork.bgColor) : `333333`}`
let c = color.substring(1); // strip #
var rgb = parseInt(c, 16); // convert rrggbb to decimal
var r = (rgb >> 16) & 0xff; // extract red
var g = (rgb >> 8) & 0xff; // extract green
var b = (rgb >> 0) & 0xff; // extract blue
var luma = 0.2126 * r + 0.7152 * g + 0.0722 * b; // per ITU-R BT.709
if (luma > 140) {
return "#aaaaaa"
}else{
return color
}
let color = `#${(this.item.attributes.artwork != null && this.item.attributes.artwork.bgColor != null) ? (this.item.attributes.artwork.bgColor) : ``}`
return color
},
getSubtitle() {
if(this.kind == 'card') {

View file

@ -204,32 +204,32 @@
<div class="app-sidebar-header-text">
Cider
</div>
<sidebar-library-item name="Home" svg-icon="./assets/feather/home.svg" page="home">
<sidebar-library-item :name="$root.getLz('home.title')" svg-icon="./assets/feather/home.svg" page="home">
</sidebar-library-item>
<div class="app-sidebar-header-text">
Apple Music
</div>
<sidebar-library-item name="Listen Now" svg-icon="./assets/feather/play-circle.svg"
<sidebar-library-item :name="$root.getLz('term.listenNow')" svg-icon="./assets/feather/play-circle.svg"
page="listen_now"></sidebar-library-item>
<sidebar-library-item name="Browse" svg-icon="./assets/feather/globe.svg" page="browse">
<sidebar-library-item :name="$root.getLz('term.browse')" svg-icon="./assets/feather/globe.svg" page="browse">
</sidebar-library-item>
<sidebar-library-item name="Radio" svg-icon="./assets/feather/radio.svg" page="radio">
<sidebar-library-item :name="$root.getLz('term.radio')" svg-icon="./assets/feather/radio.svg" page="radio">
</sidebar-library-item>
<div class="app-sidebar-header-text">
Library
</div>
<sidebar-library-item name="Recently Added" svg-icon="./assets/feather/plus-circle.svg"
<sidebar-library-item :name="$root.getLz('term.recentlyAdded')" svg-icon="./assets/feather/plus-circle.svg"
page="library-recentlyadded"></sidebar-library-item>
<sidebar-library-item name="Songs" svg-icon="./assets/feather/music.svg"
<sidebar-library-item :name="$root.getLz('term.songs')" svg-icon="./assets/feather/music.svg"
page="library-songs"></sidebar-library-item>
<sidebar-library-item name="Albums" svg-icon="./assets/feather/disc.svg"
<sidebar-library-item :name="$root.getLz('term.albums')" svg-icon="./assets/feather/disc.svg"
page="library-albums"></sidebar-library-item>
<sidebar-library-item name="Artists" svg-icon="./assets/feather/user.svg"
<sidebar-library-item :name="$root.getLz('term.artists')" svg-icon="./assets/feather/user.svg"
page="library-artists"></sidebar-library-item>
<sidebar-library-item name="Podcasts" svg-icon="./assets/feather/mic.svg" page="podcasts">
<sidebar-library-item :name="$root.getLz('term.podcasts')" svg-icon="./assets/feather/mic.svg" page="podcasts">
</sidebar-library-item>
<div class="app-sidebar-header-text" @contextmenu="playlistHeaderContextMenu">
Playlists
{{ $root.getLz('term.playlists') }}
</div>
<sidebar-playlist v-for="item in getPlaylistFolderChildren('p.playlistsroot')" :item="item">
</sidebar-playlist>
@ -240,7 +240,7 @@
<button class="usermenu-item" @click="showWebRemoteQR()">
<div class="row nopadding">
<div class="col nopadding">
Show Web Remote QR
{{$root.getLz('action.showWebRemoteQR')}}
</div>
</div>
</button>

View file

@ -1,5 +1,5 @@
<script type="text/x-template" id="cider-artist">
<div class="content-inner artist-page">
<div class="content-inner artist-page" :class="[data.attributes.editorialVideo && (data.attributes.editorialVideo.motionArtistWide16x9 || data.attributes.editorialVideo.motionArtistFullscreen16x9) ? 'animated' : '']">
<div class="artist-header" :key="data.id" v-observe-visibility="{callback: isHeaderVisible}">
<animatedartwork-view
:priority="true"
@ -73,7 +73,7 @@
<h3>Top Songs</h3>
</div>
<div class="col-auto flex-center" v-if="data.views['top-songs'].data.length >= 10" style="padding:0;">
<button class="cd-btn-seeall" @click="app.showArtistView(data.id, data.attributes.name + ' - Top Songs', 'top-songs')">See All</button>
<button class="cd-btn-seeall" @click="app.showArtistView(data.id, data.attributes.name + ' - Top Songs', 'top-songs')">{{app.getLz('term.seeAll')}}</button>
</div>
</div>
<mediaitem-list-item
@ -104,7 +104,7 @@
</h3>
</div>
<div class="col-auto flex-center" v-if="data.views[view].data.length >= 10">
<button class="cd-btn-seeall" @click="app.showArtistView(data.id, data.attributes.name + ' - ' + data.views[view].attributes.title, view)">See All</button>
<button class="cd-btn-seeall" @click="app.showArtistView(data.id, data.attributes.name + ' - ' + data.views[view].attributes.title, view)">{{app.getLz('term.seeAll')}}</button>
</div>
</div>
<template v-if="!((data.views[view].attributes.title ?

View file

@ -508,6 +508,22 @@
</button>
</div>
</div>
<div class="md-option-line">
<div class="md-option-segment">
Language
</div>
<div class="md-option-segment md-option-segment_auto">
<select class="md-select" @change="$root.setLz('')" v-model="app.cfg.general.language">
<option value="en_US">en_US</option>
<option value="el_GR">el_GR</option>
<option value="ja_JP">ja_JP</option>
<option value="tr_TR">tr_TR</option>
<option value="zh_CN">zh_CN</option>
<option value="zh_TW">zh_TW</option>
</select>
</div>
</div>
</div>
<div style="opacity: 0.5; pointer-events: none">
<div class="md-option-header">

View file

@ -393,12 +393,12 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
}
.player-volume-glyph.decrease {
background-image: url("./assets/volume.svg");
background-image: url("./assets/volume-down.svg");
opacity: 0.5;
}
.player-volume-glyph.increase {
background-image: url("./assets/volume-2.svg");
background-image: url("./assets/volume-up.svg");
opacity: 0.5;
}

View file

@ -29,20 +29,20 @@
</div>
<div class="miniplayer-controls">
<button class="md-btn playback-button--small shuffle" @click="shuffle()"
v-if="player.currentMediaItem.shuffleMode == 0"></button>
<button class="md-btn playback-button--small shuffle active" @click="shuffle()" v-else></button>
<button class="md-btn playback-button previous" @click="previous()"></button>
<button class="md-btn playback-button pause" @click="pause()"
v-if="player.currentMediaItem.status"></button>
<button class="md-btn playback-button play" @click="play()" v-else></button>
<button class="md-btn playback-button next" @click="next()"></button>
<button class="md-btn playback-button--small repeat" @click="repeat()"
v-if="player.currentMediaItem.repeatMode == 0"></button>
<button class="md-btn playback-button--small repeat active" @click="repeat()"
v-else-if="player.currentMediaItem.repeatMode == 2"></button>
<button class="md-btn playback-button--small repeat repeatOne" @click="repeat()"
v-else-if="player.currentMediaItem.repeatMode == 1"></button>
<button class="md-btn playback-button previous" @click="previous()"></button>
<button class="md-btn playback-button pause" @click="pause()"
v-if="player.currentMediaItem.status"></button>
<button class="md-btn playback-button play" @click="play()" v-else></button>
<button class="md-btn playback-button next" @click="next()"></button>
<button class="md-btn playback-button--small shuffle" @click="shuffle()"
v-if="player.currentMediaItem.shuffleMode == 0"></button>
<button class="md-btn playback-button--small shuffle active" @click="shuffle()" v-else></button>
</div>
</div>
</template>
@ -151,21 +151,20 @@
</div>
</div>
<div class="md-footer playback-buttons">
<button class="md-btn playback-button--small shuffle" @click="shuffle()"
v-if="player.currentMediaItem.shuffleMode == 0"></button>
<button class="md-btn playback-button--small shuffle active" @click="shuffle()" v-else></button>
<button class="md-btn playback-button previous" @click="previous()"></button>
<button class="md-btn playback-button pause" @click="pause()"
v-if="player.currentMediaItem.status"></button>
<button class="md-btn playback-button play" @click="play()" v-else></button>
<button class="md-btn playback-button next" @click="next()"></button>
<button class="md-btn playback-button--small repeat" @click="repeat()"
v-if="player.currentMediaItem.repeatMode == 0"></button>
<button class="md-btn playback-button--small repeat active" @click="repeat()"
v-else-if="player.currentMediaItem.repeatMode == 2"></button>
<button class="md-btn playback-button--small repeat repeatOne" @click="repeat()"
v-else-if="player.currentMediaItem.repeatMode == 1"></button>
<button class="md-btn playback-button previous" @click="previous()"></button>
<button class="md-btn playback-button pause" @click="pause()"
v-if="player.currentMediaItem.status"></button>
<button class="md-btn playback-button play" @click="play()" v-else></button>
<button class="md-btn playback-button next" @click="next()"></button>
<button class="md-btn playback-button--small shuffle" @click="shuffle()"
v-if="player.currentMediaItem.shuffleMode == 0"></button>
<button class="md-btn playback-button--small shuffle active" @click="shuffle()"
v-else></button>
</div>
<div class="md-footer">
<div class="row volume-slider-container">