diff --git a/package.json b/package.json
index ca72e47e..25e68733 100644
--- a/package.json
+++ b/package.json
@@ -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": [
diff --git a/src/i18n/README.md b/src/i18n/README.md
new file mode 100644
index 00000000..fa5b5a67
--- /dev/null
+++ b/src/i18n/README.md
@@ -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.
\ No newline at end of file
diff --git a/src/i18n/el_GR.jsonc b/src/i18n/el_GR.jsonc
index c1d91af3..204f2575 100644
--- a/src/i18n/el_GR.jsonc
+++ b/src/i18n/el_GR.jsonc
@@ -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."
-}
\ No newline at end of file
+ "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 με το κινητό σας"
+}
diff --git a/src/i18n/en_GB.jsonc b/src/i18n/en_GB.jsonc
new file mode 100644
index 00000000..0788726a
--- /dev/null
+++ b/src/i18n/en_GB.jsonc
@@ -0,0 +1,3 @@
+{
+ "home.friendsListeningTo": "Bruv's Listening To"
+}
\ No newline at end of file
diff --git a/src/i18n/en_US.jsonc b/src/i18n/en_US.jsonc
index 79e4daed..c1f484b7 100644
--- a/src/i18n/en_US.jsonc
+++ b/src/i18n/en_US.jsonc
@@ -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.header.visual": "Visual",
+ "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"
}
\ No newline at end of file
diff --git a/src/i18n/ja_JP.jsonc b/src/i18n/ja_JP.jsonc
index da019992..60ac26a5 100644
--- a/src/i18n/ja_JP.jsonc
+++ b/src/i18n/ja_JP.jsonc
@@ -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の試験的な機能",
-}
\ No newline at end of file
+ "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とスマートフォンをペアリングする",
+
+}
diff --git a/src/i18n/tr_TR.jsonc b/src/i18n/tr_TR.jsonc
index 10d6bf3e..206e3c6e 100644
--- a/src/i18n/tr_TR.jsonc
+++ b/src/i18n/tr_TR.jsonc
@@ -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.)"
}
\ No newline at end of file
diff --git a/src/i18n/zh_CN.jsonc b/src/i18n/zh_CN.jsonc
index d37e463f..44afaaf8 100644
--- a/src/i18n/zh_CN.jsonc
+++ b/src/i18n/zh_CN.jsonc
@@ -1,9 +1,15 @@
-{
+{
// 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
@@ -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的实验性功能",
-}
\ No newline at end of file
+ "settings.option.experimental.compactUI": "紧凑型UI", // Toggle
+ // Refer to term.disabled & term.enabled
+
+ // Web Remote
+ "remote.web.title": "Cider 远程控制",
+ "remote.web.description": "扫描以下的二维码以控制 Cider"
+}
diff --git a/src/i18n/zh_HK.jsonc b/src/i18n/zh_HK.jsonc
new file mode 100644
index 00000000..2947fd5d
--- /dev/null
+++ b/src/i18n/zh_HK.jsonc
@@ -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",
+}
diff --git a/src/i18n/zh_TW.jsonc b/src/i18n/zh_TW.jsonc
index d57fccb4..f8ae2145 100644
--- a/src/i18n/zh_TW.jsonc
+++ b/src/i18n/zh_TW.jsonc
@@ -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"
}
\ No newline at end of file
diff --git a/src/main/base/store.ts b/src/main/base/store.ts
index b388df7b..66c0a6a4 100644
--- a/src/main/base/store.ts
+++ b/src/main/base/store.ts
@@ -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": [],
diff --git a/src/main/base/win.ts b/src/main/base/win.ts
index fb959568..3ec4f0fc 100644
--- a/src/main/base/win.ts
+++ b/src/main/base/win.ts
@@ -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);
});
diff --git a/src/renderer/index.js b/src/renderer/index.js
index fa069330..14462aa9 100644
--- a/src/renderer/index.js
+++ b/src/renderer/index.js
@@ -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';
}
diff --git a/src/renderer/style.less b/src/renderer/style.less
index 0c4e99db..26b94e6e 100644
--- a/src/renderer/style.less
+++ b/src/renderer/style.less
@@ -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 {
diff --git a/src/renderer/views/components/mediaitem-artwork.ejs b/src/renderer/views/components/mediaitem-artwork.ejs
index 7e169943..79ffa4f9 100644
--- a/src/renderer/views/components/mediaitem-artwork.ejs
+++ b/src/renderer/views/components/mediaitem-artwork.ejs
@@ -3,6 +3,7 @@
v-observe-visibility="{callback: visibilityChanged}">