feat(jellyfin): expand library sort options

close #1032
This commit is contained in:
edde746
2026-05-13 08:00:45 +02:00
parent 9af6f32157
commit 8aea796dbd
35 changed files with 627 additions and 51 deletions
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "Tilføjet dato",
"releaseDate": "Udgivelsesdato",
"rating": "Vurdering",
"communityRating": "Fællesskabsvurdering",
"criticRating": "Kritikerbedømmelse",
"lastPlayed": "Sidst afspillet",
"datePlayed": "Afspilningsdato",
"playCount": "Antal afspilninger",
"productionYear": "Produktionsår",
"runtime": "Spilletid",
"officialRating": "Officiel vurdering",
"premiereDate": "Premieredato",
"startDate": "Startdato",
"airTime": "Sendetid",
"studio": "Studie",
"random": "Tilfældig",
"dateShared": "Delt dato",
"latestEpisodeAirDate": "Seneste episodes premieredato"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "Hinzugefügt am",
"releaseDate": "Erscheinungsdatum",
"rating": "Bewertung",
"communityRating": "Community-Bewertung",
"criticRating": "Kritikerbewertung",
"lastPlayed": "Zuletzt abgespielt",
"datePlayed": "Wiedergabedatum",
"playCount": "Wiedergaben",
"productionYear": "Produktionsjahr",
"runtime": "Laufzeit",
"officialRating": "Offizielle Bewertung",
"premiereDate": "Premierendatum",
"startDate": "Startdatum",
"airTime": "Sendezeit",
"studio": "Studio",
"random": "Zufällig",
"dateShared": "Datum geteilt",
"latestEpisodeAirDate": "Letztes Folgenausstrahlungsdatum"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "Date Added",
"releaseDate": "Release Date",
"rating": "Rating",
"communityRating": "Community Rating",
"criticRating": "Critic Rating",
"lastPlayed": "Last Played",
"datePlayed": "Date Played",
"playCount": "Play Count",
"productionYear": "Production Year",
"runtime": "Runtime",
"officialRating": "Official Rating",
"premiereDate": "Premiere Date",
"startDate": "Start Date",
"airTime": "Air Time",
"studio": "Studio",
"random": "Random",
"dateShared": "Date Shared",
"latestEpisodeAirDate": "Latest Episode Air Date"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "Fecha de adición",
"releaseDate": "Fecha de estreno",
"rating": "Valoración",
"communityRating": "Calificación de comunidad",
"criticRating": "Calificación de crítica",
"lastPlayed": "Última reproducción",
"datePlayed": "Fecha de reproducción",
"playCount": "Reproducciones",
"productionYear": "Año de producción",
"runtime": "Duración",
"officialRating": "Calificación oficial",
"premiereDate": "Fecha de estreno",
"startDate": "Fecha de inicio",
"airTime": "Hora de emisión",
"studio": "Estudio",
"random": "Aleatorio",
"dateShared": "Fecha de compartición",
"latestEpisodeAirDate": "Última fecha de emisión del episodio"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "Date d'ajout",
"releaseDate": "Date de sortie",
"rating": "Note",
"communityRating": "Note communautaire",
"criticRating": "Note critique",
"lastPlayed": "Dernière lecture",
"datePlayed": "Date de lecture",
"playCount": "Lectures",
"productionYear": "Année de production",
"runtime": "Durée",
"officialRating": "Classification officielle",
"premiereDate": "Date de première",
"startDate": "Date de début",
"airTime": "Heure de diffusion",
"studio": "Studio",
"random": "Aléatoire",
"dateShared": "Date de partage",
"latestEpisodeAirDate": "Dernière date de diffusion"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "Data di aggiunta",
"releaseDate": "Data di uscita",
"rating": "Valutazione",
"communityRating": "Valutazione della community",
"criticRating": "Valutazione critica",
"lastPlayed": "Ultima riproduzione",
"datePlayed": "Data di riproduzione",
"playCount": "Riproduzioni",
"productionYear": "Anno di produzione",
"runtime": "Durata",
"officialRating": "Classificazione ufficiale",
"premiereDate": "Data di première",
"startDate": "Data di inizio",
"airTime": "Orario di messa in onda",
"studio": "Studio",
"random": "Casuale",
"dateShared": "Data di condivisione",
"latestEpisodeAirDate": "Data ultima messa in onda"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "追加日",
"releaseDate": "リリース日",
"rating": "評価",
"communityRating": "コミュニティ評価",
"criticRating": "批評家評価",
"lastPlayed": "最終再生",
"datePlayed": "再生日",
"playCount": "再生回数",
"productionYear": "製作年",
"runtime": "再生時間",
"officialRating": "公式レーティング",
"premiereDate": "プレミア日",
"startDate": "開始日",
"airTime": "放送時刻",
"studio": "スタジオ",
"random": "ランダム",
"dateShared": "共有日",
"latestEpisodeAirDate": "最新エピソード放送日"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "추가된 날짜",
"releaseDate": "출시일",
"rating": "평점",
"communityRating": "커뮤니티 평점",
"criticRating": "평론가 평점",
"lastPlayed": "마지막 재생",
"datePlayed": "재생일",
"playCount": "재생 횟수",
"productionYear": "제작 연도",
"runtime": "재생 시간",
"officialRating": "공식 등급",
"premiereDate": "최초 공개일",
"startDate": "시작일",
"airTime": "방영 시간",
"studio": "스튜디오",
"random": "무작위",
"dateShared": "공유된 날짜",
"latestEpisodeAirDate": "최신 에피소드 방영일"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "Lagt til-dato",
"releaseDate": "Utgivelsesdato",
"rating": "Vurdering",
"communityRating": "Fellesskapsvurdering",
"criticRating": "Kritikervurdering",
"lastPlayed": "Sist spilt",
"datePlayed": "Avspillingsdato",
"playCount": "Avspillinger",
"productionYear": "Produksjonsår",
"runtime": "Varighet",
"officialRating": "Offisiell vurdering",
"premiereDate": "Premieredato",
"startDate": "Startdato",
"airTime": "Sendetid",
"studio": "Studio",
"random": "Tilfeldig",
"dateShared": "Delingsdato",
"latestEpisodeAirDate": "Siste episodes sendedato"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "Toegevoegd op",
"releaseDate": "Uitgavedatum",
"rating": "Beoordeling",
"communityRating": "Communitybeoordeling",
"criticRating": "Criticusbeoordeling",
"lastPlayed": "Laatst afgespeeld",
"datePlayed": "Afspeeldatum",
"playCount": "Aantal afspelingen",
"productionYear": "Productiejaar",
"runtime": "Speelduur",
"officialRating": "Officiële beoordeling",
"premiereDate": "Premièredatum",
"startDate": "Begindatum",
"airTime": "Uitzendtijd",
"studio": "Studio",
"random": "Willekeurig",
"dateShared": "Gedeeld op",
"latestEpisodeAirDate": "Laatste afleveringsuitzending"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "Data dodania",
"releaseDate": "Data premiery",
"rating": "Ocena",
"communityRating": "Ocena społeczności",
"criticRating": "Ocena krytyków",
"lastPlayed": "Ostatnio odtwarzane",
"datePlayed": "Data odtworzenia",
"playCount": "Liczba odtworzeń",
"productionYear": "Rok produkcji",
"runtime": "Czas trwania",
"officialRating": "Oficjalna klasyfikacja",
"premiereDate": "Data premiery",
"startDate": "Data rozpoczęcia",
"airTime": "Godzina emisji",
"studio": "Studio",
"random": "Losowo",
"dateShared": "Data udostępnienia",
"latestEpisodeAirDate": "Data emisji ostatniego odcinka"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "Data de adição",
"releaseDate": "Data de lançamento",
"rating": "Avaliação",
"communityRating": "Avaliação da comunidade",
"criticRating": "Avaliação da crítica",
"lastPlayed": "Última reprodução",
"datePlayed": "Data de reprodução",
"playCount": "Reproduções",
"productionYear": "Ano de produção",
"runtime": "Duração",
"officialRating": "Classificação oficial",
"premiereDate": "Data de estreia",
"startDate": "Data de início",
"airTime": "Horário de exibição",
"studio": "Estúdio",
"random": "Aleatório",
"dateShared": "Data de compartilhamento",
"latestEpisodeAirDate": "Última data de exibição do episódio"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "Дата добавления",
"releaseDate": "Дата выхода",
"rating": "Рейтинг",
"communityRating": "Оценка сообщества",
"criticRating": "Оценка критиков",
"lastPlayed": "Последний просмотр",
"datePlayed": "Дата просмотра",
"playCount": "Количество просмотров",
"productionYear": "Год производства",
"runtime": "Длительность",
"officialRating": "Официальный рейтинг",
"premiereDate": "Дата премьеры",
"startDate": "Дата начала",
"airTime": "Время эфира",
"studio": "Студия",
"random": "Случайно",
"dateShared": "Дата открытия доступа",
"latestEpisodeAirDate": "Дата выхода последнего эпизода"
+2 -2
View File
@@ -4,9 +4,9 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 15
/// Strings: 17145 (1143 per locale)
/// Strings: 17295 (1153 per locale)
///
/// Built on 2026-05-11 at 02:36 UTC
/// Built on 2026-05-13 at 05:26 UTC
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsDa extends TranslationsLibrariesSortLabels
@override String get dateAdded => 'Tilføjet dato';
@override String get releaseDate => 'Udgivelsesdato';
@override String get rating => 'Vurdering';
@override String get communityRating => 'Fællesskabsvurdering';
@override String get criticRating => 'Kritikerbedømmelse';
@override String get lastPlayed => 'Sidst afspillet';
@override String get datePlayed => 'Afspilningsdato';
@override String get playCount => 'Antal afspilninger';
@override String get productionYear => 'Produktionsår';
@override String get runtime => 'Spilletid';
@override String get officialRating => 'Officiel vurdering';
@override String get premiereDate => 'Premieredato';
@override String get startDate => 'Startdato';
@override String get airTime => 'Sendetid';
@override String get studio => 'Studie';
@override String get random => 'Tilfældig';
@override String get dateShared => 'Delt dato';
@override String get latestEpisodeAirDate => 'Seneste episodes premieredato';
@@ -2400,8 +2410,18 @@ extension on TranslationsDa {
'libraries.sortLabels.dateAdded' => 'Tilføjet dato',
'libraries.sortLabels.releaseDate' => 'Udgivelsesdato',
'libraries.sortLabels.rating' => 'Vurdering',
'libraries.sortLabels.communityRating' => 'Fællesskabsvurdering',
'libraries.sortLabels.criticRating' => 'Kritikerbedømmelse',
'libraries.sortLabels.lastPlayed' => 'Sidst afspillet',
'libraries.sortLabels.datePlayed' => 'Afspilningsdato',
'libraries.sortLabels.playCount' => 'Antal afspilninger',
'libraries.sortLabels.productionYear' => 'Produktionsår',
'libraries.sortLabels.runtime' => 'Spilletid',
'libraries.sortLabels.officialRating' => 'Officiel vurdering',
'libraries.sortLabels.premiereDate' => 'Premieredato',
'libraries.sortLabels.startDate' => 'Startdato',
'libraries.sortLabels.airTime' => 'Sendetid',
'libraries.sortLabels.studio' => 'Studie',
'libraries.sortLabels.random' => 'Tilfældig',
'libraries.sortLabels.dateShared' => 'Delt dato',
'libraries.sortLabels.latestEpisodeAirDate' => 'Seneste episodes premieredato',
@@ -2778,6 +2798,8 @@ extension on TranslationsDa {
'metadataEdit.libraryDefault' => 'Biblioteksstandard',
'metadataEdit.accountDefault' => 'Kontostandard',
'metadataEdit.seriesDefault' => 'Seriestandard',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'Episodesortering',
'metadataEdit.oldestFirst' => 'Ældste først',
'metadataEdit.newestFirst' => 'Nyeste først',
@@ -2788,8 +2810,6 @@ extension on TranslationsDa {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Episoder tilføjet de seneste ${count} dage',
'metadataEdit.deleteAfterPlaying' => 'Slet episoder efter afspilning',
'metadataEdit.never' => 'Aldrig',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => 'Efter en dag',
'metadataEdit.afterAWeek' => 'Efter en uge',
'metadataEdit.afterAMonth' => 'Efter en måned',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsDe extends TranslationsLibrariesSortLabels
@override String get dateAdded => 'Hinzugefügt am';
@override String get releaseDate => 'Erscheinungsdatum';
@override String get rating => 'Bewertung';
@override String get communityRating => 'Community-Bewertung';
@override String get criticRating => 'Kritikerbewertung';
@override String get lastPlayed => 'Zuletzt abgespielt';
@override String get datePlayed => 'Wiedergabedatum';
@override String get playCount => 'Wiedergaben';
@override String get productionYear => 'Produktionsjahr';
@override String get runtime => 'Laufzeit';
@override String get officialRating => 'Offizielle Bewertung';
@override String get premiereDate => 'Premierendatum';
@override String get startDate => 'Startdatum';
@override String get airTime => 'Sendezeit';
@override String get studio => 'Studio';
@override String get random => 'Zufällig';
@override String get dateShared => 'Datum geteilt';
@override String get latestEpisodeAirDate => 'Letztes Folgenausstrahlungsdatum';
@@ -2400,8 +2410,18 @@ extension on TranslationsDe {
'libraries.sortLabels.dateAdded' => 'Hinzugefügt am',
'libraries.sortLabels.releaseDate' => 'Erscheinungsdatum',
'libraries.sortLabels.rating' => 'Bewertung',
'libraries.sortLabels.communityRating' => 'Community-Bewertung',
'libraries.sortLabels.criticRating' => 'Kritikerbewertung',
'libraries.sortLabels.lastPlayed' => 'Zuletzt abgespielt',
'libraries.sortLabels.datePlayed' => 'Wiedergabedatum',
'libraries.sortLabels.playCount' => 'Wiedergaben',
'libraries.sortLabels.productionYear' => 'Produktionsjahr',
'libraries.sortLabels.runtime' => 'Laufzeit',
'libraries.sortLabels.officialRating' => 'Offizielle Bewertung',
'libraries.sortLabels.premiereDate' => 'Premierendatum',
'libraries.sortLabels.startDate' => 'Startdatum',
'libraries.sortLabels.airTime' => 'Sendezeit',
'libraries.sortLabels.studio' => 'Studio',
'libraries.sortLabels.random' => 'Zufällig',
'libraries.sortLabels.dateShared' => 'Datum geteilt',
'libraries.sortLabels.latestEpisodeAirDate' => 'Letztes Folgenausstrahlungsdatum',
@@ -2778,6 +2798,8 @@ extension on TranslationsDe {
'metadataEdit.libraryDefault' => 'Bibliotheksstandard',
'metadataEdit.accountDefault' => 'Kontostandard',
'metadataEdit.seriesDefault' => 'Serienstandard',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'Episodensortierung',
'metadataEdit.oldestFirst' => 'Älteste zuerst',
'metadataEdit.newestFirst' => 'Neueste zuerst',
@@ -2788,8 +2810,6 @@ extension on TranslationsDe {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Episoden der letzten ${count} Tage',
'metadataEdit.deleteAfterPlaying' => 'Episoden nach Wiedergabe löschen',
'metadataEdit.never' => 'Nie',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => 'Nach einem Tag',
'metadataEdit.afterAWeek' => 'Nach einer Woche',
'metadataEdit.afterAMonth' => 'Nach einem Monat',
+42 -2
View File
@@ -3733,12 +3733,42 @@ class TranslationsLibrariesSortLabelsEn {
/// en: 'Rating'
String get rating => 'Rating';
/// en: 'Community Rating'
String get communityRating => 'Community Rating';
/// en: 'Critic Rating'
String get criticRating => 'Critic Rating';
/// en: 'Last Played'
String get lastPlayed => 'Last Played';
/// en: 'Date Played'
String get datePlayed => 'Date Played';
/// en: 'Play Count'
String get playCount => 'Play Count';
/// en: 'Production Year'
String get productionYear => 'Production Year';
/// en: 'Runtime'
String get runtime => 'Runtime';
/// en: 'Official Rating'
String get officialRating => 'Official Rating';
/// en: 'Premiere Date'
String get premiereDate => 'Premiere Date';
/// en: 'Start Date'
String get startDate => 'Start Date';
/// en: 'Air Time'
String get airTime => 'Air Time';
/// en: 'Studio'
String get studio => 'Studio';
/// en: 'Random'
String get random => 'Random';
@@ -4692,8 +4722,18 @@ extension on Translations {
'libraries.sortLabels.dateAdded' => 'Date Added',
'libraries.sortLabels.releaseDate' => 'Release Date',
'libraries.sortLabels.rating' => 'Rating',
'libraries.sortLabels.communityRating' => 'Community Rating',
'libraries.sortLabels.criticRating' => 'Critic Rating',
'libraries.sortLabels.lastPlayed' => 'Last Played',
'libraries.sortLabels.datePlayed' => 'Date Played',
'libraries.sortLabels.playCount' => 'Play Count',
'libraries.sortLabels.productionYear' => 'Production Year',
'libraries.sortLabels.runtime' => 'Runtime',
'libraries.sortLabels.officialRating' => 'Official Rating',
'libraries.sortLabels.premiereDate' => 'Premiere Date',
'libraries.sortLabels.startDate' => 'Start Date',
'libraries.sortLabels.airTime' => 'Air Time',
'libraries.sortLabels.studio' => 'Studio',
'libraries.sortLabels.random' => 'Random',
'libraries.sortLabels.dateShared' => 'Date Shared',
'libraries.sortLabels.latestEpisodeAirDate' => 'Latest Episode Air Date',
@@ -5070,6 +5110,8 @@ extension on Translations {
'metadataEdit.libraryDefault' => 'Library default',
'metadataEdit.accountDefault' => 'Account default',
'metadataEdit.seriesDefault' => 'Series default',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'Episode Sorting',
'metadataEdit.oldestFirst' => 'Oldest first',
'metadataEdit.newestFirst' => 'Newest first',
@@ -5080,8 +5122,6 @@ extension on Translations {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Episodes added in the past ${count} days',
'metadataEdit.deleteAfterPlaying' => 'Delete Episodes After Playing',
'metadataEdit.never' => 'Never',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => 'After a day',
'metadataEdit.afterAWeek' => 'After a week',
'metadataEdit.afterAMonth' => 'After a month',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsEs extends TranslationsLibrariesSortLabels
@override String get dateAdded => 'Fecha de adición';
@override String get releaseDate => 'Fecha de estreno';
@override String get rating => 'Valoración';
@override String get communityRating => 'Calificación de comunidad';
@override String get criticRating => 'Calificación de crítica';
@override String get lastPlayed => 'Última reproducción';
@override String get datePlayed => 'Fecha de reproducción';
@override String get playCount => 'Reproducciones';
@override String get productionYear => 'Año de producción';
@override String get runtime => 'Duración';
@override String get officialRating => 'Calificación oficial';
@override String get premiereDate => 'Fecha de estreno';
@override String get startDate => 'Fecha de inicio';
@override String get airTime => 'Hora de emisión';
@override String get studio => 'Estudio';
@override String get random => 'Aleatorio';
@override String get dateShared => 'Fecha de compartición';
@override String get latestEpisodeAirDate => 'Última fecha de emisión del episodio';
@@ -2400,8 +2410,18 @@ extension on TranslationsEs {
'libraries.sortLabels.dateAdded' => 'Fecha de adición',
'libraries.sortLabels.releaseDate' => 'Fecha de estreno',
'libraries.sortLabels.rating' => 'Valoración',
'libraries.sortLabels.communityRating' => 'Calificación de comunidad',
'libraries.sortLabels.criticRating' => 'Calificación de crítica',
'libraries.sortLabels.lastPlayed' => 'Última reproducción',
'libraries.sortLabels.datePlayed' => 'Fecha de reproducción',
'libraries.sortLabels.playCount' => 'Reproducciones',
'libraries.sortLabels.productionYear' => 'Año de producción',
'libraries.sortLabels.runtime' => 'Duración',
'libraries.sortLabels.officialRating' => 'Calificación oficial',
'libraries.sortLabels.premiereDate' => 'Fecha de estreno',
'libraries.sortLabels.startDate' => 'Fecha de inicio',
'libraries.sortLabels.airTime' => 'Hora de emisión',
'libraries.sortLabels.studio' => 'Estudio',
'libraries.sortLabels.random' => 'Aleatorio',
'libraries.sortLabels.dateShared' => 'Fecha de compartición',
'libraries.sortLabels.latestEpisodeAirDate' => 'Última fecha de emisión del episodio',
@@ -2778,6 +2798,8 @@ extension on TranslationsEs {
'metadataEdit.libraryDefault' => 'Predeterminado de biblioteca',
'metadataEdit.accountDefault' => 'Predeterminado de cuenta',
'metadataEdit.seriesDefault' => 'Predeterminado de serie',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'Orden de episodios',
'metadataEdit.oldestFirst' => 'Más antiguos primero',
'metadataEdit.newestFirst' => 'Más recientes primero',
@@ -2788,8 +2810,6 @@ extension on TranslationsEs {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Episodios añadidos en los últimos ${count} días',
'metadataEdit.deleteAfterPlaying' => 'Eliminar episodios después de reproducir',
'metadataEdit.never' => 'Nunca',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => 'Después de un día',
'metadataEdit.afterAWeek' => 'Después de una semana',
'metadataEdit.afterAMonth' => 'Después de un mes',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsFr extends TranslationsLibrariesSortLabels
@override String get dateAdded => 'Date d\'ajout';
@override String get releaseDate => 'Date de sortie';
@override String get rating => 'Note';
@override String get communityRating => 'Note communautaire';
@override String get criticRating => 'Note critique';
@override String get lastPlayed => 'Dernière lecture';
@override String get datePlayed => 'Date de lecture';
@override String get playCount => 'Lectures';
@override String get productionYear => 'Année de production';
@override String get runtime => 'Durée';
@override String get officialRating => 'Classification officielle';
@override String get premiereDate => 'Date de première';
@override String get startDate => 'Date de début';
@override String get airTime => 'Heure de diffusion';
@override String get studio => 'Studio';
@override String get random => 'Aléatoire';
@override String get dateShared => 'Date de partage';
@override String get latestEpisodeAirDate => 'Dernière date de diffusion';
@@ -2400,8 +2410,18 @@ extension on TranslationsFr {
'libraries.sortLabels.dateAdded' => 'Date d\'ajout',
'libraries.sortLabels.releaseDate' => 'Date de sortie',
'libraries.sortLabels.rating' => 'Note',
'libraries.sortLabels.communityRating' => 'Note communautaire',
'libraries.sortLabels.criticRating' => 'Note critique',
'libraries.sortLabels.lastPlayed' => 'Dernière lecture',
'libraries.sortLabels.datePlayed' => 'Date de lecture',
'libraries.sortLabels.playCount' => 'Lectures',
'libraries.sortLabels.productionYear' => 'Année de production',
'libraries.sortLabels.runtime' => 'Durée',
'libraries.sortLabels.officialRating' => 'Classification officielle',
'libraries.sortLabels.premiereDate' => 'Date de première',
'libraries.sortLabels.startDate' => 'Date de début',
'libraries.sortLabels.airTime' => 'Heure de diffusion',
'libraries.sortLabels.studio' => 'Studio',
'libraries.sortLabels.random' => 'Aléatoire',
'libraries.sortLabels.dateShared' => 'Date de partage',
'libraries.sortLabels.latestEpisodeAirDate' => 'Dernière date de diffusion',
@@ -2778,6 +2798,8 @@ extension on TranslationsFr {
'metadataEdit.libraryDefault' => 'Par défaut de la bibliothèque',
'metadataEdit.accountDefault' => 'Par défaut du compte',
'metadataEdit.seriesDefault' => 'Par défaut de la série',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'Tri des épisodes',
'metadataEdit.oldestFirst' => 'Plus anciens en premier',
'metadataEdit.newestFirst' => 'Plus récents en premier',
@@ -2788,8 +2810,6 @@ extension on TranslationsFr {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Épisodes ajoutés ces ${count} derniers jours',
'metadataEdit.deleteAfterPlaying' => 'Supprimer les épisodes après lecture',
'metadataEdit.never' => 'Jamais',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => 'Après un jour',
'metadataEdit.afterAWeek' => 'Après une semaine',
'metadataEdit.afterAMonth' => 'Après un mois',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsIt extends TranslationsLibrariesSortLabels
@override String get dateAdded => 'Data di aggiunta';
@override String get releaseDate => 'Data di uscita';
@override String get rating => 'Valutazione';
@override String get communityRating => 'Valutazione della community';
@override String get criticRating => 'Valutazione critica';
@override String get lastPlayed => 'Ultima riproduzione';
@override String get datePlayed => 'Data di riproduzione';
@override String get playCount => 'Riproduzioni';
@override String get productionYear => 'Anno di produzione';
@override String get runtime => 'Durata';
@override String get officialRating => 'Classificazione ufficiale';
@override String get premiereDate => 'Data di première';
@override String get startDate => 'Data di inizio';
@override String get airTime => 'Orario di messa in onda';
@override String get studio => 'Studio';
@override String get random => 'Casuale';
@override String get dateShared => 'Data di condivisione';
@override String get latestEpisodeAirDate => 'Data ultima messa in onda';
@@ -2400,8 +2410,18 @@ extension on TranslationsIt {
'libraries.sortLabels.dateAdded' => 'Data di aggiunta',
'libraries.sortLabels.releaseDate' => 'Data di uscita',
'libraries.sortLabels.rating' => 'Valutazione',
'libraries.sortLabels.communityRating' => 'Valutazione della community',
'libraries.sortLabels.criticRating' => 'Valutazione critica',
'libraries.sortLabels.lastPlayed' => 'Ultima riproduzione',
'libraries.sortLabels.datePlayed' => 'Data di riproduzione',
'libraries.sortLabels.playCount' => 'Riproduzioni',
'libraries.sortLabels.productionYear' => 'Anno di produzione',
'libraries.sortLabels.runtime' => 'Durata',
'libraries.sortLabels.officialRating' => 'Classificazione ufficiale',
'libraries.sortLabels.premiereDate' => 'Data di première',
'libraries.sortLabels.startDate' => 'Data di inizio',
'libraries.sortLabels.airTime' => 'Orario di messa in onda',
'libraries.sortLabels.studio' => 'Studio',
'libraries.sortLabels.random' => 'Casuale',
'libraries.sortLabels.dateShared' => 'Data di condivisione',
'libraries.sortLabels.latestEpisodeAirDate' => 'Data ultima messa in onda',
@@ -2778,6 +2798,8 @@ extension on TranslationsIt {
'metadataEdit.libraryDefault' => 'Predefinito libreria',
'metadataEdit.accountDefault' => 'Predefinito account',
'metadataEdit.seriesDefault' => 'Predefinito serie',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'Ordinamento episodi',
'metadataEdit.oldestFirst' => 'Più vecchi prima',
'metadataEdit.newestFirst' => 'Più recenti prima',
@@ -2788,8 +2810,6 @@ extension on TranslationsIt {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Episodi aggiunti negli ultimi ${count} giorni',
'metadataEdit.deleteAfterPlaying' => 'Elimina episodi dopo la riproduzione',
'metadataEdit.never' => 'Mai',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => 'Dopo un giorno',
'metadataEdit.afterAWeek' => 'Dopo una settimana',
'metadataEdit.afterAMonth' => 'Dopo un mese',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsJa extends TranslationsLibrariesSortLabels
@override String get dateAdded => '追加日';
@override String get releaseDate => 'リリース日';
@override String get rating => '評価';
@override String get communityRating => 'コミュニティ評価';
@override String get criticRating => '批評家評価';
@override String get lastPlayed => '最終再生';
@override String get datePlayed => '再生日';
@override String get playCount => '再生回数';
@override String get productionYear => '製作年';
@override String get runtime => '再生時間';
@override String get officialRating => '公式レーティング';
@override String get premiereDate => 'プレミア日';
@override String get startDate => '開始日';
@override String get airTime => '放送時刻';
@override String get studio => 'スタジオ';
@override String get random => 'ランダム';
@override String get dateShared => '共有日';
@override String get latestEpisodeAirDate => '最新エピソード放送日';
@@ -2400,8 +2410,18 @@ extension on TranslationsJa {
'libraries.sortLabels.dateAdded' => '追加日',
'libraries.sortLabels.releaseDate' => 'リリース日',
'libraries.sortLabels.rating' => '評価',
'libraries.sortLabels.communityRating' => 'コミュニティ評価',
'libraries.sortLabels.criticRating' => '批評家評価',
'libraries.sortLabels.lastPlayed' => '最終再生',
'libraries.sortLabels.datePlayed' => '再生日',
'libraries.sortLabels.playCount' => '再生回数',
'libraries.sortLabels.productionYear' => '製作年',
'libraries.sortLabels.runtime' => '再生時間',
'libraries.sortLabels.officialRating' => '公式レーティング',
'libraries.sortLabels.premiereDate' => 'プレミア日',
'libraries.sortLabels.startDate' => '開始日',
'libraries.sortLabels.airTime' => '放送時刻',
'libraries.sortLabels.studio' => 'スタジオ',
'libraries.sortLabels.random' => 'ランダム',
'libraries.sortLabels.dateShared' => '共有日',
'libraries.sortLabels.latestEpisodeAirDate' => '最新エピソード放送日',
@@ -2778,6 +2798,8 @@ extension on TranslationsJa {
'metadataEdit.libraryDefault' => 'ライブラリのデフォルト',
'metadataEdit.accountDefault' => 'アカウントのデフォルト',
'metadataEdit.seriesDefault' => 'シリーズのデフォルト',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'エピソードの並べ替え',
'metadataEdit.oldestFirst' => '古い順',
'metadataEdit.newestFirst' => '新しい順',
@@ -2788,8 +2810,6 @@ extension on TranslationsJa {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => '過去${count}日間に追加されたエピソード',
'metadataEdit.deleteAfterPlaying' => '再生後にエピソードを削除',
'metadataEdit.never' => 'しない',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => '1日後',
'metadataEdit.afterAWeek' => '1週間後',
'metadataEdit.afterAMonth' => '1ヶ月後',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsKo extends TranslationsLibrariesSortLabels
@override String get dateAdded => '추가된 날짜';
@override String get releaseDate => '출시일';
@override String get rating => '평점';
@override String get communityRating => '커뮤니티 평점';
@override String get criticRating => '평론가 평점';
@override String get lastPlayed => '마지막 재생';
@override String get datePlayed => '재생일';
@override String get playCount => '재생 횟수';
@override String get productionYear => '제작 연도';
@override String get runtime => '재생 시간';
@override String get officialRating => '공식 등급';
@override String get premiereDate => '최초 공개일';
@override String get startDate => '시작일';
@override String get airTime => '방영 시간';
@override String get studio => '스튜디오';
@override String get random => '무작위';
@override String get dateShared => '공유된 날짜';
@override String get latestEpisodeAirDate => '최신 에피소드 방영일';
@@ -2400,8 +2410,18 @@ extension on TranslationsKo {
'libraries.sortLabels.dateAdded' => '추가된 날짜',
'libraries.sortLabels.releaseDate' => '출시일',
'libraries.sortLabels.rating' => '평점',
'libraries.sortLabels.communityRating' => '커뮤니티 평점',
'libraries.sortLabels.criticRating' => '평론가 평점',
'libraries.sortLabels.lastPlayed' => '마지막 재생',
'libraries.sortLabels.datePlayed' => '재생일',
'libraries.sortLabels.playCount' => '재생 횟수',
'libraries.sortLabels.productionYear' => '제작 연도',
'libraries.sortLabels.runtime' => '재생 시간',
'libraries.sortLabels.officialRating' => '공식 등급',
'libraries.sortLabels.premiereDate' => '최초 공개일',
'libraries.sortLabels.startDate' => '시작일',
'libraries.sortLabels.airTime' => '방영 시간',
'libraries.sortLabels.studio' => '스튜디오',
'libraries.sortLabels.random' => '무작위',
'libraries.sortLabels.dateShared' => '공유된 날짜',
'libraries.sortLabels.latestEpisodeAirDate' => '최신 에피소드 방영일',
@@ -2778,6 +2798,8 @@ extension on TranslationsKo {
'metadataEdit.libraryDefault' => '라이브러리 기본값',
'metadataEdit.accountDefault' => '계정 기본값',
'metadataEdit.seriesDefault' => '시리즈 기본값',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => '에피소드 정렬',
'metadataEdit.oldestFirst' => '오래된 순',
'metadataEdit.newestFirst' => '최신 순',
@@ -2788,8 +2810,6 @@ extension on TranslationsKo {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => '최근 ${count}일 내 추가된 에피소드',
'metadataEdit.deleteAfterPlaying' => '재생 후 에피소드 삭제',
'metadataEdit.never' => '안 함',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => '하루 후',
'metadataEdit.afterAWeek' => '일주일 후',
'metadataEdit.afterAMonth' => '한 달 후',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsNb extends TranslationsLibrariesSortLabels
@override String get dateAdded => 'Lagt til-dato';
@override String get releaseDate => 'Utgivelsesdato';
@override String get rating => 'Vurdering';
@override String get communityRating => 'Fellesskapsvurdering';
@override String get criticRating => 'Kritikervurdering';
@override String get lastPlayed => 'Sist spilt';
@override String get datePlayed => 'Avspillingsdato';
@override String get playCount => 'Avspillinger';
@override String get productionYear => 'Produksjonsår';
@override String get runtime => 'Varighet';
@override String get officialRating => 'Offisiell vurdering';
@override String get premiereDate => 'Premieredato';
@override String get startDate => 'Startdato';
@override String get airTime => 'Sendetid';
@override String get studio => 'Studio';
@override String get random => 'Tilfeldig';
@override String get dateShared => 'Delingsdato';
@override String get latestEpisodeAirDate => 'Siste episodes sendedato';
@@ -2400,8 +2410,18 @@ extension on TranslationsNb {
'libraries.sortLabels.dateAdded' => 'Lagt til-dato',
'libraries.sortLabels.releaseDate' => 'Utgivelsesdato',
'libraries.sortLabels.rating' => 'Vurdering',
'libraries.sortLabels.communityRating' => 'Fellesskapsvurdering',
'libraries.sortLabels.criticRating' => 'Kritikervurdering',
'libraries.sortLabels.lastPlayed' => 'Sist spilt',
'libraries.sortLabels.datePlayed' => 'Avspillingsdato',
'libraries.sortLabels.playCount' => 'Avspillinger',
'libraries.sortLabels.productionYear' => 'Produksjonsår',
'libraries.sortLabels.runtime' => 'Varighet',
'libraries.sortLabels.officialRating' => 'Offisiell vurdering',
'libraries.sortLabels.premiereDate' => 'Premieredato',
'libraries.sortLabels.startDate' => 'Startdato',
'libraries.sortLabels.airTime' => 'Sendetid',
'libraries.sortLabels.studio' => 'Studio',
'libraries.sortLabels.random' => 'Tilfeldig',
'libraries.sortLabels.dateShared' => 'Delingsdato',
'libraries.sortLabels.latestEpisodeAirDate' => 'Siste episodes sendedato',
@@ -2778,6 +2798,8 @@ extension on TranslationsNb {
'metadataEdit.libraryDefault' => 'Bibliotekstandard',
'metadataEdit.accountDefault' => 'Kontostandard',
'metadataEdit.seriesDefault' => 'Seriestandard',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'Episodesortering',
'metadataEdit.oldestFirst' => 'Eldste først',
'metadataEdit.newestFirst' => 'Nyeste først',
@@ -2788,8 +2810,6 @@ extension on TranslationsNb {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Episoder lagt til de siste ${count} dagene',
'metadataEdit.deleteAfterPlaying' => 'Slett episoder etter avspilling',
'metadataEdit.never' => 'Aldri',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => 'Etter en dag',
'metadataEdit.afterAWeek' => 'Etter en uke',
'metadataEdit.afterAMonth' => 'Etter en måned',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsNl extends TranslationsLibrariesSortLabels
@override String get dateAdded => 'Toegevoegd op';
@override String get releaseDate => 'Uitgavedatum';
@override String get rating => 'Beoordeling';
@override String get communityRating => 'Communitybeoordeling';
@override String get criticRating => 'Criticusbeoordeling';
@override String get lastPlayed => 'Laatst afgespeeld';
@override String get datePlayed => 'Afspeeldatum';
@override String get playCount => 'Aantal afspelingen';
@override String get productionYear => 'Productiejaar';
@override String get runtime => 'Speelduur';
@override String get officialRating => 'Officiële beoordeling';
@override String get premiereDate => 'Premièredatum';
@override String get startDate => 'Begindatum';
@override String get airTime => 'Uitzendtijd';
@override String get studio => 'Studio';
@override String get random => 'Willekeurig';
@override String get dateShared => 'Gedeeld op';
@override String get latestEpisodeAirDate => 'Laatste afleveringsuitzending';
@@ -2400,8 +2410,18 @@ extension on TranslationsNl {
'libraries.sortLabels.dateAdded' => 'Toegevoegd op',
'libraries.sortLabels.releaseDate' => 'Uitgavedatum',
'libraries.sortLabels.rating' => 'Beoordeling',
'libraries.sortLabels.communityRating' => 'Communitybeoordeling',
'libraries.sortLabels.criticRating' => 'Criticusbeoordeling',
'libraries.sortLabels.lastPlayed' => 'Laatst afgespeeld',
'libraries.sortLabels.datePlayed' => 'Afspeeldatum',
'libraries.sortLabels.playCount' => 'Aantal afspelingen',
'libraries.sortLabels.productionYear' => 'Productiejaar',
'libraries.sortLabels.runtime' => 'Speelduur',
'libraries.sortLabels.officialRating' => 'Officiële beoordeling',
'libraries.sortLabels.premiereDate' => 'Premièredatum',
'libraries.sortLabels.startDate' => 'Begindatum',
'libraries.sortLabels.airTime' => 'Uitzendtijd',
'libraries.sortLabels.studio' => 'Studio',
'libraries.sortLabels.random' => 'Willekeurig',
'libraries.sortLabels.dateShared' => 'Gedeeld op',
'libraries.sortLabels.latestEpisodeAirDate' => 'Laatste afleveringsuitzending',
@@ -2778,6 +2798,8 @@ extension on TranslationsNl {
'metadataEdit.libraryDefault' => 'Bibliotheekstandaard',
'metadataEdit.accountDefault' => 'Accountstandaard',
'metadataEdit.seriesDefault' => 'Seriestandaard',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'Afleveringen sorteren',
'metadataEdit.oldestFirst' => 'Oudste eerst',
'metadataEdit.newestFirst' => 'Nieuwste eerst',
@@ -2788,8 +2810,6 @@ extension on TranslationsNl {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Afleveringen toegevoegd in de afgelopen ${count} dagen',
'metadataEdit.deleteAfterPlaying' => 'Afleveringen verwijderen na afspelen',
'metadataEdit.never' => 'Nooit',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => 'Na een dag',
'metadataEdit.afterAWeek' => 'Na een week',
'metadataEdit.afterAMonth' => 'Na een maand',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsPl extends TranslationsLibrariesSortLabels
@override String get dateAdded => 'Data dodania';
@override String get releaseDate => 'Data premiery';
@override String get rating => 'Ocena';
@override String get communityRating => 'Ocena społeczności';
@override String get criticRating => 'Ocena krytyków';
@override String get lastPlayed => 'Ostatnio odtwarzane';
@override String get datePlayed => 'Data odtworzenia';
@override String get playCount => 'Liczba odtworzeń';
@override String get productionYear => 'Rok produkcji';
@override String get runtime => 'Czas trwania';
@override String get officialRating => 'Oficjalna klasyfikacja';
@override String get premiereDate => 'Data premiery';
@override String get startDate => 'Data rozpoczęcia';
@override String get airTime => 'Godzina emisji';
@override String get studio => 'Studio';
@override String get random => 'Losowo';
@override String get dateShared => 'Data udostępnienia';
@override String get latestEpisodeAirDate => 'Data emisji ostatniego odcinka';
@@ -2400,8 +2410,18 @@ extension on TranslationsPl {
'libraries.sortLabels.dateAdded' => 'Data dodania',
'libraries.sortLabels.releaseDate' => 'Data premiery',
'libraries.sortLabels.rating' => 'Ocena',
'libraries.sortLabels.communityRating' => 'Ocena społeczności',
'libraries.sortLabels.criticRating' => 'Ocena krytyków',
'libraries.sortLabels.lastPlayed' => 'Ostatnio odtwarzane',
'libraries.sortLabels.datePlayed' => 'Data odtworzenia',
'libraries.sortLabels.playCount' => 'Liczba odtworzeń',
'libraries.sortLabels.productionYear' => 'Rok produkcji',
'libraries.sortLabels.runtime' => 'Czas trwania',
'libraries.sortLabels.officialRating' => 'Oficjalna klasyfikacja',
'libraries.sortLabels.premiereDate' => 'Data premiery',
'libraries.sortLabels.startDate' => 'Data rozpoczęcia',
'libraries.sortLabels.airTime' => 'Godzina emisji',
'libraries.sortLabels.studio' => 'Studio',
'libraries.sortLabels.random' => 'Losowo',
'libraries.sortLabels.dateShared' => 'Data udostępnienia',
'libraries.sortLabels.latestEpisodeAirDate' => 'Data emisji ostatniego odcinka',
@@ -2778,6 +2798,8 @@ extension on TranslationsPl {
'metadataEdit.libraryDefault' => 'Domyślne biblioteki',
'metadataEdit.accountDefault' => 'Domyślne konta',
'metadataEdit.seriesDefault' => 'Domyślne serialu',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'Sortowanie odcinków',
'metadataEdit.oldestFirst' => 'Najstarsze najpierw',
'metadataEdit.newestFirst' => 'Najnowsze najpierw',
@@ -2788,8 +2810,6 @@ extension on TranslationsPl {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Odcinki dodane w ciągu ostatnich ${count} dni',
'metadataEdit.deleteAfterPlaying' => 'Usuń odcinki po odtworzeniu',
'metadataEdit.never' => 'Nigdy',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => 'Po jednym dniu',
'metadataEdit.afterAWeek' => 'Po tygodniu',
'metadataEdit.afterAMonth' => 'Po miesiącu',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsPt extends TranslationsLibrariesSortLabels
@override String get dateAdded => 'Data de adição';
@override String get releaseDate => 'Data de lançamento';
@override String get rating => 'Avaliação';
@override String get communityRating => 'Avaliação da comunidade';
@override String get criticRating => 'Avaliação da crítica';
@override String get lastPlayed => 'Última reprodução';
@override String get datePlayed => 'Data de reprodução';
@override String get playCount => 'Reproduções';
@override String get productionYear => 'Ano de produção';
@override String get runtime => 'Duração';
@override String get officialRating => 'Classificação oficial';
@override String get premiereDate => 'Data de estreia';
@override String get startDate => 'Data de início';
@override String get airTime => 'Horário de exibição';
@override String get studio => 'Estúdio';
@override String get random => 'Aleatório';
@override String get dateShared => 'Data de compartilhamento';
@override String get latestEpisodeAirDate => 'Última data de exibição do episódio';
@@ -2400,8 +2410,18 @@ extension on TranslationsPt {
'libraries.sortLabels.dateAdded' => 'Data de adição',
'libraries.sortLabels.releaseDate' => 'Data de lançamento',
'libraries.sortLabels.rating' => 'Avaliação',
'libraries.sortLabels.communityRating' => 'Avaliação da comunidade',
'libraries.sortLabels.criticRating' => 'Avaliação da crítica',
'libraries.sortLabels.lastPlayed' => 'Última reprodução',
'libraries.sortLabels.datePlayed' => 'Data de reprodução',
'libraries.sortLabels.playCount' => 'Reproduções',
'libraries.sortLabels.productionYear' => 'Ano de produção',
'libraries.sortLabels.runtime' => 'Duração',
'libraries.sortLabels.officialRating' => 'Classificação oficial',
'libraries.sortLabels.premiereDate' => 'Data de estreia',
'libraries.sortLabels.startDate' => 'Data de início',
'libraries.sortLabels.airTime' => 'Horário de exibição',
'libraries.sortLabels.studio' => 'Estúdio',
'libraries.sortLabels.random' => 'Aleatório',
'libraries.sortLabels.dateShared' => 'Data de compartilhamento',
'libraries.sortLabels.latestEpisodeAirDate' => 'Última data de exibição do episódio',
@@ -2778,6 +2798,8 @@ extension on TranslationsPt {
'metadataEdit.libraryDefault' => 'Padrão da biblioteca',
'metadataEdit.accountDefault' => 'Padrão da conta',
'metadataEdit.seriesDefault' => 'Padrão da série',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'Ordenação de Episódios',
'metadataEdit.oldestFirst' => 'Mais antigos primeiro',
'metadataEdit.newestFirst' => 'Mais recentes primeiro',
@@ -2788,8 +2810,6 @@ extension on TranslationsPt {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Episódios adicionados nos últimos ${count} dias',
'metadataEdit.deleteAfterPlaying' => 'Excluir Episódios Após Reproduzir',
'metadataEdit.never' => 'Nunca',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => 'Após um dia',
'metadataEdit.afterAWeek' => 'Após uma semana',
'metadataEdit.afterAMonth' => 'Após um mês',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsRu extends TranslationsLibrariesSortLabels
@override String get dateAdded => 'Дата добавления';
@override String get releaseDate => 'Дата выхода';
@override String get rating => 'Рейтинг';
@override String get communityRating => 'Оценка сообщества';
@override String get criticRating => 'Оценка критиков';
@override String get lastPlayed => 'Последний просмотр';
@override String get datePlayed => 'Дата просмотра';
@override String get playCount => 'Количество просмотров';
@override String get productionYear => 'Год производства';
@override String get runtime => 'Длительность';
@override String get officialRating => 'Официальный рейтинг';
@override String get premiereDate => 'Дата премьеры';
@override String get startDate => 'Дата начала';
@override String get airTime => 'Время эфира';
@override String get studio => 'Студия';
@override String get random => 'Случайно';
@override String get dateShared => 'Дата открытия доступа';
@override String get latestEpisodeAirDate => 'Дата выхода последнего эпизода';
@@ -2400,8 +2410,18 @@ extension on TranslationsRu {
'libraries.sortLabels.dateAdded' => 'Дата добавления',
'libraries.sortLabels.releaseDate' => 'Дата выхода',
'libraries.sortLabels.rating' => 'Рейтинг',
'libraries.sortLabels.communityRating' => 'Оценка сообщества',
'libraries.sortLabels.criticRating' => 'Оценка критиков',
'libraries.sortLabels.lastPlayed' => 'Последний просмотр',
'libraries.sortLabels.datePlayed' => 'Дата просмотра',
'libraries.sortLabels.playCount' => 'Количество просмотров',
'libraries.sortLabels.productionYear' => 'Год производства',
'libraries.sortLabels.runtime' => 'Длительность',
'libraries.sortLabels.officialRating' => 'Официальный рейтинг',
'libraries.sortLabels.premiereDate' => 'Дата премьеры',
'libraries.sortLabels.startDate' => 'Дата начала',
'libraries.sortLabels.airTime' => 'Время эфира',
'libraries.sortLabels.studio' => 'Студия',
'libraries.sortLabels.random' => 'Случайно',
'libraries.sortLabels.dateShared' => 'Дата открытия доступа',
'libraries.sortLabels.latestEpisodeAirDate' => 'Дата выхода последнего эпизода',
@@ -2778,6 +2798,8 @@ extension on TranslationsRu {
'metadataEdit.libraryDefault' => 'По умолчанию библиотеки',
'metadataEdit.accountDefault' => 'По умолчанию аккаунта',
'metadataEdit.seriesDefault' => 'По умолчанию сериала',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'Сортировка эпизодов',
'metadataEdit.oldestFirst' => 'Сначала старые',
'metadataEdit.newestFirst' => 'Сначала новые',
@@ -2788,8 +2810,6 @@ extension on TranslationsRu {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Эпизоды, добавленные за последние ${count} дней',
'metadataEdit.deleteAfterPlaying' => 'Удалять эпизоды после просмотра',
'metadataEdit.never' => 'Никогда',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => 'Через день',
'metadataEdit.afterAWeek' => 'Через неделю',
'metadataEdit.afterAMonth' => 'Через месяц',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsSv extends TranslationsLibrariesSortLabels
@override String get dateAdded => 'Tillagd';
@override String get releaseDate => 'Releasedatum';
@override String get rating => 'Betyg';
@override String get communityRating => 'Användarbetyg';
@override String get criticRating => 'Kritikerbetyg';
@override String get lastPlayed => 'Senast spelad';
@override String get datePlayed => 'Speldatum';
@override String get playCount => 'Antal spelningar';
@override String get productionYear => 'Produktionsår';
@override String get runtime => 'Speltid';
@override String get officialRating => 'Officiell klassificering';
@override String get premiereDate => 'Premiärdatum';
@override String get startDate => 'Startdatum';
@override String get airTime => 'Sändningstid';
@override String get studio => 'Studio';
@override String get random => 'Slumpmässigt';
@override String get dateShared => 'Delningsdatum';
@override String get latestEpisodeAirDate => 'Senaste avsnittets sändningsdatum';
@@ -2400,8 +2410,18 @@ extension on TranslationsSv {
'libraries.sortLabels.dateAdded' => 'Tillagd',
'libraries.sortLabels.releaseDate' => 'Releasedatum',
'libraries.sortLabels.rating' => 'Betyg',
'libraries.sortLabels.communityRating' => 'Användarbetyg',
'libraries.sortLabels.criticRating' => 'Kritikerbetyg',
'libraries.sortLabels.lastPlayed' => 'Senast spelad',
'libraries.sortLabels.datePlayed' => 'Speldatum',
'libraries.sortLabels.playCount' => 'Antal spelningar',
'libraries.sortLabels.productionYear' => 'Produktionsår',
'libraries.sortLabels.runtime' => 'Speltid',
'libraries.sortLabels.officialRating' => 'Officiell klassificering',
'libraries.sortLabels.premiereDate' => 'Premiärdatum',
'libraries.sortLabels.startDate' => 'Startdatum',
'libraries.sortLabels.airTime' => 'Sändningstid',
'libraries.sortLabels.studio' => 'Studio',
'libraries.sortLabels.random' => 'Slumpmässigt',
'libraries.sortLabels.dateShared' => 'Delningsdatum',
'libraries.sortLabels.latestEpisodeAirDate' => 'Senaste avsnittets sändningsdatum',
@@ -2778,6 +2798,8 @@ extension on TranslationsSv {
'metadataEdit.libraryDefault' => 'Biblioteksstandard',
'metadataEdit.accountDefault' => 'Kontostandard',
'metadataEdit.seriesDefault' => 'Seriestandard',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => 'Avsnittsortering',
'metadataEdit.oldestFirst' => 'Äldst först',
'metadataEdit.newestFirst' => 'Nyast först',
@@ -2788,8 +2810,6 @@ extension on TranslationsSv {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Avsnitt tillagda de senaste ${count} dagarna',
'metadataEdit.deleteAfterPlaying' => 'Ta bort avsnitt efter uppspelning',
'metadataEdit.never' => 'Aldrig',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => 'Efter en dag',
'metadataEdit.afterAWeek' => 'Efter en vecka',
'metadataEdit.afterAMonth' => 'Efter en månad',
+22 -2
View File
@@ -1606,8 +1606,18 @@ class _TranslationsLibrariesSortLabelsZh extends TranslationsLibrariesSortLabels
@override String get dateAdded => '添加日期';
@override String get releaseDate => '发行日期';
@override String get rating => '评分';
@override String get communityRating => '社区评分';
@override String get criticRating => '影评人评分';
@override String get lastPlayed => '最近播放';
@override String get datePlayed => '播放日期';
@override String get playCount => '播放次数';
@override String get productionYear => '制作年份';
@override String get runtime => '时长';
@override String get officialRating => '官方分级';
@override String get premiereDate => '首映日期';
@override String get startDate => '开始日期';
@override String get airTime => '播出时间';
@override String get studio => '工作室';
@override String get random => '随机';
@override String get dateShared => '共享日期';
@override String get latestEpisodeAirDate => '最新一集播出日期';
@@ -2400,8 +2410,18 @@ extension on TranslationsZh {
'libraries.sortLabels.dateAdded' => '添加日期',
'libraries.sortLabels.releaseDate' => '发行日期',
'libraries.sortLabels.rating' => '评分',
'libraries.sortLabels.communityRating' => '社区评分',
'libraries.sortLabels.criticRating' => '影评人评分',
'libraries.sortLabels.lastPlayed' => '最近播放',
'libraries.sortLabels.datePlayed' => '播放日期',
'libraries.sortLabels.playCount' => '播放次数',
'libraries.sortLabels.productionYear' => '制作年份',
'libraries.sortLabels.runtime' => '时长',
'libraries.sortLabels.officialRating' => '官方分级',
'libraries.sortLabels.premiereDate' => '首映日期',
'libraries.sortLabels.startDate' => '开始日期',
'libraries.sortLabels.airTime' => '播出时间',
'libraries.sortLabels.studio' => '工作室',
'libraries.sortLabels.random' => '随机',
'libraries.sortLabels.dateShared' => '共享日期',
'libraries.sortLabels.latestEpisodeAirDate' => '最新一集播出日期',
@@ -2778,6 +2798,8 @@ extension on TranslationsZh {
'metadataEdit.libraryDefault' => '媒体库默认',
'metadataEdit.accountDefault' => '账户默认',
'metadataEdit.seriesDefault' => '剧集默认',
_ => null,
} ?? switch (path) {
'metadataEdit.episodeSorting' => '剧集排序',
'metadataEdit.oldestFirst' => '最旧优先',
'metadataEdit.newestFirst' => '最新优先',
@@ -2788,8 +2810,6 @@ extension on TranslationsZh {
'metadataEdit.episodesAddedPastDays' => ({required Object count}) => '过去 ${count} 天内添加的剧集',
'metadataEdit.deleteAfterPlaying' => '播放后删除剧集',
'metadataEdit.never' => '从不',
_ => null,
} ?? switch (path) {
'metadataEdit.afterADay' => '一天后',
'metadataEdit.afterAWeek' => '一周后',
'metadataEdit.afterAMonth' => '一个月后',
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "Tillagd",
"releaseDate": "Releasedatum",
"rating": "Betyg",
"communityRating": "Användarbetyg",
"criticRating": "Kritikerbetyg",
"lastPlayed": "Senast spelad",
"datePlayed": "Speldatum",
"playCount": "Antal spelningar",
"productionYear": "Produktionsår",
"runtime": "Speltid",
"officialRating": "Officiell klassificering",
"premiereDate": "Premiärdatum",
"startDate": "Startdatum",
"airTime": "Sändningstid",
"studio": "Studio",
"random": "Slumpmässigt",
"dateShared": "Delningsdatum",
"latestEpisodeAirDate": "Senaste avsnittets sändningsdatum"
+10
View File
@@ -691,8 +691,18 @@
"dateAdded": "添加日期",
"releaseDate": "发行日期",
"rating": "评分",
"communityRating": "社区评分",
"criticRating": "影评人评分",
"lastPlayed": "最近播放",
"datePlayed": "播放日期",
"playCount": "播放次数",
"productionYear": "制作年份",
"runtime": "时长",
"officialRating": "官方分级",
"premiereDate": "首映日期",
"startDate": "开始日期",
"airTime": "播出时间",
"studio": "工作室",
"random": "随机",
"dateShared": "共享日期",
"latestEpisodeAirDate": "最新一集播出日期"
+54 -14
View File
@@ -181,33 +181,36 @@ mixin _JellyfinBrowseMethods on MediaServerCacheMixin {
}
/// Jellyfin has no `/sorts` listing endpoint, so this returns a hardcoded
/// list mirroring the Plex fallback set. Keys are the backend-neutral names
/// understood by [JellyfinLibraryQueryTranslator] (`title`, `addedAt`, …);
/// `_buildFilterParams` emits them as `addedAt:desc` etc., and
/// [LibraryQueryTranslator.parseSortParam] turns them back into a
/// [LibrarySort] before the translator maps them to Jellyfin's
/// `SortBy`/`SortOrder`.
/// list based on the broad sort set Streamyfin exposes. Keys remain
/// backend-neutral where Plezy already had saved preferences (`rating`,
/// `lastViewedAt`, …); [JellyfinLibraryQueryTranslator] maps them to
/// Jellyfin's `SortBy`/`SortOrder` at request time.
@override
Future<List<MediaSort>> fetchSortOptions(String libraryId, {String? libraryType}) async {
return [
MediaSort(key: 'title', descKey: 'title:desc', title: t.libraries.sortLabels.title, defaultDirection: 'asc'),
MediaSort(
key: 'rating',
descKey: 'rating:desc',
title: t.libraries.sortLabels.communityRating,
defaultDirection: 'desc',
),
MediaSort(
key: 'criticRating',
descKey: 'criticRating:desc',
title: t.libraries.sortLabels.criticRating,
defaultDirection: 'desc',
),
MediaSort(
key: 'addedAt',
descKey: 'addedAt:desc',
title: t.libraries.sortLabels.dateAdded,
defaultDirection: 'desc',
),
MediaSort(
key: 'originallyAvailableAt',
descKey: 'originallyAvailableAt:desc',
title: t.libraries.sortLabels.releaseDate,
defaultDirection: 'desc',
),
MediaSort(key: 'rating', descKey: 'rating:desc', title: t.libraries.sortLabels.rating, defaultDirection: 'desc'),
MediaSort(
key: 'lastViewedAt',
descKey: 'lastViewedAt:desc',
title: t.libraries.sortLabels.lastPlayed,
title: t.libraries.sortLabels.datePlayed,
defaultDirection: 'desc',
),
MediaSort(
@@ -216,6 +219,43 @@ mixin _JellyfinBrowseMethods on MediaServerCacheMixin {
title: t.libraries.sortLabels.playCount,
defaultDirection: 'desc',
),
MediaSort(
key: 'productionYear',
descKey: 'productionYear:desc',
title: t.libraries.sortLabels.productionYear,
defaultDirection: 'desc',
),
MediaSort(
key: 'runtime',
descKey: 'runtime:desc',
title: t.libraries.sortLabels.runtime,
defaultDirection: 'desc',
),
MediaSort(
key: 'officialRating',
descKey: 'officialRating:desc',
title: t.libraries.sortLabels.officialRating,
defaultDirection: 'asc',
),
MediaSort(
key: 'originallyAvailableAt',
descKey: 'originallyAvailableAt:desc',
title: t.libraries.sortLabels.premiereDate,
defaultDirection: 'desc',
),
MediaSort(
key: 'startDate',
descKey: 'startDate:desc',
title: t.libraries.sortLabels.startDate,
defaultDirection: 'asc',
),
MediaSort(
key: 'airTime',
descKey: 'airTime:desc',
title: t.libraries.sortLabels.airTime,
defaultDirection: 'asc',
),
MediaSort(key: 'studio', descKey: 'studio:desc', title: t.libraries.sortLabels.studio, defaultDirection: 'asc'),
MediaSort(key: 'random', title: t.libraries.sortLabels.random, defaultDirection: 'asc'),
];
}
+15 -5
View File
@@ -238,7 +238,7 @@ class JellyfinLibraryQueryTranslator implements LibraryQueryTranslator {
}
final sort = query.sort;
if (sort != null) {
params['SortBy'] = _sortFieldFor(sort.field);
params['SortBy'] = _sortFieldFor(sort.field, query.kind);
params['SortOrder'] = sort.direction == LibrarySortDirection.descending ? 'Descending' : 'Ascending';
}
if (query.search != null && query.search!.isNotEmpty) {
@@ -274,14 +274,24 @@ class JellyfinLibraryQueryTranslator implements LibraryQueryTranslator {
};
}
static String _sortFieldFor(String neutral) {
static String _sortFieldFor(String neutral, MediaKind? kind) {
return switch (neutral) {
'addedAt' => 'DateCreated',
'dateCreated' => 'DateCreated',
'originallyAvailableAt' => 'PremiereDate',
'lastViewedAt' => 'DatePlayed',
'premiereDate' => 'PremiereDate',
'lastViewedAt' || 'datePlayed' => kind == MediaKind.show ? 'SeriesDatePlayed' : 'DatePlayed',
'title' => 'SortName',
'rating' => 'CommunityRating',
'viewCount' => 'PlayCount',
'name' => 'SortName',
'rating' || 'communityRating' => 'CommunityRating',
'viewCount' || 'playCount' => 'PlayCount',
'productionYear' => 'ProductionYear',
'runtime' => 'Runtime',
'officialRating' => 'OfficialRating',
'criticRating' => 'CriticRating',
'startDate' => 'StartDate',
'airTime' => 'AirTime',
'studio' => 'Studio',
'random' => 'Random',
_ => neutral,
};
@@ -78,6 +78,26 @@ void main() {
expect(Uri.parse(url).path, '/Videos/folder%2Fitem%20%231%3Fx/stream');
});
test('fetchSortOptions exposes the broad Jellyfin sort set', () async {
final sorts = await client.fetchSortOptions('lib-1');
expect(sorts.map((sort) => sort.key).toList(), [
'title',
'rating',
'criticRating',
'addedAt',
'lastViewedAt',
'viewCount',
'productionYear',
'runtime',
'officialRating',
'originallyAvailableAt',
'startDate',
'airTime',
'studio',
'random',
]);
});
test('reportPlaybackProgress sends media source and stream indexes', () async {
Uri? capturedUri;
String? capturedBody;
@@ -135,6 +135,42 @@ void main() {
expect(addedSort['SortOrder'], 'Descending');
});
test('Streamyfin broad sort keys map to Jellyfin ItemSortBy values', () {
const cases = {
'criticRating': 'CriticRating',
'viewCount': 'PlayCount',
'productionYear': 'ProductionYear',
'runtime': 'Runtime',
'officialRating': 'OfficialRating',
'startDate': 'StartDate',
'airTime': 'AirTime',
'studio': 'Studio',
};
for (final entry in cases.entries) {
final params = translator.toQueryParameters(LibraryQuery(sort: LibrarySort(field: entry.key)));
expect(params['SortBy'], entry.value, reason: entry.key);
}
});
test('show date played sort maps to Jellyfin series-specific sort field', () {
final showSort = translator.toQueryParameters(
const LibraryQuery(
kind: MediaKind.show,
sort: LibrarySort(field: 'lastViewedAt'),
),
);
expect(showSort['SortBy'], 'SeriesDatePlayed');
final movieSort = translator.toQueryParameters(
const LibraryQuery(
kind: MediaKind.movie,
sort: LibrarySort(field: 'lastViewedAt'),
),
);
expect(movieSort['SortBy'], 'DatePlayed');
});
test('nameStartsWith="#" maps to NameLessThan=A', () {
final params = translator.toQueryParameters(const LibraryQuery(nameStartsWith: '#'));
expect(params['NameLessThan'], 'A');