Merge branch 'ciderapp:upcoming' into upcoming

This commit is contained in:
yazninja 2022-01-24 18:20:52 +08:00 committed by GitHub
commit 77851b8bde
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 634 additions and 85 deletions

View file

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

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

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

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

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

View file

@ -1,9 +1,15 @@
{ { // Base File
// App info // App info
"app.name": "Cider", "app.name": "Cider",
// Dialogs // Dialogs
"dialog.cancel": "Cancel", "dialog.cancel": "Cancel",
"dialog.ok": "OK", "dialog.ok": "OK",
// Notification
"notification.updatingLibrarySongs": "Updating library songs...",
"notification.updatingLibraryAlbums": "Updating library albums...",
"notification.updatingLibraryArtists": "Updating library artists...",
// Terms // Terms
"term.appleMusic": "Apple Music", "term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts", "term.applePodcasts": "Apple Podcasts",
@ -19,6 +25,9 @@
"term.queue": "Queue", "term.queue": "Queue",
"term.search": "Search", "term.search": "Search",
"term.library": "Library", "term.library": "Library",
"term.listenNow": "Listen Now",
"term.browse": "Browse",
"term.radio": "Radio",
"term.recentlyAdded": "Recently Added", "term.recentlyAdded": "Recently Added",
"term.songs": "Songs", "term.songs": "Songs",
"term.albums": "Albums", "term.albums": "Albums",
@ -38,6 +47,27 @@
"term.share": "Share", "term.share": "Share",
"term.settings": "Settings", "term.settings": "Settings",
"term.seeAll": "See All", "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
"home.title": "Home", "home.title": "Home",
"home.recentlyPlayed": "Recently Played", "home.recentlyPlayed": "Recently Played",
@ -48,6 +78,7 @@
"home.followedArtists": "Followed Artists", "home.followedArtists": "Followed Artists",
// Errors // Errors
"error.appleMusicSubRequired": "Apple Music requires a subscription.", "error.appleMusicSubRequired": "Apple Music requires a subscription.",
// Actions // Actions
"action.addToLibrary": "Add to Library", "action.addToLibrary": "Add to Library",
"action.addToLibrary.success": "Added to Library", "action.addToLibrary.success": "Added to Library",
@ -76,20 +107,72 @@
"action.unlove": "Unlove", "action.unlove": "Unlove",
"action.dislike": "Dislike", "action.dislike": "Dislike",
"action.undoDislike": "Undo dislike", "action.undoDislike": "Undo dislike",
// Settings "action.showWebRemoteQR": "Show Web Remote QR",
// Settings - Audio
"settings.header.audio": "Audio", "settings.header.audio": "Audio",
"settings.header.audio.description": "Adjust the audio settings for Cider.", "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.high": "High",
"settings.header.audio.quality.low": "Low", "settings.header.audio.quality.low": "Low",
"settings.header.audio.quality.auto": "Auto", "settings.header.audio.quality.auto": "Auto",
"settings.option.audio.seamlessTransition": "Seamless Audio Transition", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Enable Advanced Functionality", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "Enabling AudioContext functionality will allow for extended audio features like Audio Normalization , Equalizers and Visualizers, however on some systems this may cause stuttering in audio tracks.",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Normalization", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatialization", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialize audio and make audio more 3-dimensional (note: This is not Dolby Atmos)",
// Settings - Visual
"settings.header.visual": "Visual", "settings.header.visual": "Visual",
"settings.header.visual.description": "Adjust the visual settings for Cider.", "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": "General",
"settings.header.general.description": "Adjust the general settings for Cider.", "settings.header.general.description": "Adjust the general settings for Cider.",
// Settings - Lyrics
"settings.header.lyrics": "Lyrics", "settings.header.lyrics": "Lyrics",
"settings.header.lyrics.description": "Adjust the lyrics settings for Cider.", "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": "Connectivity",
"settings.header.connectivity.description": "Adjust the connectivity settings for Cider.", "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": "Experimental",
"settings.header.experimental.description": "Adjust the experimental settings for Cider.", "settings.header.experimental.description": "Adjust the experimental settings for Cider.",
"settings.option.experimental.compactUI": "Compact UI", // Toggle
// Refer to term.disabled & term.enabled
// Web Remote
"remote.web.title": "Cider Remote",
"remote.web.description": "Scan the QR code to pair your phone up with this Cider instance"
} }

