From a1b3022140db98f61c4ce075c1f6604c90931559 Mon Sep 17 00:00:00 2001 From: jiezhuo Date: Sat, 28 Mar 2026 22:04:13 +0800 Subject: [PATCH] Add Chinese language --- src/i18n.ts | 575 ++++++++++++++++++++++++++++++++++++++++- src/pages/Settings.tsx | 1 + 2 files changed, 575 insertions(+), 1 deletion(-) diff --git a/src/i18n.ts b/src/i18n.ts index 518a637d..c802db64 100644 --- a/src/i18n.ts +++ b/src/i18n.ts @@ -290,6 +290,7 @@ const enTranslation = { languageDe: 'German', languageFr: 'French', languageNl: 'Dutch', + languageZh: 'Chinese', font: 'Font', theme: 'Theme', appearance: 'Appearance', @@ -857,6 +858,7 @@ const deTranslation = { languageDe: 'Deutsch', languageFr: 'Französisch', languageNl: 'Niederländisch', + languageZh: 'Chinesisch', font: 'Schriftart', theme: 'Design', appearance: 'Darstellung', @@ -1424,6 +1426,7 @@ const frTranslation = { languageDe: 'Allemand', languageFr: 'Français', languageNl: 'Néerlandais', + languageZh: 'Chinois', font: 'Police', theme: 'Thème', appearance: 'Apparence', @@ -1991,6 +1994,7 @@ const nlTranslation = { languageDe: 'Duits', languageFr: 'Frans', languageNl: 'Nederlands', + languageZh: 'Chinees', font: 'Lettertype', theme: 'Thema', appearance: 'Weergave', @@ -2269,6 +2273,574 @@ const nlTranslation = { } }; +// Chinese Translations +const zhTranslation = { + sidebar: { + library: '音乐库', + mainstage: '主舞台', + newReleases: '新发布', + allAlbums: '全部专辑', + randomAlbums: '随机专辑', + artists: '艺术家', + playlists: '播放列表', + randomMix: '随机混音', + favorites: '收藏夹', + nowPlaying: '正在播放', + system: '系统', + statistics: '统计', + settings: '设置', + help: '帮助', + expand: '展开侧边栏', + collapse: '收起侧边栏', + updateAvailable: '有可用更新', + updateReady: '{{version}} 已就绪', + updateLink: '前往发布页面 →', + downloadingTracks: '正在缓存 {{n}} 首歌曲…', + offlineLibrary: '离线音乐库', + }, + home: { + starred: '个人收藏', + recent: '最近添加', + mostPlayed: '最常播放', + discover: '发现', + loadMore: '加载更多', + discoverMore: '发现更多', + discoverArtists: '发现艺术家', + discoverArtistsMore: '全部艺术家' + }, + hero: { + eyebrow: '精选专辑', + playAlbum: '播放专辑', + enqueue: '加入队列', + enqueueTooltip: '将整张专辑添加到播放队列', + }, + search: { + placeholder: '搜索艺术家、专辑或歌曲…', + noResults: '未找到 "{{query}}" 的相关结果', + artists: '艺术家', + albums: '专辑', + songs: '歌曲', + clearLabel: '清除搜索', + title: '搜索', + resultsFor: '"{{query}}" 的搜索结果', + album: '专辑', + }, + nowPlaying: { + tooltip: '谁正在收听?', + title: '谁正在收听?', + loading: '加载中…', + nobody: '当前无人收听。', + minutesAgo: '{{n}} 分钟前', + nothingPlaying: '尚未开始播放。开始播放一首歌曲吧!', + aboutArtist: '关于艺术家', + fromAlbum: '来自此专辑', + viewAlbum: '查看专辑', + goToArtist: '前往艺术家', + readMore: '阅读更多', + showLess: '收起', + genreInfo: '流派', + trackInfo: '曲目信息', + }, + contextMenu: { + playNow: '立即播放', + playNext: '下一首播放', + addToQueue: '添加到队列', + enqueueAlbum: '专辑加入队列', + startRadio: '开始电台', + lfmLove: '在 Last.fm 上标记喜欢', + lfmUnlove: '取消 Last.fm 喜欢标记', + favorite: '收藏', + favoriteArtist: '收藏艺术家', + favoriteAlbum: '收藏专辑', + unfavorite: '取消收藏', + unfavoriteArtist: '取消收藏艺术家', + unfavoriteAlbum: '取消收藏专辑', + removeFromQueue: '从队列中移除', + openAlbum: '打开专辑', + goToArtist: '前往艺术家', + download: '下载 (ZIP)', + }, + albumDetail: { + back: '返回', + playAll: '全部播放', + 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: '标题', + trackArtist: '艺术家', + trackFormat: '格式', + trackFavorite: '收藏', + trackRating: '评分', + trackDuration: '时长', + trackTotal: '总计', + notFound: '未找到专辑。', + bioModal: '艺术家简介', + bioClose: '关闭', + ratingLabel: '评分', + }, + artistDetail: { + back: '返回', + albums: '专辑', + album: '专辑', + playAll: '全部播放', + shuffle: '随机播放', + radio: '电台', + loading: '加载中…', + noRadio: '未找到该艺术家的相似曲目。', + notFound: '未找到艺术家。', + albumsBy: '{{name}} 的专辑', + topTracks: '热门曲目', + noAlbums: '未找到专辑。', + trackTitle: '标题', + trackAlbum: '专辑', + trackDuration: '时长', + favoriteAdd: '添加到收藏', + favoriteRemove: '从收藏中移除', + favorite: '收藏', + albumCount_one: '{{count}} 张专辑', + albumCount_other: '{{count}} 张专辑', + openedInBrowser: '已在浏览器中打开', + featuredOn: '还出现在', + similarArtists: '相似艺术家', + }, + favorites: { + title: '收藏夹', + empty: '您还没有保存任何收藏。', + artists: '艺术家', + albums: '专辑', + songs: '歌曲', + enqueueAll: '全部加入队列', + removeSong: '从收藏中移除', + }, + randomAlbums: { + title: '随机专辑', + refresh: '刷新', + }, + randomMix: { + title: '随机混音', + remix: '重新混音', + remixTooltip: '加载新的随机歌曲', + playAll: '全部播放', + trackTitle: '标题', + trackArtist: '艺术家', + trackAlbum: '专辑', + trackFavorite: '收藏', + trackDuration: '时长', + favoriteAdd: '添加到收藏', + favoriteRemove: '从收藏中移除', + play: '播放', + trackGenre: '流派', + excludeAudiobooks: '排除有声读物和广播剧', + excludeAudiobooksDesc: '根据流派、标题、专辑和艺术家匹配关键词 — 例如 Hörbuch、Audiobook、Spoken Word 等', + genreBlocked: '关键词已屏蔽', + genreAddedToBlacklist: '已添加到过滤列表', + genreAlreadyBlocked: '已屏蔽', + artistBlocked: '艺术家已屏蔽', + artistAddedToBlacklist: '艺术家已添加到过滤列表', + artistClickHint: '点击屏蔽此艺术家', + blacklistToggle: '关键词过滤', + genreMixTitle: '流派混音', + genreMixDesc: '选择一个流派以获取精选的随机混音', + genreMixLoadMore: '加载 10 首更多', + genreMixNoGenres: '服务器上未找到流派。', + filterPanelTitle: '过滤器', + genreClickHint: '点击流派标签将其添加为过滤关键词。\\n匹配流派、标题、专辑和艺术家。', + }, + playlists: { + title: '播放列表', + loading: '正在加载播放列表…', + empty: '未找到播放列表。\\n使用播放队列创建播放列表。', + play: '播放', + deleteTooltip: '删除', + confirmDelete: '确定要删除播放列表 "{{name}}" 吗?', + minutes: '分钟', + track_one: '{{count}} 首曲目', + track_other: '{{count}} 首曲目', + filterPlaceholder: '筛选播放列表…', + colName: '名称', + colTracks: '曲目', + colDuration: '时长', + noResults: '没有匹配的播放列表。', + }, + albums: { + title: '全部专辑', + sortByName: '按名称排序 (A-Z)', + sortByArtist: '按艺术家排序 (A-Z)', + sortNewest: '最新优先', + sortRandom: '随机排序', + }, + artists: { + title: '艺术家', + search: '搜索…', + all: '全部', + gridView: '网格视图', + listView: '列表视图', + loadMore: '加载更多', + notFound: '未找到艺术家。', + albumCount_one: '{{count}} 张专辑', + albumCount_other: '{{count}} 张专辑', + }, + login: { + subtitle: '您的 Navidrome 桌面播放器', + serverName: '服务器名称(可选)', + serverNamePlaceholder: '我的 Navidrome', + serverUrl: '服务器地址', + serverUrlPlaceholder: '192.168.1.100:4533 或 music.example.com', + username: '用户名', + usernamePlaceholder: 'admin', + password: '密码', + showPassword: '显示密码', + hidePassword: '隐藏密码', + connect: '连接', + connecting: '正在连接…', + connected: '已连接!', + error: '连接失败 — 请检查您的信息。', + urlRequired: '请输入服务器地址。', + savedServers: '已保存的服务器', + addNew: '或添加新服务器', + }, + connection: { + connected: '已连接', + connectedTo: '已连接到 {{server}}', + disconnected: '已断开连接', + disconnectedFrom: '无法连接到 {{server}} — 点击检查设置', + checking: '正在连接…', + extern: '外部', + offlineTitle: '无服务器连接', + offlineSubtitle: '无法连接到 {{server}}。请检查您的网络或服务器。', + offlineModeBanner: '离线模式 — 正在从本地缓存播放', + offlineLibraryTitle: '离线音乐库', + offlineLibraryEmpty: '尚未缓存任何专辑。请联网,打开专辑并点击"设为离线可用"。', + offlineAlbumCount_one: '{{n}} 张专辑', + offlineAlbumCount_plural: '{{n}} 张专辑', + retry: '重试', + lastfmConnected: 'Last.fm 已连接为 @{{user}}', + lastfmSessionInvalid: '会话无效 — 点击重新连接', + }, + common: { + albums: '专辑', + album: '专辑', + loading: '加载中…', + loadingMore: '加载中…', + loadingPlaylists: '正在加载播放列表…', + noAlbums: '未找到专辑。', + downloading: '正在下载…', + downloadZip: '下载 (ZIP)', + back: '返回', + cancel: '取消', + save: '保存', + delete: '删除', + use: '使用', + add: '添加', + active: '当前使用', + download: '下载', + chooseDownloadFolder: '选择下载文件夹', + noFolderSelected: '未选择文件夹', + rememberDownloadFolder: '记住此文件夹', + }, + settings: { + title: '设置', + language: '语言', + languageEn: '英语', + languageDe: '德语', + languageFr: '法语', + languageNl: '荷兰语', + languageZh: '中文', + font: '字体', + theme: '主题', + appearance: '外观', + servers: '服务器', + serverName: '服务器名称', + serverUrl: '服务器地址', + serverUsername: '用户名', + serverPassword: '密码', + addServer: '添加服务器', + addServerTitle: '添加新服务器', + useServer: '使用', + deleteServer: '删除', + noServers: '未保存任何服务器。', + serverActive: '当前使用', + confirmDeleteServer: '删除服务器 "{{name}}"?', + serverConnecting: '正在连接…', + serverConnected: '已连接!', + serverFailed: '连接失败。', + testBtn: '测试连接', + testingBtn: '正在测试…', + connected: '已连接', + failed: '失败', + eqTitle: '均衡器', + eqEnabled: '启用均衡器', + eqPreset: '预设', + eqPresetCustom: '自定义', + eqPresetBuiltin: '内置预设', + eqPresetCustomGroup: '我的预设', + eqSavePreset: '保存为预设', + eqPresetName: '预设名称…', + eqDeletePreset: '删除预设', + eqResetBands: '重置为平直', + 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: '封面和艺术家图片。存满时,最旧的条目将自动移除。离线专辑不会自动移除,但手动清除缓存时会被删除。', + cacheUsed: '已使用:{{images}} 张图片 · {{offline}} 首离线曲目', + cacheClearBtn: '清除缓存', + cacheClearWarning: '这将同时移除音乐库中的所有离线专辑。', + cacheClearConfirm: '全部清除', + cacheClearCancel: '取消', + downloadsTitle: '下载文件夹', + downloadsDefault: '默认下载文件夹', + pickFolder: '选择', + pickFolderTitle: '选择下载文件夹', + clearFolder: '清除下载文件夹', + logout: '退出登录', + aboutTitle: '关于 Psysonic', + aboutDesc: '适用于 Subsonic 兼容服务器(Navidrome、Gonic 等)的桌面音乐播放器。以简洁现代的界面流媒体播放您的自托管音乐库,采用 Catppuccin 配色方案风格。', + aboutFeatures: '多服务器支持 · 歌曲记录 · 全屏播放器 · 专辑下载 · 图片缓存 · Catppuccin 主题', + aboutLicense: '许可证', + aboutLicenseText: 'GNU GPL v3 — 在相同许可证下可自由使用、修改和分发。', + aboutRepo: 'GitHub 上的源代码', + aboutVersion: '版本', + aboutBuiltWith: '使用 Tauri · React · TypeScript · Rust/rodio 构建', + aboutAiCredit: '在 Anthropic 的 Claude Code 支持下开发', + changelog: '更新日志', + randomMixTitle: '随机混音', + randomMixBlacklistTitle: '自定义过滤关键词', + randomMixBlacklistDesc: '当任何关键词匹配流派、标题、专辑或艺术家时,歌曲将被排除(当上方复选框开启时生效)。', + randomMixBlacklistPlaceholder: '添加关键词…', + randomMixBlacklistAdd: '添加', + randomMixBlacklistEmpty: '尚未添加自定义关键词。', + randomMixHardcodedTitle: '内置关键词(复选框开启时生效)', + tabPlayback: '播放', + tabLibrary: '音乐库', + tabAppearance: '外观', + tabShortcuts: '快捷键', + tabServer: '服务器', + tabAbout: '关于', + shortcutsReset: '恢复默认', + shortcutListening: '请按下按键…', + shortcutUnbound: '—', + globalShortcutsTitle: '全局快捷键', + globalShortcutsNote: '即使 Psysonic 在后台也能在系统范围内工作。需要 Ctrl、Alt 或 Super 作为修饰键。', + shortcutClear: '清除', + shortcutPlayPause: '播放 / 暂停', + shortcutNext: '下一首', + shortcutPrev: '上一首', + shortcutVolumeUp: '音量增大', + shortcutVolumeDown: '音量减小', + shortcutSeekForward: '快进 10 秒', + shortcutSeekBackward: '快退 10 秒', + shortcutToggleQueue: '切换队列', + shortcutFullscreenPlayer: '全屏播放器', + shortcutNativeFullscreen: '原生全屏', + playbackTitle: '播放', + replayGain: '回放增益', + replayGainDesc: '使用 ReplayGain 元数据标准化曲目音量', + replayGainMode: '模式', + replayGainTrack: '曲目', + replayGainAlbum: '专辑', + crossfade: '交叉淡入淡出', + crossfadeDesc: '曲目间淡入淡出', + crossfadeSecs: '{{n}} 秒', + notWithGapless: '无缝播放开启时不可用', + notWithCrossfade: '交叉淡入淡出开启时不可用', + gapless: '无缝播放', + gaplessDesc: '预缓冲下一首曲目以消除歌曲间的间隙', + experimental: '实验性', + }, + 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: '设置 → 主题。从 7 个分组共 47 个主题中选择:Psysonic 主题、Psysonic 媒体播放器、操作系统、游戏、电影、电视剧,以及开源经典(Catppuccin、Nord、Gruvbox)。', + 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 提供 .deb(Ubuntu/Debian)、.rpm(Fedora/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 获取歌词。如果可用同步歌词,活动行会高亮并随歌曲实时滚动。如果只有纯文本歌词,则静态显示完整文本。', + q33: '可以在 FLAC 文件中拖动(拖动播放)吗?', + a33: '在 FLAC 文件中拖动需要文件中嵌入 SEEKTABLE 元数据块。未编码此块的文件无法拖动 — 点击波形将无效。大多数现代编码器(如 ffmpeg、flac CLI)默认包含 SEEKTABLE。您可以使用以下命令为现有文件添加:flac --replay-gain *.flac 或 metaflac --add-seekpoint=10s *.flac', + q31: '可以自定义键盘快捷键吗?', + a31: '可以。设置 → 键盘快捷键 允许您重新映射应用内操作(播放/暂停、下一首、上一首、音量增/减、全屏等)到任意按键。设置 → 全局快捷键 允许您分配即使 Psysonic 在后台也能触发的系统级快捷键。', + q32: '可以更改字体吗?', + a32: '可以。设置 → 字体 允许您从 10 种字体中选择,包括 IBM Plex Mono、Fira Code、JetBrains Mono、Courier Prime 等。所选字体将应用于整个界面。', + s8: '离线模式', + q34: '什么是离线模式?', + a34: '离线模式(测试版)允许您将专辑缓存到设备,以便在没有活动服务器连接时收听。缓存的曲目存储在本地并直接从磁盘播放 — 播放期间不进行网络请求。', + q35: '如何缓存专辑以供离线使用?', + a35: '打开任意专辑并点击专辑标题栏的下载图标。Psysonic 会在后台下载所有曲目。按钮上会显示进度。缓存完成后,图标变为绿色。您可以在离线音乐库页面(侧边栏)查看和移除缓存的专辑。', + q36: '离线缓存可以使用多少存储空间?', + a36: '您可以在 设置 → 音乐库 中设置最大缓存大小。达到限制时,专辑页面会显示警告横幅。您可以从离线音乐库中删除单个专辑以释放空间。', + }, + queue: { + title: '队列', + savePlaylist: '保存为播放列表', + playlistName: '播放列表名称', + cancel: '取消', + save: '保存', + loadPlaylist: '加载播放列表', + loading: '加载中…', + noPlaylists: '未找到播放列表。', + load: '加载', + delete: '删除', + deleteConfirm: '删除播放列表 "{{name}}"?', + clear: '清空', + shuffle: '随机打乱队列', + gapless: '无缝播放', + crossfade: '交叉淡入淡出', + hide: '隐藏', + close: '关闭', + nextTracks: '即将播放', + emptyQueue: '队列为空。', + trackSingular: '首曲目', + trackPlural: '首曲目', + showRemaining: '显示剩余时间', + showTotal: '显示总时间', + }, + statistics: { + title: '统计', + recentlyPlayed: '最近播放', + mostPlayed: '最常播放的专辑', + highestRated: '评分最高的专辑', + genreDistribution: '流派分布(前 20)', + loadMore: '加载更多', + statArtists: '艺术家', + statAlbums: '专辑', + statSongs: '歌曲', + statGenres: '流派', + 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}} 天前', + }, + player: { + regionLabel: '音乐播放器', + openFullscreen: '打开全屏播放器', + fullscreen: '全屏播放器', + closeFullscreen: '关闭全屏', + closeTooltip: '关闭 (Esc)', + noTitle: '无标题', + stop: '停止', + prev: '上一首', + play: '播放', + pause: '暂停', + next: '下一首', + repeat: '重复', + repeatOff: '关闭', + repeatAll: '全部', + repeatOne: '单曲', + progress: '播放进度', + volume: '音量', + toggleQueue: '切换队列', + lyrics: '歌词', + lyricsLoading: '正在加载歌词…', + lyricsNotFound: '未找到此曲目的歌词', + } +}; + // Retrieve language from local storage or default to 'en' const savedLanguage = localStorage.getItem('psysonic_language') || 'en'; @@ -2279,7 +2851,8 @@ i18n en: { translation: enTranslation }, de: { translation: deTranslation }, fr: { translation: frTranslation }, - nl: { translation: nlTranslation } + nl: { translation: nlTranslation }, + zh: { translation: zhTranslation } }, lng: savedLanguage, fallbackLng: 'en', diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx index 2101f595..eb45a0f8 100644 --- a/src/pages/Settings.tsx +++ b/src/pages/Settings.tsx @@ -552,6 +552,7 @@ export default function Settings() { { value: 'en', label: t('settings.languageEn') }, { value: 'fr', label: t('settings.languageFr') }, { value: 'de', label: t('settings.languageDe') }, + { value: 'zh', label: t('settings.languageZh') }, ]} />