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}">
@@ -22,6 +23,10 @@ type: [String, Number], required: false }, + bgcolor: { + type: String, + default: '' + }, url: { type: String, default: '' diff --git a/src/renderer/views/components/mediaitem-list-item.ejs b/src/renderer/views/components/mediaitem-list-item.ejs index b691ee69..b99f68e0 100644 --- a/src/renderer/views/components/mediaitem-list-item.ejs +++ b/src/renderer/views/components/mediaitem-list-item.ejs @@ -28,6 +28,7 @@
@@ -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")) { diff --git a/src/renderer/views/components/mediaitem-square.ejs b/src/renderer/views/components/mediaitem-square.ejs index 67fae157..0a2cca53 100644 --- a/src/renderer/views/components/mediaitem-square.ejs +++ b/src/renderer/views/components/mediaitem-square.ejs @@ -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"> diff --git a/src/renderer/views/pages/artist.ejs b/src/renderer/views/pages/artist.ejs index e1be6bca..4eac7489 100644 --- a/src/renderer/views/pages/artist.ejs +++ b/src/renderer/views/pages/artist.ejs @@ -1,5 +1,5 @@