View file

@ -4,6 +4,12 @@
// Dialogs // Dialogs
"dialog.cancel": "キャンセル", "dialog.cancel": "キャンセル",
"dialog.ok": "OK", "dialog.ok": "OK",
// Notification
"notification.updatingLibrarySongs": "ライブラリの更新中...",
"notification.updatingLibraryAlbums": "ライブラリの更新中...",
"notification.updatingLibraryArtists": "ライブラリの更新中...",
// Terms // Terms
"term.appleMusic": "Apple Music", // Follows brand term "term.appleMusic": "Apple Music", // Follows brand term
"term.applePodcasts": "Apple Podcasts", // Follows brand term "term.applePodcasts": "Apple Podcasts", // Follows brand term
@ -14,7 +20,7 @@
"term.accountSettings": "アカウント設定", "term.accountSettings": "アカウント設定",
"term.logout": "サインアウト", "term.logout": "サインアウト",
"term.login": "サインイン", "term.login": "サインイン",
"term.about": "アプリについて", "term.about": "Ciderについて",
"term.privateSession": "プライベートセッション", "term.privateSession": "プライベートセッション",
"term.queue": "次はこちら", "term.queue": "次はこちら",
"term.search": "検索", "term.search": "検索",
@ -37,7 +43,28 @@
"term.unmute": "ミュート解除", "term.unmute": "ミュート解除",
"term.share": "共有", "term.share": "共有",
"term.settings": "設定", "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
"home.title": "ホーム", "home.title": "ホーム",
"home.recentlyPlayed": "最近の再生", "home.recentlyPlayed": "最近の再生",
@ -51,7 +78,7 @@
// Actions // Actions
"action.addToLibrary": "ライブラリに追加", "action.addToLibrary": "ライブラリに追加",
"action.addToLibrary.success": "ライブラリに追加されました", "action.addToLibrary.success": "ライブラリに追加されました",
"action.addToLibrary.error": "ついか", "action.addToLibrary.error": "ライブラリへの追加に失敗しました",
"action.removeFromLibrary": "ライブラリから削除", "action.removeFromLibrary": "ライブラリから削除",
"action.removeFromLibrary.success": "ライブラリから削除されました", "action.removeFromLibrary.success": "ライブラリから削除されました",
"action.addToQueue": "キューに追加", "action.addToQueue": "キューに追加",
@ -76,20 +103,73 @@
"action.unlove": "ラブを解除", "action.unlove": "ラブを解除",
"action.dislike": "これに似たものをすすめない", "action.dislike": "これに似たものをすすめない",
"action.undoDislike": "「これと似た曲のおすすめを減らす」を取り消す", "action.undoDislike": "「これと似た曲のおすすめを減らす」を取り消す",
// Settings "action.showWebRemoteQR": "WEBリモコンQRコードを表示",
// Settings - Audio
"settings.header.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.high": "高品質",
"settings.header.audio.quality.low": "高効率", "settings.header.audio.quality.low": "高効率",
"settings.header.audio.quality.auto": "自動", "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": "ビジュアル",
"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": "一般",
"settings.header.general.description": "Ciderの一般設定", "settings.header.general.description": "Ciderの一般設定",
// Settings - Lyrics
"settings.header.lyrics": "歌詞", "settings.header.lyrics": "歌詞",
"settings.header.lyrics.description": "歌詞の表示設定", "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": "アプリと連携",
"settings.header.connectivity.description": "Ciderの連携設定", "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": "試験的な機能",
"settings.header.experimental.description": "Ciderの試験的な機能", "settings.header.experimental.description": "開発中の実験的な機能は不完全で不安定である可能性があります",
"settings.option.experimental.compactUI": "コンパクトインターフェース", // Toggle
// Refer to term.disabled & term.enabled
// Web Remote
"remote.web.title": "Cider リモート",
"remote.web.description": "QRコードを使用して、Ciderとスマートフォンをペアリングする",
} }

View file

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

View file

