mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25:41 +00:00
bd56177e2c
* wip(home): Lossless rail + dedicated /lossless-albums page Rail under Home > mostPlayed and a dedicated infinite-scroll page that list albums whose tracks are tagged in lossless containers. Walks Navidrome's native /api/song?_sort=bit_depth&_order=DESC, dedupes by albumId on the way down, stops when the song stream crosses into lossy (bitDepth==0) or the server runs out of rows. _filters has no operators on quality columns, so a sort + walk is the only path; equality on sample_rate / bit_depth probes returned empty (verified). The page paginates through the song-cursor with an in-flight ref so overlapping IntersectionObserver fires don't double-add albums, plus a cancelled flag so React StrictMode's double-mount doesn't apply two parallel result sets in dev. Suffix allowlist excludes ambiguous wrappers — m4a/m4b can be ALAC *or* AAC and Navidrome's response carries an empty codec field, so we can't tell them apart; same story for wma. Allowlist is flac, wav, aiff/aif, dsf/dff, ape, wv, shn, tta — containers that are only lossless. ALAC-in-m4a setups will miss out, acceptable trade-off without a reliable codec field. Status: WIP. Settings home-customizer label and en.ts strings landed, no other locales yet, no quality badge on AlbumCards across the rest of the app, no CHANGELOG. Branch was 'feat/home-hires-rail' during the earlier hi-res-only iteration before the lossless broadening. * wip(home): Lossless page header parity + streaming + sidebar nav Page header now mirrors All Albums: selection mode with three action buttons (Enqueue Selected, Add Offline, Download ZIPs) wired to the same handlers Albums.tsx uses, selection-counter title swap, and the perfFlags.disableMainstageStickyHeader respect path. Filters were intentionally skipped — the rail is sorted by bit_depth, mixing client- side filters with server-driven pagination would produce gaps. Loading feels noticeably faster: ndListLosslessAlbumsPage takes an optional onProgress callback that fires once per internal fetch with the entries discovered in that fetch, so the page can stream new albums into state instead of waiting on the whole loadMore. Page-side budget dropped from 5×200 to 2×100 songs per loadMore (~1 MB worst case vs 5 MB before), since the rail's catch-em-all pass is wrong for infinite-scroll UX. Subtitle under the page title primes the user that this is slower than other album pages because Psysonic walks the song catalog by quality (Navidrome ignores _fields, so per-song responses ship with lyrics + tags + participants whether we want them or not). Sidebar nav entry registered under 'losslessAlbums' with a Gem icon, defaults to visible:false (matches composers / folderBrowser / deviceSync — niche browsing modes). Existing users get the entry appended at the end of their persisted sidebar list automatically via the onRehydrateStorage merge that sidebarStore already runs for new DEFAULT_SIDEBAR_ITEMS. i18n: full coverage across all 8 locales for sidebar.losslessAlbums, home.losslessAlbums, losslessAlbums.empty, losslessAlbums.unsupported and the new losslessAlbums.slowFetchHint subtitle. ru/zh are machine-translation quality, flagged for a polish pass. * feat(home): default Lossless sidebar entry to visible Flips the DEFAULT_SIDEBAR_ITEMS entry for `losslessAlbums` from false to true. Existing installs keep whatever the user has in persisted storage; fresh installs see the entry in the sidebar from the start. Earlier wip commit defaulted it off (matched composers / folderBrowser / deviceSync as a niche browse mode), but the rail + page do show something useful for any library with at least one FLAC/WAV/etc. album, so off-by-default just hid the feature. * docs: changelog entry for PR #506 Logs the Lossless Albums rail + page + sidebar entry in v1.46.0 "## Added". * docs(settings): contributor entry for PR #506 Adds the Lossless Albums rail/page bullet to Psychotoxical's contributions list.
1788 lines
92 KiB
TypeScript
1788 lines
92 KiB
TypeScript
export const zhTranslation = {
|
||
sidebar: {
|
||
library: '音乐库',
|
||
mainstage: '主舞台',
|
||
newReleases: '新发布',
|
||
allAlbums: '全部专辑',
|
||
randomAlbums: '随机专辑',
|
||
randomPicker: '创建混音',
|
||
artists: '艺术家',
|
||
composers: '作曲家',
|
||
randomMix: '随机混音',
|
||
favorites: '收藏夹',
|
||
nowPlaying: '正在播放',
|
||
system: '系统',
|
||
statistics: '统计',
|
||
settings: '设置',
|
||
help: '帮助',
|
||
expand: '展开侧边栏',
|
||
collapse: '收起侧边栏',
|
||
downloadingTracks: '正在缓存 {{n}} 首歌曲…',
|
||
syncingTracks: '同步中 {{done}}/{{total}}…',
|
||
cancelDownload: '取消下载',
|
||
offlineLibrary: '离线音乐库',
|
||
genres: '流派',
|
||
tracks: '曲目',
|
||
playlists: '播放列表',
|
||
mostPlayed: '最常播放',
|
||
losslessAlbums: '无损',
|
||
radio: '网络电台',
|
||
folderBrowser: '文件夹浏览器',
|
||
deviceSync: '设备同步',
|
||
libraryScope: '资料库范围',
|
||
allLibraries: '所有资料库',
|
||
expandPlaylists: '展开播放列表',
|
||
collapsePlaylists: '收起播放列表',
|
||
more: '更多',
|
||
feelingLucky: '好运混音',
|
||
},
|
||
home: {
|
||
hero: '精选',
|
||
starred: '个人收藏',
|
||
recent: '最近添加',
|
||
mostPlayed: '最常播放',
|
||
recentlyPlayed: '最近播放',
|
||
losslessAlbums: '无损专辑',
|
||
discover: '发现',
|
||
discoverSongs: '发现曲目',
|
||
loadMore: '加载更多',
|
||
discoverMore: '发现更多',
|
||
discoverArtists: '发现艺术家',
|
||
discoverArtistsMore: '全部艺术家',
|
||
becauseYouLike: '因为你听过…',
|
||
becauseYouLikeFor: '因为你听过 {{artist}}',
|
||
similarTo: '类似 {{artist}}',
|
||
becauseYouLikeTracks_one: '{{count}} 首',
|
||
becauseYouLikeTracks_other: '{{count}} 首'
|
||
},
|
||
hero: {
|
||
eyebrow: '精选专辑',
|
||
playAlbum: '播放专辑',
|
||
enqueue: '加入队列',
|
||
enqueueTooltip: '将整张专辑添加到播放队列',
|
||
},
|
||
search: {
|
||
placeholder: '搜索艺术家、专辑或歌曲…',
|
||
noResults: '未找到 "{{query}}" 的相关结果',
|
||
artists: '艺术家',
|
||
albums: '专辑',
|
||
songs: '歌曲',
|
||
clearLabel: '清除搜索',
|
||
addedToQueueToast: '已将"{{title}}"加入队列',
|
||
title: '搜索',
|
||
resultsFor: '"{{query}}" 的搜索结果',
|
||
album: '专辑',
|
||
advanced: '高级搜索',
|
||
advancedSearchTerm: '搜索词',
|
||
advancedSearchPlaceholder: '标题、专辑、艺术家…',
|
||
advancedGenre: '流派',
|
||
advancedAllGenres: '所有流派',
|
||
advancedYear: '年份',
|
||
advancedYearFrom: '从',
|
||
advancedYearTo: '至',
|
||
advancedAll: '全部',
|
||
advancedSearch: '搜索',
|
||
advancedEmpty: '请输入搜索词或选择过滤器。',
|
||
advancedNoResults: '未找到结果。',
|
||
advancedGenreNote: '歌曲从该流派中随机选取。',
|
||
recentSearches: '最近搜索',
|
||
browse: '浏览',
|
||
emptyHint: '你想听什么?',
|
||
genres: '流派',
|
||
},
|
||
nowPlaying: {
|
||
tooltip: '谁正在收听?',
|
||
title: '谁正在收听?',
|
||
loading: '加载中…',
|
||
nobody: '当前无人收听。',
|
||
minutesAgo: '{{n}} 分钟前',
|
||
nothingPlaying: '尚未开始播放。开始播放一首歌曲吧!',
|
||
aboutArtist: '关于艺术家',
|
||
fromAlbum: '来自此专辑',
|
||
viewAlbum: '查看专辑',
|
||
goToArtist: '前往艺术家',
|
||
readMore: '阅读更多',
|
||
showLess: '收起',
|
||
genreInfo: '流派',
|
||
trackInfo: '曲目信息',
|
||
topSongs: '该艺术家最常播放',
|
||
topSongsCredit: '{{name}} 的热门曲目',
|
||
trackPosition: '第 {{pos}} 首',
|
||
playsCount_one: '播放 {{count}} 次',
|
||
playsCount_other: '播放 {{count}} 次',
|
||
releasedYearsAgo_one: '{{count}} 年前',
|
||
releasedYearsAgo_other: '{{count}} 年前',
|
||
discography: '专辑列表',
|
||
lastfmStats: 'Last.fm 统计',
|
||
thisTrack: '这首歌',
|
||
thisArtist: '这位艺术家',
|
||
listeners: '听众',
|
||
scrobbles: '播放记录',
|
||
yourScrobbles: '你',
|
||
listenersN: '{{n}} 位听众',
|
||
scrobblesN: '{{n}} 次播放',
|
||
playsByYouN: '你播放了 {{n}} 次',
|
||
openTrackOnLastfm: '在 Last.fm 上查看',
|
||
openArtistOnLastfm: '在 Last.fm 上查看艺术家',
|
||
rgTrackTooltip: 'ReplayGain (曲目)',
|
||
rgAlbumTooltip: 'ReplayGain (专辑)',
|
||
rgAutoTooltip: 'ReplayGain (自动)',
|
||
showMoreTracks: '显示另外 {{count}} 首',
|
||
showLessTracks: '收起',
|
||
hideCard: '隐藏卡片',
|
||
layoutMenu: '布局',
|
||
visibleCards: '可见卡片',
|
||
hiddenCards: '已隐藏的卡片',
|
||
noHiddenCards: '没有已隐藏的卡片',
|
||
resetLayout: '重置布局',
|
||
emptyColumn: '将卡片拖到此处',
|
||
},
|
||
contextMenu: {
|
||
playNow: '立即播放',
|
||
playNext: '下一首播放',
|
||
addToQueue: '添加到队列',
|
||
enqueueAlbum: '专辑加入队列',
|
||
enqueueAlbums_one: '{{count}} 张专辑加入队列',
|
||
enqueueAlbums_other: '{{count}} 张专辑加入队列',
|
||
startRadio: '开始电台',
|
||
instantMix: '即时混音',
|
||
instantMixFailed: '无法生成即时混音 — 服务器或插件出错。',
|
||
cliMixNeedsTrack: '当前没有正在播放的内容 — 请先开始播放,然后再执行混音命令。',
|
||
lfmLove: '在 Last.fm 上标记喜欢',
|
||
lfmUnlove: '取消 Last.fm 喜欢标记',
|
||
favorite: '收藏',
|
||
favoriteArtist: '收藏艺术家',
|
||
favoriteAlbum: '收藏专辑',
|
||
unfavorite: '取消收藏',
|
||
unfavoriteArtist: '取消收藏艺术家',
|
||
unfavoriteAlbum: '取消收藏专辑',
|
||
removeFromQueue: '从队列中移除',
|
||
openAlbum: '打开专辑',
|
||
goToArtist: '前往艺术家',
|
||
download: '下载 (ZIP)',
|
||
addToPlaylist: '添加到播放列表',
|
||
selectedPlaylists: '已选择 {{count}} 个播放列表',
|
||
selectedAlbums: '已选择 {{count}} 个专辑',
|
||
selectedArtists: '已选择 {{count}} 个艺术家',
|
||
songInfo: '歌曲信息',
|
||
shareLink: '复制分享链接',
|
||
shareCopied: '分享链接已复制到剪贴板。',
|
||
shareCopyFailed: '无法复制到剪贴板。',
|
||
},
|
||
sharePaste: {
|
||
notLoggedIn: '请先登录并添加服务器,再粘贴分享链接。',
|
||
noMatchingServer: '没有已保存的服务器与此链接匹配。请添加使用该地址的服务器:{{url}}',
|
||
trackUnavailable: '在服务器上找不到此歌曲。',
|
||
albumUnavailable: '在服务器上找不到此专辑。',
|
||
artistUnavailable: '在服务器上找不到此艺术家。',
|
||
composerUnavailable: '在服务器上找不到此作曲家。',
|
||
openedTrack: '正在播放分享的歌曲。',
|
||
openedAlbum: '正在打开分享的专辑。',
|
||
openedArtist: '正在打开分享的艺术家。',
|
||
openedComposer: '正在打开分享的作曲家。',
|
||
openedQueue_one: '正在播放分享队列中的 {{count}} 首曲目。',
|
||
openedQueue_other: '正在播放分享队列中的 {{count}} 首曲目。',
|
||
openedQueuePartial: '正在播放链接中的 {{played}} / {{total}} 首曲目({{skipped}} 首在此服务器上未找到)。',
|
||
queueAllUnavailable: '此链接中的曲目在服务器上均未找到。',
|
||
genericError: '无法打开分享链接。',
|
||
},
|
||
albumDetail: {
|
||
back: '返回',
|
||
orbitDoubleClickHint: '双击将此曲目添加到 Orbit 队列',
|
||
playAll: '全部播放',
|
||
shareAlbum: '分享专辑',
|
||
enqueue: '加入队列',
|
||
enqueueTooltip: '将整张专辑添加到播放队列',
|
||
artistBio: '艺术家简介',
|
||
download: '下载 (ZIP)',
|
||
downloading: '加载中…',
|
||
cacheOffline: '设为离线可用',
|
||
offlineCached: '已离线缓存',
|
||
offlineDownloading: '正在缓存… ({{n}}/{{total}})',
|
||
removeOffline: '移除离线缓存',
|
||
offlineStorageFull: '离线存储空间已满(限制:{{mb}} MB)。请从离线音乐库中删除专辑以释放空间,或在设置中增加限制。',
|
||
offlineStorageGoToLibrary: '离线音乐库',
|
||
offlineStorageGoToSettings: '设置',
|
||
favoriteAdd: '添加到收藏',
|
||
favoriteRemove: '从收藏中移除',
|
||
favorite: '收藏',
|
||
noBio: '暂无简介。',
|
||
moreByArtist: '{{artist}} 的更多作品',
|
||
tracksCount: '{{n}} 首曲目',
|
||
goToArtist: '前往 {{artist}}',
|
||
moreLabelAlbums: '{{label}} 的更多专辑',
|
||
trackTitle: '标题',
|
||
trackAlbum: '专辑',
|
||
trackArtist: '艺术家',
|
||
trackGenre: '流派',
|
||
trackFormat: '格式',
|
||
trackFavorite: '收藏',
|
||
trackRating: '评分',
|
||
trackDuration: '时长',
|
||
trackTotal: '总计',
|
||
columns: '列',
|
||
resetColumns: '重置为默认',
|
||
notFound: '未找到专辑。',
|
||
bioModal: '艺术家简介',
|
||
bioClose: '关闭',
|
||
ratingLabel: '评分',
|
||
enlargeCover: '放大',
|
||
filterSongs: '筛选歌曲…',
|
||
sortNatural: '默认顺序',
|
||
sortByTitle: 'A–Z(标题)',
|
||
sortByArtist: 'A–Z(艺术家)',
|
||
sortByAlbum: 'A–Z(专辑)',
|
||
},
|
||
entityRating: {
|
||
albumShort: '专辑评分',
|
||
artistShort: '艺人评分',
|
||
albumAriaLabel: '专辑评分',
|
||
artistAriaLabel: '艺人评分',
|
||
selectedArtistsRatingAriaLabel: '为所选 {{count}} 位艺人设置星级评分',
|
||
selectedAlbumsRatingAriaLabel: '为所选 {{count}} 张专辑设置星级评分',
|
||
saveFailed: '无法保存评分。',
|
||
},
|
||
artistDetail: {
|
||
back: '返回',
|
||
albums: '专辑',
|
||
album: '专辑',
|
||
playAll: '全部播放',
|
||
shareArtist: '分享艺人',
|
||
shuffle: '随机播放',
|
||
radio: '电台',
|
||
loading: '加载中…',
|
||
noRadio: '未找到该艺术家的相似曲目。',
|
||
notFound: '未找到艺术家。',
|
||
albumsBy: '{{name}} 的专辑',
|
||
topTracks: '热门曲目',
|
||
noAlbums: '未找到专辑。',
|
||
trackTitle: '标题',
|
||
trackAlbum: '专辑',
|
||
trackDuration: '时长',
|
||
favoriteAdd: '添加到收藏',
|
||
favoriteRemove: '从收藏中移除',
|
||
favorite: '收藏',
|
||
albumCount_one: '{{count}} 张专辑',
|
||
albumCount_other: '{{count}} 张专辑',
|
||
openedInBrowser: '已在浏览器中打开',
|
||
featuredOn: '还出现在',
|
||
similarArtists: '相似艺术家',
|
||
cacheOffline: '离线保存全部专辑',
|
||
offlineCached: '全部专辑已缓存',
|
||
offlineDownloading: '正在缓存… ({{done}}/{{total}} 张专辑)',
|
||
uploadImage: '上传艺术家图片',
|
||
uploadImageError: '图片上传失败',
|
||
releaseTypes: {
|
||
album: '专辑',
|
||
ep: 'EP',
|
||
single: '单曲',
|
||
compilation: '合辑',
|
||
live: '现场',
|
||
soundtrack: '原声带',
|
||
remix: '混音',
|
||
other: '其他',
|
||
},
|
||
},
|
||
favorites: {
|
||
title: '收藏夹',
|
||
empty: '您还没有保存任何收藏。',
|
||
artists: '艺术家',
|
||
albums: '专辑',
|
||
songs: '歌曲',
|
||
enqueueAll: '全部加入队列',
|
||
playAll: '全部播放',
|
||
removeSong: '从收藏中移除',
|
||
stations: '广播电台',
|
||
showingFiltered: '显示 {{filtered}} / {{total}} ({{artist}})',
|
||
showingCount: '显示 {{filtered}} / {{total}}',
|
||
clearArtistFilter: '清除艺术家筛选',
|
||
noFilterResults: '所选筛选条件下无结果。',
|
||
allArtists: '全部艺术家',
|
||
topArtists: '按收藏数排行的艺术家',
|
||
topArtistsSongCount_one: '{{count}} 首歌曲',
|
||
topArtistsSongCount_other: '{{count}} 首歌曲',
|
||
},
|
||
randomLanding: {
|
||
title: '创建混音',
|
||
mixByTracks: '按曲目混音',
|
||
mixByTracksDesc: '从整个媒体库随机选取曲目',
|
||
mixByAlbums: '按专辑混音',
|
||
mixByAlbumsDesc: '随机选取专辑,探索新音乐',
|
||
mixByLucky: '好运混音',
|
||
mixByLuckyDesc: '基于高频艺人、专辑和高评分歌曲的智能 Instant Mix',
|
||
},
|
||
randomAlbums: {
|
||
title: '随机专辑',
|
||
refresh: '刷新',
|
||
},
|
||
genres: {
|
||
title: '流派',
|
||
genreCount: '个流派',
|
||
albumCount_one: '{{count}} 张专辑',
|
||
albumCount_other: '{{count}} 张专辑',
|
||
loading: '正在加载流派…',
|
||
empty: '未找到流派。',
|
||
albumsLoading: '正在加载专辑…',
|
||
albumsEmpty: '未找到该流派的专辑。',
|
||
loadMore: '加载更多',
|
||
back: '返回',
|
||
},
|
||
randomMix: {
|
||
title: '随机混音',
|
||
remix: '重新混音',
|
||
remixTooltip: '加载新的随机歌曲',
|
||
remixGenre: '重混 {{genre}}',
|
||
remixTooltipGenre: '加载新的{{genre}}歌曲',
|
||
playAll: '全部播放',
|
||
trackTitle: '标题',
|
||
trackArtist: '艺术家',
|
||
trackAlbum: '专辑',
|
||
trackFavorite: '收藏',
|
||
trackDuration: '时长',
|
||
favoriteAdd: '添加到收藏',
|
||
favoriteRemove: '从收藏中移除',
|
||
play: '播放',
|
||
trackGenre: '流派',
|
||
mixSettingsHeader: '混音设置',
|
||
exclusionsHeader: '排除项',
|
||
filterPanelInexactSizeNote: '混音大小是一个目标 — 当服务器的随机池耗尽时,较大的请求可能会返回较少的唯一曲目。',
|
||
mixSize: '列表大小',
|
||
excludeAudiobooks: '排除有声读物和广播剧',
|
||
excludeAudiobooksDesc: '根据流派、标题、专辑和艺术家匹配关键词 — 例如 Hörbuch、Audiobook、Spoken Word 等',
|
||
genreBlocked: '关键词已屏蔽',
|
||
genreAddedToBlacklist: '已添加到过滤列表',
|
||
genreAlreadyBlocked: '已屏蔽',
|
||
artistBlocked: '艺术家已屏蔽',
|
||
artistAddedToBlacklist: '艺术家已添加到过滤列表',
|
||
artistClickHint: '点击屏蔽此艺术家',
|
||
blacklistToggle: '关键词过滤',
|
||
genreMixTitle: '流派混音',
|
||
genreMixDesc: '按歌曲数量排列的前 20 个流派 — 点击获取随机混音',
|
||
genreMixAll: '所有歌曲',
|
||
genreMixLoadMore: '加载 10 首更多',
|
||
genreMixNoGenres: '服务器上未找到流派。',
|
||
shuffleGenres: '显示其他流派',
|
||
filterPanelTitle: '过滤器',
|
||
filterPanelDesc: '点击下方列表中的流派标签或艺术家名称,将其从未来的混音中排除。',
|
||
genreClickHint: '点击流派标签将其添加为过滤关键词。\\n匹配流派、标题、专辑和艺术家。',
|
||
},
|
||
luckyMix: {
|
||
done: '好运混音已就绪:{{count}} 首',
|
||
failed: '生成好运混音失败,请重试。',
|
||
unavailable: '当前服务器不支持好运混音。',
|
||
cancelTooltip: '取消生成好运混音',
|
||
},
|
||
albums: {
|
||
title: '全部专辑',
|
||
sortByName: '按名称排序 (A-Z)',
|
||
sortByArtist: '按艺术家排序 (A-Z)',
|
||
sortNewest: '最新优先',
|
||
sortRandom: '随机排序',
|
||
yearFrom: '从',
|
||
yearTo: '到',
|
||
yearFilterClear: '清除年份筛选',
|
||
yearFilterLabel: '年份',
|
||
compilationLabel: '合辑',
|
||
compilationOnly: '仅合辑',
|
||
compilationHide: '隐藏合辑',
|
||
compilationTooltipAll: '所有专辑 · 点击:仅合辑',
|
||
compilationTooltipOnly: '仅合辑 · 点击:隐藏合辑',
|
||
compilationTooltipHide: '已隐藏合辑 · 点击:显示全部',
|
||
select: '多选',
|
||
startSelect: '启用多选',
|
||
cancelSelect: '取消',
|
||
selectionCount: '{{count}} 已选择',
|
||
downloadZips: '下载 ZIP',
|
||
addOffline: '添加离线',
|
||
enqueueSelected_one: '加入队列 ({{count}})',
|
||
enqueueSelected_other: '加入队列 ({{count}})',
|
||
enqueueQueued_one: '已将 {{count}} 张专辑加入队列',
|
||
enqueueQueued_other: '已将 {{count}} 张专辑加入队列',
|
||
downloadingZip: '正在下载 {{current}}/{{total}}: {{name}}',
|
||
downloadZipDone: '已下载 {{count}} 个 ZIP',
|
||
downloadZipFailed: '下载 {{name}} 失败',
|
||
offlineQueuing: '正在将 {{count}} 张专辑加入离线队列…',
|
||
offlineFailed: '添加 {{name}} 离线失败',
|
||
},
|
||
tracks: {
|
||
title: '曲目',
|
||
subtitle: '浏览。搜索。发现。',
|
||
heroEyebrow: '此刻精选',
|
||
heroReroll: '换一首',
|
||
playSong: '播放',
|
||
enqueueSong: '加入队列',
|
||
railRandom: '随机精选',
|
||
railHighlyRated: '高分推荐',
|
||
browseTitle: '浏览所有曲目',
|
||
browseUnsupported: '此服务器不支持一次性列出整个音乐库。使用上方的搜索来查找特定曲目。',
|
||
searchPlaceholder: '按标题、艺人或专辑搜索…',
|
||
count_one: '{{count}} 首曲目',
|
||
count_other: '{{count}} 首曲目',
|
||
},
|
||
artists: {
|
||
title: '艺术家',
|
||
search: '搜索…',
|
||
all: '全部',
|
||
gridView: '网格视图',
|
||
listView: '列表视图',
|
||
imagesOn: '艺术家图片已开启 — 可能增加网络和系统负载',
|
||
imagesOff: '艺术家图片已关闭 — 仅显示首字母',
|
||
loadMore: '加载更多',
|
||
notFound: '未找到艺术家。',
|
||
albumCount_one: '{{count}} 张专辑',
|
||
albumCount_other: '{{count}} 张专辑',
|
||
selectionCount: '{{count}} 已选择',
|
||
select: '多选',
|
||
startSelect: '启用多选',
|
||
cancelSelect: '取消',
|
||
addToPlaylist: '添加到播放列表',
|
||
},
|
||
composers: {
|
||
title: '作曲家',
|
||
search: '搜索…',
|
||
notFound: '未找到作曲家。',
|
||
unsupported: '按作曲家浏览需要 Navidrome 0.55 或更新版本。',
|
||
loadFailed: '无法加载作曲家。',
|
||
retry: '重试',
|
||
involvedIn_one: '参与 {{count}} 张专辑',
|
||
involvedIn_other: '参与 {{count}} 张专辑',
|
||
},
|
||
composerDetail: {
|
||
back: '返回',
|
||
notFound: '未找到作曲家。',
|
||
about: '关于这位作曲家',
|
||
works: '作品',
|
||
noWorks: '未找到作品。',
|
||
workCount_one: '{{count}} 部作品',
|
||
workCount_other: '{{count}} 部作品',
|
||
shareComposer: '分享作曲家',
|
||
unknownComposer: '作曲家',
|
||
},
|
||
login: {
|
||
subtitle: '您的 Navidrome 桌面播放器',
|
||
serverName: '服务器名称(可选)',
|
||
serverNamePlaceholder: '我的 Navidrome',
|
||
serverUrl: '服务器地址',
|
||
serverUrlPlaceholder: '192.168.1.100:4533 或 https://music.example.com',
|
||
username: '用户名',
|
||
usernamePlaceholder: 'admin',
|
||
password: '密码',
|
||
showPassword: '显示密码',
|
||
hidePassword: '隐藏密码',
|
||
connect: '连接',
|
||
connecting: '正在连接…',
|
||
connected: '已连接!',
|
||
error: '连接失败 — 请检查您的信息。',
|
||
urlRequired: '请输入服务器地址。',
|
||
savedServers: '已保存的服务器',
|
||
addNew: '或添加新服务器',
|
||
orMagicString: '或使用魔法字符串',
|
||
magicStringPlaceholder: '粘贴分享字符串(psysonic1-…)',
|
||
magicStringInvalid: '魔法字符串无效或无法解析。',
|
||
},
|
||
connection: {
|
||
connected: '已连接',
|
||
connectedTo: '已连接到 {{server}}',
|
||
disconnected: '已断开连接',
|
||
disconnectedFrom: '无法连接到 {{server}} — 点击检查设置',
|
||
checking: '正在连接…',
|
||
extern: '外部',
|
||
offlineTitle: '无服务器连接',
|
||
offlineSubtitle: '无法连接到 {{server}}。请检查您的网络或服务器。',
|
||
offlineModeBanner: '离线模式 — 正在从本地缓存播放',
|
||
offlineNoCacheBanner: '无服务器连接 — 无法访问 {{server}}',
|
||
offlineLibraryTitle: '离线音乐库',
|
||
offlineLibraryEmpty: '尚未缓存任何专辑。请联网,打开专辑并点击"设为离线可用"。',
|
||
offlineAlbumCount_one: '{{n}} 张专辑',
|
||
offlineAlbumCount_plural: '{{n}} 张专辑',
|
||
retry: '重试',
|
||
serverSettings: '服务器设置',
|
||
switchServerTitle: '切换服务器',
|
||
switchServerHint: '点击选择其他已保存的服务器。',
|
||
manageServers: '管理服务器…',
|
||
switchFailed: '无法切换 — 无法连接服务器。',
|
||
lastfmConnected: 'Last.fm 已连接为 @{{user}}',
|
||
lastfmSessionInvalid: '会话无效 — 点击重新连接',
|
||
},
|
||
common: {
|
||
albums: '专辑',
|
||
album: '专辑',
|
||
loading: '加载中…',
|
||
loadingMore: '加载中…',
|
||
loadingPlaylists: '正在加载播放列表…',
|
||
noAlbums: '未找到专辑。',
|
||
downloading: '正在下载…',
|
||
downloadZip: '下载 (ZIP)',
|
||
back: '返回',
|
||
cancel: '取消',
|
||
save: '保存',
|
||
delete: '删除',
|
||
use: '使用',
|
||
add: '添加',
|
||
new: '新',
|
||
active: '当前使用',
|
||
download: '下载',
|
||
chooseDownloadFolder: '选择下载文件夹',
|
||
noFolderSelected: '未选择文件夹',
|
||
rememberDownloadFolder: '记住此文件夹',
|
||
filterGenre: '流派筛选',
|
||
filterSearchGenres: '搜索流派…',
|
||
filterNoGenres: '未找到匹配流派',
|
||
filterClear: '清除',
|
||
favorites: '收藏',
|
||
favoritesTooltipOff: '仅显示收藏',
|
||
favoritesTooltipOn: '显示全部',
|
||
play: '播放',
|
||
bulkSelected: '已选 {{count}} 首',
|
||
clearSelection: '清除选择',
|
||
bulkAddToPlaylist: '添加到播放列表',
|
||
bulkRemoveFromPlaylist: '从播放列表移除',
|
||
bulkClear: '取消选择',
|
||
updaterAvailable: '有可用更新',
|
||
updaterVersion: 'v{{version}} 已发布',
|
||
updaterWebsite: '官网',
|
||
updaterModalTitle: '有新版本可用',
|
||
updaterChangelog: '更新内容',
|
||
updaterDownloadBtn: '立即下载',
|
||
updaterSkipBtn: '跳过此版本',
|
||
updaterRemindBtn: '稍后提醒',
|
||
updaterDone: '下载完成',
|
||
updaterShowFolder: '在文件夹中显示',
|
||
updaterInstallHint: '请关闭 Psysonic 并手动运行安装程序。',
|
||
updaterAurHint: '通过 AUR 安装更新:',
|
||
updaterErrorMsg: '下载失败',
|
||
updaterRetryBtn: '重试',
|
||
durationHoursMinutes: '{{hours}}小时{{minutes}}分钟',
|
||
durationMinutesOnly: '{{minutes}}分钟',
|
||
updaterOpenGitHub: '在 GitHub 上打开',
|
||
filters: '筛选器',
|
||
more: '更多',
|
||
yearRange: '年份范围',
|
||
clearAll: '清除全部',
|
||
},
|
||
settings: {
|
||
title: '设置',
|
||
language: '语言',
|
||
languageEn: '英语',
|
||
languageDe: '德语',
|
||
languageFr: '法语',
|
||
languageNl: '荷兰语',
|
||
languageZh: '中文',
|
||
languageNb: '挪威',
|
||
languageRu: '俄语',
|
||
font: '字体',
|
||
theme: '主题',
|
||
appearance: '外观',
|
||
servers: '服务器',
|
||
serverName: '服务器名称',
|
||
serverUrl: '服务器地址',
|
||
serverUrlPlaceholder: '192.168.1.100:4533 或 https://music.example.com',
|
||
serverUsername: '用户名',
|
||
serverPassword: '密码',
|
||
addServer: '添加服务器',
|
||
addServerTitle: '添加新服务器',
|
||
useServer: '使用',
|
||
deleteServer: '删除',
|
||
noServers: '未保存任何服务器。',
|
||
serverActive: '当前使用',
|
||
confirmDeleteServer: '删除服务器 "{{name}}"?',
|
||
serverConnecting: '正在连接…',
|
||
serverConnected: '已连接!',
|
||
serverFailed: '连接失败。',
|
||
testBtn: '测试连接',
|
||
testingBtn: '正在测试…',
|
||
serverCompatible: '专为 Navidrome 构建。其他兼容 Subsonic 的服务器(Gonic、Airsonic 等)可能功能受限,因为 Psysonic 使用了许多 Navidrome 特有的 API 端点。',
|
||
userMgmtTitle: '用户管理',
|
||
userMgmtDesc: '管理此服务器上的用户。需要管理员权限。',
|
||
userMgmtNoAdmin: '需要管理员权限才能管理此服务器上的用户。',
|
||
userMgmtLoadError: '加载用户失败。',
|
||
userMgmtLoadFriendly: '服务器未响应 — 通常是偶发问题。',
|
||
userMgmtRetry: '重试',
|
||
userMgmtEmpty: '未找到用户。',
|
||
userMgmtYouBadge: '您',
|
||
userMgmtAdminBadge: '管理员',
|
||
userMgmtAddUser: '添加用户',
|
||
userMgmtAddUserTitle: '新建用户',
|
||
userMgmtEditUserTitle: '编辑用户',
|
||
userMgmtUsername: '用户名',
|
||
userMgmtName: '显示名称',
|
||
userMgmtEmail: '电子邮箱',
|
||
userMgmtPassword: '密码',
|
||
userMgmtPasswordEditHint: '输入新密码以更新。',
|
||
userMgmtRoleAdmin: '管理员',
|
||
userMgmtLibraries: '音乐库',
|
||
userMgmtLibrariesAdminHint: '管理员用户自动拥有所有音乐库的访问权限。',
|
||
userMgmtLibrariesEmpty: '此服务器上没有可用的音乐库。',
|
||
userMgmtLibrariesValidation: '请至少选择一个音乐库。',
|
||
userMgmtLibrariesUpdateError: '用户已保存,但音乐库分配失败',
|
||
userMgmtNoLibraries: '未分配音乐库',
|
||
userMgmtNeverSeen: '从未',
|
||
userMgmtSave: '保存',
|
||
userMgmtCancel: '取消',
|
||
userMgmtDelete: '删除',
|
||
userMgmtEdit: '编辑',
|
||
userMgmtConfirmDelete: '删除用户 "{{username}}"?此操作无法撤销。',
|
||
userMgmtCreateError: '创建用户失败。',
|
||
userMgmtUpdateError: '更新用户失败。',
|
||
userMgmtDeleteError: '删除用户失败。',
|
||
userMgmtCreated: '用户已创建。',
|
||
userMgmtUpdated: '用户已更新。',
|
||
userMgmtDeleted: '用户已删除。',
|
||
userMgmtValidationMissing: '用户名、显示名称和密码均为必填项。',
|
||
userMgmtValidationMissingIdentity: '用户名和显示名称为必填项。',
|
||
userMgmtMagicStringGenerate: '生成魔法字符串',
|
||
userMgmtSaveAndMagicString: '保存并获取魔法字符串',
|
||
userMgmtMagicStringPasswordNavHint:
|
||
'Navidrome 会保存此密码。若与当前密码不同,服务器上的登录密码将被更新。',
|
||
userMgmtMagicStringPlaintextWarning:
|
||
'请谨慎分享魔法字符串:其中包含未加密的密码(编码不等于加密)。掌握完整字符串的人可以以该用户身份登录。',
|
||
userMgmtMagicStringCopied: '魔法字符串已复制到剪贴板。',
|
||
userMgmtMagicStringCopyFailed: '无法复制到剪贴板。',
|
||
userMgmtMagicStringLoginFailed: '密码验证失败,无法确认凭据。',
|
||
userMgmtMagicStringModalTitle: '生成魔法字符串',
|
||
userMgmtMagicStringModalDesc: '请输入用户「{{username}}」的 Subsonic 密码,它会包含在复制的魔法字符串中。',
|
||
userMgmtMagicStringModalConfirm: '复制字符串',
|
||
audiomuseTitle: 'AudioMuse-AI(Navidrome)',
|
||
audiomuseDesc:
|
||
'若此服务器已配置 <pluginLink>AudioMuse-AI Navidrome 插件</pluginLink>请开启。可从曲目启动即时混音,并在艺人页使用服务器返回的相似艺人,而非 Last.fm。',
|
||
audiomuseIssueHint:
|
||
'近期即时混音失败 — 请检查 Navidrome 插件与 AudioMuse API。若服务器无结果,将回退使用 Last.fm 的相似艺人。',
|
||
connected: '已连接',
|
||
failed: '失败',
|
||
eqTitle: '均衡器',
|
||
eqEnabled: '启用均衡器',
|
||
eqPreset: '预设',
|
||
eqPresetCustom: '自定义',
|
||
eqPresetBuiltin: '内置预设',
|
||
eqPresetCustomGroup: '我的预设',
|
||
eqSavePreset: '保存为预设',
|
||
eqPresetName: '预设名称…',
|
||
eqDeletePreset: '删除预设',
|
||
eqResetBands: '重置为平直',
|
||
eqPreGain: '预增益',
|
||
eqResetPreGain: '重置预增益',
|
||
eqAutoEqTitle: 'AutoEQ 耳机查询',
|
||
eqAutoEqPlaceholder: '搜索耳机/入耳式型号…',
|
||
eqAutoEqSearching: '搜索中…',
|
||
eqAutoEqNoResults: '未找到结果',
|
||
eqAutoEqError: '搜索失败',
|
||
eqAutoEqRateLimit: 'GitHub 请求限制 — 请一分钟后重试',
|
||
eqAutoEqFetchError: '无法获取 EQ 配置',
|
||
lfmTitle: 'Last.fm',
|
||
lfmConnect: '连接 Last.fm',
|
||
lfmConnecting: '等待授权…',
|
||
lfmConfirm: '我已完成授权',
|
||
lfmConnected: '已连接为',
|
||
lfmDisconnect: '断开连接',
|
||
lfmConnectDesc: '连接您的 Last.fm 账户以启用歌曲记录和正在播放更新,直接从 Psysonic 发送 — 无需配置 Navidrome。',
|
||
lfmOpenBrowser: '将打开浏览器窗口。在 Last.fm 上授权 Psysonic,然后点击下方按钮。',
|
||
lfmScrobbles: '{{n}} 次记录',
|
||
lfmMemberSince: '{{year}} 年加入',
|
||
scrobbleEnabled: '启用歌曲记录',
|
||
scrobbleDesc: '播放 50% 后发送歌曲到 Last.fm',
|
||
behavior: '应用行为',
|
||
cacheTitle: '最大存储大小',
|
||
cacheDesc: '封面和艺术家图片。存满时,最旧的条目将自动移除。离线专辑不会自动移除,但手动清除缓存时会被删除。',
|
||
cacheUsedImages: '图片:',
|
||
cacheUsedOffline: '离线曲目:',
|
||
cacheUsedHot: '占用空间:',
|
||
hotCacheTrackCount: '缓存曲目数:',
|
||
cacheMaxLabel: '最大容量',
|
||
cacheClearBtn: '清除缓存',
|
||
cacheClearWarning: '这将同时移除音乐库中的所有离线专辑。',
|
||
cacheClearConfirm: '全部清除',
|
||
cacheClearCancel: '取消',
|
||
offlineDirTitle: '离线音乐库(应用内)',
|
||
offlineDirDesc: '用于在 Psysonic 中离线可用的曲目存储位置。',
|
||
offlineDirDefault: '默认(应用数据)',
|
||
offlineDirChange: '更改目录',
|
||
offlineDirClear: '重置为默认',
|
||
offlineDirHint: '新下载将保存到此位置,现有下载保留在原始路径。',
|
||
hotCacheTitle: '热播放缓存',
|
||
hotCacheDisclaimer: '预加载队列中即将播放的曲目并保留近期已播放的。开启后占用磁盘与网络。',
|
||
hotCacheDirDefault: '默认(应用数据)',
|
||
hotCacheDirChange: '更改目录',
|
||
hotCacheDirClear: '重置为默认',
|
||
hotCacheDirHint: '更换目录会重置应用内索引;已下载的文件仍留在原路径,需自行删除。',
|
||
hotCacheEnabled: '启用热播放缓存',
|
||
hotCacheMaxMb: '最大缓存大小',
|
||
hotCacheDebounce: '队列变更去抖',
|
||
hotCacheDebounceImmediate: '立即',
|
||
hotCacheDebounceSeconds: '{{n}} 秒',
|
||
hotCacheClearBtn: '清空热缓存',
|
||
audioOutputDevice: '音频输出设备',
|
||
audioOutputDeviceDesc: '选择 Psysonic 播放音频的设备。更改立即生效并重新开始当前曲目。',
|
||
audioOutputDeviceDefault: '系统默认',
|
||
audioOutputDeviceRefresh: '刷新设备列表',
|
||
audioOutputDeviceOsDefaultNow: '当前系统输出',
|
||
audioOutputDeviceListError: '无法加载音频设备列表。',
|
||
audioOutputDeviceNotInCurrentList: '不在当前列表中',
|
||
audioOutputDeviceMacNotice: '在 macOS 上,出于技术原因,目前播放始终跟随系统输出设备。请通过 系统设置 → 声音 或菜单栏扬声器图标切换目标设备。背景:打开非默认音频流时 CoreAudio 会触发麦克风权限提示 —— 我们通过始终使用系统默认输出来避免此提示。',
|
||
hiResTitle: '原生高清晰度播放',
|
||
hiResEnabled: '启用原生高清晰度播放',
|
||
hiResDesc: "默认强制 44.1 kHz 输出以获得最大稳定性。仅在硬件和网络可靠支持高采样率(88.2 kHz+)时启用。",
|
||
showArtistImages: '显示艺术家图片',
|
||
showArtistImagesDesc: '在艺术家概览中加载并显示艺术家图片。默认关闭以减少大型音乐库的服务器磁盘I/O和网络负载。',
|
||
showOrbitTrigger: '在顶栏显示"Orbit"',
|
||
showOrbitTriggerDesc: '用于启动或加入共享收听会话的顶栏按钮。如果不使用 Orbit,可以隐藏 — 随时可在此重新开启。',
|
||
showTrayIcon: '显示托盘图标',
|
||
showTrayIconDesc: '在系统通知区域 / 菜单栏显示 Psysonic 图标。',
|
||
minimizeToTray: '最小化到托盘',
|
||
minimizeToTrayDesc: '关闭窗口时,Psysonic 将继续在系统托盘中运行,而不是退出。',
|
||
preloadMiniPlayer: '预加载迷你播放器',
|
||
preloadMiniPlayerDesc: '在应用启动时于后台构建迷你播放器窗口,使其首次打开即可立即显示内容。会占用少量额外内存。',
|
||
linuxWebkitSmoothScroll: '滚轮平滑(Linux)',
|
||
linuxWebkitSmoothScrollDesc: '开:惯性滚动。关:逐行,类似 GTK。',
|
||
discordRichPresence: 'Discord Rich Presence',
|
||
discordRichPresenceDesc: '在 Discord 个人资料上显示当前播放的曲目。需要 Discord 处于运行状态。',
|
||
discordCoverSource: '封面来源',
|
||
discordCoverSourceDesc: '从何处获取 Discord 个人资料上显示的专辑封面。',
|
||
discordCoverNone: '无(仅显示应用图标)',
|
||
discordCoverServer: '服务器(通过专辑信息)',
|
||
discordCoverApple: 'Apple Music',
|
||
discordOptions: 'Discord 高级选项',
|
||
discordTemplates: '自定义文本模板',
|
||
discordTemplatesDesc: '自定义在 Discord 个人资料上显示的信息。变量:{title}, {artist}, {album}',
|
||
discordTemplateDetails: '主行 (details)',
|
||
discordTemplateState: '副行 (state)',
|
||
discordTemplateLargeText: '专辑提示 (largeText)',
|
||
nowPlayingEnabled: '在实时窗口中显示',
|
||
nowPlayingEnabledDesc: '将当前播放的曲目广播到服务器的实时听众视图。禁用以停止发送播放数据。',
|
||
enableBandsintown: 'Bandsintown 巡演日期',
|
||
enableBandsintownDesc: '在信息标签页中显示当前艺术家的即将到来的演出。数据通过公开的 Bandsintown API 获取。',
|
||
lyricsServerFirst: '优先使用服务器歌词',
|
||
lyricsServerFirstDesc: '先查询服务器提供的歌词(内嵌标签、sidecar 文件),再查询 LRCLIB。禁用则优先使用 LRCLIB。',
|
||
enableNeteaselyrics: '网易云音乐歌词',
|
||
enableNeteaselyricsDesc: '当服务器和 LRCLIB 均无结果时,使用网易云音乐作为最终歌词来源。对亚洲及国际音乐覆盖最佳。',
|
||
lyricsSourcesTitle: '歌词来源',
|
||
lyricsSourcesDesc: '选择要查询的歌词来源及其顺序。拖动以排序。已禁用的来源将被跳过。',
|
||
lyricsSourceServer: '服务器',
|
||
lyricsSourceLrclib: 'LRCLIB',
|
||
lyricsSourceNetease: '网易云音乐',
|
||
lyricsModeStandard: '标准',
|
||
lyricsModeStandardDesc: '三个可自由排序的来源:服务器标签、LRCLIB、网易云。',
|
||
lyricsModeLyricsplus: 'YouLyPlus(卡拉OK)',
|
||
lyricsModeLyricsplusDesc: '来自 Apple Music、Spotify、Musixmatch 和 QQ 音乐的逐字同步歌词(社区后端)。找不到时静默回退到标准来源。',
|
||
lyricsStaticOnly: '仅以静态文本显示歌词',
|
||
lyricsStaticOnlyDesc: '同步歌词将不自动滚动、不逐字高亮,以静态文本显示。',
|
||
downloadsTitle: 'ZIP 导出与归档',
|
||
downloadsFolderDesc: '将专辑以 ZIP 文件下载到电脑时的目标文件夹。',
|
||
downloadsDefault: '默认下载文件夹',
|
||
pickFolder: '选择',
|
||
pickFolderTitle: '选择下载文件夹',
|
||
clearFolder: '清除下载文件夹',
|
||
logout: '退出登录',
|
||
aboutTitle: '关于 Psysonic',
|
||
aboutDesc: '一款专为 Navidrome 构建的现代桌面音乐播放器。使用 Subsonic API 以及 Navidrome 特有的扩展。基于 Tauri v2 和原生 Rust 音频引擎——轻量快速,功能丰富:波形进度条、同步歌词、Last.fm 集成、10 段均衡器、交叉淡入淡出、无缝播放、响度增益、流派浏览以及大量精美主题。',
|
||
aboutLicense: '许可证',
|
||
aboutLicenseText: 'GNU GPL v3 — 在相同许可证下可自由使用、修改和分发。',
|
||
aboutRepo: 'GitHub 上的源代码',
|
||
aboutVersion: '版本',
|
||
aboutBuiltWith: '使用 Tauri · React · TypeScript · Rust/rodio 构建',
|
||
aboutReleaseNotesLabel: '版本说明',
|
||
aboutReleaseNotesLink: '打开此版本的新功能',
|
||
aboutContributorsLabel: '贡献者',
|
||
showChangelogOnUpdate: '更新时显示"新功能"',
|
||
showChangelogOnUpdateDesc: '更新后在「正在播放」上方显示一个低调的更新日志横幅。点击打开发行说明,X 按钮关闭。',
|
||
randomMixTitle: '随机混音黑名单',
|
||
luckyMixMenuTitle: '在菜单中显示“好运混音”',
|
||
luckyMixMenuDesc: '在“创建混音”中启用“好运混音”,并在分离导航时作为独立菜单项显示。仅当当前服务器启用 AudioMuse 时可见。',
|
||
randomMixBlacklistTitle: '自定义过滤关键词',
|
||
randomMixBlacklistDesc: '当任何关键词匹配流派、标题、专辑或艺术家时,歌曲将被排除(当上方复选框开启时生效)。',
|
||
randomMixBlacklistPlaceholder: '添加关键词…',
|
||
randomMixBlacklistAdd: '添加',
|
||
randomMixBlacklistEmpty: '尚未添加自定义关键词。',
|
||
randomMixHardcodedTitle: '内置关键词(复选框开启时生效)',
|
||
tabAudio: '音频',
|
||
tabStorage: '离线与缓存',
|
||
tabAppearance: '外观',
|
||
tabLibrary: '媒体库',
|
||
tabServers: '服务器',
|
||
tabLyrics: '歌词',
|
||
tabPersonalisation: '个性化',
|
||
tabIntegrations: '集成',
|
||
inputKeybindingsTitle: '键盘快捷键',
|
||
aboutContributorsCount_one: '{{count}} 项贡献',
|
||
aboutContributorsCount_other: '{{count}} 项贡献',
|
||
searchPlaceholder: '搜索设置…',
|
||
searchNoResults: '没有设置匹配您的搜索。',
|
||
aboutMaintainersLabel: '维护者',
|
||
integrationsPrivacyTitle: '隐私说明',
|
||
integrationsPrivacyBody: '此标签页中的所有集成均为 <strong>选择加入</strong>,启用后会向外部服务或您的 Navidrome 服务器发送数据。Last.fm 接收您的收听历史,Discord 在您的个人资料中显示正在播放的曲目,Bandsintown 会按艺人查询以获取巡演日期,"正在播放" 分享会向您 Navidrome 服务器的其他用户公开您当前的曲目。如果您不需要这些功能,只需将相应部分保持停用即可。',
|
||
homeCustomizerTitle: '首页',
|
||
sidebarTitle: '侧边栏',
|
||
sidebarReset: '重置为默认',
|
||
artistLayoutTitle: '艺术家页面板块',
|
||
artistLayoutDesc: '拖动以重新排序,切换以隐藏艺术家页面的各个板块。没有数据的板块会自动跳过。',
|
||
artistLayoutReset: '重置为默认',
|
||
artistLayoutBio: '艺术家简介',
|
||
artistLayoutTopTracks: '热门曲目',
|
||
artistLayoutSimilar: '相似艺术家',
|
||
artistLayoutAlbums: '专辑',
|
||
artistLayoutFeatured: '也参与了',
|
||
sidebarDrag: '拖动以重新排序',
|
||
sidebarFixed: '始终显示',
|
||
randomNavSplitTitle: '拆分混音导航',
|
||
randomNavSplitDesc: '在侧边栏中将“随机混音”、“随机专辑”和“好运混音”显示为独立条目,而非“创建混音”合并入口。',
|
||
tabInput: '输入',
|
||
tabUsers: '用户',
|
||
tabSystem: '系统',
|
||
loggingTitle: '日志记录',
|
||
loggingModeDesc: '控制终端中后端日志的详细程度。',
|
||
loggingModeOff: '关闭',
|
||
loggingModeNormal: '普通',
|
||
loggingModeDebug: '调试',
|
||
loggingExport: '导出日志',
|
||
loggingExportSuccess: '日志已导出({{count}} 行)。',
|
||
loggingExportError: '无法导出日志。',
|
||
ratingsSectionTitle: '评分',
|
||
ratingsSkipStarTitle: '跳过以评 1 星',
|
||
ratingsSkipStarDesc:
|
||
'连续多次跳过后将曲目设为 1 星。仅适用于此前未评分的曲目。',
|
||
ratingsSkipStarThresholdLabel: '跳过次数',
|
||
ratingsMixFilterTitle: '按评分筛选',
|
||
ratingsMixFilterDesc:
|
||
'在{{mix}}与{{albums}}中筛选低评分内容。再次点击所选星标可关闭阈值。',
|
||
ratingsMixMinSong: '歌曲',
|
||
ratingsMixMinAlbum: '专辑',
|
||
ratingsMixMinArtist: '艺人',
|
||
ratingsMixMinThresholdAria: '最低星数:{{label}}',
|
||
backupTitle: '备份与恢复',
|
||
backupExport: '导出设置',
|
||
backupExportDesc: '将所有设置、服务器配置、Last.fm 配置、主题、均衡器和快捷键保存到 .psybkp 文件。密码以明文存储——请妥善保管该文件。',
|
||
backupImport: '导入设置',
|
||
backupImportDesc: '从 .psybkp 文件恢复设置。导入后应用将重新加载。',
|
||
backupImportConfirm: '所有当前设置将被覆盖。是否继续?',
|
||
backupSuccess: '备份已保存',
|
||
backupImportSuccess: '设置已恢复——正在重新加载…',
|
||
backupImportError: '备份文件无效或已损坏。',
|
||
shortcutsReset: '恢复默认',
|
||
shortcutListening: '请按下按键…',
|
||
shortcutUnbound: '—',
|
||
globalShortcutsTitle: '全局快捷键',
|
||
globalShortcutsNote: '即使 Psysonic 在后台也能在系统范围内工作。需要 Ctrl、Alt 或 Super 作为修饰键。',
|
||
shortcutClear: '清除',
|
||
shortcutPlayPause: '播放 / 暂停',
|
||
shortcutNext: '下一首',
|
||
shortcutPrev: '上一首',
|
||
shortcutVolumeUp: '音量增大',
|
||
shortcutVolumeDown: '音量减小',
|
||
shortcutSeekForward: '快进 10 秒',
|
||
shortcutSeekBackward: '快退 10 秒',
|
||
shortcutToggleQueue: '切换队列',
|
||
shortcutOpenFolderBrowser: '打开{{folderBrowser}}',
|
||
shortcutFullscreenPlayer: '全屏播放器',
|
||
shortcutNativeFullscreen: '原生全屏',
|
||
shortcutOpenMiniPlayer: '打开迷你播放器',
|
||
shortcutStartSearch: '开始搜索',
|
||
shortcutStartAdvancedSearch: '开始高级搜索',
|
||
shortcutToggleSidebar: '切换侧边栏',
|
||
shortcutMuteSound: '静音',
|
||
shortcutToggleEqualizer: '打开 / 切换均衡器',
|
||
shortcutToggleRepeat: '切换循环',
|
||
shortcutOpenNowPlaying: '打开"正在播放"',
|
||
shortcutShowLyrics: '显示歌词',
|
||
shortcutFavoriteCurrentTrack: '将当前曲目添加到收藏',
|
||
shortcutOpenHelp: '帮助',
|
||
playbackTitle: '播放',
|
||
replayGain: '回放增益',
|
||
replayGainDesc: '使用 ReplayGain 元数据标准化曲目音量',
|
||
replayGainMode: '模式',
|
||
replayGainAuto: '自动',
|
||
replayGainAutoDesc: '当队列中相邻曲目来自同一专辑时使用专辑增益,否则使用曲目增益。',
|
||
replayGainTrack: '曲目',
|
||
replayGainAlbum: '专辑',
|
||
replayGainPreGain: '预增益(有标签文件)',
|
||
replayGainPreGainDesc: '对所有 ReplayGain 计算结果叠加的统一增益。适合在曲库整体偏轻时用作整体补偿。',
|
||
replayGainFallback: '回退增益(无标签 / 收音机)',
|
||
replayGainFallbackDesc: '应用于没有 ReplayGain 标签的曲目(以及电台流),避免未打标签的内容比其余素材更响。',
|
||
normalization: '响度归一化',
|
||
normalizationDesc: '在曲目、专辑和电台之间统一可感知的响度。',
|
||
normalizationOff: '关闭',
|
||
normalizationReplayGain: 'ReplayGain',
|
||
normalizationLufs: 'LUFS',
|
||
loudnessTargetLufs: '目标 LUFS',
|
||
loudnessTargetLufsDesc: '所有曲目对齐的参考响度。数值越小,输出越响。流媒体服务通常在 -14 LUFS 左右。',
|
||
loudnessPreAnalysisAttenuation: '测量前衰减',
|
||
loudnessPreAnalysisAttenuationDesc:
|
||
'在曲目响度数据保存前的额外压低。流式阶段之后只是粗略估计,不是完整测量。0 dB 为不压低;更负则更安静。右侧显示当前目标下的等效 dB。',
|
||
loudnessPreAnalysisAttenuationRef: '目标 {{tgt}} LUFS 时等效 {{eff}} dB。',
|
||
loudnessPreAnalysisAttenuationReset: '恢复默认',
|
||
loudnessFirstPlayNote:
|
||
'首次播放新曲目时,音量可能在测量过程中略有波动。下一次播放将使用缓存的测量结果,保持稳定。队列中即将播放的曲目通常在上一首播放期间已完成预分析,所以这种情况在实际使用中很少出现。',
|
||
crossfade: '交叉淡入淡出',
|
||
crossfadeDesc: '曲目间淡入淡出',
|
||
crossfadeSecs: '{{n}} 秒',
|
||
notWithGapless: '无缝播放开启时不可用',
|
||
notWithCrossfade: '交叉淡入淡出开启时不可用',
|
||
gapless: '无缝播放',
|
||
gaplessDesc: '预缓冲下一首曲目以消除歌曲间的间隙',
|
||
preservePlayNextOrder: '保留"下一首播放"顺序',
|
||
preservePlayNextOrderDesc: '新添加的"下一首播放"项目排在现有项目之后,而不是插到前面。',
|
||
trackPreviewsTitle: '曲目预览',
|
||
trackPreviewsToggle: '启用曲目预览',
|
||
trackPreviewsDesc: '在曲目列表中显示内联播放与预览按钮,可快速试听歌曲中段。',
|
||
trackPreviewStart: '起始位置',
|
||
trackPreviewStartDesc: '预览从曲目何处开始(占总时长的百分比)。',
|
||
trackPreviewDuration: '时长',
|
||
trackPreviewDurationDesc: '每段预览自动停止前的播放时长。',
|
||
trackPreviewDurationSecs: '{{n}} 秒',
|
||
trackPreviewLocationsTitle: '预览显示位置',
|
||
trackPreviewLocationsDesc: '选择在哪些列表中显示预览按钮。',
|
||
trackPreviewLocation_suggestions: '播放列表建议中',
|
||
trackPreviewLocation_albums: '专辑曲目列表中',
|
||
trackPreviewLocation_playlists: '播放列表中',
|
||
trackPreviewLocation_favorites: '收藏中',
|
||
trackPreviewLocation_artist: '艺人热门曲目中',
|
||
trackPreviewLocation_randomMix: 'Random Mix 中',
|
||
preloadMode: '预加载下一曲目',
|
||
preloadModeDesc: '何时开始缓冲队列中的下一曲目',
|
||
nextTrackBufferingTitle: '缓冲',
|
||
preloadHotCacheMutualExclusive: '预加载与热缓存用途相同——两者不能同时启用。启用其中一个会自动禁用另一个。',
|
||
preloadOff: '关闭',
|
||
preloadBalanced: '均衡(结束前30秒)',
|
||
preloadEarly: '提前(播放5秒后)',
|
||
preloadCustom: '自定义',
|
||
preloadCustomSeconds: '结束前秒数:{{n}}',
|
||
infiniteQueue: '无限队列',
|
||
infiniteQueueDesc: '队列播完时自动追加随机曲目',
|
||
experimental: '实验性',
|
||
fsPlayerSection: '全屏播放器',
|
||
fsShowArtistPortrait: '显示艺术家照片',
|
||
fsShowArtistPortraitDesc: '在全屏播放器右侧显示艺术家照片(或专辑封面)。',
|
||
fsPortraitDim: '照片暗化',
|
||
fsLyricsStyle: '歌词显示样式',
|
||
fsLyricsStyleRail: '轨道',
|
||
fsLyricsStyleRailDesc: '经典5行滑动轨道。',
|
||
fsLyricsStyleApple: '滚动',
|
||
fsLyricsStyleAppleDesc: '全屏可滚动列表。',
|
||
sidebarLyricsStyle: '歌词滚动样式',
|
||
sidebarLyricsStyleClassic: '经典',
|
||
sidebarLyricsStyleClassicDesc: '活动行居中显示。',
|
||
sidebarLyricsStyleApple: 'Apple Music-like',
|
||
sidebarLyricsStyleAppleDesc: '活动行固定在顶部,带有平滑弹簧动画。',
|
||
seekbarStyle: '进度条样式',
|
||
seekbarStyleDesc: '选择播放进度条的外观',
|
||
seekbarTruewave: '真实波形',
|
||
seekbarPseudowave: '伪波形',
|
||
seekbarLinedot: '线条与点',
|
||
seekbarBar: '条形',
|
||
seekbarThick: '粗条形',
|
||
seekbarSegmented: '分段式',
|
||
seekbarNeon: '霓虹',
|
||
seekbarPulsewave: '脉冲波',
|
||
seekbarParticletrail: '粒子轨迹',
|
||
seekbarLiquidfill: '液体填充',
|
||
seekbarRetrotape: '复古磁带',
|
||
themeSchedulerTitle: '主题定时切换',
|
||
themeSchedulerEnable: '启用主题定时器',
|
||
themeSchedulerEnableSub: '根据一天中的时间自动在两个主题之间切换',
|
||
themeSchedulerDayTheme: '白天主题',
|
||
themeSchedulerDayStart: '白天开始时间',
|
||
themeSchedulerNightTheme: '夜晚主题',
|
||
themeSchedulerNightStart: '夜晚开始时间',
|
||
themeSchedulerActiveHint: '主题定时器已启用 - 主题将自动切换。',
|
||
visualOptionsTitle: '视觉选项',
|
||
coverArtBackground: '封面背景',
|
||
coverArtBackgroundSub: '在专辑/播放列表标题中显示模糊的封面作为背景',
|
||
playlistCoverPhoto: '播放列表封面照片',
|
||
playlistCoverPhotoSub: '在播放列表详细视图中显示封面照片网格',
|
||
showBitrate: '显示比特率',
|
||
showBitrateSub: '在曲目列表中显示音频比特率',
|
||
floatingPlayerBar: '浮动播放栏',
|
||
floatingPlayerBarSub: '保持播放栏悬浮在内容上方',
|
||
uiScaleTitle: '界面缩放',
|
||
uiScaleLabel: '缩放',
|
||
},
|
||
changelog: {
|
||
modalTitle: '新功能',
|
||
dontShowAgain: '不再显示',
|
||
close: '知道了',
|
||
},
|
||
whatsNew: {
|
||
title: '新功能',
|
||
empty: '此版本暂无更新日志。',
|
||
bannerTitle: '更新日志',
|
||
bannerCollapsed: 'v{{version}} 新功能',
|
||
dismiss: '关闭',
|
||
close: '关闭',
|
||
},
|
||
help: {
|
||
title: '帮助',
|
||
searchPlaceholder: '搜索帮助…',
|
||
noResults: '没有匹配的主题。请尝试其他搜索词。',
|
||
s1: '入门指南',
|
||
q1: '支持哪些服务器?',
|
||
a1: 'Psysonic 主要为 Navidrome 而构建,并完全兼容 Subsonic — Gonic、Airsonic、LMS 和其他 Subsonic-API 服务器也可使用。某些高级功能(评分、智能播放列表、Magic-String 共享、用户管理)需要 Navidrome。',
|
||
q2: '如何添加服务器?',
|
||
a2: '设置 → 服务器 → 添加服务器。输入 URL(例如 http://192.168.1.100:4533)、用户名和密码。Psysonic 会在保存前测试连接 — 失败则不保存任何内容。您可以添加任意数量的服务器并在标题栏中切换;同一时刻只有一个处于活动状态。',
|
||
q3: '快速 UI 介绍?',
|
||
a3: '左侧栏用于导航,中间是 Mainstage / 各页面,底部是播放栏,右侧是队列面板(通过右上角紧邻 Now-Playing 指示器的图标打开)。顶部搜索栏搜索整个音乐库;"Now Playing"显示同一 Navidrome 服务器上其他用户正在听什么。',
|
||
s2: '播放与队列',
|
||
q4: '如何使用队列?',
|
||
a4: '从右上角标题栏打开队列面板。拖动行重新排序,将其拖出以移除,或使用工具栏来打乱、将队列保存为播放列表或跳转到某曲目。可将行从面板拖出到其他位置作为转移。',
|
||
q5: 'Gapless 与 Crossfade — 区别?',
|
||
a5: 'Gapless 预缓冲下一首曲目,使歌曲之间没有静音(适合现场专辑和 DJ 混音)。Crossfade 在 1–10 秒内将当前曲目淡出同时下一首淡入(适合混合播放)。两者互斥 — 启用其中一个会禁用另一个。在设置 → 音频中配置。',
|
||
q6: '什么是无限队列?',
|
||
a6: '当队列结束且重复关闭时,Psysonic 会静默地从您的音乐库中追加相似/随机曲目,使播放永不停止。自动添加的曲目显示在"— 自动添加 —"分隔符下。通过队列标题栏中的无限符号图标切换;在设置 → 队列中将自动添加限制为某个流派。',
|
||
q7: '多选和 Shift+点击范围?',
|
||
a7: '在专辑 / 新发行 / 随机专辑 / 播放列表上激活"选择"。点击一项以切换,然后按住 Shift 并点击另一项 — 可见顺序中两者之间的所有项都将被选中。Shift+点击从最近点击的锚点扩展。网格上方的工具栏提供批量操作(队列、下载、删除等)。',
|
||
q8: '键盘快捷键和全局热键?',
|
||
a8: '默认应用内键:空格 = 播放 / 暂停,Esc = 关闭全屏 / 模态框,F1 = 快捷键速查表。设置 → 输入允许重新分配每个应用内动作(包括 Ctrl+Shift+P 等组合键)并设置即使 Psysonic 在后台或最小化时也能工作的系统级全局快捷键。多媒体键(播放/暂停、下一首、上一首)在所有平台上都可用。',
|
||
s3: '音频工具',
|
||
q9: 'Replay Gain 模式?',
|
||
a9: '设置 → 音频 → Replay Gain。曲目模式将每首歌曲规范化到目标电平。专辑模式保留专辑内的响度曲线。自动模式根据队列是否来自单个专辑选择曲目或专辑。没有 Replay Gain 标签的曲目回退到可配置的前置放大。',
|
||
q10: '什么是 Smart Loudness Normalization (LUFS)?',
|
||
a10: '设置 → 音频中 Replay Gain 的现代替代品。Psysonic 将每个曲目分析到 LUFS / EBU R128 并存储结果,以便整个音乐库的音量保持一致 — 包括没有 Replay Gain 标签的曲目。冷缓存分析在后台运行,CPU 使用约 35–40 % 持续约 1 分钟,然后降至 0。一次性设置目标响度(默认 −10 LUFS)。',
|
||
q11: 'EQ 和 AutoEQ?',
|
||
a11: '设置 → 音频 → 均衡器中有一个 10 频段参数 EQ,带有手动频段和预设。旁边的 AutoEQ 从 AutoEQ 数据库为您的耳机型号拉取测量的校正配置文件并自动应用到频段 — 选择您的耳机,EQ 即对正确曲线。',
|
||
q12: '如何切换音频输出设备?',
|
||
a12: '设置 → 音频 → 输出设备。Psysonic 列出所有可用输出,选中后立即切换。刷新按钮重新扫描启动后接入的设备。Linux ALSA 名称如"sysdefault"会自动清理以提高可读性。',
|
||
q13: '什么是 Hot Cache?',
|
||
a13: 'Hot Cache 将当前曲目和接下来的几首预加载到 RAM 和磁盘,使播放无缓冲延迟启动 — 在慢速 / 远程服务器上尤其有用。当达到大小限制时触发驱逐。在设置 → 音频中配置大小和防抖延迟(防止快速跳过时过度获取)。',
|
||
s4: '音乐库与发现',
|
||
q14: '评分和 Skip-to-1★ 如何工作?',
|
||
a14: 'Psysonic 通过 OpenSubsonic(Navidrome ≥ 0.53)支持 1–5 星评分。在曲目列表、右键菜单或播放栏中的艺术家名下方为曲目评分;在专辑页面为专辑评分;在艺术家页面为艺术家评分。Skip-to-1★(设置 → 音乐库 → 评分)在配置数量的连续跳过后自动分配 1 星。同一面板允许为生成的混音设置最低评分作为筛选条件。',
|
||
q15: '如何浏览 — 文件夹、流派、曲目?',
|
||
a15: '文件夹浏览器(侧边栏)以 Miller-column 布局浏览服务器的音乐目录树 — 点击文件夹进入,点击曲目或文件夹的播放图标以播放/添加。流派使用按曲目数量缩放的标签云视图;点击流派以打开。曲目是一个扁平的音乐库中心,带有可按列排序的虚拟列表和实时搜索。',
|
||
q16: '搜索和高级搜索?',
|
||
a16: '标题栏搜索栏在您输入时跨艺术家、专辑和曲目运行快速实时搜索。打开高级搜索(侧边栏)以获得更丰富的视图:按年份、流派、评分、格式、声道、采样率、BPM、心情过滤,并组合条件。右键单击任何结果会打开与其他地方相同的上下文菜单。',
|
||
q17: '什么是混音(Random / Genre / Super Genre / Lucky)?',
|
||
a17: 'Random Mix 从您的音乐库构建随机曲目播放列表;关键字过滤器通过流派/标题/专辑子字符串排除有声读物、喜剧等。Super Genre Mix 将您的音乐库按广泛风格分组(摇滚、金属、电子、爵士、古典…)并构建专注的混音。Lucky Mix 使用您的收听历史、评分和 AudioMuse-AI 相似曲目,一键组装即时播放列表。',
|
||
q18: '统计页面?',
|
||
a18: '统计(侧边栏)显示热门艺术家、热门专辑、热门曲目、流派分布、随时间变化的收听时间,以及在配置多个音乐文件夹时的每库范围。多个视图可作为可分享的卡片图像导出。',
|
||
q19: '如何将专辑下载为 ZIP?',
|
||
a19: '专辑页面 → "下载(ZIP)"。服务器先压缩专辑 — 对于大型或无损专辑(FLAC / WAV),进度条仅在压缩完成且传输开始后才会出现。这是正常现象。',
|
||
s5: '歌词',
|
||
q20: '歌词来自哪里?',
|
||
a20: '设置 → 歌词中可配置三个来源:您的 Navidrome 服务器(嵌入式 / OpenSubsonic 歌词)、LRCLIB(社区贡献的同步歌词)和网易云音乐(庞大的亚洲 + 国际目录)。每个来源可启用/禁用并通过拖动重新排序。',
|
||
q21: '播放期间如何查看歌词?',
|
||
a21: '点击播放栏中的麦克风图标以打开队列面板内的歌词标签。同步歌词自动滚动并支持点击-跳转;纯文本歌词以静态块滚动。通过播放栏封面切换全屏播放器以获得带 mesh-blob 背景的沉浸式歌词视图。',
|
||
s6: '分享与社交',
|
||
q22: '什么是 Magic Strings?',
|
||
a22: 'Magic Strings 是无需任何第三方服务器即可在 Psysonic 用户之间共享内容的简短复制粘贴令牌。Server-Invite 字符串让朋友通过一次粘贴加入您的 Navidrome;专辑 / 艺术家 / 队列 Magic Strings 在接收方打开相同的专辑 / 艺术家 / 队列。从分享菜单生成,粘贴到搜索栏以使用。',
|
||
q23: '什么是 Orbit?',
|
||
a23: 'Orbit 是同步的一起听:主持人播放一首曲目,每个客人同步听到,客人可以建议曲目,主持人可以接受到队列中。从标题栏中的 Orbit 按钮启动会话,分享邀请链接,其他人可以从任何 Psysonic 安装加入。主持人拥有播放(跳过、搜索、队列) — 客人获得实时视图和建议框。会话是临时的,主持人关闭即结束。',
|
||
q24: '什么是 Now Playing 下拉?',
|
||
a24: '右上角标题栏的广播图标显示 Navidrome 服务器上其他用户当前正在听什么,每 10 秒刷新。您自己的条目在暂停时立即消失。按服务器划分,因此不会显示其他活动服务器上的用户。',
|
||
s7: '个性化',
|
||
q25: '主题和主题调度器?',
|
||
a25: '设置 → 外观 → 主题从 8 个组中的 60+ 个主题中选择(Psysonic、Mediaplayer、操作系统、游戏、电影、电视剧、社交媒体、Open Source Classics — Catppuccin / Nord / Gruvbox / Nightfox / Dracula)。Auto-Switch Theme 让您设置带启动时间的日间主题 + 夜间主题,使 Psysonic 自动切换。',
|
||
q26: '可以自定义侧边栏、首页和艺术家页面吗?',
|
||
a26: '可以 — 设置 → 个性化。侧边栏定制器让您拖动 nav 项目到所需顺序并隐藏您不使用的。首页定制器切换每个 Mainstage 行(Hero、Recent、Discover、Recently Played、Starred…)。艺术家页面定制器重新排序章节(Top Songs、专辑、单曲、合辑、相似艺术家等)并隐藏您从不查看的章节。',
|
||
q27: '什么是 Mini Player?',
|
||
a27: '一个带有封面、传输控件和紧凑队列的小浮动窗口。从播放栏中的 mini-player 图标或其键盘快捷键打开。窗口在会话之间记住其位置和大小。在 Windows 上,mini-webview 在启动时预先创建,因此打开是即时的;Linux / macOS 通过设置 → 外观 → 预加载 mini player 选择加入。',
|
||
q28: '什么是 Floating Player Bar?',
|
||
a28: '一个可选的播放栏样式(设置 → 外观),它从底部边缘脱离,带有主题背景、强调边框、圆角专辑封面和居中音量部分。在高显示器或紧凑主题上很有用。',
|
||
q29: '悬停时的曲目预览?',
|
||
a29: '将鼠标悬停在曲目行上,点击封面上的小预览按钮,或从右键菜单触发预览 — Psysonic 通过相同的 Rust 音频引擎流式传输前 ~15 秒,因此响度规范化适用。对于您还没听过的专辑很有用。',
|
||
q30: '睡眠定时器?',
|
||
a30: '点击播放栏中的月亮图标以打开睡眠定时器。选择持续时间(或"当前曲目结束"),Psysonic 会在结束时淡出并暂停。计时器运行时按钮显示圆形环和按钮内倒计时。',
|
||
q31: 'UI 缩放、字体、seekbar 样式?',
|
||
a31: '设置 → 外观 — 界面缩放(80–125%,不影响系统字体大小)、字体(10 种 UI 字体,包括 IBM Plex Mono、Fira Code、Geist、Golos Text…)、Seekbar 样式(波形分析 / pseudowave 确定性 / 线条与点 / 条形 / 厚条 / 分段 / 霓虹辉光 / 脉冲波 / 粒子轨迹 / 液体填充 / 复古磁带)。',
|
||
s8: '高级用户',
|
||
q32: 'CLI 播放器控制?',
|
||
a32: 'Psysonic 二进制文件兼作运行中应用的远程控制。示例:psysonic --player play / pause / next / prev、--player volume 75、--player seek 15、--player shuffle、--player repeat off|all|one、--player rating 1-5。切换服务器、音频设备、音乐库;触发 Instant Mix;搜索艺术家 / 专辑 / 曲目。完整列表请运行 psysonic --player --help。bash 和 zsh 的 shell 自动补全可通过 psysonic completions 获得。',
|
||
q33: '智能播放列表(Navidrome)?',
|
||
a33: '智能播放列表是由规则定义的 Navidrome 端动态播放列表(流派 = 摇滚 AND 年份 > 2020 等)。Psysonic 中的播放列表页面允许使用可视化规则编辑器创建、编辑和删除它们 — Psysonic 通过 Navidrome 原生 API 进行操作。它们在应用其余部分中表现为普通播放列表,并在音乐库更改时自动更新。',
|
||
q34: '备份和恢复设置?',
|
||
a34: '设置 → 存储 → 备份与恢复将服务器配置文件、主题、键绑定和其他设置导出到单个 JSON 文件。在另一台机器或重新安装后导入文件以一次恢复所有内容。服务器密码包含在内 — 请将文件保存在私密位置。',
|
||
q35: '在哪里查看所有开源许可证?',
|
||
a35: '设置 → 系统 → Open Source Licenses。完整的依赖列表(cargo crates 和 npm 包)随构建附带捆绑的许可证文本。点击条目查看完整文本;顶部的精选高亮块突出显示用户可识别的库(Tauri、React、rodio、symphonia 等)。',
|
||
s9: '离线与同步',
|
||
q36: '离线模式 — 缓存专辑和播放列表?',
|
||
a36: '打开任何专辑或播放列表,点击标题中的下载图标 — Psysonic 在本地缓存每个曲目,使其无需网络调用即可从磁盘播放。离线音乐库页面(侧边栏)列出所有缓存内容,显示进行中的进度,并允许通过垃圾桶图标移除条目(在下载完成后出现)。',
|
||
q37: '离线存储限制?',
|
||
a37: '设置 → 音乐库 → 离线让您设置最大缓存大小。当达到限制时,专辑页面下载按钮显示警告横幅。通过从离线音乐库页面移除专辑或播放列表来释放空间。',
|
||
q38: 'Device Sync — 将音乐复制到 USB / SD?',
|
||
a38: 'Device Sync(侧边栏)将专辑、播放列表或整个艺术家复制到外部驱动器,以便在其他设备上离线收听。选择目标文件夹,从浏览器选项卡中选择源,点击"传输到设备"。Psysonic 写入清单(psysonic-sync.json),即使您在不同 OS 上以不同的文件名模板重新打开 Device Sync,也能知道哪些文件已经在那里。模板支持 {artist} / {album} / {title} / {track_number} / {disc_number} / {year} 令牌,使用 / 作为文件夹分隔符。',
|
||
s10: '集成与故障排除',
|
||
q39: 'Last.fm 抓取?',
|
||
a39: '设置 → 集成 → Last.fm。一次连接您的账户,Psysonic 直接抓取到 Last.fm — 无需 Navidrome 配置。在听完曲目 50 % 后发送抓取。Now-playing pings 在开始时发送。',
|
||
q40: 'Discord Rich Presence?',
|
||
a40: '设置 → 集成 → Discord 在您的 Discord 个人资料上显示当前曲目。在应用图标、您服务器的封面(通过 getAlbumInfo2 — 需要可公开访问的服务器)或 Apple Music 封面之间选择。使用令牌模板自定义显示字符串(详细信息、状态、提示)。',
|
||
q41: 'Bandsintown 巡演日期?',
|
||
a41: '在设置 → 集成 → Now-Playing Info 中选择启用。然后 Now Playing 页面上的 Now Playing 选项卡通过 Bandsintown widget API 显示正在播放艺术家的即将到来的巡演日期。默认关闭 — 在您启用之前不发出任何请求。',
|
||
q42: 'Internet Radio — 播放实时流?',
|
||
a42: 'Internet Radio(侧边栏)播放存储在您 Navidrome 服务器上的任何实时流(通过 Navidrome 管理 UI 添加电台)。播放通过浏览器 HTML5 音频引擎运行 — 大多数 EQ / Replay Gain / Loudness 设置不适用于电台,但 ICY 元数据(当前歌曲名)会显示。支持 MP3、AAC、OGG Vorbis 和大多数 HLS 流;编解码器支持取决于平台。',
|
||
q43: '连接测试失败 — 怎么办?',
|
||
a43: '仔细检查 URL 包括端口(例如 http://192.168.1.100:4533)。在本地网络上 http:// 通常在 https:// 不工作的地方工作(无证书)。确保没有防火墙阻塞端口,并且用户名和密码正确。如果您的服务器位于反向代理之后,请先尝试直接 URL 以隔离原因。',
|
||
q44: '封面和艺术家图像加载缓慢。',
|
||
a44: '图像在首次查看时从服务器获取,然后本地缓存 30 天。如果您服务器的存储速度慢,第一次访问页面可能需要片刻;后续访问是即时的。Hot Cache 也对曲目有帮助,但图像缓存是独立的。',
|
||
q45: 'Linux 问题 — 黑屏或无声音?',
|
||
a45: '黑屏通常是 WebKitGTK 中的 GPU / EGL 驱动程序问题 — 使用 GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1 启动(AUR / .deb / .rpm 安装程序自动设置这些)。对于音频,确保 PipeWire 或 PulseAudio 正在运行。睡眠/唤醒后的音频丢失现在由 post-sleep 恢复钩子自动处理。',
|
||
},
|
||
queue: {
|
||
title: '队列',
|
||
savePlaylist: '保存为播放列表',
|
||
updatePlaylist: '更新播放列表',
|
||
filterPlaylists: '筛选播放列表…',
|
||
playlistName: '播放列表名称',
|
||
cancel: '取消',
|
||
save: '保存',
|
||
loadPlaylist: '加载播放列表',
|
||
loading: '加载中…',
|
||
noPlaylists: '未找到播放列表。',
|
||
load: '替换队列并播放',
|
||
appendToQueue: '追加到队列',
|
||
delete: '删除',
|
||
deleteConfirm: '删除播放列表 "{{name}}"?',
|
||
clear: '清空',
|
||
shuffle: '随机打乱队列',
|
||
gapless: '无缝播放',
|
||
crossfade: '交叉淡入淡出',
|
||
infiniteQueue: '无限队列',
|
||
autoAdded: '— 自动添加 —',
|
||
radioAdded: '— 收音机 —',
|
||
hide: '隐藏',
|
||
hideNowPlaying: '隐藏播放信息',
|
||
showNowPlaying: '显示播放信息',
|
||
close: '关闭',
|
||
nextTracks: '即将播放',
|
||
shareQueue: '复制队列分享链接',
|
||
shareQueueEmpty: '队列为空,无法分享。',
|
||
emptyQueue: '队列为空。',
|
||
trackSingular: '首曲目',
|
||
trackPlural: '首曲目',
|
||
showRemaining: '显示剩余时间',
|
||
showTotal: '显示总时间',
|
||
showEta: '显示预计结束时间',
|
||
replayGain: 'ReplayGain',
|
||
rgTrack: '曲目 {{db}} dB',
|
||
rgAlbum: '专辑 {{db}} dB',
|
||
rgPeak: '峰值 {{pk}}',
|
||
sourceOffline: '正在从离线库播放',
|
||
sourceHot: '正在从缓存播放',
|
||
sourceStream: '正在从网络流播放',
|
||
},
|
||
miniPlayer: {
|
||
showQueue: '显示队列',
|
||
hideQueue: '隐藏队列',
|
||
pinOnTop: '置顶',
|
||
pinOff: '取消置顶',
|
||
openMainWindow: '打开主窗口',
|
||
close: '关闭',
|
||
emptyQueue: '队列为空',
|
||
},
|
||
statistics: {
|
||
title: '统计',
|
||
recentlyPlayed: '最近播放',
|
||
mostPlayed: '最常播放的专辑',
|
||
highestRated: '评分最高的专辑',
|
||
genreDistribution: '流派分布(前 20)',
|
||
loadMore: '加载更多',
|
||
statArtists: '艺术家',
|
||
statArtistsTooltip: '仅限专辑艺术家——仅作为单曲艺术家出现(合唱、客串等)且无自己专辑的艺术家不计入此处。',
|
||
statAlbums: '专辑',
|
||
statSongs: '歌曲',
|
||
statGenres: '流派',
|
||
statPlaytime: '音频总时长',
|
||
genreInsights: '流派洞察',
|
||
formatDistribution: '格式分布',
|
||
formatSample: '{{n}} 首曲目的样本',
|
||
computing: '计算中…',
|
||
genreSongs: '{{count}} 首歌曲',
|
||
genreAlbums: '{{count}} 张专辑',
|
||
recentlyAdded: '最近添加',
|
||
decadeDistribution: '按年代分布的专辑',
|
||
decadeAlbums_one: '{{count}} 张专辑',
|
||
decadeAlbums_other: '{{count}} 张专辑',
|
||
decadeUnknown: '未知',
|
||
lfmTitle: 'Last.fm 统计',
|
||
lfmTopArtists: '热门艺术家',
|
||
lfmTopAlbums: '热门专辑',
|
||
lfmTopTracks: '热门曲目',
|
||
lfmPlays: '{{count}} 次播放',
|
||
lfmPeriodOverall: '全部时间',
|
||
lfmPeriod7day: '7 天',
|
||
lfmPeriod1month: '1 个月',
|
||
lfmPeriod3month: '3 个月',
|
||
lfmPeriod6month: '6 个月',
|
||
lfmPeriod12month: '12 个月',
|
||
lfmNotConnected: '在设置中连接 Last.fm 以查看您的统计。',
|
||
lfmRecentTracks: '最近记录',
|
||
lfmNowPlaying: '正在播放',
|
||
lfmJustNow: '刚刚',
|
||
lfmMinutesAgo: '{{n}} 分钟前',
|
||
lfmHoursAgo: '{{n}} 小时前',
|
||
lfmDaysAgo: '{{n}} 天前',
|
||
topRatedSongs: '最高评分歌曲',
|
||
topRatedArtists: '最高评分艺人',
|
||
noRatedSongs: '暂无已评分歌曲。请在专辑或播放列表中为歌曲评分。',
|
||
noRatedArtists: '暂无已评分艺人。',
|
||
},
|
||
player: {
|
||
regionLabel: '音乐播放器',
|
||
openFullscreen: '打开全屏播放器',
|
||
fullscreen: '全屏播放器',
|
||
closeFullscreen: '关闭全屏',
|
||
closeTooltip: '关闭 (Esc)',
|
||
noTitle: '无标题',
|
||
stop: '停止',
|
||
prev: '上一首',
|
||
play: '播放',
|
||
pause: '暂停',
|
||
previewActive: '正在试听',
|
||
previewLabel: '试听',
|
||
delayModalTitle: '定时',
|
||
delayPauseSection: '多久后暂停',
|
||
delayStartSection: '多久后开始',
|
||
delayPreviewPause: '暂停于',
|
||
delayPreviewStart: '开始于',
|
||
delaySchedulePause: '安排暂停',
|
||
delayScheduleStart: '安排开始',
|
||
delayCancelPause: '取消暂停定时',
|
||
delayCancelStart: '取消开始定时',
|
||
delayInactivePause: '仅在正在播放时可用。',
|
||
delayInactiveStart: '仅在暂停且已加载曲目或电台时可用。',
|
||
delayCustomMinutes: '自定义延迟(分钟)',
|
||
delayCustomPlaceholder: '例如 2.5',
|
||
closeDelayModal: '关闭',
|
||
delayIn: '还有',
|
||
delayFmtSec: '{{n}} 秒',
|
||
delayFmtMin: '{{n}} 分钟',
|
||
delayFmtHr: '{{n}} 小时',
|
||
delayCancel: '取消',
|
||
delayApply: '应用',
|
||
next: '下一首',
|
||
repeat: '重复',
|
||
repeatOff: '关闭',
|
||
repeatAll: '全部',
|
||
repeatOne: '单曲',
|
||
progress: '播放进度',
|
||
volume: '音量',
|
||
toggleQueue: '切换队列',
|
||
collapseQueueResize: '收起队列,调整宽度',
|
||
moreOptions: '更多选项',
|
||
equalizer: '均衡器',
|
||
miniPlayer: '迷你播放器',
|
||
lyrics: '歌词',
|
||
fsLyricsToggle: '全屏歌词',
|
||
lyricsLoading: '正在加载歌词…',
|
||
lyricsNotFound: '未找到此曲目的歌词',
|
||
lyricsSourceServer: '来源:服务器',
|
||
lyricsSourceLrclib: '来源:LRCLIB',
|
||
lyricsSourceNetease: '来源:网易云',
|
||
lyricsSourceLyricsplus: '来源:YouLyPlus',
|
||
showDuration: '显示时长',
|
||
showRemainingTime: '显示剩余时间',
|
||
},
|
||
nowPlayingInfo: {
|
||
tab: '信息',
|
||
empty: '播放歌曲以查看信息',
|
||
artist: '艺术家',
|
||
songInfo: '歌曲信息',
|
||
onTour: '巡演',
|
||
noTourEvents: '没有即将到来的演出',
|
||
tourLoading: '加载中…',
|
||
poweredByBandsintown: '巡演数据来自 Bandsintown',
|
||
bioReadMore: '展开',
|
||
bioReadLess: '收起',
|
||
showMoreTours_one: '显示更多 {{count}} 个',
|
||
showMoreTours_other: '显示更多 {{count}} 个',
|
||
showLessTours: '收起',
|
||
enableBandsintownPrompt: '查看即将到来的巡演日期?',
|
||
enableBandsintownPromptDesc: '可选。通过公开的 Bandsintown API 加载当前艺术家的演出。',
|
||
enableBandsintownPrivacy: '启用后,当前播放的艺术家名称将发送到 Bandsintown API 以获取巡演日期。不会发送任何账户或个人数据。',
|
||
enableBandsintownAction: '启用',
|
||
role: {
|
||
artist: '艺术家',
|
||
albumArtist: '专辑艺术家',
|
||
composer: '作曲',
|
||
},
|
||
},
|
||
songInfo: {
|
||
title: '歌曲信息',
|
||
songTitle: '标题',
|
||
artist: '艺术家',
|
||
album: '专辑',
|
||
albumArtist: '专辑艺术家',
|
||
year: '年份',
|
||
genre: '流派',
|
||
duration: '时长',
|
||
track: '曲目',
|
||
format: '格式',
|
||
bitrate: '比特率',
|
||
sampleRate: '采样率',
|
||
bitDepth: '位深度',
|
||
channels: '声道',
|
||
fileSize: '文件大小',
|
||
path: '文件路径',
|
||
replayGainTrack: 'RG 曲目增益',
|
||
replayGainAlbum: 'RG 专辑增益',
|
||
replayGainPeak: 'RG 曲目峰值',
|
||
mono: '单声道',
|
||
stereo: '立体声',
|
||
},
|
||
playlists: {
|
||
title: '播放列表',
|
||
newPlaylist: '新建播放列表',
|
||
unnamed: '未命名播放列表',
|
||
createName: '播放列表名称…',
|
||
create: '创建',
|
||
cancel: '取消',
|
||
empty: '暂无播放列表。',
|
||
emptyPlaylist: '此播放列表为空。',
|
||
addFirstSong: '添加第一首歌曲',
|
||
notFound: '未找到播放列表。',
|
||
songs: '{{n}} 首歌曲',
|
||
playAll: '全部播放',
|
||
shuffle: '随机播放',
|
||
addToQueue: '添加到队列',
|
||
back: '返回播放列表',
|
||
deletePlaylist: '删除',
|
||
confirmDelete: '再次点击确认删除',
|
||
removeSong: '从播放列表中移除',
|
||
addSongs: '添加歌曲',
|
||
searchPlaceholder: '搜索音乐库…',
|
||
noResults: '无结果。',
|
||
suggestions: '推荐歌曲',
|
||
noSuggestions: '暂无推荐。',
|
||
titleBadge: '播放列表',
|
||
refreshSuggestions: '新建议',
|
||
addSong: '添加到播放列表',
|
||
preview: '试听 (30 秒)',
|
||
previewStop: '停止试听',
|
||
playNextSuggestion: '播放下一首',
|
||
suggestionsHint: '双击行可添加到播放列表',
|
||
addSelected: '添加所选',
|
||
cacheOffline: '离线缓存播放列表',
|
||
offlineCached: '播放列表已缓存',
|
||
removeOffline: '从离线缓存中移除',
|
||
offlineDownloading: '正在缓存… ({{done}}/{{total}} 张专辑)',
|
||
publicLabel: '公开',
|
||
privateLabel: '私有',
|
||
editMeta: '编辑播放列表',
|
||
editNamePlaceholder: '播放列表名称…',
|
||
editCommentPlaceholder: '添加描述…',
|
||
editPublic: '公开播放列表',
|
||
editSave: '保存',
|
||
editCancel: '取消',
|
||
changeCover: '更改封面图片',
|
||
changeCoverLabel: '更改照片',
|
||
removeCover: '删除照片',
|
||
coverUpdated: '封面已更新',
|
||
metaSaved: '播放列表已更新',
|
||
downloadZip: '下载 (ZIP)',
|
||
// Toast notifications for multi-select
|
||
addSuccess: '{{count}} 首歌曲已添加到 {{playlist}}',
|
||
addPartial: '{{added}} 首已添加,{{skipped}} 首跳过(重复)',
|
||
addAllSkipped: '全部跳过({{count}} 首重复)',
|
||
addedAsDuplicates: '{{count}} 首歌曲已添加到 {{playlist}}(作为重复项)',
|
||
duplicateConfirmTitle: '已在播放列表中',
|
||
duplicateConfirmMessage: '所有 {{count}} 首歌曲已在 "{{playlist}}" 中。仍要作为重复项添加吗?',
|
||
duplicateConfirmAction: '仍要添加',
|
||
addError: '添加歌曲时出错',
|
||
createAndAddSuccess: '播放列表 "{{playlist}}" 已创建,包含 {{count}} 首歌曲',
|
||
createError: '创建播放列表时出错',
|
||
deleteSuccess: '{{count}} 个播放列表已删除',
|
||
deleteFailed: '删除 {{name}} 时出错',
|
||
deleteSelected: '删除所选',
|
||
deleteSelectedPartial: '所选 {{total}} 个播放列表中只有 {{n}} 个可删除(其余属于他人)。',
|
||
mergeSuccess: '{{count}} 首歌曲已合并到 {{playlist}}',
|
||
mergeNoNewSongs: '没有新歌曲可添加',
|
||
mergeError: '合并播放列表时出错',
|
||
mergeInto: '合并到',
|
||
selectionCount: '{{count}} 已选择',
|
||
select: '选择',
|
||
startSelect: '启用选择',
|
||
cancelSelect: '取消',
|
||
loadingAlbums: '正在解析 {{count}} 张专辑…',
|
||
loadingArtists: '正在解析 {{count}} 位艺术家…',
|
||
myPlaylists: '我的播放列表',
|
||
noOtherPlaylists: '没有其他可用播放列表',
|
||
addToPlaylistSuccess: '{{count}} 首歌曲已添加到 {{playlist}}',
|
||
addToPlaylistNoNew: '{{playlist}} 没有新歌曲',
|
||
addToPlaylistError: '添加到播放列表时出错',
|
||
importCSV: '导入 CSV',
|
||
importCSVTooltip: '从 Spotify CSV 导入',
|
||
csvImportReport: 'CSV 导入报告',
|
||
csvImportTotal: '总计',
|
||
csvImportAdded: '已添加',
|
||
csvImportDuplicates: '重复项',
|
||
csvImportNotFound: '未找到',
|
||
csvImportNetworkErrors: '网络错误',
|
||
csvImportDuplicatesTitle: '重复曲目(已在播放列表中):',
|
||
csvImportNotFoundTitle: '未找到的曲目:',
|
||
csvImportNetworkErrorsTitle: '网络错误(可重试导入):',
|
||
csvImportDownloadReport: '下载报告',
|
||
csvImportClose: '关闭',
|
||
csvImportNoValidTracks: 'CSV 文件中未找到有效曲目',
|
||
csvImportFailed: 'CSV 文件导入失败',
|
||
csvImportToast: '{{added}} 已添加,{{notFound}} 未找到,{{duplicates}} 重复项',
|
||
csvImportDownloadSuccess: '报告下载成功',
|
||
csvImportDownloadError: '报告下载失败',
|
||
},
|
||
smartPlaylists: {
|
||
sectionBasic: '1. 基础',
|
||
sectionGenres: '2. 流派',
|
||
sectionYearsAndFilters: '3. 年份与筛选',
|
||
genreMode: '流派模式',
|
||
genreModeInclude: '包含流派',
|
||
genreModeExclude: '排除流派',
|
||
genreSearchPlaceholder: '筛选流派...',
|
||
availableGenres: '可用',
|
||
selectedGenres: '已选',
|
||
yearMode: '年份模式',
|
||
yearModeInclude: '包含范围',
|
||
yearModeExclude: '排除范围',
|
||
name: '名称(不含前缀)',
|
||
limit: '数量上限',
|
||
limitHint: '要包含在播放列表中的曲目数量(1-{{max}},通常为 50)。',
|
||
artistContains: '艺术家包含…',
|
||
albumContains: '专辑包含…',
|
||
titleContains: '标题包含…',
|
||
minRating: '最低评分',
|
||
minRatingAria: '智能播放列表的最低评分',
|
||
minRatingHint: '0 表示关闭最低阈值;1-5 仅保留评分高于所选值的曲目。',
|
||
fromYear: '起始年份',
|
||
toYear: '结束年份',
|
||
excludeUnrated: '排除未评分曲目',
|
||
compilationOnly: '仅合集',
|
||
create: '新建智能播放列表',
|
||
save: '保存智能播放列表',
|
||
created: '已创建 {{name}}',
|
||
updated: '已更新 {{name}}',
|
||
createFailed: '无法创建智能播放列表。',
|
||
updateFailed: '无法更新智能播放列表。',
|
||
navidromeOnly: '仅 Navidrome 服务器支持创建智能播放列表。',
|
||
loadFailed: '无法从 Navidrome 加载智能播放列表。',
|
||
sortRandom: '排序:随机',
|
||
sortTitleAsc: '排序:标题 A-Z',
|
||
sortTitleDesc: '排序:标题 Z-A',
|
||
sortYearDesc: '排序:年份降序',
|
||
sortYearAsc: '排序:年份升序',
|
||
sortPlayCountDesc: '排序:播放次数降序',
|
||
},
|
||
mostPlayed: {
|
||
title: '最常播放',
|
||
topArtists: '热门艺术家',
|
||
topAlbums: '热门专辑',
|
||
plays: '播放 {{n}} 次',
|
||
sortMost: '最多播放在前',
|
||
sortLeast: '最少播放在前',
|
||
loadMore: '加载更多专辑',
|
||
noData: '暂无播放数据。开始收听吧!',
|
||
noArtists: '所有艺术家已过滤。',
|
||
filterCompilations: '隐藏合辑艺术家(Various Artists、原声带等)',
|
||
filterCompilationsShort: '隐藏合辑',
|
||
},
|
||
losslessAlbums: {
|
||
empty: '此媒体库中还没有无损专辑。',
|
||
unsupported: '此服务器未公开查找无损专辑所需的元数据。',
|
||
slowFetchHint: '加载比其他专辑页面慢 — Psysonic 按音质遍历整个歌曲目录。',
|
||
},
|
||
radio: {
|
||
title: '网络电台',
|
||
empty: '未配置任何电台。',
|
||
addStation: '添加电台',
|
||
editStation: '编辑',
|
||
deleteStation: '删除电台',
|
||
confirmDelete: '再次点击确认',
|
||
stationName: '电台名称…',
|
||
streamUrl: '流地址…',
|
||
homepageUrl: '主页地址(可选)',
|
||
save: '保存',
|
||
cancel: '取消',
|
||
live: '直播',
|
||
liveStream: '网络电台',
|
||
openHomepage: '打开主页',
|
||
changeCoverLabel: '更换封面',
|
||
removeCover: '移除封面',
|
||
browseDirectory: '搜索目录',
|
||
directoryPlaceholder: '搜索电台…',
|
||
noResults: '未找到电台。',
|
||
stationAdded: '电台已添加',
|
||
filterAll: '全部',
|
||
filterFavorites: '收藏',
|
||
sortManual: '手动',
|
||
sortAZ: 'A → Z',
|
||
sortZA: 'Z → A',
|
||
sortNewest: '最新',
|
||
favorite: '添加到收藏',
|
||
unfavorite: '从收藏移除',
|
||
noFavorites: '没有收藏的电台。',
|
||
listenerCount_one: '{{count}} 位听众',
|
||
listenerCount_other: '{{count}} 位听众',
|
||
recentlyPlayed: '最近播放',
|
||
upNext: '即将播放',
|
||
},
|
||
folderBrowser: {
|
||
empty: '空文件夹',
|
||
error: '加载失败',
|
||
},
|
||
deviceSync: {
|
||
title: '设备同步',
|
||
targetFolder: '目标文件夹',
|
||
noFolderChosen: '未选择文件夹',
|
||
selectDrive: '选择驱动器…',
|
||
refreshDrives: '刷新驱动器',
|
||
noDrivesDetected: '未检测到可移动驱动器',
|
||
browseManual: '手动浏览…',
|
||
free: '可用',
|
||
notMountedVolume: '目标不在已挂载的卷上。驱动器可能已断开。',
|
||
chooseFolder: '选择…',
|
||
filenameTemplate: '文件名模板',
|
||
targetDevice: '目标设备',
|
||
templateHint: '变量:{artist}、{album}、{title}、{track_number}、{disc_number}、{year}',
|
||
cleanupButton: '删除不在选择范围内的文件',
|
||
cleanupNothingToDelete: '无需删除 — 设备已同步。',
|
||
confirmCleanup: '将从设备中删除 {{count}} 个不在当前选择范围内的文件。继续?',
|
||
cleanupComplete: '已从设备中删除 {{count}} 个文件。',
|
||
selectedSources: '已选来源',
|
||
noSourcesSelected: '未选择来源。点击浏览器中的项目以添加。',
|
||
clearAll: '全部清除',
|
||
tabPlaylists: '播放列表',
|
||
tabAlbums: '专辑',
|
||
tabArtists: '艺术家',
|
||
searchPlaceholder: '搜索…',
|
||
syncButton: '同步到设备',
|
||
actionTransfer: '传输到设备',
|
||
actionDelete: '从设备删除',
|
||
actionApplyAll: '应用所有更改',
|
||
templatePreview: '预览',
|
||
templatePresetStandard: '标准',
|
||
templatePresetMultiDisc: '多碟',
|
||
templatePresetAltFolder: '备用文件夹',
|
||
tokenSlashHint: '/ = 文件夹分隔符',
|
||
cancel: '取消',
|
||
noTargetDir: '请先选择目标文件夹。',
|
||
noSources: '请至少选择一个来源。',
|
||
noTracks: '所选来源中未找到曲目。',
|
||
fetchError: '从服务器加载曲目失败。',
|
||
syncComplete: '同步完成。',
|
||
dismiss: '关闭',
|
||
cancelSync: '取消',
|
||
syncCancelled: '同步已取消(已传输 {{done}} / {{total}})。',
|
||
colName: '名称',
|
||
colType: '类型',
|
||
colStatus: '状态',
|
||
onDevice: '设备管理器',
|
||
addSources: '添加…',
|
||
syncResult: '已传输 {{done}},{{skipped}} 已是最新(共 {{total}})',
|
||
deleteFromDevice: '标记为删除({{count}})',
|
||
confirmDelete: '从设备删除 {{count}} 个项目:{{names}}?',
|
||
deleteComplete: '已从设备删除 {{count}} 个项目。',
|
||
manifestImported: '已从设备清单导入 {{count}} 个来源。',
|
||
statusSynced: '已同步',
|
||
statusPending: '待处理',
|
||
statusDeletion: '删除中',
|
||
markForDeletion: '标记为删除',
|
||
removeSource: '移除',
|
||
undoDeletion: '撤销删除',
|
||
syncInBackground: '同步已在后台启动 — 您可以离开此页面。',
|
||
syncInProgress: '{{done}} / {{total}} 首曲目…',
|
||
syncSummary: '同步摘要',
|
||
calculating: '正在计算所需数据…',
|
||
filesToAdd: '要添加的文件:',
|
||
filesToDelete: '要删除的文件:',
|
||
netChange: '净变化:',
|
||
availableSpace: '可用磁盘空间:',
|
||
spaceWarning: '警告:目标设备的可用空间不足。',
|
||
proceed: '继续同步',
|
||
notEnoughSpace: '检测到物理磁盘空间不足!',
|
||
liveSearch: '实时',
|
||
randomAlbumsLabel: '随机专辑',
|
||
},
|
||
orbit: {
|
||
triggerLabel: 'Orbit',
|
||
triggerTooltip: '开始或加入共享收听会话',
|
||
launchCreate: '创建会话',
|
||
launchJoin: '加入会话',
|
||
launchHelp: '这是怎么工作的?',
|
||
launchHelpSoon: '即将推出',
|
||
joinModalTitle: '加入 Orbit 会话',
|
||
joinModalSub: '粘贴主持人发给你的邀请链接。',
|
||
joinModalLinkLabel: '邀请链接',
|
||
joinModalLinkPlaceholder: 'psysonic2-…',
|
||
joinModalLinkHelper: '适用于任何有效的 Orbit 链接。必须指向你当前登录的服务器。',
|
||
joinModalPasteTooltip: '从剪贴板粘贴',
|
||
joinModalSubmit: '加入',
|
||
joinModalBusy: '加入中…',
|
||
joinErrEmpty: '请粘贴一个邀请链接。',
|
||
joinErrInvalid: '这看起来不像 Orbit 邀请链接。',
|
||
closeAria: '关闭',
|
||
heroTitlePrefix: '一起听音乐 —',
|
||
heroTitleBrand: 'Orbit',
|
||
heroSub: '开始会话 — {{server}} 上的其他用户将一起收听并可以推荐曲目。',
|
||
fallbackServer: '此服务器',
|
||
tipLan: '你当前通过本地网络地址连接。网络外的访客无法加入 — 请在启动前切换到公共服务器地址。',
|
||
tipRemote: '为了让家庭网络外的访客能够加入,你的服务器地址必须公开可达。如果你的服务器仅限内部使用,请在启动前切换。',
|
||
labelName: '会话名称',
|
||
namePlaceholder: 'Velvet Orbit',
|
||
reshuffleTooltip: '新建议',
|
||
reshuffleAria: '建议新名称',
|
||
helperName: '会话对访客的显示方式 — 保留或输入自己的名称。',
|
||
labelMax: '最大访客数',
|
||
helperMax: '你不计算在内 — 这仅限制加入的访客。',
|
||
labelLink: '邀请链接',
|
||
tooltipCopied: '已复制',
|
||
tooltipCopy: '复制',
|
||
ariaCopyLink: '复制邀请链接',
|
||
helperLink: '将此链接发送给你的访客。他们可以在 Psysonic 的任何位置使用 Ctrl+V 粘贴。',
|
||
labelClearQueue: '先清空我的队列',
|
||
helperClearQueue: '以空队列启动会话。关闭:你已排队的曲目保留并与访客共享。',
|
||
btnCancel: '取消',
|
||
btnStarting: '启动中…',
|
||
btnStart: '启动 Orbit',
|
||
btnCopyAndStart: '复制链接并启动',
|
||
errNameRequired: '请为你的会话命名。',
|
||
errStartFailed: '无法启动。',
|
||
hostLabel: '主持人:{{name}}',
|
||
participantsTooltip: '参与者',
|
||
settingsTooltip: '会话设置',
|
||
shareTooltip: '分享邀请链接',
|
||
shuffleLabel: '下次洗牌',
|
||
catchUpLabel: '跟上',
|
||
catchUpTooltip: '跳到主持人当前位置',
|
||
hostAway: '主持人离线',
|
||
hostOnline: '主持人在线',
|
||
endTooltip: '结束会话',
|
||
leaveTooltip: '离开会话',
|
||
helpTooltip: 'Orbit 的工作原理',
|
||
helpTitle: 'Orbit 的工作原理',
|
||
helpIntro: 'Orbit 将 Psysonic 变成一个共享的收听空间。主持人选择音乐;访客同步收听并可以推荐曲目。',
|
||
helpHostOnly: '(主持人)',
|
||
helpSec1Title: '什么是 Orbit?',
|
||
helpSec1Body: '"一起听"模式 — 主持人驱动播放,访客加入收听。一切都通过你自己的 Navidrome 服务器上的播放列表进行;没有外部基础设施。',
|
||
helpSec2Title: '主持人和访客',
|
||
helpSec2Body: '主持人控制播放(播放 / 暂停 / 跳过 / 跳转),并决定会话何时结束。访客跟随主持人的播放,可以推荐曲目,随时离开或重新加入。只有主持人可以踢出或永久封禁参与者。',
|
||
helpSec2WarnHead: '重要:使用独立账户。',
|
||
helpSec2WarnBody: '每个参与者都需要自己的 Navidrome 账户。如果主持人和访客使用同一用户登录,他们的提交会冲突,主持人将永远看不到访客的建议。',
|
||
helpSec3Title: '启动和邀请',
|
||
helpSec3Body: '点击"Orbit"按钮 → 创建会话 → 启动弹窗显示可复制的邀请链接,并可选清空你当前的队列。以任何方式分享该链接。会话运行时,顶部会话栏中的分享按钮可随时再次复制链接。',
|
||
helpSec4Title: '加入',
|
||
helpSec4Body: '使用 Ctrl+V / Cmd+V 在 Psysonic 的任何位置粘贴邀请链接 — 加入提示会自动弹出。或者:「Orbit」→ 加入会话 → 粘贴到字段中。如果链接指向你有账户的服务器,Psysonic 会为你切换。当你在该服务器上有多个账户时,小型选择器会询问使用哪个。',
|
||
helpSec5Title: '推荐曲目',
|
||
helpSec5Body: '在任何曲目列表中:双击一行,或右键 → "添加到 Orbit 会话"。单击会显示提示而不是将整张专辑扔进共享队列 — 这是有意的。明确的批量操作(如"全部播放"或"播放专辑")先要求确认然后追加(永不替换)。',
|
||
helpSec6Title: '共享队列',
|
||
helpSec6Body: '队列显示主持人即将播放的曲目 — 所有人可见。批量添加总是追加到末尾,因此访客的建议不会丢失。自动洗牌定期重新排序队列(可配置:1 / 5 / 10 / 15 / 30 分钟)。如果你的播放偏离主持人,会话栏中的"跟上"按钮会让你回到主持人的实时位置。',
|
||
helpSec7Title: '审批',
|
||
helpSec7Body: '默认情况下,访客建议需要手动审批 — 它们出现在队列面板顶部的"审批"栏中,带有接受 / 拒绝按钮。可以在会话设置中打开自动审批,使所有建议直接生效。',
|
||
helpSec8Title: '参与者和设置',
|
||
helpSec8Body: '打开会话栏中的设置图标以配置洗牌频率、自动审批和"立即洗牌"快捷方式。点击参与者数量查看谁已连接 — 踢出(可通过链接重新加入)或封禁(在该会话中被锁定)。访客也可以看到参与者列表,但仅为只读。',
|
||
helpSec9Title: '结束会话',
|
||
helpSec9Body: '主持人 X → 确认对话框 → 会话对所有人关闭,服务器播放列表会自动清理。访客 X → 访客离开,会话继续运行。如果主持人保持静默 5 分钟,访客会自动退出并收到通知;该窗口内的短时间重连不可见。',
|
||
participantsInviteLabel: '邀请链接',
|
||
participantsCountLabel: '{{count}} 人在会话中',
|
||
participantsHost: '主持人',
|
||
participantsEmpty: '还没有访客',
|
||
participantsKickTooltip: '从会话中移除',
|
||
participantsKickAria: '移除 {{user}}',
|
||
participantsRemoveTooltip: '从会话中移除',
|
||
participantsRemoveAria: '从此会话中移除 {{user}}',
|
||
participantsBanTooltip: '永久封禁',
|
||
participantsBanAria: '永久封禁 {{user}}',
|
||
participantsMuteTooltip: '禁止投歌',
|
||
participantsUnmuteTooltip: '允许投歌',
|
||
participantsMuteAria: '禁止 {{user}} 投歌',
|
||
participantsUnmuteAria: '允许 {{user}} 重新投歌',
|
||
confirmRemoveTitle: '从会话中移除?',
|
||
confirmRemoveBody: '{{user}} 将从会话中移除,但可以通过你的邀请链接重新加入。',
|
||
confirmRemoveConfirm: '移除',
|
||
confirmBanTitle: '永久封禁?',
|
||
confirmBanBody: '{{user}} 将被移除并被阻止重新加入此会话。在会话存在期间无法撤销。',
|
||
confirmBanConfirm: '封禁',
|
||
confirmCancel: '取消',
|
||
confirmJoinTitle: '加入 Orbit 会话?',
|
||
confirmJoinBody: '{{host}} 邀请你加入"{{name}}"。加入会话?',
|
||
confirmJoinConfirm: '加入',
|
||
confirmLeaveTitle: '离开会话?',
|
||
confirmLeaveBody: '离开"{{name}}"?你可以随时通过 {{host}} 的邀请链接重新加入。',
|
||
confirmLeaveConfirm: '离开',
|
||
confirmEndTitle: '为所有人结束会话?',
|
||
confirmEndBody: '"{{name}}"将对所有参与者关闭。会话的播放列表会自动清理。',
|
||
confirmEndConfirm: '结束会话',
|
||
invalidLinkTitle: '邀请链接已失效',
|
||
invalidLinkBody: '此 Orbit 会话不再存在或已结束。请主持人提供新的邀请链接。',
|
||
settingsTitle: '会话设置',
|
||
settingAutoApprove: '自动批准建议',
|
||
settingAutoApproveHint: '访客建议立即进入你的队列。关闭:它们保留在会话列表中供稍后审查。',
|
||
settingAutoShuffle: '自动洗牌',
|
||
settingAutoShuffleHint: '即将播放队列的定期 Fisher-Yates 洗牌。关闭:顺序仅在你手动重新排列时改变。',
|
||
settingShuffleInterval: '洗牌间隔',
|
||
settingShuffleIntervalHint: '会话运行时即将播放队列的重新洗牌频率。',
|
||
suggestBlockedMuted: '主持人已禁止你在本场会话投歌。',
|
||
settingShuffleIntervalValue_one: '{{count}} 分钟',
|
||
settingShuffleIntervalValue_other: '{{count}} 分钟',
|
||
settingShuffleNow: '立即洗牌',
|
||
toastSuggested: '{{user}} 推荐了"{{title}}"',
|
||
toastSuggestedMany: '队列中有 {{count}} 个新建议',
|
||
toastShuffled: '队列已洗牌',
|
||
toastJoined: '已加入会话',
|
||
toastLoginFirst: '加入会话前请先登录',
|
||
toastSwitchServer: '请先切换到 {{url}},然后再次粘贴',
|
||
toastNoAccountForServer: '你没有 {{url}} 的访问权限。请主持人发送邀请。',
|
||
toastSwitchFailed: '无法切换到 {{url}}',
|
||
accountPickerTitle: '使用哪个账户?',
|
||
accountPickerSub: '你在 {{url}} 上有多个账户。选择用于加入会话的账户。',
|
||
toastJoinFail: '无法加入会话',
|
||
joinErrNotFound: '未找到会话',
|
||
joinErrEnded: '会话已结束',
|
||
joinErrFull: '会话已满',
|
||
joinErrKicked: '你无法重新加入此会话',
|
||
joinErrNoUser: '没有活动服务器',
|
||
joinErrServerError: '无法加入',
|
||
ctxAddToSession: '添加到 Orbit 会话',
|
||
ctxSuggestedToast: '已推荐到会话',
|
||
ctxSuggestFailed: '无法推荐 — 未加入',
|
||
ctxAddToSessionHost: '添加到 Orbit 会话',
|
||
ctxAddedHostToast: '已添加到会话',
|
||
ctxAddHostFailed: '无法添加到会话',
|
||
bulkConfirmTitle: '全部添加到 Orbit 队列?',
|
||
bulkConfirmBody: '这将一次性把 {{count}} 首曲目放入共享队列。对你的访客来说信息量很大。继续?',
|
||
bulkConfirmYes: '全部添加',
|
||
bulkConfirmNo: '取消',
|
||
guestLive: '直播',
|
||
guestPlaying: '正在播放',
|
||
guestPaused: '已暂停',
|
||
guestLoading: '加载中…',
|
||
guestSuggestions: '建议',
|
||
guestUpNext: '接下来',
|
||
guestUpNextEmpty: '队列为空。打开曲目的上下文菜单并选择"添加到 Orbit 会话"来推荐一首。',
|
||
guestPendingTitle: '等待主持人',
|
||
guestPendingHint: '已推荐 — 主持人接受后会出现在队列中。',
|
||
approvalTitle: '待批准',
|
||
approvalFrom: '由 {{user}} 推荐',
|
||
approvalAccept: '接受',
|
||
approvalDecline: '拒绝',
|
||
guestUpNextMore: '+ 主持人队列中还有 {{count}} 首',
|
||
guestSubmitter: '来自 {{user}}',
|
||
queueAddedByHost: '由主持人添加',
|
||
queueAddedByYou: '由你添加',
|
||
queueAddedByUser: '由 {{user}} 添加',
|
||
guestEmpty: '还没有建议。打开曲目的上下文菜单并选择"添加到 Orbit 会话"。',
|
||
guestFooter: '主持人控制播放 — 你无法更改列表。',
|
||
exitKickedTitle: '你已被会话封禁',
|
||
exitRemovedTitle: '你已从会话中移除',
|
||
exitEndedTitle: '主持人已结束会话',
|
||
exitHostTimeoutTitle: '主持人无响应',
|
||
exitHostTimeoutBody: '{{host}} 有一段时间没有发送更新了,所以"{{name}}"在你这边已关闭。你可以随时通过邀请链接重新加入。',
|
||
exitKickedBody: '{{host}} 已将你从"{{name}}"封禁。你无法重新加入。',
|
||
exitRemovedBody: '{{host}} 已将你从"{{name}}"移除。你可以随时通过邀请链接重新加入。',
|
||
exitEndedBody: '"{{name}}"已结束。希望你玩得开心。',
|
||
exitOk: '好的',
|
||
},
|
||
tray: {
|
||
playPause: '播放 / 暂停',
|
||
nextTrack: '下一首',
|
||
previousTrack: '上一首',
|
||
showHide: '显示 / 隐藏',
|
||
exitPsysonic: '退出 Psysonic',
|
||
nothingPlaying: '当前没有播放',
|
||
},
|
||
licenses: {
|
||
title: '开源许可证',
|
||
intro: 'Psysonic 基于开源软件构建。下方列表显示了应用程序中包含的每个依赖项的版本、许可证以及完整的许可证文本。',
|
||
highlights: '主要依赖项',
|
||
searchPlaceholder: '按名称、版本或许可证搜索…',
|
||
noResults: '没有匹配项。',
|
||
loading: '加载许可证…',
|
||
loadError: '无法加载许可证数据。',
|
||
noLicenseText: '此依赖项未包含许可证文本。',
|
||
viewSource: '查看源代码',
|
||
totalLine: '{{total}} 个依赖项 — {{cargo}} cargo, {{npm}} npm',
|
||
generatedAt: '最后生成时间 {{date}}',
|
||
},
|
||
};
|