Files
Psychotoxical-psysonic/src/locales/zh.ts
T
Frank Stellmacher 3b4d54431b feat(random-mix): playlist size selector + filter panel layout cleanup (#445)
* feat(random-mix): playlist size selector + filter panel layout cleanup

Adds a 5-button playlist-size picker (50/75/100/125/150) at the top of
the Random Mix filter panel, persisted via authStore. Clicking a size
immediately reruns the current mix (genre-scoped or All Songs) at the
new size — no second click on Remix needed.

Filter panel layout cleaned up:

- Two sub-sections "MIX SETTINGS" and "EXCLUSIONS" with a divider
  between them so the panel reads cleanly with the new size row.
- Larger panel-level headers (FILTERS / GENRE MIX) so the hierarchy
  panel-title > sub-section is visually unambiguous.
- Italic muted note under MIX SETTINGS calling out that large mix
  sizes may return fewer unique tracks if the server's random pool
  runs short — sets honest expectations instead of users wondering
  why a 150 request returned ~126.

fetchRandomMixSongsUntilFull now scales batch size, max-batch ceiling
and dup-streak budget with target size; when no Settings-level mix
filter is active, the first call asks for the full target so a 150
mix can finish in a single round-trip on most libraries. The loop
falls through to top up with deduped follow-up calls if the server
returns fewer than requested.

* docs(changelog): add #445 Random Mix playlist size selector entry

* chore(credits): add #445 to Psychotoxical contributions
2026-05-03 19:57:08 +02:00

1746 lines
87 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export const zhTranslation = {
sidebar: {
library: '音乐库',
mainstage: '主舞台',
newReleases: '新发布',
allAlbums: '全部专辑',
randomAlbums: '随机专辑',
randomPicker: '创建混音',
artists: '艺术家',
randomMix: '随机混音',
favorites: '收藏夹',
nowPlaying: '正在播放',
system: '系统',
statistics: '统计',
settings: '设置',
help: '帮助',
expand: '展开侧边栏',
collapse: '收起侧边栏',
downloadingTracks: '正在缓存 {{n}} 首歌曲…',
syncingTracks: '同步中 {{done}}/{{total}}…',
cancelDownload: '取消下载',
offlineLibrary: '离线音乐库',
genres: '流派',
tracks: '曲目',
playlists: '播放列表',
mostPlayed: '最常播放',
radio: '网络电台',
folderBrowser: '文件夹浏览器',
deviceSync: '设备同步',
libraryScope: '资料库范围',
allLibraries: '所有资料库',
expandPlaylists: '展开播放列表',
collapsePlaylists: '收起播放列表',
more: '更多',
feelingLucky: '好运混音',
},
home: {
hero: '精选',
starred: '个人收藏',
recent: '最近添加',
mostPlayed: '最常播放',
recentlyPlayed: '最近播放',
discover: '发现',
discoverSongs: '发现曲目',
loadMore: '加载更多',
discoverMore: '发现更多',
discoverArtists: '发现艺术家',
discoverArtistsMore: '全部艺术家'
},
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: '在服务器上找不到此艺术家。',
openedTrack: '正在播放分享的歌曲。',
openedAlbum: '正在打开分享的专辑。',
openedArtist: '正在打开分享的艺术家。',
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: 'AZ(标题)',
sortByArtist: 'AZ(艺术家)',
sortByAlbum: 'AZ(专辑)',
},
entityRating: {
albumShort: '专辑评分',
artistShort: '艺人评分',
albumAriaLabel: '专辑评分',
artistAriaLabel: '艺人评分',
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: '图片上传失败',
},
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: '添加到播放列表',
},
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: '清除',
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-AINavidrome',
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 处于运行状态。',
discordAppleCovers: '通过 Apple Music 为 Discord 获取封面',
discordAppleCoversDesc: '将艺术家和专辑名称发送至 Apple 搜索 API,以为 Discord 个人资料查找封面图片。出于隐私考虑,默认禁用。',
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: '预缓冲下一首曲目以消除歌曲间的间隙',
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: '选择播放进度条的外观',
animationMode: '动画',
animationModeDesc: '在较慢的硬件上以视觉流畅度换取更低的 GPU/CPU 占用。',
animationModeFull: '完整',
animationModeReduced: '减少',
animationModeStatic: '静态',
animationModeReducedHint: '进度条波形限制为 30 fps;播放器标题以半速滚动。',
animationModeStaticHint: '无波形动画;播放器标题被截断而不滚动。',
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: '帮助',
s1: '入门指南',
q1: '支持哪些服务器?',
a1: 'Psysonic 可与任何 Subsonic 兼容服务器配合使用:Navidrome、Gonic、Subsonic、Airsonic 等。推荐使用 Navidrome。',
q2: '如何连接服务器?',
a2: '打开设置并点击"添加服务器"。输入服务器地址(如 192.168.1.100:4533)、用户名和密码。Psysonic 会在保存前测试连接 — 如果连接失败则不会存储任何信息。',
q3: '可以使用多个服务器吗?',
a3: '可以。您可以在设置中添加任意数量的服务器,并随时切换。同一时间只能有一个服务器处于活动状态。',
s2: '播放',
q4: '如何播放音乐?',
a4: '双击任意曲目即可播放。在专辑和艺术家页面,使用"全部播放"开始播放整张专辑。您也可以将曲目拖入队列面板。',
q5: '有哪些键盘快捷键?',
a5: '空格键 = 播放 / 暂停 · Esc = 关闭全屏播放器。媒体键(播放/暂停、下一首、上一首)在所有平台上都有效。在 Linux 上,请使用播放器栏按钮作为媒体键。应用内快捷键和系统级全局快捷键可在 设置 → 键盘快捷键 / 全局快捷键 中自定义。',
q6: '什么是播放队列?',
a6: '队列显示所有即将播放的曲目。点击右上角标题栏的面板图标(正在播放指示器旁边)打开队列。您可以通过拖拽重新排序,使用随机播放按钮打乱顺序,并将队列保存为播放列表。',
q7: '如何打开全屏播放器?',
a7: '点击底部播放器栏的专辑封面缩略图,或其旁边的展开图标。按 Esc 键关闭。',
q8: '重复播放如何工作?',
a8: '点击播放器栏的重复按钮可在以下模式间循环:关闭 → 重复全部 → 重复单曲。',
s3: '音乐库',
q9: '如何下载专辑?',
a9: '打开专辑详情页并点击"下载 (ZIP)"。服务器会先将专辑压缩为 ZIP 文件 — 对于大型专辑或无损文件(FLAC / WAV),在实际下载开始前可能需要一些时间。这是正常的:进度条会在服务器完成压缩并开始传输后显示。',
q10: '如何收藏曲目和专辑?',
a10: '点击任意曲目行或专辑标题上的星形图标。收藏的项目会显示在侧边栏的收藏夹中。',
q11: '首页的英雄轮播是什么?',
a11: '首页顶部的横幅会随机从您的音乐库中选择专辑,每 10 秒轮换一次。点击圆点可跳转到特定专辑,或点击横幅打开专辑。',
s4: '设置',
q12: '如何更改主题?',
a12: '设置 → 主题。从 8 个分组中的大量主题中选择:Psysonic 主题、媒体播放器、操作系统、游戏、电影、电视剧、社交媒体,以及开源经典(Catppuccin、Nord、Gruvbox、Nightfox)。',
q13: '如何更改语言?',
a13: '设置 → 语言。支持英语、德语、法语、荷兰语和中文。',
q15: '如何设置下载文件夹?',
a15: '设置 → 应用行为 → 下载文件夹。选择任意文件夹 — 下载的专辑将以 ZIP 文件形式保存在那里。未设置自定义文件夹时,将使用浏览器的默认下载位置。',
s5: '歌曲记录',
q16: '歌曲记录如何工作?',
a16: 'Psysonic 直接向 Last.fm 发送记录 — 无需配置 Navidrome。在 设置 → Last.fm 中连接您的 Last.fm 账户并启用记录功能。',
q17: '何时发送记录?',
a17: '在您听完曲目的 50% 后提交记录。',
q22: '播放器栏中的波形是什么?',
a22: '波形进度条取代了传统的进度滑块。点击任意位置跳转到该位置,或拖动进行拖动播放。已播放部分显示蓝到紫的渐变,缓冲区域稍亮,未播放部分则淡化显示。',
q24: '可以随机打乱队列吗?',
a24: '可以。打开队列面板并点击队列标题栏的随机播放图标。当前播放曲目保持在第 1 位 — 其余曲目将随机重新排序。',
q25: '艺术家页面上的 Last.fm 和 Wikipedia 链接会在浏览器中打开吗?',
a25: '是的 — 它们会在您的默认系统浏览器中打开。点击时按钮会短暂显示确认标签。',
s7: '随机混音',
q26: '什么是随机混音?',
a26: '随机混音从您的整个音乐库中构建一个随机曲目的播放列表。通过侧边栏的"随机混音"打开并点击"新混音"。您可以在生成前调整曲目数量。',
q27: '什么是关键词过滤?',
a27: '关键词过滤会排除流派、标题或专辑名称包含特定词汇的曲目。有声读物会被自动过滤。在 设置 → 随机混音 中添加自定义关键词,或点击曲目列表中的任意流派标签即时添加。',
q28: '什么是超级流派混音?',
a28: '超级流派混音将您的音乐库分组为宽泛的类别(摇滚、金属、电子、爵士、古典等),并从该风格构建一个专注的混音。在曲目列表下方选择类别标签。结果会随着每个子流派的获取而逐步显示。',
s6: '故障排除',
q18: '封面和艺术家图片加载缓慢。',
a18: '图片首次加载时从服务器磁盘获取,然后本地缓存 30 天。如果服务器存储较慢,首次访问页面可能需要一些时间。后续访问将瞬间完成。',
q19: '连接测试失败。',
a19: '检查 URL 包括端口(如 http://192.168.1.100:4533)。确保防火墙没有阻止连接。在本地网络上尝试使用 http:// 而非 https://。同时验证用户名和密码是否正确。',
q20: 'Linux 上没有音频。',
a20: 'Psysonic 提供 .debUbuntu/Debian)、.rpmFedora/RHEL)版本,以及通过 AUR 在 Arch/CachyOS 上安装(yay -S psysonic)。没有 AppImage。如果没有音频,请确保 PipeWire 或 PulseAudio 正在运行。',
q21: '应用在 Linux 上显示黑屏。',
a21: '这通常是 WebKitGTK 中的 GPU/EGL 驱动问题。使用 GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1 启动。AUR 包和官方 .deb/.rpm 安装程序会自动设置这些环境变量。',
q29: '什么是交叉淡入淡出和无缝播放?',
a29: '两者都是 设置 → 音频 中的实验性音频功能。无缝播放预缓冲下一首曲目以消除歌曲间的静音。交叉淡入淡出让当前曲目淡出同时下一首淡入 — 调整持续时间(1-10 秒)以符合您的喜好。',
q30: 'Psysonic 显示歌词吗?',
a30: '是的。点击播放器栏的麦克风图标可在队列面板中打开歌词标签。Psysonic 自动从 LRCLIB 获取歌词。如果可用同步歌词,活动行会高亮并随歌曲实时滚动。如果只有纯文本歌词,则静态显示完整文本。',
q31: '可以自定义键盘快捷键吗?',
a31: '可以。设置 → 键盘快捷键 允许您重新映射应用内操作(播放/暂停、下一首、上一首、音量增/减、全屏等)到任意按键。设置 → 全局快捷键 允许您分配即使 Psysonic 在后台也能触发的系统级快捷键。',
q32: '可以更改字体吗?',
a32: '可以。设置 → 字体 允许您从 10 种字体中选择,包括 IBM Plex Mono、Fira Code、JetBrains Mono、Courier Prime 等。所选字体将应用于整个界面。',
s8: '离线模式',
q34: '什么是离线模式?',
a34: '离线模式(测试版)允许您将专辑缓存到设备,以便在没有活动服务器连接时收听。缓存的曲目存储在本地并直接从磁盘播放 — 播放期间不进行网络请求。',
q35: '如何缓存专辑以供离线使用?',
a35: '打开任意专辑并点击专辑标题栏的下载图标。Psysonic 会在后台下载所有曲目。按钮上会显示进度。缓存完成后,图标变为绿色。您可以在离线音乐库页面(侧边栏)查看和移除缓存的专辑。',
q36: '离线缓存可以使用多少存储空间?',
a36: '您可以在 设置 → 音乐库 中设置最大缓存大小。达到限制时,专辑页面会显示警告横幅。您可以从离线音乐库中删除单个专辑以释放空间。',
q37: '如何对歌曲、专辑和艺术家评分?',
a37: 'Psysonic 通过 OpenSubsonic API 支持 15 星评分(需要 Navidrome ≥ 0.53)。可在专辑或播放列表曲目列表、右键菜单或播放器栏中对歌曲评分。专辑在详情页评分,艺术家在艺术家页评分。',
q38: '可以删除或更改评分吗?',
a38: '可以。再次点击当前激活的星星即可完全删除评分——第二次点击同一颗星即可清除。点击其他星星可更改评分。',
q39: '什么是 Skip-to-1★ 和评分过滤器?',
a39: 'Skip-to-1★ 会在歌曲被连续手动跳过一定次数后自动赋予 1 星评分。在 设置 → 评分 中启用并设置阈值。同样可在此设置随机混音的最低星级过滤条件。',
q40: '什么是文件夹浏览器?',
a40: '文件夹浏览器(侧边栏)使用 Miller 列布局浏览服务器音乐目录。点击文件夹查看内容;点击播放图标直接播放或添加到队列。',
q41: '什么是主题调度器?',
a41: '设置 → 外观 → 自动切换主题:设置日间主题和夜间主题及开始时间,Psysonic 将在指定时间自动切换主题。',
q42: '可以调整界面缩放吗?',
a42: '可以。设置 → 外观 → 界面缩放 可将整个界面缩放至 80%–125%。',
q43: '可以更改进度条样式吗?',
a43: '可以。设置 → 外观 → 进度条样式 提供 10 种样式:波形、线条与点、条形、粗条形、分段、霓虹辉光、脉冲波、粒子轨迹、液体填充和复古磁带。',
q44: '什么是 AutoEQ',
a44: '设置 → 音频 中的 10 频段均衡器包含 AutoEQ 查找功能。输入耳机型号即可自动加载校正配置文件。',
q45: '什么是 Replay Gain',
a45: 'Replay Gain 标准化音量,使响亮和安静的专辑以一致的音量播放。在 设置 → 音频 → Replay Gain 中启用;选择曲目模式或专辑模式。',
q46: '什么是热缓存?',
a46: '热缓存(Alpha,设置 → 音乐库)将队列中后续曲目预加载到磁盘,实现即时播放,对于慢速或远程服务器尤为有用。Psysonic 保留当前曲目和后续 5 首,达到大小限制时淘汰旧条目。',
q47: '可以将播放列表缓存到离线吗?',
a47: '可以。在播放列表详情中点击下载图标,所有曲目将在后台下载。完全缓存后图标变为红色垃圾桶;再次点击即可从离线缓存中删除该播放列表。',
q48: '什么是无限队列?',
a48: '当队列播完且关闭了重复播放时,Psysonic会自动添加随机曲目,确保播放不会中断。自动添加的曲目显示在"— 自动添加 —"分隔符下方。',
q49: '可以通过命令行控制Psysonic吗?',
a49: '可以。示例:psysonic --player play / pause / next / prev--player volume 75--player seek 15--player mute--player shuffle--player repeat off|all|one。还可以切换服务器、音频设备、筛选音乐库和搜索。完整帮助:psysonic --player --help。',
q50: '如何管理播放列表?',
a50: '通过侧边栏中的"播放列表"进入。点击"新建播放列表"创建。在详情页可拖拽排序、点击×删除曲目、通过搜索添加歌曲,还可使用"建议"获取智能推荐。',
q51: '可以备份和恢复设置吗?',
a51: '可以。设置→备份与恢复可将所有设置、服务器配置、主题和快捷键导出为JSON文件,在其他设备上导入即可一键恢复。',
q52: '如何更改音频输出设备?',
a52: '设置→音频→输出设备。Psysonic列出所有可用输出,选择后立即生效。若设备在应用启动后连接,可点击刷新按钮更新列表。',
q53: '什么是设备同步?',
a53: '设备同步可将专辑、播放列表或艺术家复制到USB或SD卡。通过侧边栏"Device Sync"打开,选择目标文件夹和来源,点击"传输到设备"。',
q54: '设备同步中的文件名模板是什么?',
a54: '模板控制曲目的命名和组织方式。使用预设或通过可点击的令牌自定义:{artist}、{album}、{title}、{track_number}、{disc_number}、{year},以及/作为文件夹分隔符。',
q55: '设备同步支持跨平台使用吗?',
a55: '支持。设备上的清单文件包含同步时使用的模板。在不同系统上,Psysonic能正确识别已存在的文件。',
s9: 'Device Sync',
q56: '什么是网络电台?',
a56: '网络电台页面可在Psysonic中播放任何直播流。电台来自Navidrome服务器,可通过管理面板添加或导入.pls/.m3u文件。播放使用HTML5音频。',
q57: '网络电台支持哪些流格式?',
a57: 'MP3、AAC、OGG Vorbis及大多数HLS流。MP3和AAC在所有平台均可使用。',
s10: '网络电台',
q58: 'Psysonic从哪里获取歌词?',
a58: '三个可配置来源(设置→歌词):Navidrome服务器、LRCLIB和网易云音乐。每个来源均可启用/禁用,并可拖拽调整优先级。',
q59: '有没有查看其他用户正在听什么的功能?',
a59: '有。点击右上角的广播图标,可查看Navidrome服务器上其他用户正在收听的内容,每10秒更新一次。',
},
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: '隐藏合辑',
},
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: '当前没有播放',
},
};