@ -4,6 +4,12 @@
// Dialogs // Dialogs
"dialog.cancel": "取消", "dialog.cancel": "取消",
"dialog.ok": "确定", "dialog.ok": "确定",
// Notification
"notification.updatingLibrarySongs": "正在更新资料库的歌曲信息...",
"notification.updatingLibraryAlbums": "正在更新资料库的专辑信息...",
"notification.updatingLibraryArtists": "正在更新资料库的艺人信息...",
// Terms // Terms
"term.appleMusic": "Apple Music", // Follows brand term "term.appleMusic": "Apple Music", // Follows brand term
"term.applePodcasts": "Apple Podcasts", // Follows brand term "term.applePodcasts": "Apple Podcasts", // Follows brand term
@ -18,11 +24,11 @@
"term.privateSession": "私人聆听", "term.privateSession": "私人聆听",
"term.queue": "队列", "term.queue": "队列",
"term.search": "搜索", "term.search": "搜索",
"term.library": "音乐库", "term.library": "资料库",
"term.recentlyAdded": "最近添加", "term.recentlyAdded": "最近添加",
"term.songs": "歌曲", "term.songs": "歌曲",
"term.albums": "专辑", "term.albums": "专辑",
"term.artists": "歌手", "term.artists": "艺人",
"term.podcasts": "播客", "term.podcasts": "播客",
"term.playlists": "播放列表", "term.playlists": "播放列表",
"term.playlist": "播放列表", "term.playlist": "播放列表",
@ -38,22 +44,45 @@
"term.share": "分享", "term.share": "分享",
"term.settings": "设置", "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": "升序",
"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
"home.title": "主页", "home.title": "主页",
"home.recentlyPlayed": "最近播放", "home.recentlyPlayed": "最近播放",
"home.recentlyAdded": "最近添加", "home.recentlyAdded": "最近添加",
"home.artistsFeed": "您的歌手推荐", "home.artistsFeed": "艺人推荐",
"home.madeForYou": "为您量身定制", "home.madeForYou": "专属推荐",
"home.friendsListeningTo": "朋友正在听", "home.friendsListeningTo": "朋友正在听",
"home.followedArtists": "关注的歌手", "home.followedArtists": "关注的艺人",
// Errors // Errors
"error.appleMusicSubRequired": "需要订阅Apple Music以使用Cider", "error.appleMusicSubRequired": "需要订阅 Apple Music 以使用 Cider",
// Actions // Actions
"action.addToLibrary": "加入音乐库", "action.addToLibrary": "加入资料库",
"action.addToLibrary.success": "成功加入音乐库", "action.addToLibrary.success": "成功加入资料库",
"action.addToLibrary.error": "加入音乐库的过程发生了错误", "action.addToLibrary.error": "加入资料库的过程发生了错误",
"action.removeFromLibrary": "从音乐库中移除", "action.removeFromLibrary": "从资料库中移除",
"action.removeFromLibrary.success": "已从音乐库中移除", "action.removeFromLibrary.success": "已从资料库中移除",
"action.addToQueue": "加入队列", "action.addToQueue": "加入队列",
"action.addToQueue.success": "成功加入队列", "action.addToQueue.success": "成功加入队列",
"action.addToQueue.error": "加入队列的过程发生了错误", "action.addToQueue.error": "加入队列的过程发生了错误",
@ -69,27 +98,79 @@
"action.playNext": "下一首播放", "action.playNext": "下一首播放",
"action.playLater": "最后播放", "action.playLater": "最后播放",
"action.startRadio": "开始电台", "action.startRadio": "开始电台",
"action.goToArtist": "前往歌手", "action.goToArtist": "前往艺人",
"action.goToAlbum": "前往专辑", "action.goToAlbum": "前往专辑",
"action.share": "分享歌曲", "action.share": "分享歌曲",
"action.love": "喜欢", "action.love": "喜欢",
"action.unlove": "取消喜欢", "action.unlove": "",
"action.dislike": "减少此类建议", "action.dislike": "减少此类建议",
"action.undoDislike": "撤销减少此类建议", "action.undoDislike": "增加此类建议",
// Settings "action.showWebRemoteQR": "显示远程控制的二维码",
// Settings - Audio
"settings.header.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.high": "高音质",
"settings.header.audio.quality.low": "高效率", "settings.header.audio.quality.low": "高效率",
"settings.header.audio.quality.auto": "自动", "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": "外观",
"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": "通用",
"settings.header.general.description": "调整Cider的通用设置", "settings.header.general.description": "调整 Cider 的通用设置",
// Settings - Lyrics
"settings.header.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": "外部连接",
"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": "实验性功能",
"settings.header.experimental.description": "调整Cider的实验性功能", "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"
} }

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

