新增将我的列表保存为TXT、CSV格式
parent
7f6e1c25e9
commit
0dc7815e35
|
@ -2,6 +2,7 @@
|
|||
|
||||
- 播放详情页新增音量控制条
|
||||
- 播放详情页新增桌面歌词切换按钮
|
||||
- 新增将我的列表保存为TXT、CSV格式,可以去设置-备份与恢复中使用(注意:此类格式的备份目前不支持恢复到LX Music中)
|
||||
|
||||
### 优化
|
||||
|
||||
|
|
|
@ -1,12 +1,8 @@
|
|||
{
|
||||
"action": "Manage",
|
||||
"agree": "Accept",
|
||||
"download": "Downloads",
|
||||
"leaderboard": "Charts",
|
||||
"my_list": "Your Library",
|
||||
"search": "Search",
|
||||
"setting": "Settings",
|
||||
"song_list": "Playlists",
|
||||
"back": "Back",
|
||||
"cancel_button_text": "Cancel",
|
||||
"close": "Close",
|
||||
"comment__hot_load_error": "Hot comments failed to load, click to try to reload",
|
||||
"comment__hot_loading": "Hot comments are loading",
|
||||
|
@ -18,7 +14,12 @@
|
|||
"comment__refresh": "Refresh comments",
|
||||
"comment__show": "Song comments",
|
||||
"comment__title": "{name} comment",
|
||||
"confirm_button_text": "OK",
|
||||
"copy_tip": " (Click to copy)",
|
||||
"date_format_hour": "{num} hours ago",
|
||||
"date_format_minute": "{num} minutes ago",
|
||||
"date_format_second": "{num} seconds ago",
|
||||
"default": "Default",
|
||||
"default_list": "Recently Played",
|
||||
"desktop_lyric__back": "Back",
|
||||
"desktop_lyric__close": "Close",
|
||||
|
@ -33,28 +34,56 @@
|
|||
"desktop_lyric__unlock": "Unlock Lyrics",
|
||||
"desktop_lyric__win_top_off": "Cancel the top lyrics interface",
|
||||
"desktop_lyric__win_top_on": "Top lyrics interface",
|
||||
"download": "Downloads",
|
||||
"download__all": "All Tasks",
|
||||
"download__error": "Error",
|
||||
"download__finished": "Download complete",
|
||||
"download__high_quality": "High Quality",
|
||||
"download__lossless": "Lossless",
|
||||
"download__multiple_tip": "{len} song selected",
|
||||
"download__multiple_tip2": "Select preferred download quality",
|
||||
"download__normal": "Normal",
|
||||
"download__not_available_tip": "The audio quality is not available",
|
||||
"download__paused": "Paused",
|
||||
"download__progress": "Progress",
|
||||
"download__quality": "Quality",
|
||||
"download__runing": "Downloading",
|
||||
"download__status": "Status",
|
||||
"export": "Export",
|
||||
"history_clear": "Clear History",
|
||||
"history_remove": "Right click to remove this entry",
|
||||
"history_search": "History Searches",
|
||||
"import": "Import",
|
||||
"leaderboard": "Charts",
|
||||
"list__add_to": "Add to ...",
|
||||
"list__collect": "Collect",
|
||||
"list__copy_name": "Copy name",
|
||||
"list__download": "Download",
|
||||
"list__export_part_desc": "Choose where to save the list file",
|
||||
"list__file": "Locate the file",
|
||||
"list__import_part_button_cancel": "Don't",
|
||||
"list__import_part_button_confirm": "Overwrite",
|
||||
"list__import_part_confirm": "The imported list ({importName}) has the same ID as the local list ({localName}). Do you want to overwrite the local list?",
|
||||
"list__import_part_desc": "Select List File",
|
||||
"list__load_failed": "Ah, the loading failed 😭",
|
||||
"list__loading": "List loading...⏳",
|
||||
"list__move_to": "Move to ...",
|
||||
"list__movedown": "Movedown",
|
||||
"list__moveup": "Move up",
|
||||
"list__new_list_btn": "New List",
|
||||
"list__new_list_input": "New list...",
|
||||
"list__pause": "Pause Task",
|
||||
"list__play": "Play",
|
||||
"list__play_later": "Play later",
|
||||
"list__remove": "Remove",
|
||||
"list__remove_tip": "Do you really want to remove {name}?",
|
||||
"list__remove_tip_button": "Yes, that's right",
|
||||
"list__rename": "Rename",
|
||||
"list__search": "Search",
|
||||
"list__sort": "Adjust position",
|
||||
"list__source_detail": "Song Page",
|
||||
"list__start": "Start Task",
|
||||
"list__sync": "Update",
|
||||
"list_add__btn_title": "Add the song(s) to {name}",
|
||||
"list_add__multiple_btn_title": "Add these song(s) to {name}",
|
||||
"list_add__multiple_title_add": "Add the selected {num} song(s) to ...",
|
||||
|
@ -87,9 +116,15 @@
|
|||
"lyric__select": "Lyric text selection",
|
||||
"min": "Minimize",
|
||||
"music_album": "Album",
|
||||
"music_duplicate": "Duplicate song",
|
||||
"music_name": "Name",
|
||||
"music_singer": "Artist",
|
||||
"music_sort__btn_confirm": "Confirm",
|
||||
"music_sort__input_tip": "Please input which position you want to adjust to",
|
||||
"music_sort__title": "Adjust the position of {name} to:",
|
||||
"music_sort__title_multiple": "Adjust the position of the selected {num} songs to:",
|
||||
"music_time": "Length",
|
||||
"my_list": "Your Library",
|
||||
"no_item": "Nothing's here...",
|
||||
"not_agree": "Not accept",
|
||||
"pagination__next": "Next page",
|
||||
|
@ -123,105 +158,10 @@
|
|||
"player__refresh_url": "Music URL expired, refreshing...",
|
||||
"player__stop": "Paused",
|
||||
"player__volume": "Volume: ",
|
||||
"source_alias_all": "Aggregated",
|
||||
"source_alias_bd": "BD Music",
|
||||
"source_alias_kg": "KG Music",
|
||||
"source_alias_kw": "KW Music",
|
||||
"source_alias_mg": "MG Music",
|
||||
"source_alias_tx": "TX Music",
|
||||
"source_alias_wy": "WY Music",
|
||||
"source_alias_xm": "XM Music",
|
||||
"source_all": "Aggregated",
|
||||
"source_bd": "Baidu",
|
||||
"source_kg": "Kugou",
|
||||
"source_kw": "Kuwo",
|
||||
"source_mg": "Migu",
|
||||
"source_tx": "Tencent",
|
||||
"source_wy": "Netease",
|
||||
"source_xm": "Xiami",
|
||||
"sync__merge_btn_local_remote": "Local list merge remote list",
|
||||
"sync__merge_btn_remote_local": "Remote list merge local list",
|
||||
"sync__merge_label": "Merge",
|
||||
"sync__merge_tip": "Merge:",
|
||||
"sync__merge_tip_desc": "Merge the two lists together, the same song will be removed (the song of the merged person is removed), and different songs will be added.",
|
||||
"sync__other_label": "Other",
|
||||
"sync__other_tip": "Other: ",
|
||||
"sync__other_tip_desc": "\"Only use real-time synchronization function\" will not modify the lists of both parties, only real-time synchronization operations; \"Cancel synchronization\" will directly disconnect the two parties.",
|
||||
"sync__overwrite": "Full coverage",
|
||||
"sync__overwrite_btn_cancel": "Cancel sync",
|
||||
"sync__overwrite_btn_local_remote": "Local list Overwrite remote list",
|
||||
"sync__overwrite_btn_none": "Only use real-time synchronization",
|
||||
"sync__overwrite_btn_remote_local": "Remote list Overwrite local list",
|
||||
"sync__overwrite_label": "Cover",
|
||||
"sync__overwrite_tip": "Cover: ",
|
||||
"sync__overwrite_tip_desc": "The list with the same ID of the covered person and the covered list will be deleted and replaced with the list of the covered person (lists with different list IDs will be merged together). If you check Complete coverage, all lists of the covered person will be moved. \nDivide, and then replace with a list of overriders.",
|
||||
"sync__title": "Choose how to synchronize the list with {name}",
|
||||
"tag__high_quality": "HQ",
|
||||
"tag__lossless": "SQ",
|
||||
"theme_black": "Black",
|
||||
"theme_blue": "Blue",
|
||||
"theme_blue2": "Purple Blue",
|
||||
"theme_green": "Green",
|
||||
"theme_grey": "Grey",
|
||||
"theme_happy_new_year": "New Year",
|
||||
"theme_mid_autumn": "Mid-Autumn",
|
||||
"theme_ming": "Ming",
|
||||
"theme_naruto": "Naruto",
|
||||
"theme_orange": "Orange",
|
||||
"theme_pink": "Pink",
|
||||
"theme_purple": "Purple",
|
||||
"theme_red": "Red",
|
||||
"theme_yellow": "Yellow",
|
||||
"search__welcome": "Search what I want to 😉",
|
||||
"search": "Search",
|
||||
"search__hot_search": "Top Searches",
|
||||
"history_search": "History Searches",
|
||||
"history_clear": "Clear History",
|
||||
"history_remove": "Right click to remove this entry",
|
||||
"download__progress": "Progress",
|
||||
"download__status": "Status",
|
||||
"download__quality": "Quality",
|
||||
"download__all": "All Tasks",
|
||||
"download__runing": "Downloading",
|
||||
"download__paused": "Paused",
|
||||
"download__error": "Error",
|
||||
"download__finished": "Download complete",
|
||||
"back": "Back",
|
||||
|
||||
"songlist__open_list": "open {name} playlist",
|
||||
"songlist__import_input_tip": "Enter songlist link or songlist ID",
|
||||
"songlist__import_input_tip_1": "Cross-source playlists are not supported, please confirm whether the playlist to be opened corresponds to the current playlist source",
|
||||
"songlist__import_input_tip_2": "If you encounter a link to a playlist that cannot be opened, welcome feedback",
|
||||
"songlist__import_input_tip_3": "Kugou source does not support opening with playlist ID, but supports Kugou code opening",
|
||||
"default": "Default",
|
||||
"music_duplicate": "Duplicate song",
|
||||
"export": "Export",
|
||||
"list__export_part_desc": "Choose where to save the list file",
|
||||
"import": "Import",
|
||||
"list__import_part_button_cancel": "Don't",
|
||||
"list__import_part_button_confirm": "Overwrite",
|
||||
"list__import_part_confirm": "The imported list ({importName}) has the same ID as the local list ({localName}). Do you want to overwrite the local list?",
|
||||
"list__import_part_desc": "Select List File",
|
||||
"list__movedown": "Movedown",
|
||||
"list__moveup": "Move up",
|
||||
"list__new_list_btn": "New List",
|
||||
"list__new_list_input": "New list...",
|
||||
"list__remove_tip": "Do you really want to remove {name}?",
|
||||
"list__remove_tip_button": "Yes, that's right",
|
||||
"list__rename": "Rename",
|
||||
"list__sync": "Update",
|
||||
|
||||
"music_sort__title": "Adjust the position of {name} to:",
|
||||
"music_sort__title_multiple": "Adjust the position of the selected {num} songs to:",
|
||||
"music_sort__input_tip": "Please input which position you want to adjust to",
|
||||
"music_sort__btn_confirm": "Confirm",
|
||||
|
||||
"cancel_button_text": "Cancel",
|
||||
"confirm_button_text": "OK",
|
||||
"date_format_hour": "{num} hours ago",
|
||||
"date_format_minute": "{num} minutes ago",
|
||||
"date_format_second": "{num} seconds ago",
|
||||
|
||||
|
||||
"search__welcome": "Search what I want to 😉",
|
||||
"setting": "Settings",
|
||||
"setting__about": "About lx-music-desktop",
|
||||
"setting__backup": "Backup and restore",
|
||||
"setting__backup_all": "All data (list data and setting data)",
|
||||
|
@ -229,6 +169,11 @@
|
|||
"setting__backup_all_export_desc": "Select the backup to...",
|
||||
"setting__backup_all_import": "Import",
|
||||
"setting__backup_all_import_desc": "Select a backup file",
|
||||
"setting__backup_other": "Other backup formats (recovery of such backup files is not currently supported)",
|
||||
"setting__backup_other_export_dir": "Choose where to save the file",
|
||||
"setting__backup_other_export_list_csv": "Export list in CSV format",
|
||||
"setting__backup_other_export_list_text": "Export list in TXT format",
|
||||
"setting__backup_other_export_list_text_confirm": "Do you want to merge all the lists into one file?",
|
||||
"setting__backup_part": "Partial data (list data includes audition list, favorite list, user-defined list, setting data does not include shortcut key settings)",
|
||||
"setting__backup_part_export_list": "Export lists",
|
||||
"setting__backup_part_export_list_desc": "Save the list to...",
|
||||
|
@ -377,13 +322,67 @@
|
|||
"setting__update_open_version_modal_btn": "Open the update window🚀",
|
||||
"setting__update_progress": "Download progress: ",
|
||||
"setting__update_unknown": "Unknown",
|
||||
|
||||
"user_api__title": "Custom Source Management",
|
||||
"user_api__readme": "Source writing instructions: ",
|
||||
"user_api__note": "Tip: Although we have isolated the script's running environment as much as possible, importing scripts containing malicious behaviors may still affect your system. Please import them carefully.",
|
||||
"user_api__btn_remove": "Remove",
|
||||
"user_api__btn_import": "Import",
|
||||
"song_list": "Playlists",
|
||||
"songlist__import_input_tip": "Enter songlist link or songlist ID",
|
||||
"songlist__import_input_tip_1": "Cross-source playlists are not supported, please confirm whether the playlist to be opened corresponds to the current playlist source",
|
||||
"songlist__import_input_tip_2": "If you encounter a link to a playlist that cannot be opened, welcome feedback",
|
||||
"songlist__import_input_tip_3": "Kugou source does not support opening with playlist ID, but supports Kugou code opening",
|
||||
"songlist__open_list": "open {name} playlist",
|
||||
"source_alias_all": "Aggregated",
|
||||
"source_alias_bd": "BD Music",
|
||||
"source_alias_kg": "KG Music",
|
||||
"source_alias_kw": "KW Music",
|
||||
"source_alias_mg": "MG Music",
|
||||
"source_alias_tx": "TX Music",
|
||||
"source_alias_wy": "WY Music",
|
||||
"source_alias_xm": "XM Music",
|
||||
"source_all": "Aggregated",
|
||||
"source_bd": "Baidu",
|
||||
"source_kg": "Kugou",
|
||||
"source_kw": "Kuwo",
|
||||
"source_mg": "Migu",
|
||||
"source_tx": "Tencent",
|
||||
"source_wy": "Netease",
|
||||
"source_xm": "Xiami",
|
||||
"sync__merge_btn_local_remote": "Local list merge remote list",
|
||||
"sync__merge_btn_remote_local": "Remote list merge local list",
|
||||
"sync__merge_label": "Merge",
|
||||
"sync__merge_tip": "Merge:",
|
||||
"sync__merge_tip_desc": "Merge the two lists together, the same song will be removed (the song of the merged person is removed), and different songs will be added.",
|
||||
"sync__other_label": "Other",
|
||||
"sync__other_tip": "Other: ",
|
||||
"sync__other_tip_desc": "\"Only use real-time synchronization function\" will not modify the lists of both parties, only real-time synchronization operations; \"Cancel synchronization\" will directly disconnect the two parties.",
|
||||
"sync__overwrite": "Full coverage",
|
||||
"sync__overwrite_btn_cancel": "Cancel sync",
|
||||
"sync__overwrite_btn_local_remote": "Local list Overwrite remote list",
|
||||
"sync__overwrite_btn_none": "Only use real-time synchronization",
|
||||
"sync__overwrite_btn_remote_local": "Remote list Overwrite local list",
|
||||
"sync__overwrite_label": "Cover",
|
||||
"sync__overwrite_tip": "Cover: ",
|
||||
"sync__overwrite_tip_desc": "The list with the same ID of the covered person and the covered list will be deleted and replaced with the list of the covered person (lists with different list IDs will be merged together). If you check Complete coverage, all lists of the covered person will be moved. \nDivide, and then replace with a list of overriders.",
|
||||
"sync__title": "Choose how to synchronize the list with {name}",
|
||||
"tag__high_quality": "HQ",
|
||||
"tag__lossless": "SQ",
|
||||
"theme_black": "Black",
|
||||
"theme_blue": "Blue",
|
||||
"theme_blue2": "Purple Blue",
|
||||
"theme_green": "Green",
|
||||
"theme_grey": "Grey",
|
||||
"theme_happy_new_year": "New Year",
|
||||
"theme_mid_autumn": "Mid-Autumn",
|
||||
"theme_ming": "Ming",
|
||||
"theme_naruto": "Naruto",
|
||||
"theme_orange": "Orange",
|
||||
"theme_pink": "Pink",
|
||||
"theme_purple": "Purple",
|
||||
"theme_red": "Red",
|
||||
"theme_yellow": "Yellow",
|
||||
"user_api__btn_export": "Export",
|
||||
"user_api__btn_import": "Import",
|
||||
"user_api__btn_remove": "Remove",
|
||||
"user_api__import_file": "Select music API script file",
|
||||
"user_api__noitem": "There is nothing here...😲"
|
||||
"user_api__noitem": "There is nothing here...😲",
|
||||
"user_api__note": "Tip: Although we have isolated the script's running environment as much as possible, importing scripts containing malicious behaviors may still affect your system. Please import them carefully.",
|
||||
"user_api__readme": "Source writing instructions: ",
|
||||
"user_api__title": "Custom Source Management"
|
||||
}
|
||||
|
|
|
@ -1,46 +1,96 @@
|
|||
{
|
||||
"search": "搜索",
|
||||
"song_list": "歌单",
|
||||
"leaderboard": "排行榜",
|
||||
"my_list": "我的列表",
|
||||
"download": "下载",
|
||||
"min": "最小化",
|
||||
"action": "操作",
|
||||
"agree": "接受",
|
||||
"back": "返回",
|
||||
"cancel_button_text": "我不",
|
||||
"close": "关闭",
|
||||
"setting": "设置",
|
||||
"download__not_available_tip": "该音质不可用",
|
||||
"download__lossless": "无损音质",
|
||||
"comment__hot_load_error": "热门评论加载失败,点击尝试重新加载",
|
||||
"comment__hot_loading": "热门评论加载中",
|
||||
"comment__hot_title": "热门评论",
|
||||
"comment__new_load_error": "最新评论加载失败,点击尝试重新加载",
|
||||
"comment__new_loading": "最新评论加载中",
|
||||
"comment__new_title": "最新评论",
|
||||
"comment__no_content": "暂无评论",
|
||||
"comment__refresh": "刷新评论",
|
||||
"comment__show": "歌曲评论",
|
||||
"comment__title": "{name} 的评论",
|
||||
"confirm_button_text": "好的",
|
||||
"copy_tip": "(点击复制)",
|
||||
"date_format_hour": "{num}小时前",
|
||||
"date_format_minute": "{num}分钟前",
|
||||
"date_format_second": "{num}秒前",
|
||||
"default": "默认",
|
||||
"default_list": "试听列表",
|
||||
"desktop_lyric__back": "返回",
|
||||
"desktop_lyric__close": "关闭",
|
||||
"desktop_lyric__font_decrease": "减小字体大小(右击可微调)",
|
||||
"desktop_lyric__font_increase": "增加字体大小(右击可微调)",
|
||||
"desktop_lyric__lock": "锁定歌词",
|
||||
"desktop_lyric__lrc_active_zoom_off": "取消缩放当前播放的歌词",
|
||||
"desktop_lyric__lrc_active_zoom_on": "缩放当前播放的歌词",
|
||||
"desktop_lyric__opactiy_decrease": "增加透明度(右击可微调)",
|
||||
"desktop_lyric__opactiy_increase": "减小透明度(右击可微调)",
|
||||
"desktop_lyric__theme": "主题配色",
|
||||
"desktop_lyric__unlock": "解锁歌词",
|
||||
"desktop_lyric__win_top_off": "取消置顶歌词界面",
|
||||
"desktop_lyric__win_top_on": "置顶歌词界面",
|
||||
"download": "下载",
|
||||
"download__all": "全部任务",
|
||||
"download__error": "出错",
|
||||
"download__finished": "下载完成",
|
||||
"download__high_quality": "高品音质",
|
||||
"download__normal": "普通音质",
|
||||
"download__lossless": "无损音质",
|
||||
"download__multiple_tip": "已选择 {len} 首歌曲",
|
||||
"download__multiple_tip2": "请选择要优先下载的音质",
|
||||
"list_add__title_first_add": "添加",
|
||||
"list_add__title_first_move": "移动",
|
||||
"list_add__title_last": "到...",
|
||||
"list_add__btn_title": "把该歌曲添加到 {name}",
|
||||
"list_add__multiple_title_add": "添加已选的 {num} 首歌曲到...",
|
||||
"list_add__multiple_title_move": "移动已选的 {num} 首歌曲到...",
|
||||
"list_add__multiple_btn_title": "把这些歌曲添加到 {name}",
|
||||
"action": "操作",
|
||||
"music_album": "专辑",
|
||||
"default_list": "试听列表",
|
||||
"download__normal": "普通音质",
|
||||
"download__not_available_tip": "该音质不可用",
|
||||
"download__paused": "已暂停",
|
||||
"download__progress": "进度",
|
||||
"download__quality": "品质",
|
||||
"download__runing": "正在下载",
|
||||
"download__status": "状态",
|
||||
"export": "导出",
|
||||
"history_clear": "清空搜索历史",
|
||||
"history_remove": "右击移除该历史",
|
||||
"history_search": "历史搜索",
|
||||
"import": "导入",
|
||||
"leaderboard": "排行榜",
|
||||
"list__add_to": "添加到...",
|
||||
"list__collect": "收藏",
|
||||
"list__copy_name": "复制歌曲名",
|
||||
"list__download": "下载",
|
||||
"list__export_part_desc": "选择列表文件保存位置",
|
||||
"list__file": "定位文件",
|
||||
"list__import_part_button_cancel": "不要啊",
|
||||
"list__import_part_button_confirm": "覆盖掉",
|
||||
"list__import_part_confirm": "导入的列表({importName})与本地列表({localName})的ID相同,是否覆盖本地列表?",
|
||||
"list__import_part_desc": "选择列表文件",
|
||||
"list__load_failed": "啊,加载失败了😭",
|
||||
"list__loading": "列表加载中...⏳",
|
||||
"list__move_to": "移动到...",
|
||||
"list__movedown": "下移",
|
||||
"list__moveup": "上移",
|
||||
"list__new_list_btn": "新建列表",
|
||||
"list__new_list_input": "新列表...",
|
||||
"list__pause": "暂停任务",
|
||||
"list__play": "播放",
|
||||
"list__collect": "收藏",
|
||||
"list__play_later": "稍后播放",
|
||||
"list__remove": "删除",
|
||||
"list__remove_tip": "你真的想要移除 {name} 吗?",
|
||||
"list__remove_tip_button": "是的 没错",
|
||||
"list__rename": "重命名",
|
||||
"list__search": "搜索",
|
||||
"list__sort": "调整位置",
|
||||
"list__source_detail": "歌曲详情页",
|
||||
"list__start": "开始任务",
|
||||
"list__pause": "暂停任务",
|
||||
"list__file": "定位文件",
|
||||
"list__load_failed": "啊,加载失败了😭",
|
||||
"list__loading": "列表加载中...⏳",
|
||||
"tag__lossless": "SQ",
|
||||
"tag__high_quality": "HQ",
|
||||
"list__sync": "更新",
|
||||
"list_add__btn_title": "把该歌曲添加到 {name}",
|
||||
"list_add__multiple_btn_title": "把这些歌曲添加到 {name}",
|
||||
"list_add__multiple_title_add": "添加已选的 {num} 首歌曲到...",
|
||||
"list_add__multiple_title_move": "移动已选的 {num} 首歌曲到...",
|
||||
"list_add__title_first_add": "添加",
|
||||
"list_add__title_first_move": "移动",
|
||||
"list_add__title_last": "到...",
|
||||
"lists__duplicate": "重复歌曲",
|
||||
"lists__export": "导出",
|
||||
"lists__export_part_desc": "选择列表文件保存位置",
|
||||
|
@ -58,45 +108,30 @@
|
|||
"lists__remove_tip_button": "是的 没错",
|
||||
"lists__rename": "重命名",
|
||||
"lists__sync": "更新",
|
||||
"load_list_file_error_detail": "我们已经帮你把旧的列表文件备份到{path}\n它以 JSON 格式存储,你可以尝试手动修复并恢复它\n\n错误详情:{detail}",
|
||||
"load_list_file_error_title": "播放列表数据加载错误(建议到GitHub或加群反馈)",
|
||||
"loding": "加载中...",
|
||||
"love_list": "收藏",
|
||||
"lyric__load_error": "歌词获取失败",
|
||||
"lyric__select": "歌词文本选择",
|
||||
"min": "最小化",
|
||||
"music_album": "专辑",
|
||||
"music_duplicate": "重复歌曲",
|
||||
"music_name": "歌曲名",
|
||||
"no_item": "列表竟然是空的...",
|
||||
"music_singer": "歌手",
|
||||
"music_sort__btn_confirm": "确定",
|
||||
"music_sort__input_tip": "请输入要调整到第几个位置",
|
||||
"music_sort__title": "将 {name} 的位置调整到:",
|
||||
"music_sort__title_multiple": "将已选的 {num} 首歌曲的位置调整到:",
|
||||
"music_time": "时长",
|
||||
"sync__merge_btn_local_remote": "本机列表 合并 远程列表",
|
||||
"sync__merge_btn_remote_local": "远程列表 合并 本机列表",
|
||||
"sync__merge_label": "合并",
|
||||
"sync__merge_tip": "合并:",
|
||||
"sync__merge_tip_desc": "将两边的列表合并到一起,相同的歌曲将被去掉(去掉的是被合并者的歌曲),不同的歌曲将被添加。",
|
||||
"sync__other_label": "其他",
|
||||
"sync__other_tip": "其他:",
|
||||
"sync__other_tip_desc": "“仅使用实时同步功能”将不修改双方的列表,仅实时同步操作;“取消同步”将直接断开双方的连接。",
|
||||
"sync__overwrite": "完全覆盖",
|
||||
"sync__overwrite_btn_cancel": "取消同步",
|
||||
"sync__overwrite_btn_local_remote": "本机列表 覆盖 远程列表",
|
||||
"sync__overwrite_btn_none": "仅使用实时同步功能",
|
||||
"sync__overwrite_btn_remote_local": "远程列表 覆盖 本机列表",
|
||||
"sync__overwrite_label": "覆盖",
|
||||
"sync__overwrite_tip": "覆盖:",
|
||||
"sync__overwrite_tip_desc": "被覆盖者与覆盖者列表ID相同的列表将被删除后替换成覆盖者的列表(列表ID不同的列表将被合并到一起),若勾选完全覆盖,则被覆盖者的所有列表将被移除,然后替换成覆盖者的列表。",
|
||||
"sync__title": "选择与 {name} 的列表同步方式",
|
||||
"agree": "接受",
|
||||
"my_list": "我的列表",
|
||||
"no_item": "列表竟然是空的...",
|
||||
"not_agree": "不接受",
|
||||
"pagination__next": "下一页",
|
||||
"pagination__page": "第 {num} 页",
|
||||
"pagination__prev": "上一页",
|
||||
"player__add_music_to": "添加当前歌曲到...",
|
||||
"player__music_album": "专辑名:",
|
||||
"player__buffering": "缓冲中...",
|
||||
"comment__hot_load_error": "热门评论加载失败,点击尝试重新加载",
|
||||
"comment__hot_loading": "热门评论加载中",
|
||||
"comment__hot_title": "热门评论",
|
||||
"comment__new_load_error": "最新评论加载失败,点击尝试重新加载",
|
||||
"comment__new_loading": "最新评论加载中",
|
||||
"comment__new_title": "最新评论",
|
||||
"comment__no_content": "暂无评论",
|
||||
"comment__refresh": "刷新评论",
|
||||
"comment__show": "歌曲评论",
|
||||
"comment__title": "{name} 的评论",
|
||||
"copy_tip": "(点击复制)",
|
||||
"player__desktop_lyric_lock": "右击锁定歌词",
|
||||
"player__desktop_lyric_off": "关闭桌面歌词",
|
||||
"player__desktop_lyric_on": "开启桌面歌词",
|
||||
|
@ -106,9 +141,9 @@
|
|||
"player__geting_url": "歌曲链接获取中...",
|
||||
"player__hide_detail_tip": "隐藏详情页(界面内右键双击可快速隐藏详情页)",
|
||||
"player__loading": "音乐加载中...",
|
||||
"lyric__load_error": "歌词获取失败",
|
||||
"lyric__select": "歌词文本选择",
|
||||
"player__music_album": "专辑名:",
|
||||
"player__music_name": "歌曲名:",
|
||||
"player__music_singer": "艺术家:",
|
||||
"player__next": "下一首",
|
||||
"player__pause": "暂停",
|
||||
"player__pic_tip": "右击在“我的列表”定位当前播放的歌曲",
|
||||
|
@ -121,107 +156,12 @@
|
|||
"player__playing": "播放中...",
|
||||
"player__prev": "上一首",
|
||||
"player__refresh_url": "URL过期,正在刷新URL...",
|
||||
"player__music_singer": "艺术家:",
|
||||
"player__stop": "暂停播放",
|
||||
"player__volume": "当前音量:",
|
||||
"pagination__prev": "上一页",
|
||||
"pagination__next": "下一页",
|
||||
"pagination__page": "第 {num} 页",
|
||||
"desktop_lyric__close": "关闭",
|
||||
"desktop_lyric__back": "返回",
|
||||
"desktop_lyric__lock": "锁定歌词",
|
||||
"desktop_lyric__unlock": "解锁歌词",
|
||||
"desktop_lyric__theme": "主题配色",
|
||||
"desktop_lyric__font_increase": "增加字体大小(右击可微调)",
|
||||
"desktop_lyric__font_decrease": "减小字体大小(右击可微调)",
|
||||
"desktop_lyric__opactiy_increase": "减小透明度(右击可微调)",
|
||||
"desktop_lyric__opactiy_decrease": "增加透明度(右击可微调)",
|
||||
"desktop_lyric__lrc_active_zoom_on": "缩放当前播放的歌词",
|
||||
"desktop_lyric__lrc_active_zoom_off": "取消缩放当前播放的歌词",
|
||||
"desktop_lyric__win_top_on": "置顶歌词界面",
|
||||
"desktop_lyric__win_top_off": "取消置顶歌词界面",
|
||||
"theme_green": "绿意盎然",
|
||||
"theme_blue": "蓝田生玉",
|
||||
"theme_yellow": "信口雌黄",
|
||||
"theme_orange": "橙黄橘绿",
|
||||
"theme_red": "热情似火",
|
||||
"theme_pink": "粉装玉琢",
|
||||
"theme_purple": "重斤球紫",
|
||||
"theme_grey": "灰常美丽",
|
||||
"theme_ming": "青出于黑",
|
||||
"theme_blue2": "清热版蓝",
|
||||
"theme_black": "黑灯瞎火",
|
||||
"theme_mid_autumn": "月里嫦娥",
|
||||
"theme_naruto": "木叶之村",
|
||||
"theme_happy_new_year": "新年快乐",
|
||||
"source_kw": "酷我音乐",
|
||||
"source_kg": "酷狗音乐",
|
||||
"source_tx": "企鹅音乐",
|
||||
"source_wy": "网易音乐",
|
||||
"source_mg": "咪咕音乐",
|
||||
"source_xm": "虾米音乐",
|
||||
"source_bd": "百度音乐",
|
||||
"source_all": "聚合搜索",
|
||||
"source_alias_kw": "小蜗音乐",
|
||||
"source_alias_kg": "小枸音乐",
|
||||
"source_alias_tx": "小秋音乐",
|
||||
"source_alias_wy": "小芸音乐",
|
||||
"source_alias_mg": "小蜜音乐",
|
||||
"source_alias_xm": "小霞音乐",
|
||||
"source_alias_bd": "小杜音乐",
|
||||
"source_alias_all": "聚合大会",
|
||||
"load_list_file_error_title": "播放列表数据加载错误(建议到GitHub或加群反馈)",
|
||||
"load_list_file_error_detail": "我们已经帮你把旧的列表文件备份到{path}\n它以 JSON 格式存储,你可以尝试手动修复并恢复它\n\n错误详情:{detail}",
|
||||
"search__welcome": "搜我所想~~😉",
|
||||
"search": "搜索",
|
||||
"search__hot_search": "热门搜索",
|
||||
"history_search": "历史搜索",
|
||||
"history_clear": "清空搜索历史",
|
||||
"history_remove": "右击移除该历史",
|
||||
|
||||
"download__progress": "进度",
|
||||
"download__status": "状态",
|
||||
"download__quality": "品质",
|
||||
"download__all": "全部任务",
|
||||
"download__runing": "正在下载",
|
||||
"download__paused": "已暂停",
|
||||
"download__error": "出错",
|
||||
"download__finished": "下载完成",
|
||||
"back": "返回",
|
||||
|
||||
"songlist__open_list": "打开{name}歌单",
|
||||
"songlist__import_input_tip": "输入歌单链接或歌单ID",
|
||||
"songlist__import_input_tip_1": "不支持跨源打开歌单,请确认要打开的歌单与当前歌单源是否对应",
|
||||
"songlist__import_input_tip_2": "若遇到无法打开的歌单链接,欢迎反馈",
|
||||
"songlist__import_input_tip_3": "酷狗源不支持用歌单ID打开,但支持酷狗码打开",
|
||||
"default": "默认",
|
||||
|
||||
"music_duplicate": "重复歌曲",
|
||||
"export": "导出",
|
||||
"list__export_part_desc": "选择列表文件保存位置",
|
||||
"import": "导入",
|
||||
"list__import_part_button_cancel": "不要啊",
|
||||
"list__import_part_button_confirm": "覆盖掉",
|
||||
"list__import_part_confirm": "导入的列表({importName})与本地列表({localName})的ID相同,是否覆盖本地列表?",
|
||||
"list__import_part_desc": "选择列表文件",
|
||||
"list__movedown": "下移",
|
||||
"list__moveup": "上移",
|
||||
"list__new_list_btn": "新建列表",
|
||||
"list__new_list_input": "新列表...",
|
||||
"list__remove_tip": "你真的想要移除 {name} 吗?",
|
||||
"list__remove_tip_button": "是的 没错",
|
||||
"list__rename": "重命名",
|
||||
"list__sync": "更新",
|
||||
|
||||
"music_sort__title": "将 {name} 的位置调整到:",
|
||||
"music_sort__title_multiple": "将已选的 {num} 首歌曲的位置调整到:",
|
||||
"music_sort__input_tip": "请输入要调整到第几个位置",
|
||||
"music_sort__btn_confirm": "确定",
|
||||
"cancel_button_text": "我不",
|
||||
"confirm_button_text": "好的",
|
||||
"date_format_hour": "{num}小时前",
|
||||
"date_format_minute": "{num}分钟前",
|
||||
"date_format_second": "{num}秒前",
|
||||
|
||||
"search__welcome": "搜我所想~~😉",
|
||||
"setting": "设置",
|
||||
"setting__about": "关于洛雪音乐",
|
||||
"setting__backup": "备份与恢复",
|
||||
"setting__backup_all": "所有数据(列表数据与设置数据)",
|
||||
|
@ -229,6 +169,11 @@
|
|||
"setting__backup_all_export_desc": "选择备份保存位置",
|
||||
"setting__backup_all_import": "导入",
|
||||
"setting__backup_all_import_desc": "选择备份文件",
|
||||
"setting__backup_other": "其他备份格式(目前不支持恢复此类备份文件)",
|
||||
"setting__backup_other_export_dir": "选择文件保存位置",
|
||||
"setting__backup_other_export_list_csv": "导出 CSV 格式的列表",
|
||||
"setting__backup_other_export_list_text": "导出 TXT 格式的列表",
|
||||
"setting__backup_other_export_list_text_confirm": "是否将所有列表合并为一个文件?",
|
||||
"setting__backup_part": "部分数据(列表数据包括试听列表、收藏列表、用户自定义列表,设置数据不包括快捷键设置)",
|
||||
"setting__backup_part_export_list": "导出列表",
|
||||
"setting__backup_part_export_list_desc": "选择歌单保存位置",
|
||||
|
@ -377,12 +322,67 @@
|
|||
"setting__update_open_version_modal_btn": "打开更新窗口 🚀",
|
||||
"setting__update_progress": "下载进度:",
|
||||
"setting__update_unknown": "未知",
|
||||
"user_api__title": "自定义源管理",
|
||||
"user_api__readme": "源编写说明:",
|
||||
"user_api__note": "提示:虽然我们已经尽可能地隔离了脚本的运行环境,但导入包含恶意行为的脚本仍可能会影响你的系统,请谨慎导入。",
|
||||
"user_api__btn_remove": "移除",
|
||||
"user_api__btn_import": "导入",
|
||||
"song_list": "歌单",
|
||||
"songlist__import_input_tip": "输入歌单链接或歌单ID",
|
||||
"songlist__import_input_tip_1": "不支持跨源打开歌单,请确认要打开的歌单与当前歌单源是否对应",
|
||||
"songlist__import_input_tip_2": "若遇到无法打开的歌单链接,欢迎反馈",
|
||||
"songlist__import_input_tip_3": "酷狗源不支持用歌单ID打开,但支持酷狗码打开",
|
||||
"songlist__open_list": "打开{name}歌单",
|
||||
"source_alias_all": "聚合大会",
|
||||
"source_alias_bd": "小杜音乐",
|
||||
"source_alias_kg": "小枸音乐",
|
||||
"source_alias_kw": "小蜗音乐",
|
||||
"source_alias_mg": "小蜜音乐",
|
||||
"source_alias_tx": "小秋音乐",
|
||||
"source_alias_wy": "小芸音乐",
|
||||
"source_alias_xm": "小霞音乐",
|
||||
"source_all": "聚合搜索",
|
||||
"source_bd": "百度音乐",
|
||||
"source_kg": "酷狗音乐",
|
||||
"source_kw": "酷我音乐",
|
||||
"source_mg": "咪咕音乐",
|
||||
"source_tx": "企鹅音乐",
|
||||
"source_wy": "网易音乐",
|
||||
"source_xm": "虾米音乐",
|
||||
"sync__merge_btn_local_remote": "本机列表 合并 远程列表",
|
||||
"sync__merge_btn_remote_local": "远程列表 合并 本机列表",
|
||||
"sync__merge_label": "合并",
|
||||
"sync__merge_tip": "合并:",
|
||||
"sync__merge_tip_desc": "将两边的列表合并到一起,相同的歌曲将被去掉(去掉的是被合并者的歌曲),不同的歌曲将被添加。",
|
||||
"sync__other_label": "其他",
|
||||
"sync__other_tip": "其他:",
|
||||
"sync__other_tip_desc": "“仅使用实时同步功能”将不修改双方的列表,仅实时同步操作;“取消同步”将直接断开双方的连接。",
|
||||
"sync__overwrite": "完全覆盖",
|
||||
"sync__overwrite_btn_cancel": "取消同步",
|
||||
"sync__overwrite_btn_local_remote": "本机列表 覆盖 远程列表",
|
||||
"sync__overwrite_btn_none": "仅使用实时同步功能",
|
||||
"sync__overwrite_btn_remote_local": "远程列表 覆盖 本机列表",
|
||||
"sync__overwrite_label": "覆盖",
|
||||
"sync__overwrite_tip": "覆盖:",
|
||||
"sync__overwrite_tip_desc": "被覆盖者与覆盖者列表ID相同的列表将被删除后替换成覆盖者的列表(列表ID不同的列表将被合并到一起),若勾选完全覆盖,则被覆盖者的所有列表将被移除,然后替换成覆盖者的列表。",
|
||||
"sync__title": "选择与 {name} 的列表同步方式",
|
||||
"tag__high_quality": "HQ",
|
||||
"tag__lossless": "SQ",
|
||||
"theme_black": "黑灯瞎火",
|
||||
"theme_blue": "蓝田生玉",
|
||||
"theme_blue2": "清热版蓝",
|
||||
"theme_green": "绿意盎然",
|
||||
"theme_grey": "灰常美丽",
|
||||
"theme_happy_new_year": "新年快乐",
|
||||
"theme_mid_autumn": "月里嫦娥",
|
||||
"theme_ming": "青出于黑",
|
||||
"theme_naruto": "木叶之村",
|
||||
"theme_orange": "橙黄橘绿",
|
||||
"theme_pink": "粉装玉琢",
|
||||
"theme_purple": "重斤球紫",
|
||||
"theme_red": "热情似火",
|
||||
"theme_yellow": "信口雌黄",
|
||||
"user_api__btn_export": "导出",
|
||||
"user_api__btn_import": "导入",
|
||||
"user_api__btn_remove": "移除",
|
||||
"user_api__import_file": "选择音乐API脚本文件",
|
||||
"user_api__noitem": "这里竟然是空的 😲"
|
||||
"user_api__noitem": "这里竟然是空的 😲",
|
||||
"user_api__note": "提示:虽然我们已经尽可能地隔离了脚本的运行环境,但导入包含恶意行为的脚本仍可能会影响你的系统,请谨慎导入。",
|
||||
"user_api__readme": "源编写说明:",
|
||||
"user_api__title": "自定义源管理"
|
||||
}
|
||||
|
|
|
@ -1,12 +1,8 @@
|
|||
{
|
||||
"action": "操作",
|
||||
"agree": "接受",
|
||||
"download": "下載管理",
|
||||
"leaderboard": "排行榜",
|
||||
"my_list": "我的列表",
|
||||
"search": "搜索",
|
||||
"setting": "設置",
|
||||
"song_list": "歌單",
|
||||
"back": "返回",
|
||||
"cancel_button_text": "取消",
|
||||
"close": "關閉",
|
||||
"comment__hot_load_error": "熱門評論加載失敗,點擊嘗試重新加載",
|
||||
"comment__hot_loading": "熱門評論加載中",
|
||||
|
@ -18,7 +14,12 @@
|
|||
"comment__refresh": "刷新評論",
|
||||
"comment__show": "歌曲評論",
|
||||
"comment__title": "{name} 的評論",
|
||||
"confirm_button_text": "好的",
|
||||
"copy_tip": "(點擊複製)",
|
||||
"date_format_hour": "{num}小時前",
|
||||
"date_format_minute": "{num}分鐘前",
|
||||
"date_format_second": "{num}秒前",
|
||||
"default": "默認",
|
||||
"default_list": "試聽列表",
|
||||
"desktop_lyric__back": "返回",
|
||||
"desktop_lyric__close": "關閉",
|
||||
|
@ -33,28 +34,56 @@
|
|||
"desktop_lyric__unlock": "解鎖歌詞",
|
||||
"desktop_lyric__win_top_off": "取消置頂歌詞界面",
|
||||
"desktop_lyric__win_top_on": "置頂歌詞界面",
|
||||
"download": "下載管理",
|
||||
"download__all": "全部任務",
|
||||
"download__error": "出錯",
|
||||
"download__finished": "下載完成",
|
||||
"download__high_quality": "高品音質",
|
||||
"download__lossless": "無損音質",
|
||||
"download__multiple_tip": "已選擇 {len} 首歌曲",
|
||||
"download__multiple_tip2": "請選擇要優先下載的音質",
|
||||
"download__normal": "普通音質",
|
||||
"download__not_available_tip": "該音質不可用",
|
||||
"download__paused": "已暫停",
|
||||
"download__progress": "進度",
|
||||
"download__quality": "品質",
|
||||
"download__runing": "正在下載",
|
||||
"download__status": "狀態",
|
||||
"export": "導出",
|
||||
"history_clear": "清空搜索歷史",
|
||||
"history_remove": "右擊移除該歷史",
|
||||
"history_search": "歷史搜索",
|
||||
"import": "導入",
|
||||
"leaderboard": "排行榜",
|
||||
"list__add_to": "添加到...",
|
||||
"list__collect": "收藏",
|
||||
"list__copy_name": "複製歌曲名",
|
||||
"list__download": "下載",
|
||||
"list__export_part_desc": "選擇列表文件保存位置",
|
||||
"list__file": "定位文件",
|
||||
"list__import_part_button_cancel": "不要啊",
|
||||
"list__import_part_button_confirm": "覆蓋掉",
|
||||
"list__import_part_confirm": "導入的列表({importName})與本地列表({localName})的ID相同,是否覆蓋本地列表?",
|
||||
"list__import_part_desc": "選擇列表文件",
|
||||
"list__load_failed": "啊,加載失敗了😭",
|
||||
"list__loading": "列表加載中...⏳",
|
||||
"list__move_to": "移動到...",
|
||||
"list__movedown": "下移",
|
||||
"list__moveup": "上移",
|
||||
"list__new_list_btn": "新建列表",
|
||||
"list__new_list_input": "新列表...",
|
||||
"list__pause": "暫停任務",
|
||||
"list__play": "播放",
|
||||
"list__play_later": "稍後播放",
|
||||
"list__remove": "刪除",
|
||||
"list__remove_tip": "你真的想要移除 {name} 嗎?",
|
||||
"list__remove_tip_button": "是的 沒錯",
|
||||
"list__rename": "重命名",
|
||||
"list__search": "搜索",
|
||||
"list__sort": "調整位置",
|
||||
"list__source_detail": "歌曲詳情頁",
|
||||
"list__start": "開始任務",
|
||||
"list__sync": "更新",
|
||||
"list_add__btn_title": "把該歌曲添加到 {name}",
|
||||
"list_add__multiple_btn_title": "把這些歌曲添加到 {name}",
|
||||
"list_add__multiple_title_add": "添加已選的 {num} 首歌曲到...",
|
||||
|
@ -87,9 +116,15 @@
|
|||
"lyric__select": "歌詞文本選擇",
|
||||
"min": "最小化",
|
||||
"music_album": "專輯",
|
||||
"music_duplicate": "重複歌曲",
|
||||
"music_name": "歌曲名",
|
||||
"music_singer": "歌手",
|
||||
"music_sort__btn_confirm": "確定",
|
||||
"music_sort__input_tip": "請輸入要調整到第幾個位置",
|
||||
"music_sort__title": "將 {name} 的位置調整到:",
|
||||
"music_sort__title_multiple": "將已選的 {num} 首歌曲的位置調整到:",
|
||||
"music_time": "時長",
|
||||
"my_list": "我的列表",
|
||||
"no_item": "列表竟然是空的...",
|
||||
"not_agree": "不接受",
|
||||
"pagination__next": "下一頁",
|
||||
|
@ -123,101 +158,10 @@
|
|||
"player__refresh_url": "URL過期,正在刷新URL...",
|
||||
"player__stop": "暫停播放",
|
||||
"player__volume": "當前音量:",
|
||||
"source_alias_all": "聚合大會",
|
||||
"source_alias_bd": "小杜音樂",
|
||||
"source_alias_kg": "小枸音樂",
|
||||
"source_alias_kw": "小蝸音樂",
|
||||
"source_alias_mg": "小蜜音樂",
|
||||
"source_alias_tx": "小秋音樂",
|
||||
"source_alias_wy": "小芸音樂",
|
||||
"source_alias_xm": "小霞音樂",
|
||||
"source_all": "聚合搜索",
|
||||
"source_bd": "百度音樂",
|
||||
"source_kg": "酷狗音樂",
|
||||
"source_kw": "酷我音樂",
|
||||
"source_mg": "咪咕音樂",
|
||||
"source_tx": "企鵝音樂",
|
||||
"source_wy": "網易音樂",
|
||||
"source_xm": "蝦米音樂",
|
||||
"sync__merge_btn_local_remote": "本機列表 合併 遠程列表",
|
||||
"sync__merge_btn_remote_local": "遠程列表 合併 本機列表",
|
||||
"sync__merge_label": "合併",
|
||||
"sync__merge_tip": "合併:",
|
||||
"sync__merge_tip_desc": "將兩邊的列表合併到一起,相同的歌曲將被去掉(去掉的是被合併者的歌曲),不同的歌曲將被添加。",
|
||||
"sync__other_label": "其他",
|
||||
"sync__other_tip": "其他:",
|
||||
"sync__other_tip_desc": "“僅使用實時同步功能”將不修改雙方的列表,僅實時同步操作;“取消同步”將直接斷開雙方的連接。",
|
||||
"sync__overwrite": "完全覆蓋",
|
||||
"sync__overwrite_btn_cancel": "取消同步",
|
||||
"sync__overwrite_btn_local_remote": "本機列表 覆蓋 遠程列表",
|
||||
"sync__overwrite_btn_none": "僅使用實時同步功能",
|
||||
"sync__overwrite_btn_remote_local": "遠程列表 覆蓋 本機列表",
|
||||
"sync__overwrite_label": "覆蓋",
|
||||
"sync__overwrite_tip": "覆蓋:",
|
||||
"sync__overwrite_tip_desc": "被覆蓋者與覆蓋者列表ID相同的列表將被刪除後替換成覆蓋者的列表(列表ID不同的列表將被合併到一起),若勾選完全覆蓋,則被覆蓋者的所有列表將被移除,然後替換成覆蓋者的列表。",
|
||||
"sync__title": "選擇與 {name} 的列表同步方式",
|
||||
"tag__high_quality": "HQ",
|
||||
"tag__lossless": "SQ",
|
||||
"theme_black": "黑燈瞎火",
|
||||
"theme_blue": "藍田生玉",
|
||||
"theme_blue2": "清熱版藍",
|
||||
"theme_green": "綠意盎然",
|
||||
"theme_grey": "灰常美麗",
|
||||
"theme_happy_new_year": "新年快樂",
|
||||
"theme_mid_autumn": "月裡嫦娥",
|
||||
"theme_ming": "青出於黑",
|
||||
"theme_naruto": "木葉之村",
|
||||
"theme_orange": "橙黃橘綠",
|
||||
"theme_pink": "粉裝玉琢",
|
||||
"theme_purple": "重斤球紫",
|
||||
"theme_red": "熱情似火",
|
||||
"theme_yellow": "信口雌黃",
|
||||
"search__welcome": "搜我所想~~😉",
|
||||
"search": "搜索",
|
||||
"search__hot_search": "熱門搜索",
|
||||
"history_search": "歷史搜索",
|
||||
"history_clear": "清空搜索歷史",
|
||||
"history_remove": "右擊移除該歷史",
|
||||
"download__progress": "進度",
|
||||
"download__status": "狀態",
|
||||
"download__quality": "品質",
|
||||
"download__all": "全部任務",
|
||||
"download__runing": "正在下載",
|
||||
"download__paused": "已暫停",
|
||||
"download__error": "出錯",
|
||||
"download__finished": "下載完成",
|
||||
"back": "返回",
|
||||
"songlist__open_list": "打開{name}歌單",
|
||||
"songlist__import_input_tip": "輸入歌單鏈接或歌單ID",
|
||||
"songlist__import_input_tip_1": "不支持跨源打開歌單,請確認要打開的歌單與當前歌單源是否對應",
|
||||
"songlist__import_input_tip_2": "若遇到無法打開的歌單鏈接,歡迎反饋",
|
||||
"songlist__import_input_tip_3": "酷狗源不支持用歌單ID打開,但支持酷狗碼打開",
|
||||
"default": "默認",
|
||||
"music_duplicate": "重複歌曲",
|
||||
"export": "導出",
|
||||
"list__export_part_desc": "選擇列表文件保存位置",
|
||||
"import": "導入",
|
||||
"list__import_part_button_cancel": "不要啊",
|
||||
"list__import_part_button_confirm": "覆蓋掉",
|
||||
"list__import_part_confirm": "導入的列表({importName})與本地列表({localName})的ID相同,是否覆蓋本地列表?",
|
||||
"list__import_part_desc": "選擇列表文件",
|
||||
"list__movedown": "下移",
|
||||
"list__moveup": "上移",
|
||||
"list__new_list_btn": "新建列表",
|
||||
"list__new_list_input": "新列表...",
|
||||
"list__remove_tip": "你真的想要移除 {name} 嗎?",
|
||||
"list__remove_tip_button": "是的 沒錯",
|
||||
"list__rename": "重命名",
|
||||
"list__sync": "更新",
|
||||
"music_sort__title": "將 {name} 的位置調整到:",
|
||||
"music_sort__title_multiple": "將已選的 {num} 首歌曲的位置調整到:",
|
||||
"music_sort__input_tip": "請輸入要調整到第幾個位置",
|
||||
"music_sort__btn_confirm": "確定",
|
||||
"cancel_button_text": "取消",
|
||||
"confirm_button_text": "好的",
|
||||
"date_format_hour": "{num}小時前",
|
||||
"date_format_minute": "{num}分鐘前",
|
||||
"date_format_second": "{num}秒前",
|
||||
|
||||
"search__welcome": "搜我所想~~😉",
|
||||
"setting": "設置",
|
||||
"setting__about": "關於洛雪音樂",
|
||||
"setting__backup": "備份與恢復",
|
||||
"setting__backup_all": "所有數據(列表數據與設置數據)",
|
||||
|
@ -225,6 +169,11 @@
|
|||
"setting__backup_all_export_desc": "選擇備份保存位置",
|
||||
"setting__backup_all_import": "導入",
|
||||
"setting__backup_all_import_desc": "選擇備份文件",
|
||||
"setting__backup_other": "其他備份格式(目前不支持恢復此類備份文件)",
|
||||
"setting__backup_other_export_dir": "選擇文件保存位置",
|
||||
"setting__backup_other_export_list_csv": "導出 CSV 格式的列表",
|
||||
"setting__backup_other_export_list_text": "導出 TXT 格式的列表",
|
||||
"setting__backup_other_export_list_text_confirm": "是否將所有列表合併為一個文件?",
|
||||
"setting__backup_part": "部分數據(列表數據包括試聽列表、收藏列表、用戶自定義列表,設置數據不包括快捷鍵設置)",
|
||||
"setting__backup_part_export_list": "導出列表",
|
||||
"setting__backup_part_export_list_desc": "選擇歌單保存位置",
|
||||
|
@ -373,13 +322,67 @@
|
|||
"setting__update_open_version_modal_btn": "打開更新窗口 🚀",
|
||||
"setting__update_progress": "下載進度:",
|
||||
"setting__update_unknown": "未知",
|
||||
|
||||
"user_api__title": "自定義源管理",
|
||||
"user_api__readme": "源編寫說明:",
|
||||
"user_api__note": "提示:雖然我們已經盡可能地隔離了腳本的運行環境,但導入包含惡意行為的腳本仍可能會影響你的系統,請謹慎導入。",
|
||||
"user_api__btn_remove": "移除",
|
||||
"user_api__btn_import": "導入",
|
||||
"song_list": "歌單",
|
||||
"songlist__import_input_tip": "輸入歌單鏈接或歌單ID",
|
||||
"songlist__import_input_tip_1": "不支持跨源打開歌單,請確認要打開的歌單與當前歌單源是否對應",
|
||||
"songlist__import_input_tip_2": "若遇到無法打開的歌單鏈接,歡迎反饋",
|
||||
"songlist__import_input_tip_3": "酷狗源不支持用歌單ID打開,但支持酷狗碼打開",
|
||||
"songlist__open_list": "打開{name}歌單",
|
||||
"source_alias_all": "聚合大會",
|
||||
"source_alias_bd": "小杜音樂",
|
||||
"source_alias_kg": "小枸音樂",
|
||||
"source_alias_kw": "小蝸音樂",
|
||||
"source_alias_mg": "小蜜音樂",
|
||||
"source_alias_tx": "小秋音樂",
|
||||
"source_alias_wy": "小芸音樂",
|
||||
"source_alias_xm": "小霞音樂",
|
||||
"source_all": "聚合搜索",
|
||||
"source_bd": "百度音樂",
|
||||
"source_kg": "酷狗音樂",
|
||||
"source_kw": "酷我音樂",
|
||||
"source_mg": "咪咕音樂",
|
||||
"source_tx": "企鵝音樂",
|
||||
"source_wy": "網易音樂",
|
||||
"source_xm": "蝦米音樂",
|
||||
"sync__merge_btn_local_remote": "本機列表 合併 遠程列表",
|
||||
"sync__merge_btn_remote_local": "遠程列表 合併 本機列表",
|
||||
"sync__merge_label": "合併",
|
||||
"sync__merge_tip": "合併:",
|
||||
"sync__merge_tip_desc": "將兩邊的列表合併到一起,相同的歌曲將被去掉(去掉的是被合併者的歌曲),不同的歌曲將被添加。",
|
||||
"sync__other_label": "其他",
|
||||
"sync__other_tip": "其他:",
|
||||
"sync__other_tip_desc": "“僅使用實時同步功能”將不修改雙方的列表,僅實時同步操作;“取消同步”將直接斷開雙方的連接。",
|
||||
"sync__overwrite": "完全覆蓋",
|
||||
"sync__overwrite_btn_cancel": "取消同步",
|
||||
"sync__overwrite_btn_local_remote": "本機列表 覆蓋 遠程列表",
|
||||
"sync__overwrite_btn_none": "僅使用實時同步功能",
|
||||
"sync__overwrite_btn_remote_local": "遠程列表 覆蓋 本機列表",
|
||||
"sync__overwrite_label": "覆蓋",
|
||||
"sync__overwrite_tip": "覆蓋:",
|
||||
"sync__overwrite_tip_desc": "被覆蓋者與覆蓋者列表ID相同的列表將被刪除後替換成覆蓋者的列表(列表ID不同的列表將被合併到一起),若勾選完全覆蓋,則被覆蓋者的所有列表將被移除,然後替換成覆蓋者的列表。",
|
||||
"sync__title": "選擇與 {name} 的列表同步方式",
|
||||
"tag__high_quality": "HQ",
|
||||
"tag__lossless": "SQ",
|
||||
"theme_black": "黑燈瞎火",
|
||||
"theme_blue": "藍田生玉",
|
||||
"theme_blue2": "清熱版藍",
|
||||
"theme_green": "綠意盎然",
|
||||
"theme_grey": "灰常美麗",
|
||||
"theme_happy_new_year": "新年快樂",
|
||||
"theme_mid_autumn": "月裡嫦娥",
|
||||
"theme_ming": "青出於黑",
|
||||
"theme_naruto": "木葉之村",
|
||||
"theme_orange": "橙黃橘綠",
|
||||
"theme_pink": "粉裝玉琢",
|
||||
"theme_purple": "重斤球紫",
|
||||
"theme_red": "熱情似火",
|
||||
"theme_yellow": "信口雌黃",
|
||||
"user_api__btn_export": "導出",
|
||||
"user_api__btn_import": "導入",
|
||||
"user_api__btn_remove": "移除",
|
||||
"user_api__import_file": "選擇音樂API腳本文件",
|
||||
"user_api__noitem": "這裡竟然是空的 😲"
|
||||
"user_api__noitem": "這裡竟然是空的 😲",
|
||||
"user_api__note": "提示:雖然我們已經盡可能地隔離了腳本的運行環境,但導入包含惡意行為的腳本仍可能會影響你的系統,請謹慎導入。",
|
||||
"user_api__readme": "源編寫說明:",
|
||||
"user_api__title": "自定義源管理"
|
||||
}
|
||||
|
|
|
@ -104,7 +104,7 @@ export default {
|
|||
message: Buffer.from('e69cace8bdafe4bbb6e5ae8ce585a8e5858de8b4b9e4b894e5bc80e6ba90efbc8ce5a682e69e9ce4bda0e698afe88ab1e992b1e8b4ade4b9b0e79a84efbc8ce8afb7e79bb4e68ea5e7bb99e5b7aee8af84efbc810a0a5468697320736f667477617265206973206672656520616e64206f70656e20736f757263652e', 'hex').toString(),
|
||||
confirmButtonText: Buffer.from('e5a5bde79a8420284f4b29', 'hex').toString(),
|
||||
})
|
||||
}, 2000)
|
||||
}, 2e3)
|
||||
},
|
||||
handleClose(isExit) {
|
||||
if (isExit) return rendererSend(NAMES.mainWindow.close, true)
|
||||
|
@ -116,7 +116,7 @@ export default {
|
|||
startTimeout() {
|
||||
setTimeout(() => {
|
||||
if (--this.time > 0) this.startTimeout()
|
||||
}, 1000)
|
||||
}, 1e3)
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -11,50 +11,50 @@ const defaultOptions = {
|
|||
confirmButtonText: '',
|
||||
}
|
||||
|
||||
const dialog = {
|
||||
install(Vue, options) {
|
||||
const dialog = function(options) {
|
||||
const { message, showCancel, cancelButtonText, confirmButtonText } =
|
||||
Object.assign({}, defaultOptions, typeof options == 'string' ? { message: options } : options || {})
|
||||
return new Promise((resolve, reject) => {
|
||||
let app = createApp(Dialog, {
|
||||
afterLeave() {
|
||||
app?.unmount()
|
||||
app = null
|
||||
},
|
||||
}).use(i18n).use(store)
|
||||
export const dialog = function(options) {
|
||||
const { message, showCancel, cancelButtonText, confirmButtonText } =
|
||||
Object.assign({}, defaultOptions, typeof options == 'string' ? { message: options } : options || {})
|
||||
return new Promise((resolve, reject) => {
|
||||
let app = createApp(Dialog, {
|
||||
afterLeave() {
|
||||
app?.unmount()
|
||||
app = null
|
||||
},
|
||||
}).use(i18n).use(store)
|
||||
|
||||
let instance = app.mount(document.createElement('div'))
|
||||
let instance = app.mount(document.createElement('div'))
|
||||
|
||||
// 属性设置
|
||||
instance.visible = true
|
||||
instance.message = message
|
||||
instance.showCancel = showCancel
|
||||
instance.cancelButtonText = cancelButtonText
|
||||
instance.confirmButtonText = confirmButtonText
|
||||
// 属性设置
|
||||
instance.visible = true
|
||||
instance.message = message
|
||||
instance.showCancel = showCancel
|
||||
instance.cancelButtonText = cancelButtonText
|
||||
instance.confirmButtonText = confirmButtonText
|
||||
|
||||
// 挂载
|
||||
document.getElementById('container').appendChild(instance.$el)
|
||||
// 挂载
|
||||
document.getElementById('container').appendChild(instance.$el)
|
||||
|
||||
instance.handleCancel = () => {
|
||||
instance.visible = false
|
||||
resolve(false)
|
||||
}
|
||||
|
||||
instance.handleComfirm = () => {
|
||||
instance.visible = false
|
||||
resolve(true)
|
||||
}
|
||||
})
|
||||
instance.handleCancel = () => {
|
||||
instance.visible = false
|
||||
resolve(false)
|
||||
}
|
||||
dialog.confirm = options => dialog(
|
||||
typeof options == 'string'
|
||||
? { message: options, showCancel: true }
|
||||
: { ...options, showCancel: true },
|
||||
)
|
||||
|
||||
instance.handleComfirm = () => {
|
||||
instance.visible = false
|
||||
resolve(true)
|
||||
}
|
||||
})
|
||||
}
|
||||
dialog.confirm = options => dialog(
|
||||
typeof options == 'string'
|
||||
? { message: options, showCancel: true }
|
||||
: { ...options, showCancel: true },
|
||||
)
|
||||
|
||||
const dialogPlugin = {
|
||||
install(Vue, options) {
|
||||
Vue.config.globalProperties.$dialog = dialog
|
||||
},
|
||||
}
|
||||
|
||||
export default dialog
|
||||
export default dialogPlugin
|
||||
|
|
|
@ -3,6 +3,7 @@ import path from 'path'
|
|||
import { shell, clipboard } from 'electron'
|
||||
import crypto from 'crypto'
|
||||
import { rendererSend, rendererInvoke, NAMES } from '@common/ipc'
|
||||
import { log } from '@common/utils'
|
||||
import iconv from 'iconv-lite'
|
||||
import { gzip, gunzip } from 'zlib'
|
||||
import { proxy, qualityList } from '@renderer/core/share'
|
||||
|
@ -480,6 +481,16 @@ export const readLxConfigFile = async path => {
|
|||
return data
|
||||
}
|
||||
|
||||
export const saveStrToFile = (path, str) => new Promise((resolve, reject) => {
|
||||
fs.writeFile(path, str, err => {
|
||||
if (err) {
|
||||
log.error(err)
|
||||
reject(err)
|
||||
return
|
||||
}
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
|
||||
const fileNameRxp = /[\\/:*?#"<>|]/g
|
||||
export const filterFileName = name => name.replace(fileNameRxp, '')
|
||||
|
|
|
@ -12,6 +12,11 @@ dd
|
|||
div
|
||||
base-btn.btn.gap-left(min @click="handleImportAllData") {{$t('setting__backup_all_import')}}
|
||||
base-btn.btn.gap-left(min @click="handleExportAllData") {{$t('setting__backup_all_export')}}
|
||||
dd
|
||||
h3#backup_other {{$t('setting__backup_other')}}
|
||||
div
|
||||
base-btn.btn.gap-left(min @click="handleExportPlayListToText") {{$t('setting__backup_other_export_list_text')}}
|
||||
base-btn.btn.gap-left(min @click="handleExportPlayListToCsv") {{$t('setting__backup_other_export_list_csv')}}
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
@ -26,9 +31,14 @@ import {
|
|||
readLxConfigFile,
|
||||
selectDir,
|
||||
openSaveDir,
|
||||
filterFileName,
|
||||
saveStrToFile,
|
||||
} from '@renderer/utils'
|
||||
import { currentStting } from '../setting'
|
||||
import { getList } from '@renderer/core/share/utils'
|
||||
import path from 'path'
|
||||
import { dialog } from '@renderer/plugins/Dialog'
|
||||
import iconv from 'iconv-lite'
|
||||
|
||||
export default {
|
||||
name: 'SettingUpdate',
|
||||
|
@ -214,6 +224,106 @@ export default {
|
|||
})
|
||||
}
|
||||
|
||||
const exportPlayListToText = async(savePath, isMerge) => {
|
||||
const lists = JSON.parse(JSON.stringify([
|
||||
{ ...toRaw(defaultList), list: toRaw(getList(defaultList.id)) },
|
||||
{ ...toRaw(loveList), list: toRaw(getList(loveList.id)) },
|
||||
...userLists.map(l => ({ ...toRaw(l), list: toRaw(getList(l.id)) })),
|
||||
]))
|
||||
for await (const list of lists) {
|
||||
for await (const item of list.list) {
|
||||
if (item.otherSource) delete item.otherSource
|
||||
}
|
||||
}
|
||||
if (isMerge) {
|
||||
saveStrToFile(savePath, iconv.encode(lists.map(l => l.list.map(m => `${m.name} ${m.singer} ${m.albumName}`).join('\n')).join('\n\n'), 'utf8', { addBOM: true }))
|
||||
} else {
|
||||
for await (const list of lists) {
|
||||
await saveStrToFile(path.join(savePath, `lx_list_${filterFileName(list.name)}.txt`), iconv.encode(list.list.map(m => `${m.name} ${m.singer} ${m.albumName}`).join('\n'), 'utf8', { addBOM: true }))
|
||||
}
|
||||
}
|
||||
}
|
||||
const handleExportPlayListToText = async() => {
|
||||
const confirm = await dialog.confirm({
|
||||
message: t('setting__backup_other_export_list_text_confirm'),
|
||||
cancelButtonText: t('cancel_button_text'),
|
||||
confirmButtonText: t('confirm_button_text'),
|
||||
})
|
||||
if (confirm) {
|
||||
openSaveDir({
|
||||
title: t('setting__backup_other_export_dir'),
|
||||
defaultPath: 'lx_list_all.txt',
|
||||
}).then(result => {
|
||||
if (result.canceled) return
|
||||
let path = result.filePath
|
||||
if (!path.endsWith('.txt')) path += '.txt'
|
||||
exportPlayListToText(path, true)
|
||||
})
|
||||
} else {
|
||||
selectDir({
|
||||
title: t('setting__backup_other_export_dir'),
|
||||
defaultPath: currentStting.value.download.savePath,
|
||||
properties: ['openDirectory'],
|
||||
}).then(result => {
|
||||
if (result.canceled) return
|
||||
exportPlayListToText(result.filePaths[0], false)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const exportPlayListToCsv = async(savePath, isMerge) => {
|
||||
const lists = JSON.parse(JSON.stringify([
|
||||
{ ...toRaw(defaultList), list: toRaw(getList(defaultList.id)) },
|
||||
{ ...toRaw(loveList), list: toRaw(getList(loveList.id)) },
|
||||
...userLists.map(l => ({ ...toRaw(l), list: toRaw(getList(l.id)) })),
|
||||
]))
|
||||
for await (const list of lists) {
|
||||
for await (const item of list.list) {
|
||||
if (item.otherSource) delete item.otherSource
|
||||
}
|
||||
}
|
||||
const filterStr = str => {
|
||||
if (!str) return ''
|
||||
str = str.replace(/"/g, '""')
|
||||
if (/,/.test(str)) str = `"${str}"`
|
||||
return str
|
||||
}
|
||||
if (isMerge) {
|
||||
saveStrToFile(savePath, iconv.encode(lists.map(l => l.list.map(m => `${filterStr(m.name)},${filterStr(m.singer)},${filterStr(m.albumName)}`).join('\n')).join('\n'), 'utf8', { addBOM: true }))
|
||||
} else {
|
||||
for await (const list of lists) {
|
||||
await saveStrToFile(path.join(savePath, `lx_list_${filterFileName(list.name)}.csv`), iconv.encode(list.list.map(m => `${filterStr(m.name)},${filterStr(m.singer)},${filterStr(m.albumName)}`).join('\n'), 'utf8', { addBOM: true }))
|
||||
}
|
||||
}
|
||||
}
|
||||
const handleExportPlayListToCsv = async() => {
|
||||
const confirm = await dialog.confirm({
|
||||
message: t('setting__backup_other_export_list_text_confirm'),
|
||||
cancelButtonText: t('cancel_button_text'),
|
||||
confirmButtonText: t('confirm_button_text'),
|
||||
})
|
||||
if (confirm) {
|
||||
openSaveDir({
|
||||
title: t('setting__backup_other_export_dir'),
|
||||
defaultPath: 'lx_list_all.csv',
|
||||
}).then(result => {
|
||||
if (result.canceled) return
|
||||
let path = result.filePath
|
||||
if (!path.endsWith('.csv')) path += '.csv'
|
||||
exportPlayListToCsv(path, true)
|
||||
})
|
||||
} else {
|
||||
selectDir({
|
||||
title: t('setting__backup_other_export_dir'),
|
||||
defaultPath: currentStting.value.download.savePath,
|
||||
properties: ['openDirectory'],
|
||||
}).then(result => {
|
||||
if (result.canceled) return
|
||||
exportPlayListToCsv(result.filePaths[0], false)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
window.eventHub.on(eventBaseName.set_config, handleUpdateSetting)
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
|
@ -228,6 +338,8 @@ export default {
|
|||
handleImportSetting,
|
||||
handleExportAllData,
|
||||
handleImportAllData,
|
||||
handleExportPlayListToText,
|
||||
handleExportPlayListToCsv,
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue