Merge remote-tracking branch 'origin/main' into exp/orbit

# Conflicts:
#	src/api/subsonic.ts
This commit is contained in:
Psychotoxical
2026-04-24 19:57:34 +02:00
15 changed files with 1401 additions and 40 deletions
+41
View File
@@ -1318,6 +1318,47 @@ export const deTranslation = {
csvImportDownloadSuccess: 'Bericht erfolgreich heruntergeladen',
csvImportDownloadError: 'Bericht konnte nicht heruntergeladen werden',
},
smartPlaylists: {
sectionBasic: '1. Basis',
sectionGenres: '2. Genres',
sectionYearsAndFilters: '3. Jahre und Filter',
genreMode: 'Genre-Modus',
genreModeInclude: 'Genres einschließen',
genreModeExclude: 'Genres ausschließen',
genreSearchPlaceholder: 'Genres filtern...',
availableGenres: 'Verfügbar',
selectedGenres: 'Ausgewählt',
yearMode: 'Jahresmodus',
yearModeInclude: 'Bereich einschließen',
yearModeExclude: 'Bereich ausschließen',
name: 'Name (ohne Präfix)',
limit: 'Limit',
limitHint: 'Wie viele Songs in die Playlist aufgenommen werden (1-{{max}}, üblicherweise 50).',
artistContains: 'Künstler enthält…',
albumContains: 'Album enthält…',
titleContains: 'Titel enthält…',
minRating: 'Mindestbewertung',
minRatingAria: 'Mindestbewertung für Smart Playlist',
minRatingHint: '0 deaktiviert die Mindestgrenze; 1-5 behält Songs mit Bewertung über dem gewählten Wert.',
fromYear: 'Von Jahr',
toYear: 'Bis Jahr',
excludeUnrated: 'Unbewertete Songs ausschließen',
compilationOnly: 'Nur Sammlungen',
create: 'Neue Smart Playlist',
save: 'Smart Playlist speichern',
created: '{{name}} erstellt',
updated: '{{name}} aktualisiert',
createFailed: 'Smart Playlist konnte nicht erstellt werden.',
updateFailed: 'Smart Playlist konnte nicht aktualisiert werden.',
navidromeOnly: 'Smart Playlists können nur auf Navidrome-Servern erstellt werden.',
loadFailed: 'Smart Playlists konnten nicht von Navidrome geladen werden.',
sortRandom: 'Sortierung: zufällig',
sortTitleAsc: 'Sortierung: Titel A-Z',
sortTitleDesc: 'Sortierung: Titel Z-A',
sortYearDesc: 'Sortierung: Jahr absteigend',
sortYearAsc: 'Sortierung: Jahr aufsteigend',
sortPlayCountDesc: 'Sortierung: Wiedergaben absteigend',
},
mostPlayed: {
title: 'Meistgehört',
topArtists: 'Top-Künstler',
+42
View File
@@ -23,6 +23,7 @@ export const enTranslation = {
offlineLibrary: 'Offline Library',
genres: 'Genres',
playlists: 'Playlists',
smartPlaylists: 'Smart Playlists',
mostPlayed: 'Most Played',
radio: 'Internet Radio',
folderBrowser: 'Folder Browser',
@@ -1320,6 +1321,47 @@ export const enTranslation = {
csvImportDownloadSuccess: 'Report downloaded successfully',
csvImportDownloadError: 'Failed to download report',
},
smartPlaylists: {
sectionBasic: '1. Basic',
sectionGenres: '2. Genres',
sectionYearsAndFilters: '3. Years and filters',
genreMode: 'Genre mode',
genreModeInclude: 'Include genres',
genreModeExclude: 'Exclude genres',
genreSearchPlaceholder: 'Filter genres...',
availableGenres: 'Available',
selectedGenres: 'Selected',
yearMode: 'Year mode',
yearModeInclude: 'Include range',
yearModeExclude: 'Exclude range',
name: 'Name (without prefix)',
limit: 'Limit',
limitHint: 'How many tracks to include in playlist (1-{{max}}, usually 50).',
artistContains: 'Artist contains…',
albumContains: 'Album contains…',
titleContains: 'Title contains…',
minRating: 'Minimum rating',
minRatingAria: 'Minimum rating for smart playlist',
minRatingHint: '0 disables minimum threshold; 1-5 keeps tracks with rating above selected value.',
fromYear: 'From year',
toYear: 'To year',
excludeUnrated: 'Exclude unrated tracks',
compilationOnly: 'Only compilations',
create: 'New Smart Playlist',
save: 'Save Smart Playlist',
created: 'Created {{name}}',
updated: 'Updated {{name}}',
createFailed: 'Could not create smart playlist.',
updateFailed: 'Could not update smart playlist.',
navidromeOnly: 'Smart playlists can only be created on Navidrome servers.',
loadFailed: 'Could not load smart playlists from Navidrome.',
sortRandom: 'Sort: random',
sortTitleAsc: 'Sort: title A-Z',
sortTitleDesc: 'Sort: title Z-A',
sortYearDesc: 'Sort: year desc',
sortYearAsc: 'Sort: year asc',
sortPlayCountDesc: 'Sort: play count desc',
},
mostPlayed: {
title: 'Most Played',
topArtists: 'Top Artists',
+41
View File
@@ -1311,6 +1311,47 @@ export const esTranslation = {
csvImportDownloadSuccess: 'Reporte descargado exitosamente',
csvImportDownloadError: 'Error al descargar el reporte',
},
smartPlaylists: {
sectionBasic: '1. Básico',
sectionGenres: '2. Géneros',
sectionYearsAndFilters: '3. Años y filtros',
genreMode: 'Modo de géneros',
genreModeInclude: 'Incluir géneros',
genreModeExclude: 'Excluir géneros',
genreSearchPlaceholder: 'Filtrar géneros...',
availableGenres: 'Disponibles',
selectedGenres: 'Seleccionados',
yearMode: 'Modo de años',
yearModeInclude: 'Incluir rango',
yearModeExclude: 'Excluir rango',
name: 'Nombre (sin prefijo)',
limit: 'Límite',
limitHint: 'Cuántas canciones incluir en la playlist (1-{{max}}, normalmente 50).',
artistContains: 'Artista contiene…',
albumContains: 'Álbum contiene…',
titleContains: 'Título contiene…',
minRating: 'Valoración mínima',
minRatingAria: 'Valoración mínima para la playlist inteligente',
minRatingHint: '0 desactiva el umbral mínimo; 1-5 mantiene canciones con valoración mayor que el valor seleccionado.',
fromYear: 'Desde año',
toYear: 'Hasta año',
excludeUnrated: 'Excluir canciones sin valoración',
compilationOnly: 'Solo compilaciones',
create: 'Nueva Smart Playlist',
save: 'Guardar Smart Playlist',
created: '{{name}} creada',
updated: '{{name}} actualizada',
createFailed: 'No se pudo crear la smart playlist.',
updateFailed: 'No se pudo actualizar la smart playlist.',
navidromeOnly: 'Las smart playlists solo se pueden crear en servidores Navidrome.',
loadFailed: 'No se pudieron cargar las smart playlists desde Navidrome.',
sortRandom: 'Ordenar: aleatorio',
sortTitleAsc: 'Ordenar: título A-Z',
sortTitleDesc: 'Ordenar: título Z-A',
sortYearDesc: 'Ordenar: año desc',
sortYearAsc: 'Ordenar: año asc',
sortPlayCountDesc: 'Ordenar: reproducciones desc',
},
mostPlayed: {
title: 'Más Reproducidos',
topArtists: 'Artistas Principales',
+41
View File
@@ -1306,6 +1306,47 @@ export const frTranslation = {
csvImportDownloadSuccess: 'Rapport téléchargé avec succès',
csvImportDownloadError: 'Échec du téléchargement du rapport',
},
smartPlaylists: {
sectionBasic: '1. Base',
sectionGenres: '2. Genres',
sectionYearsAndFilters: '3. Années et filtres',
genreMode: 'Mode des genres',
genreModeInclude: 'Inclure les genres',
genreModeExclude: 'Exclure les genres',
genreSearchPlaceholder: 'Filtrer les genres...',
availableGenres: 'Disponibles',
selectedGenres: 'Sélectionnés',
yearMode: 'Mode des années',
yearModeInclude: 'Inclure la plage',
yearModeExclude: 'Exclure la plage',
name: 'Nom (sans préfixe)',
limit: 'Limite',
limitHint: 'Nombre de morceaux à inclure dans la playlist (1-{{max}}, généralement 50).',
artistContains: 'Artiste contient…',
albumContains: 'Album contient…',
titleContains: 'Titre contient…',
minRating: 'Note minimale',
minRatingAria: 'Note minimale pour playlist intelligente',
minRatingHint: '0 désactive le seuil minimum; 1-5 conserve les morceaux avec une note supérieure à la valeur choisie.',
fromYear: 'Depuis l\'année',
toYear: 'Jusqu\'à l\'année',
excludeUnrated: 'Exclure les morceaux non notés',
compilationOnly: 'Compilations uniquement',
create: 'Nouvelle Smart Playlist',
save: 'Enregistrer la Smart Playlist',
created: '{{name}} créée',
updated: '{{name}} mise à jour',
createFailed: 'Impossible de créer la smart playlist.',
updateFailed: 'Impossible de mettre à jour la smart playlist.',
navidromeOnly: 'Les smart playlists ne peuvent être créées que sur des serveurs Navidrome.',
loadFailed: 'Impossible de charger les smart playlists depuis Navidrome.',
sortRandom: 'Tri : aléatoire',
sortTitleAsc: 'Tri : titre A-Z',
sortTitleDesc: 'Tri : titre Z-A',
sortYearDesc: 'Tri : année décroissante',
sortYearAsc: 'Tri : année croissante',
sortPlayCountDesc: 'Tri : nombre d\'écoutes décroissant',
},
mostPlayed: {
title: 'Les plus joués',
topArtists: 'Artistes populaires',
+41
View File
@@ -1318,6 +1318,47 @@ export const nbTranslation = {
filterCompilations: 'Skjul kompilasjonsartister (Various Artists, Soundtracks, etc.)',
filterCompilationsShort: 'Skjul kompilasjoner',
},
smartPlaylists: {
sectionBasic: '1. Grunnleggende',
sectionGenres: '2. Sjanger',
sectionYearsAndFilters: '3. År og filtre',
genreMode: 'Sjanger-modus',
genreModeInclude: 'Inkluder sjangre',
genreModeExclude: 'Ekskluder sjangre',
genreSearchPlaceholder: 'Filtrer sjangre...',
availableGenres: 'Tilgjengelige',
selectedGenres: 'Valgte',
yearMode: 'År-modus',
yearModeInclude: 'Inkluder område',
yearModeExclude: 'Ekskluder område',
name: 'Navn (uten prefiks)',
limit: 'Grense',
limitHint: 'Hvor mange spor som skal inkluderes i spillelisten (1-{{max}}, vanligvis 50).',
artistContains: 'Artist inneholder…',
albumContains: 'Album inneholder…',
titleContains: 'Tittel inneholder…',
minRating: 'Minimumsvurdering',
minRatingAria: 'Minimumsvurdering for smart-spilleliste',
minRatingHint: '0 deaktiverer minimumsterskelen; 1-5 beholder spor med vurdering over valgt verdi.',
fromYear: 'Fra år',
toYear: 'Til år',
excludeUnrated: 'Ekskluder spor uten vurdering',
compilationOnly: 'Kun samlinger',
create: 'Ny Smart-spilleliste',
save: 'Lagre Smart-spilleliste',
created: '{{name}} opprettet',
updated: '{{name}} oppdatert',
createFailed: 'Kunne ikke opprette smart-spilleliste.',
updateFailed: 'Kunne ikke oppdatere smart-spilleliste.',
navidromeOnly: 'Smart-spillelister kan bare opprettes på Navidrome-servere.',
loadFailed: 'Kunne ikke laste smart-spillelister fra Navidrome.',
sortRandom: 'Sortering: tilfeldig',
sortTitleAsc: 'Sortering: tittel A-Å',
sortTitleDesc: 'Sortering: tittel Å-A',
sortYearDesc: 'Sortering: år synkende',
sortYearAsc: 'Sortering: år stigende',
sortPlayCountDesc: 'Sortering: avspillinger synkende',
},
radio: {
title: 'Internettradio',
empty: 'Ingen radiostasjoner konfigurert.',
+41
View File
@@ -1305,6 +1305,47 @@ export const nlTranslation = {
csvImportDownloadSuccess: 'Rapport succesvol gedownload',
csvImportDownloadError: 'Rapport downloaden mislukt',
},
smartPlaylists: {
sectionBasic: '1. Basis',
sectionGenres: '2. Genres',
sectionYearsAndFilters: '3. Jaren en filters',
genreMode: 'Genre-modus',
genreModeInclude: 'Genres opnemen',
genreModeExclude: 'Genres uitsluiten',
genreSearchPlaceholder: 'Genres filteren...',
availableGenres: 'Beschikbaar',
selectedGenres: 'Geselecteerd',
yearMode: 'Jaarmodus',
yearModeInclude: 'Bereik opnemen',
yearModeExclude: 'Bereik uitsluiten',
name: 'Naam (zonder prefix)',
limit: 'Limiet',
limitHint: 'Hoeveel nummers in de playlist moeten komen (1-{{max}}, meestal 50).',
artistContains: 'Artiest bevat…',
albumContains: 'Album bevat…',
titleContains: 'Titel bevat…',
minRating: 'Minimale beoordeling',
minRatingAria: 'Minimale beoordeling voor smart playlist',
minRatingHint: '0 schakelt de minimumdrempel uit; 1-5 behoudt nummers met een beoordeling boven de gekozen waarde.',
fromYear: 'Vanaf jaar',
toYear: 'Tot jaar',
excludeUnrated: 'Nummers zonder beoordeling uitsluiten',
compilationOnly: 'Alleen compilaties',
create: 'Nieuwe Smart Playlist',
save: 'Smart Playlist opslaan',
created: '{{name}} aangemaakt',
updated: '{{name}} bijgewerkt',
createFailed: 'Smart playlist kon niet worden aangemaakt.',
updateFailed: 'Smart playlist kon niet worden bijgewerkt.',
navidromeOnly: 'Smart playlists kunnen alleen op Navidrome-servers worden aangemaakt.',
loadFailed: 'Smart playlists konden niet vanuit Navidrome worden geladen.',
sortRandom: 'Sorteren: willekeurig',
sortTitleAsc: 'Sorteren: titel A-Z',
sortTitleDesc: 'Sorteren: titel Z-A',
sortYearDesc: 'Sorteren: jaar aflopend',
sortYearAsc: 'Sorteren: jaar oplopend',
sortPlayCountDesc: 'Sorteren: afspeeltelling aflopend',
},
mostPlayed: {
title: 'Meest gespeeld',
topArtists: 'Topkunstenaars',
+42
View File
@@ -23,6 +23,7 @@ export const ruTranslation = {
offlineLibrary: 'Офлайн-библиотека',
genres: 'Жанры',
playlists: 'Плейлисты',
smartPlaylists: 'Смарт-плейлисты',
mostPlayed: 'Популярное',
radio: 'Онлайн-радио',
folderBrowser: 'Браузер папок',
@@ -1384,6 +1385,47 @@ export const ruTranslation = {
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: 'Сортировка: название А-Я',
sortTitleDesc: 'Сортировка: название Я-А',
sortYearDesc: 'Сортировка: год по убыванию',
sortYearAsc: 'Сортировка: год по возрастанию',
sortPlayCountDesc: 'Сортировка: прослушивания по убыванию',
},
mostPlayed: {
title: 'Популярное',
topArtists: 'Топ исполнителей',
+41
View File
@@ -1298,6 +1298,47 @@ export const zhTranslation = {
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: '热门艺术家',