@ -0,0 +1,176 @@
{
// 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.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.share": "分享歌曲",
"action.love": "喜歡",
"action.unlove": "取消喜歡",
"action.dislike": "減少此類建議",
"action.undoDislike": "還原減小此類建議",
"action.showWebRemoteQR": "顯示遙距控制二維碼",
// Settings - Audio
"settings.header.audio": "音訊",
"settings.header.audio.description": "調整Cider的音訊設定",
"settings.option.audio.quality": "音訊音質", // Dropdown
"settings.header.audio.quality.high": "高素質",
"settings.header.audio.quality.low": "高效率",
"settings.header.audio.quality.auto": "自動",
"settings.option.audio.seamlessTransition": "無間斷播放", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "進階功能", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "啟用 AudioContext 將解鎖類似音量平衡和等化器的進階功能。但是會在一些電腦造成音樂卡頓。",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音量平衡", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "將平衡輕柔和響亮的歌曲,建立更統一的聆聽體驗。",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "空間音訊", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "將音訊進行空間化處理來製造一個更立體的聆聽體驗(注:此功能不是官方的杜比全景聲)",
// Settings - Visual
"settings.header.visual": "外觀",
"settings.header.visual.description": "調整Cider的外觀",
"settings.option.visual.windowBackgroundStyle": "窗口背景樣式", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "空白",
"settings.header.visual.windowBackgroundStyle.artwork": "專輯封面",
"settings.option.visual.animatedArtwork": "動態專輯封面", // Dropdown
"settings.header.visual.animatedArtwork.always": "總是顯示",
"settings.header.visual.animatedArtwork.limited": "只在藝人頁面和專輯封面顯示",
"settings.header.visual.animatedArtwork.disable": "關閉",
"settings.option.visual.animatedArtworkQuality": "動態專輯封面品質", // Dropdown
"settings.header.visual.animatedArtworkQuality.low": "低",
"settings.header.visual.animatedArtworkQuality.medium": "中",
"settings.header.visual.animatedArtworkQuality.high": "高",
"settings.header.visual.animatedArtworkQuality.extreme": "極高",
"settings.option.visual.animatedWindowBackground": "動態窗口背景", // Toggle
"settings.option.visual.hardwareAcceleration": "硬體加速", // Dropdown
"settings.header.visual.hardwareAcceleration.default": "默認",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
// Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "顯示個人檔案", // Toggle
// Settings - General (Reserved)
"settings.header.general": "一般",
"settings.header.general.description": "調整Cider的一般設定",
// Settings - Lyrics
"settings.header.lyrics": "歌詞",
"settings.header.lyrics.description": "調整Cider的歌詞設定",
"settings.option.lyrics.enableMusixmatch": "啟用 Musixmatch 歌詞", // Toggle
"settings.option.lyrics.enableMusixmatchKaraoke": "啟用卡拉OK模式僅限Musixmatch", // Toggle
"settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch 歌詞語言偏好", // Dropdown
"settings.option.lyrics.enableYoutubeLyrics": "播放MV時使用YouTube歌詞", // Toggle
// Settings - Connectivity
"settings.header.connectivity": "外部連結",
"settings.header.connectivity.description": "調整Cider與外部的連結",
"settings.option.connectivity.discordRPC": "Discord 狀態", // Dropdown
// Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "顯示正在玩 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "顯示正在玩 'Apple Music'",
"settings.header.connectivity.discordRPC.clearOnPause": "暫停時清除 Discord 狀態", // Toggle
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling 記錄", // Option to Connect
// Refer to term.connect for the connect button
// Settings - Experimental
"settings.header.experimental": "實驗性功能",
"settings.header.experimental.description": "調整Cider的實驗性功能",
"settings.option.experimental.compactUI": "緊凑型UI", // Toggle
// Refer to term.disabled & term.enabled
// Web Remote
"remote.web.title": "遙距控制 Cider",
"remote.web.description": "掃描以下的二維碼以控制 Cider",
}

View file

