feat: v1.20.0 — FLAC Seek Fix, Genres, Genre Filter, Chinese, W10 Theme

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-03-29 18:04:01 +02:00
parent b35539d3cf
commit e1d27798eb
26 changed files with 2020 additions and 406 deletions
+100 -90
View File
@@ -10,7 +10,6 @@ const enTranslation = {
allAlbums: 'All Albums',
randomAlbums: 'Random Albums',
artists: 'Artists',
playlists: 'Playlists',
randomMix: 'Random Mix',
favorites: 'Favorites',
nowPlaying: 'Now Playing',
@@ -25,6 +24,7 @@ const enTranslation = {
updateLink: 'Go to release →',
downloadingTracks: 'Caching {{n}} tracks…',
offlineLibrary: 'Offline Library',
genres: 'Genres',
},
home: {
starred: 'Personal Favorites',
@@ -161,6 +161,18 @@ const enTranslation = {
title: 'Random Albums',
refresh: 'Refresh',
},
genres: {
title: 'Genres',
genreCount: 'Genres',
albumCount_one: '{{count}} album',
albumCount_other: '{{count}} albums',
loading: 'Loading genres…',
empty: 'No genres found.',
albumsLoading: 'Loading albums…',
albumsEmpty: 'No albums found for this genre.',
loadMore: 'Load more',
back: 'Back',
},
randomMix: {
title: 'Random Mix',
remix: 'Remix',
@@ -191,22 +203,6 @@ const enTranslation = {
filterPanelTitle: 'Filters',
genreClickHint: 'Click a genre tag to add it\nas a filter keyword.\nMatches genre, title, album & artist.',
},
playlists: {
title: 'Playlists',
loading: 'Loading playlists…',
empty: 'No playlists found.\nUse the queue to create playlists.',
play: 'Play',
deleteTooltip: 'Delete',
confirmDelete: 'Really delete playlist "{{name}}"?',
minutes: 'min.',
track_one: '{{count}} Track',
track_other: '{{count}} Tracks',
filterPlaceholder: 'Filter playlists…',
colName: 'Name',
colTracks: 'Tracks',
colDuration: 'Duration',
noResults: 'No playlists match your filter.',
},
albums: {
title: 'All Albums',
sortByName: 'AZ (Album)',
@@ -282,6 +278,10 @@ const enTranslation = {
chooseDownloadFolder: 'Choose download folder',
noFolderSelected: 'No folder selected',
rememberDownloadFolder: 'Remember this folder',
filterGenre: 'Genre Filter',
filterSearchGenres: 'Search genres…',
filterNoGenres: 'No genres match',
filterClear: 'Clear',
},
settings: {
title: 'Settings',
@@ -358,6 +358,8 @@ const enTranslation = {
aboutVersion: 'Version',
aboutBuiltWith: 'Built with Tauri · React · TypeScript · Rust/rodio',
aboutAiCredit: 'Developed with the support of Claude Code by Anthropic',
aboutContributorsLabel: 'Contributors',
aboutContributors: 'jiezhuo — Chinese translation',
changelog: 'Changelog',
randomMixTitle: 'Random Mix',
randomMixBlacklistTitle: 'Custom Filter Keywords',
@@ -434,7 +436,7 @@ const enTranslation = {
q12: 'How do I change the theme?',
a12: 'Settings → Theme. Choose from 47 themes across 7 groups: Psysonic Themes, Psysonic Mediaplayer, Operating Systems, Games, Movies, Series, and Open Source Classics (Catppuccin, Nord, Gruvbox).',
q13: 'How do I change the language?',
a13: 'Settings → Language. English, German, French, and Dutch are supported.',
a13: 'Settings → Language. English, German, French, Dutch, and Chinese are supported.',
q15: 'How do I set a download folder?',
a15: 'Settings → App Behavior → Download Folder. Pick any folder — downloaded albums are saved there as ZIP files. Without a custom folder, your browser\'s default downloads location is used.',
s5: 'Scrobbling',
@@ -578,7 +580,6 @@ const deTranslation = {
allAlbums: 'Alle Alben',
randomAlbums: 'Zufallsalben',
artists: 'Künstler',
playlists: 'Playlists',
randomMix: 'Zufallsmix',
favorites: 'Favoriten',
nowPlaying: 'Now Playing',
@@ -593,6 +594,7 @@ const deTranslation = {
updateLink: 'Zum Release →',
downloadingTracks: '{{n}} Tracks werden gecacht…',
offlineLibrary: 'Offline-Bibliothek',
genres: 'Genres',
},
home: {
starred: 'Persönliche Favoriten',
@@ -729,6 +731,18 @@ const deTranslation = {
title: 'Zufallsalben',
refresh: 'Neu laden',
},
genres: {
title: 'Genres',
genreCount: 'Genres',
albumCount_one: '{{count}} Album',
albumCount_other: '{{count}} Alben',
loading: 'Genres werden geladen…',
empty: 'Keine Genres gefunden.',
albumsLoading: 'Alben werden geladen…',
albumsEmpty: 'Keine Alben in diesem Genre gefunden.',
loadMore: 'Mehr laden',
back: 'Zurück',
},
randomMix: {
title: 'Zufallsmix',
remix: 'Neu mixen',
@@ -759,22 +773,6 @@ const deTranslation = {
filterPanelTitle: 'Filter',
genreClickHint: 'Genre-Tag anklicken,\num es als Filter-Keyword hinzuzufügen.\nPrüft Genre, Titel, Album & Künstler.',
},
playlists: {
title: 'Playlists',
loading: 'Lade Playlists…',
empty: 'Keine Playlists gefunden.\nNutze die Warteschlange, um Playlists zu erstellen.',
play: 'Abspielen',
deleteTooltip: 'Löschen',
confirmDelete: 'Playlist "{{name}}" wirklich löschen?',
minutes: 'Min.',
track_one: '{{count}} Track',
track_other: '{{count}} Tracks',
filterPlaceholder: 'Playlists filtern…',
colName: 'Name',
colTracks: 'Tracks',
colDuration: 'Dauer',
noResults: 'Keine Playlists entsprechen dem Filter.',
},
albums: {
title: 'Alle Alben',
sortByName: 'AZ (Album)',
@@ -850,6 +848,10 @@ const deTranslation = {
chooseDownloadFolder: 'Download-Ordner wählen',
noFolderSelected: 'Kein Ordner ausgewählt',
rememberDownloadFolder: 'Ordner merken',
filterGenre: 'Genre-Filter',
filterSearchGenres: 'Genres suchen…',
filterNoGenres: 'Keine Genres gefunden',
filterClear: 'Zurücksetzen',
},
settings: {
title: 'Einstellungen',
@@ -926,6 +928,8 @@ const deTranslation = {
aboutVersion: 'Version',
aboutBuiltWith: 'Gebaut mit Tauri · React · TypeScript · Rust/rodio',
aboutAiCredit: 'Mit freundlicher Unterstützung von Claude Code by Anthropic',
aboutContributorsLabel: 'Mitwirkende',
aboutContributors: 'jiezhuo — Chinesische Übersetzung',
changelog: 'Changelog',
randomMixTitle: 'Zufallsmix',
randomMixBlacklistTitle: 'Eigene Filter-Keywords',
@@ -1002,7 +1006,7 @@ const deTranslation = {
q12: 'Wie ändere ich das Theme?',
a12: 'Einstellungen → Design. 47 Designs in 7 Gruppen: Psysonic Themes, Psysonic Mediaplayer, Betriebssysteme, Spiele, Filme, Serien und Open-Source-Classics (Catppuccin, Nord, Gruvbox).',
q13: 'Wie ändere ich die Sprache?',
a13: 'Einstellungen → Sprache. Englisch, Deutsch, Französisch und Niederländisch werden unterstützt.',
a13: 'Einstellungen → Sprache. Englisch, Deutsch, Französisch, Niederländisch und Chinesisch werden unterstützt.',
q15: 'Wie lege ich einen Download-Ordner fest?',
a15: 'Einstellungen → App-Verhalten → Download-Ordner. Beliebigen Ordner wählen — heruntergeladene Alben werden dort als ZIP gespeichert. Ohne eigenen Ordner landet alles im Standard-Downloads-Ordner.',
s5: 'Scrobbling',
@@ -1146,7 +1150,6 @@ const frTranslation = {
allAlbums: 'Tous les albums',
randomAlbums: 'Albums aléatoires',
artists: 'Artistes',
playlists: 'Listes de lecture',
randomMix: 'Mix aléatoire',
favorites: 'Favoris',
nowPlaying: 'En cours',
@@ -1161,6 +1164,7 @@ const frTranslation = {
updateLink: 'Voir la version →',
downloadingTracks: '{{n}} pistes en cache…',
offlineLibrary: 'Bibliothèque hors ligne',
genres: 'Genres',
},
home: {
starred: 'Favoris personnels',
@@ -1297,6 +1301,18 @@ const frTranslation = {
title: 'Albums aléatoires',
refresh: 'Actualiser',
},
genres: {
title: 'Genres',
genreCount: 'genres',
albumCount_one: '{{count}} album',
albumCount_other: '{{count}} albums',
loading: 'Chargement des genres…',
empty: 'Aucun genre trouvé.',
albumsLoading: 'Chargement des albums…',
albumsEmpty: 'Aucun album trouvé pour ce genre.',
loadMore: 'Charger plus',
back: 'Retour',
},
randomMix: {
title: 'Mix aléatoire',
remix: 'Remixer',
@@ -1327,22 +1343,6 @@ const frTranslation = {
filterPanelTitle: 'Filtres',
genreClickHint: 'Cliquez sur un tag de genre pour l\'ajouter\ncomme mot-clé de filtre.\nCorrespond au genre, titre, album et artiste.',
},
playlists: {
title: 'Listes de lecture',
loading: 'Chargement des listes…',
empty: 'Aucune liste de lecture.\nUtilisez la file d\'attente pour en créer.',
play: 'Lire',
deleteTooltip: 'Supprimer',
confirmDelete: 'Supprimer la liste « {{name}} » ?',
minutes: 'min.',
track_one: '{{count}} piste',
track_other: '{{count}} pistes',
filterPlaceholder: 'Filtrer les listes…',
colName: 'Nom',
colTracks: 'Pistes',
colDuration: 'Durée',
noResults: 'Aucune liste ne correspond au filtre.',
},
albums: {
title: 'Tous les albums',
sortByName: 'AZ (Album)',
@@ -1418,6 +1418,10 @@ const frTranslation = {
chooseDownloadFolder: 'Choisir le dossier de téléchargement',
noFolderSelected: 'Aucun dossier sélectionné',
rememberDownloadFolder: 'Mémoriser ce dossier',
filterGenre: 'Filtre genre',
filterSearchGenres: 'Rechercher des genres…',
filterNoGenres: 'Aucun genre trouvé',
filterClear: 'Effacer',
},
settings: {
title: 'Paramètres',
@@ -1494,6 +1498,8 @@ const frTranslation = {
aboutVersion: 'Version',
aboutBuiltWith: 'Construit avec Tauri · React · TypeScript · Rust/rodio',
aboutAiCredit: 'Développé avec le soutien de Claude Code par Anthropic',
aboutContributorsLabel: 'Contributeurs',
aboutContributors: 'jiezhuo — traduction chinoise',
changelog: 'Journal des modifications',
randomMixTitle: 'Mix aléatoire',
randomMixBlacklistTitle: 'Mots-clés de filtre personnalisés',
@@ -1570,7 +1576,7 @@ const frTranslation = {
q12: 'Comment changer le thème ?',
a12: 'Paramètres → Thème. 47 thèmes en 7 groupes : Psysonic Themes, Psysonic Mediaplayer, Systèmes d\'exploitation, Jeux, Films, Séries et Open Source Classics (Catppuccin, Nord, Gruvbox).',
q13: 'Comment changer la langue ?',
a13: 'Paramètres → Langue. L\'anglais, l\'allemand, le français et le néerlandais sont pris en charge.',
a13: 'Paramètres → Langue. L\'anglais, l\'allemand, le français, le néerlandais et le chinois sont pris en charge.',
q15: 'Comment définir un dossier de téléchargement ?',
a15: 'Paramètres → Comportement → Dossier de téléchargement. Les albums téléchargés y sont enregistrés en ZIP.',
s5: 'Scrobbling',
@@ -1714,7 +1720,6 @@ const nlTranslation = {
allAlbums: 'Alle albums',
randomAlbums: 'Willekeurige albums',
artists: 'Artiesten',
playlists: 'Afspeellijsten',
randomMix: 'Willekeurige mix',
favorites: 'Favorieten',
nowPlaying: 'Nu bezig',
@@ -1729,6 +1734,7 @@ const nlTranslation = {
updateLink: 'Naar release →',
downloadingTracks: '{{n}} nummers worden gecached…',
offlineLibrary: 'Offline bibliotheek',
genres: 'Genres',
},
home: {
starred: 'Persoonlijke favorieten',
@@ -1865,6 +1871,18 @@ const nlTranslation = {
title: 'Willekeurige albums',
refresh: 'Vernieuwen',
},
genres: {
title: 'Genres',
genreCount: 'genres',
albumCount_one: '{{count}} album',
albumCount_other: '{{count}} albums',
loading: 'Genres laden…',
empty: 'Geen genres gevonden.',
albumsLoading: 'Albums laden…',
albumsEmpty: 'Geen albums gevonden voor dit genre.',
loadMore: 'Meer laden',
back: 'Terug',
},
randomMix: {
title: 'Willekeurige mix',
remix: 'Opnieuw mixen',
@@ -1895,22 +1913,6 @@ const nlTranslation = {
filterPanelTitle: 'Filters',
genreClickHint: 'Klik op een genre-tag om het\ntoe te voegen als filtertrefwoord.\nVergelijkt genre, titel, album & artiest.',
},
playlists: {
title: 'Afspeellijsten',
loading: 'Afspeellijsten laden…',
empty: 'Geen afspeellijsten gevonden.\nGebruik de wachtrij om afspeellijsten aan te maken.',
play: 'Afspelen',
deleteTooltip: 'Verwijderen',
confirmDelete: 'Afspeellijst "{{name}}" echt verwijderen?',
minutes: 'min.',
track_one: '{{count}} nummer',
track_other: '{{count}} nummers',
filterPlaceholder: 'Afspeellijsten filteren…',
colName: 'Naam',
colTracks: 'Nummers',
colDuration: 'Duur',
noResults: 'Geen afspeellijsten komen overeen met het filter.',
},
albums: {
title: 'Alle albums',
sortByName: 'AZ (Album)',
@@ -1986,6 +1988,10 @@ const nlTranslation = {
chooseDownloadFolder: 'Downloadmap kiezen',
noFolderSelected: 'Geen map geselecteerd',
rememberDownloadFolder: 'Deze map onthouden',
filterGenre: 'Genre-filter',
filterSearchGenres: 'Genres zoeken…',
filterNoGenres: 'Geen genres gevonden',
filterClear: 'Wissen',
},
settings: {
title: 'Instellingen',
@@ -2062,6 +2068,8 @@ const nlTranslation = {
aboutVersion: 'Versie',
aboutBuiltWith: 'Gebouwd met Tauri · React · TypeScript · Rust/rodio',
aboutAiCredit: 'Ontwikkeld met ondersteuning van Claude Code door Anthropic',
aboutContributorsLabel: 'Bijdragers',
aboutContributors: 'jiezhuo — Chinese vertaling',
changelog: 'Wijzigingslog',
randomMixTitle: 'Willekeurige mix',
randomMixBlacklistTitle: 'Aangepaste filtertrefwoorden',
@@ -2138,7 +2146,7 @@ const nlTranslation = {
q12: 'Hoe verander ik het thema?',
a12: 'Instellingen → Thema. 47 thema\'s in 7 groepen: Psysonic Themes, Psysonic Mediaplayer, Besturingssystemen, Games, Films, Series en Open Source Classics (Catppuccin, Nord, Gruvbox).',
q13: 'Hoe verander ik de taal?',
a13: 'Instellingen → Taal. Engels, Duits, Frans en Nederlands worden momenteel ondersteund.',
a13: 'Instellingen → Taal. Engels, Duits, Frans, Nederlands en Chinees worden momenteel ondersteund.',
q15: 'Hoe stel ik een downloadmap in?',
a15: 'Instellingen → App-gedrag → Downloadmap. Gedownloade albums worden daar opgeslagen als ZIP-bestanden.',
s5: 'Scrobbling',
@@ -2282,7 +2290,6 @@ const zhTranslation = {
allAlbums: '全部专辑',
randomAlbums: '随机专辑',
artists: '艺术家',
playlists: '播放列表',
randomMix: '随机混音',
favorites: '收藏夹',
nowPlaying: '正在播放',
@@ -2297,6 +2304,7 @@ const zhTranslation = {
updateLink: '前往发布页面 →',
downloadingTracks: '正在缓存 {{n}} 首歌曲…',
offlineLibrary: '离线音乐库',
genres: '流派',
},
home: {
starred: '个人收藏',
@@ -2433,6 +2441,18 @@ const zhTranslation = {
title: '随机专辑',
refresh: '刷新',
},
genres: {
title: '流派',
genreCount: '个流派',
albumCount_one: '{{count}} 张专辑',
albumCount_other: '{{count}} 张专辑',
loading: '正在加载流派…',
empty: '未找到流派。',
albumsLoading: '正在加载专辑…',
albumsEmpty: '未找到该流派的专辑。',
loadMore: '加载更多',
back: '返回',
},
randomMix: {
title: '随机混音',
remix: '重新混音',
@@ -2463,22 +2483,6 @@ const zhTranslation = {
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)',
@@ -2554,6 +2558,10 @@ const zhTranslation = {
chooseDownloadFolder: '选择下载文件夹',
noFolderSelected: '未选择文件夹',
rememberDownloadFolder: '记住此文件夹',
filterGenre: '流派筛选',
filterSearchGenres: '搜索流派…',
filterNoGenres: '未找到匹配流派',
filterClear: '清除',
},
settings: {
title: '设置',
@@ -2630,6 +2638,8 @@ const zhTranslation = {
aboutVersion: '版本',
aboutBuiltWith: '使用 Tauri · React · TypeScript · Rust/rodio 构建',
aboutAiCredit: '在 Anthropic 的 Claude Code 支持下开发',
aboutContributorsLabel: '贡献者',
aboutContributors: 'jiezhuo — 中文翻译',
changelog: '更新日志',
randomMixTitle: '随机混音',
randomMixBlacklistTitle: '自定义过滤关键词',
@@ -2706,7 +2716,7 @@ const zhTranslation = {
q12: '如何更改主题?',
a12: '设置 → 主题。从 7 个分组共 47 个主题中选择:Psysonic 主题、Psysonic 媒体播放器、操作系统、游戏、电影、电视剧,以及开源经典(Catppuccin、Nord、Gruvbox)。',
q13: '如何更改语言?',
a13: '设置 → 语言。支持英语、德语、法语荷兰语。',
a13: '设置 → 语言。支持英语、德语、法语荷兰语和中文。',
q15: '如何设置下载文件夹?',
a15: '设置 → 应用行为 → 下载文件夹。选择任意文件夹 — 下载的专辑将以 ZIP 文件形式保存在那里。未设置自定义文件夹时,将使用浏览器的默认下载位置。',
s5: '歌曲记录',