@ -1,9 +1,15 @@
{ {
// App info // App info
"app.name": "Cider", "app.name": "Cider",
// Dialogs // Dialogs
"dialog.cancel": "取消", "dialog.cancel": "取消",
"dialog.ok": "OK", "dialog.ok": "OK",
// Notification
"notification.updatingLibrarySongs": "正在更新資料庫的歌曲...",
"notification.updatingLibraryAlbums": "正在更新資料庫的專輯...",
"notification.updatingLibraryArtists": "正在更新資料庫的藝人...",
// Terms // Terms
"term.appleMusic": "Apple Music", // Follows brand term "term.appleMusic": "Apple Music", // Follows brand term
"term.applePodcasts": "Apple Podcasts", // Follows brand term "term.applePodcasts": "Apple Podcasts", // Follows brand term
@ -38,6 +44,27 @@
"term.share": "分享", "term.share": "分享",
"term.settings": "設定", "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": "升序",
"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
"home.title": "主頁", "home.title": "主頁",
"home.recentlyPlayed": "最近播放", "home.recentlyPlayed": "最近播放",
@ -76,20 +103,74 @@
"action.unlove": "取消喜愛", "action.unlove": "取消喜愛",
"action.dislike": "減少此類建議", "action.dislike": "減少此類建議",
"action.undoDislike": "還原減小此類建議", "action.undoDislike": "還原減小此類建議",
// Settings "action.showWebRemoteQR": "顯示遠程遙控行動條碼",
// Settings - Audio
"settings.header.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.high": "高品質",
"settings.header.audio.quality.low": "高效率", "settings.header.audio.quality.low": "高效率",
"settings.header.audio.quality.auto": "自動", "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": "外觀",
"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": "一般",
"settings.header.general.description": "調整Cider的一般設定", "settings.header.general.description": "調整Cider的一般設定",
// Settings - Lyrics
"settings.header.lyrics": "歌詞", "settings.header.lyrics": "歌詞",
"settings.header.lyrics.description": "調整Cider的歌詞設定", "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": "外部連接",
"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": "實驗性功能",
"settings.header.experimental.description": "調整Cider的實驗性功能", "settings.header.experimental.description": "調整Cider的實驗性功能",
"settings.option.experimental.compactUI": "緊凑型UI", // Toggle
// Refer to term.disabled & term.enabled
// Web Remote
"remote.web.title": "Cider 遠控",
"remote.web.description": "掃描以下的行動條碼以控制 Cider"
} }

View file

@ -12,6 +12,7 @@ import * as os from "os";
import * as mm from 'music-metadata'; import * as mm from 'music-metadata';
import fetch from 'electron-fetch' import fetch from 'electron-fetch'
import {wsapi} from "./wsapi"; import {wsapi} from "./wsapi";
import * as jsonc from "jsonc";
export class Win { export class Win {
win: any | undefined = null; win: any | undefined = null;
@ -287,6 +288,24 @@ export class Win {
event.returnValue = process.platform; 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) => { electron.ipcMain.on("get-gpu-mode", (event) => {
event.returnValue = process.platform; event.returnValue = process.platform;
}); });

View file

@ -134,9 +134,7 @@ const app = new Vue({
platform: "", platform: "",
mk: {}, mk: {},
quickPlayQuery: "", quickPlayQuery: "",
lz: { lz: ipcRenderer.sendSync("get-i18n", "en_US"),
},
search: { search: {
term: "", term: "",
hints: [], hints: [],
@ -339,6 +337,12 @@ const app = new Vue({
}, },
}, },
methods: { methods: {
setLz(lang) {
if(lang == "") {
lang = this.cfg.general.language
}
this.lz = ipcRenderer.sendSync("get-i18n", lang)
},
getLz(message) { getLz(message) {
if(this.lz[message]) { if(this.lz[message]) {
return this.lz[message] return this.lz[message]
@ -499,6 +503,7 @@ const app = new Vue({
}, },
async init() { async init() {
let self = this let self = this
this.setLz(this.cfg.general.language)
clearTimeout(this.hangtimer) clearTimeout(this.hangtimer)
this.mk = MusicKit.getInstance() this.mk = MusicKit.getInstance()
let needsReload = (typeof localStorage["music.ampwebplay.media-user-token"] == "undefined") let needsReload = (typeof localStorage["music.ampwebplay.media-user-token"] == "undefined")

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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